JMS 接続ファクトリー
接続ファクトリーとは、JNDI プロバイダー (IBM® MQ などのメッセージング・プロバイダー) との接続を作成するために JMS クライアント (JMS API を使用する JMS プログラム) が使用するオブジェクトのことです。
IBM MQ Explorer を使用して、接続ファクトリーを作成したり、接続ファクトリーが接続の作成に使用する接続パラメーターを定義したりすることができます。
接続ファクトリーは、宛先と同様に管理対象オブジェクトであり、JNDI 名前空間に格納されます。JNDI 名前空間とは、ネーミングおよびディレクトリー・サービス内部の定義済みの場所のことです。 初期コンテキストでは、JNDI 名前空間のルートを定義します。 IBM MQ Explorerでは、以下の図に示すように、すべての接続ファクトリーが適切なコンテキストおよびサブコンテキストの「接続ファクトリー」フォルダーに保管されます。
この図では、 Connection Factory 1
という名前の接続ファクトリーは、File System Initial Context
という名前の初期コンテキストの「接続ファクトリー」フォルダーに保管されています。
接続ファクトリーを定義する場合、 JMS プロバイダーとして使用されるメッセージング・プロバイダー (例えば、 IBM MQ またはリアルタイム) を選択します。接続ファクトリーは、そのメッセージング・プロバイダーへの接続のみを作成できます。 JMS クライアントが別のメッセージング・プロバイダーへの接続を作成するには、新しい接続ファクトリーを作成し、メッセージング・プロバイダーを指定する必要があります。 リアルタイム・トランスポートは、 IBM MQ 8.0では使用できません。 IBM MQ 8.0 を使用している場合、リアルタイム・トランスポートを定義できますが、接続を作成しようとすると失敗します。
ドメインに依存しない接続ファクトリー
メッセージング・ドメインには、Point-to-Point メッセージング・ドメインとパブリッシュ/サブスクライブ・メッセージング・ドメインの 2 種類があります。 接続ファクトリーを作成すると、Point-to-Point メッセージング専用の接続 (QueueConnectionFactory インターフェースを使用) やパブリッシュ/サブスクライブ・メッセージング専用の接続 (TopicConnectionFactory インターフェースを使用) を作成できます。 JNDI からは、ドメインに依存しない接続ファクトリーも作成できるため、この接続ファクトリーを Point-to-Point メッセージングとパブリッシュ/サブスクライブ・メッセージングの両方に使用できます (ConnectionFactory インターフェースを使用)。 詳しくは、 接続ファクトリーの作成を参照してください。
JMS アプリケーションが Point-to-Point メッセージングまたはパブリッシュ/サブスクライブ・メッセージングのみを使用するように意図されている場合は、接続ファクトリーの作成時に特定のメッセージング・ドメインを選択できます。これにより、ドメイン固有の接続ファクトリーが作成されます。
ただし、同じトランザクション期間中に Point-to-Point とパブリッシュ/サブスクライブの両方の処理を実行する場合は、ドメインに依存しない接続ファクトリーを作成できます。 例えば、JMS アプリケーションを使用してトピックをサブスクライブ (パブリッシュ/サブスクライブ・メッセージング) し、次に JMS アプリケーションで特定のメッセージを受信したら、別のメッセージをキューに送信する (Point-to-Point メッセージング) ことなどができます。 ドメインに固有の接続ファクトリーを使用する場合は、同じトランザクション期間中に Point-to-Point とパブリッシュ/サブスクライブの両方の処理を確実に実行するのは困難です。この場合は、メッセージング・ドメインごとに別個の接続ファクトリーを作成する必要があります。つまり、Point-to-Point 処理は QueueSession セッションによって制御されるトランザクション中に実行し、パブリッシュ/サブスクライブ処理は TopicSession セッションによって制御されるトランザクション中に実行します。 送信アクションと受信アクションが両方とも実行されていることやバックアウトされていることを確認するのは困難です。
Point-to-Point 処理用のドメイン固有接続ファクトリーを 1 つと、パブリッシュ/サブスクライブ処理用のドメイン固有接続ファクトリーを 1 つ作成する代わりに、両方の処理用にドメインに依存しない接続ファクトリーを 1 つ作成することができます。 これは、接続ファクトリーは 1 つの接続を作成しますが、その接続が作成するセッションも 1 つであるという意味です。 セッションはトピックから MessageConsumer を作成し、キューに対して MessageProducer を作成します。 JMS アプリケーションがパブリッシュされたメッセージを受信すると、次のメッセージを同じセッションのトランザクションの下でキューに送信することができます。これにより、両方の操作を単一の作業単位としてコミットまたはロールバックすることができます。
詳しくは、 IBM MQ classes for JMS の使用を参照してください。