B トピックのサブスクリプション識別子

トピック・サブスクリプション識別子が生成される方法を調べます。

JMSでは、サブスクリプションは次に基づいて識別および特定されます。

  1. サブスクリプションが関連付けられているトピック

  2. サブスクリプションにアクセスするために使用する接続に対して指定する、接続「クライアントID」文字列

  3. 恒久サブスクリプションを使用する場合、サブスクリプション名。サブスクリプション名は次のいずれかによって設定されます。

    • 恒久サブスクリプションが作成される場合

    • SubscriptionName構成プロパティによって

    SubscriptionNameプロパティを指定した場合、このプロパティを使用します。それ以外の場合、サブスクリプションが作成されると、サブスクリプション名が生成されます。

  4. 「クライアントIDポリシー」オプション。これを使用しても、サブスクリプションはWebLogic JMSで識別されます。同一物理トピック上の2つのWebLogic JMSサブスクリプション参照が、同一のクライアントIDとサブスクリプション名を持つ場合、その参照は次のようになります。

    • クライアントIDポリシーも同じ場合、単一のサブスクリプション

    • クライアントIDポリシーが異なる場合、2つの異なるサブスクリプション

WebLogic MDBコンテナは、次の設定に基づいて、前述のリストの項目1から4を自動的に生成します。

  • ejb-name

  • jms-client-id

  • topicMessagesDistributionMode

  • SubscriptionName構成プロパティ

  • distributedDestinationConnection

  • generate-unique-client-id

  • subscriptionDurability

  • MDBデプロイメントおよびJMS構成の他の要素

最後の4つの設定は、互換性モードのMDBにのみ適用されます。

表B-1は、設定がサブスクリプションIDの生成に使用される仕組みをまとめています。

表B-1 サブスクリプションIDが生成される仕組み

設定 ClientID 恒久サブスクリプションの場合のサブスクリプション名 WebLogicトピックのクライアントIDポリシー

topicMessagesDistributionMode = One-Copy-Per-Application

jmsClientIDBase

SubscriptionNameプロパティ(使用する場合)。または、ejb-name

非制限

topicMessagesDistributionMode = One-Copy-Per-Server

jmsClientIDBase

+ "_"

+ currentDomainName

+ "_"

+ currentServerName

SubscriptionNameプロパティ(使用する場合)。または、ejb-name

非制限

topicMessagesDistributionMode = Compatibility

generateUniqueClientID = true

distributedDestinationConnection = LocalOnly

subscriptionDurability = Durable脚注 1

jmsClientIDBase

+ "_"

+ currentDomainName

+ "_"

+ uniqueKey

ClientIdまたはSubscriptionNameプロパティと同じ(使用する場合)

制限

次を除いて前の行と同一。

distributedDestinationConnection = EveryMember

jmsClientIDBase

+ "_"

+ currentDomainName

+ "_"

+ uniqueKey

+ "_"

+ DDMemberName

ClientIdまたはSubscriptionNameプロパティと同じ(使用する場合)

制限

topicMessagesDistributionMode = Compatibility

generateUniqueClientID = false

subscriptionDurability = Durable脚注 1

jmsClientIDBase

ClientIdまたはSubscriptionNameプロパティと同じ(使用する場合)

制限

脚注 1

非恒久互換性モードのMDBは、クライアントIDまたはサブスクリプション名を設定せず、デフォルト制限クライアントIDポリシーを使用します。

キー:
  • jms-client-id = MDB記述子またはアノテーションによって設定されるオプションのMDB属性文字列。あるいは(ただし、まれですが)、jms-client-idは、結果的に構成済のclient-idを持つカスタムJMS接続ファクトリを参照するためにMDBを変更することによって、設定できます

  • SubscriptionName = 恒久サブスクリプション名を生成するオプションの設定。指定した場合、この設定は自動的に生成された名前よりも優先されます。

  • ejb-name = EJB名

  • jmsClientIDBase = jms-client-id (ユーザーによって指定される場合)またはejb-name (jms-client-idが指定されない場合)

  • currentDomainName = MDBを実行するWebLogicドメイン名

  • currentServerName = MDBが実行されているOracle WebLogic Server

  • uniqueKey = 一部のMDBデプロイメント要素を含む文字列(currentServerNameである可能性があります)。宛先が、移行可能なターゲットを使用しているJMSサーバーによってホストされるWebLogic宛先である場合、この文字列には移行可能なターゲット名が含まれています。

  • DDMemberName = 分散宛先メンバー名。あるいは、トピックがシングルトンまたはOracle WebLogic Server 10.3.4より前のリリースの分散宛先の場合には、宛先名。

クライアントIDの一意性は次のとおりに強制されます。

  • 外部(WebLogic以外)のJMSベンダーの場合: JMSベンダーの中には、1つ以上の接続が同一の接続クライアントIDを指定できなくするものがあります。(2番目の接続の作成を試行すると例外がスローされます。)1つ1つのフリー・プールが、他のフリー・プール接続と同じクライアントIDを持つ可能性がある単一のJMS接続を作成するため、この制限によって1つ以上のフリー・プールが同一のクライアントIDを使用できなくなる可能性があります。MDBの最初のフリー・プール・インスタンスがクラスタ内のサーバー・インスタンスを起動した後、EJBの追加インスタンスは別のクラスタ化サーバー上で正常にデプロイできます。ただし、MDBがJMS接続の作成を試行すると、クライアントIDの競合が検出され、MDBの当該インスタンスはJMSへの完全接続に失敗します。

  • WebLogic JMSの場合: Oracle WebLogic Server 10.3.4以前のリリースのWebLogic JMSでは、JMS接続が制限されていたため、クラスタ範囲内に同一クライアントIDでの接続が1つのみ存在できました。ただし、Oracle WebLogic Server 10.3.4以降では、WebLogic JMS接続ファクトリまたは接続は、この制限を制御するために任意でクライアントIDポリシーを設定できます。クライアントIDポリシーをRESTRICTEDにすると、10.3.4以前の動作は残りますが、クライアントIDポリシーをUNRESTRICTEDにすると、制限は解除されます。『Oracle WebLogic Server JMSアプリケーションの開発』を参照してください。非制限クライアントIDを使用すると、複数のWebLogicサブスクライバ接続およびサブスクリプションが同一のクライアントIDを共有できるようになります。One-Copy-Per-ServerおよびOne-Copy-Per-Applicationのトピック・メッセージ配信モードは、ClientIDPolicyを非制限に設定します。同一物理トピック上の2つのWebLogic JMSサブスクリプション参照が、同一のクライアントIDと恒久サブスクリプション名を持つ場合、その参照は、クライアントIDポリシーも同一の場合には単一のサブスクリプションになり、クライアントIDポリシーが異なる場合は2つの異なるサブスクリプションになることに注意します。