JMS 接続ファクトリー

接続ファクトリーは、 「JMS」 クライアント ( 「JMS」 API を使用する 「JMS」 プログラム) が JNDI プロバイダー ( IBM® MQなどのメッセージング・プロバイダー) との接続を作成するために使用するオブジェクトです。

IBM MQ エクスプローラー を使用して、接続ファクトリーを作成し、接続ファクトリーが接続の作成に使用する接続パラメーターを定義することができます。

接続ファクトリーは、宛先と同様に管理対象オブジェクトであり、ネーミングおよびディレクトリー・サービス内の定義済みロケーションである JNDI 名前空間に保管されます。 初期コンテキストは、 JNDI 名前空間のルートを定義します。 IBM MQ エクスプローラーでは、以下の図に示すように、すべての接続ファクトリーが適切なコンテキストおよびサブコンテキストの「接続ファクトリー」フォルダーに保管されます。

この図では、 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からは、ドメインに依存せず、(ConnectionFactory インターフェースを使用して) Point-to-Point メッセージングとパブリッシュ/サブスクライブ・メッセージングの両方に使用できる接続ファクトリーを作成することもできます。 詳しくは、 接続ファクトリーの作成を参照してください。

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 資料の「 IBM MQ classes for JMS の使用 」を参照してください。