原文はこちら。
https://blogs.oracle.com/WebLogicServer/entry/wls_jndi_multitenancy
WebLogic Server 12.2.1で導入された最も重要な機能は、マルチテナントです。
WebLogic Server 12.2.1までは、WebLogic ServerドメインのJNDIグローバルツリーしかありません。パーティションには一意の分離された名前空間が必要なので、この1個のJNDIグローバルツリーで複数のパーティションをサポートすることは困難です。例えば、複数のパーティションが同じJNDI名を使って個別にJNDIリソースをバインド/ルックアップをすることができますが、NameAlreadyBoundExceptionになることでしょう。異なるパーティションでJNDIリソースを分離するため、すべてのパーティションには、WebLogic Server 12.2.1以降の一意のJNDIグローバルツリーがあります。そうすることで、テナントは、他のパーティションと名前が競合せずに、パーティションのJNDIリソースを操作することができます。アプリケーションスコープのJNDIツリーの場合、アプリケーション内部でのみ見えるので、自然に分離しますから、アプリケーションスコープのJNDIツリーは、WebLogic Server 12.2.1で変更する必要はありません。では、パーティションのJNDIリソースへのアクセス方法を見てみましょう。
https://blogs.oracle.com/WebLogicServer/entry/wls_jndi_multitenancy
WebLogic Server 12.2.1で導入された最も重要な機能は、マルチテナントです。
Understanding PaaS Multitenancyご存知のように、WebLogic Server 12.2.1までは、1 WebLogic Serverドメインを、1テナントで使用しますが、WebLogic Server 12.2.1からは、WebLogic Serverドメインを複数のパーティションに分割してテナントがWebLogic Serverドメインの異なるパーティションを利用することができるため、複数のテナントが1個のWebLogic Serverドメインを互いに影響することなく共有することができます。それゆえ、パーティション間のリソースの分離が重要です。JNDIがこれらのリソースにアクセスするための一般的な方法ですので、WebLogic Server 12.2.1でのJNDIの主な目標は、JNDIリソースを分離することにあります。
http://docs.oracle.com/middleware/1221/wls/WLSMT/concepts.htm#WLSMT724
Domain Partitions for Multi-tenancy in WebLogic Server 12.2.1
https://blogs.oracle.com/WebLogicServer/entry/domain_partitions_for_multi_tenancy
http://orablogs-jp.blogspot.jp/2015/11/domain-partitions-for-multi-tenancy-in.html
WebLogic Server 12.2.1までは、WebLogic ServerドメインのJNDIグローバルツリーしかありません。パーティションには一意の分離された名前空間が必要なので、この1個のJNDIグローバルツリーで複数のパーティションをサポートすることは困難です。例えば、複数のパーティションが同じJNDI名を使って個別にJNDIリソースをバインド/ルックアップをすることができますが、NameAlreadyBoundExceptionになることでしょう。異なるパーティションでJNDIリソースを分離するため、すべてのパーティションには、WebLogic Server 12.2.1以降の一意のJNDIグローバルツリーがあります。そうすることで、テナントは、他のパーティションと名前が競合せずに、パーティションのJNDIリソースを操作することができます。アプリケーションスコープのJNDIツリーの場合、アプリケーション内部でのみ見えるので、自然に分離しますから、アプリケーションスコープのJNDIツリーは、WebLogic Server 12.2.1で変更する必要はありません。では、パーティションのJNDIリソースへのアクセス方法を見てみましょう。
Access JNDI resource in partition
パーティションのJNDIリソースにアクセスするには、InitialContext作成時にパーティション情報をプロバイダURLプロパティに指定する必要があります。- 実行環境
- 管理対象サーバ
- ms1
- ms2
- クラスタ
- 管理対象サーバms1とms2
- 仮想ターゲット
- VT1:管理対象サーバ(ms1)
- VT2:クラスタ
- パーティション
- Partition 1:VT1
- Partition 2:VT2
Partition Targeting and Virtual Targets in WebLogic Server 12.2.1
https://blogs.oracle.com/dipol/entry/partition_targeting_and_virtual_targets
http://orablogs-jp.blogspot.jp/2015/11/partition-targeting-and-virtual-targets.html
Partition2はクラスタで動作するので、クラスタアドレス形式を使ってInitialContext作成時にプロパティに指定する必要があります。Hashtable<String, String> env = new Hashtable<>();
env.put(Context.PROVIDER_URL, "t3://ms1:7001/partition1");
env.put(Context.SECURITY_PRINCIPAL, "weblogic");
env.put(Context.SECURITY_CREDENTIALS, "welcome1");
Context ctx = new InitialContext(env);
Object c = ctx.lookup("jdbc/ds1");
WebLogic Serverでは、外部JNDIプロバイダを作成して別サーバのJNDIリソースをリンクすることができます。WebLogic Server 12.2.1では、構成にパーティション情報を追加すれば、外部JNDIプロバイダを使って指定のパーティションのJNDIをリンクすることもできます。これらのパーティション情報(URL、ユーザ名、パスワードなど)を使ってJNDIコンテキストを作成します。以下はPartition1の外部JNDIプロバイダ構成例です。このプロバイダはpartition2にリンクします。Hashtable<String, String> env = new Hashtable<>();
env.put(Context.PROVIDER_URL, "t3://ms1:7001,ms2:7003/partition2");
env.put(Context.SECURITY_PRINCIPAL, "weblogic");
env.put(Context.SECURITY_CREDENTIALS, "welcome1");
Context ctx = new InitialContext(env);
Object c = ctx.lookup("jdbc/ds1");
<foreign-jndi-provider-override>
<name>jndi_provider_rgt</name>
<initial-context-factory>weblogic.jndi.WLInitialContextFactory</initial-context-factory>
<provider-url>t3://ms1:7001,ms2:7003/partition2</provider-url>
<password-encrypted>{AES}6pyJXtrS5m/r4pwFT2EXQRsxUOu2n3YEcKJEvZzxZ7M=</password-encrypted>
<user>weblogic</user>
<foreign-jndi-link>
<name>link_rgt_2</name>
<local-jndi-name>partition_Name</local-jndi-name>
<remote-jndi-name>weblogic.partitionName</remote-jndi-name>
</foreign-jndi-link>
</foreign-jndi-provider-override>