web-dev-qa-db-ja.com

ActivationSpecとConnectionFactoryの違いは何ですか?

私の理解はそれです:

  • MD[〜#〜] b [〜#〜]s(メッセージ駆動型Bean)は、アクティベーション仕様を介して接続します。
  • MD[〜#〜] p [〜#〜]s(メッセージ駆動型POJO)は接続ファクトリを介して接続します。

この図 IBMから は役に立ちます:

enter image description here

私にとって、 IBMからのこの説明 は違いにあまり光を当てていません:

  • 接続ファクトリ-メッセージングバスへの接続を取得するためにアプリケーションによって使用されます。
  • Queue-アプリケーションがメッセージを送受信するために使用します。
  • アクティベーション仕様-キューに接続してメッセージを受信するためにアプリケーションのメッセージ駆動型Beanによって使用されます。

1つの本当の 私が見つけた違いはそれです

セッションBeanとエンティティBean [別名MDP]を使用すると、JMSメッセージを同期的に受信できますが、非同期では受信できません。サーバーリソースの拘束を回避するために、サーバー側コンポーネントで同期受信のブロックを使用しないことをお勧めします。 メッセージを非同期で受信するには、メッセージ駆動型Bean[MDB]を使用します。

したがって、これまでのところ満足できないリストは次のとおりです。

  • MDBでActivationSpecを使用し、POJOでConnectionFactoryを使用します(ただし、POJOは可能です ActivationSpecも使用 ?)
  • MDBは非同期で動作します。 MBPは同期して動作します。

私の質問は:他に違いはありますか?違いを明確にできますか?

参照:

20
Jeffrey Knight

@ジェフリーナイト:私の経験に基づいて明確にしようと思います。

MDBは、受信メッセージを消費するためのBeanであることを理解しています。ここで、特定のMDBがどの宛先からどの宛先に消費するかを指定する必要があります。

MDBは基本的にメッセージのエンドポイントです。

JCA準拠のMDBより前:

websphereのフローは:-

着信メッセージ->メッセージリスナーがリッスン->リスナーポート-> MDBに配信

したがって、通常、開発者はMDBを作成し、次のようにejb-jar.xmlでメッセージの宛先の詳細を指定します。

<message-driven-destination>
    <destination-type>javax.jms.Queue</destination-type>
</message-driven-destination>
<res-ref-name>jms/QCF</res-ref-name>
<resource-ref>
    <res-type>javax.jms.QueueConnectionFactory</res-type>
    <res-auth>Container</res-auth>
</resource-ref>

デプロイヤーはリスナーポートを作成し、デプロイされたMDBをリスナーポートに関連付ける必要があります。上記で指定されたQueueConnectionFactoryは、キューへの接続を作成するために作成されます。

JCA準拠のMDBを投稿する:

JCA後、MDBはJCAリソースとして扱われます。 JCA仕様には、メッセージングフレームワークAPIも組み込まれています。 JCAの場合のフローは次のとおりです。-

incoming message --> listened by Message listener --> Resource Adapter-->deliver to MDB

JCAは、JDBC、JMS、EISなど、あらゆるタイプのリソースで機能するように作成されているため、あらゆるアダプターの構成を作成するための一般的な「アクティベーション仕様」の方法があります。 ra.xmlファイルには、その特定のアダプターが機能するために必要なアクティベーション仕様の種類が記載されています。アクティベーション仕様はランタイムエンティティではなく、リソースアダプターによって使用される構成の詳細にすぎません。上記の場合、JCAアダプターは、アクティベーション仕様に記載されているキュー接続ファクトリからの接続を使用します。したがって、基本的に上記の両方の場合のキュー接続ファクトリは同じです。

websphereの場合、メッセージングにはSIB(Service Integration Bus)宛先のいずれかを使用できますORメッセージング用のwebsphereMQなどの外部ソフトウェア。

メッセージングのSIB宛先の場合:-SIBはJCAリソースアダプタを実装しています。したがって、SIBで宛先を使用するMDBは、アクティベーション仕様を使用して宛先の詳細を指定できます。リソースアダプタモジュールはメッセージングエンジンと対話し、メッセージをMDBに配信できます。

websphere MQのような外部メッセージングフレームワークの場合:-websphere MQはJCAアダプターを実装していないため、websphereMQにある宛先に接続するようにリスナーポートを構成する必要があります。 MDBにメッセージを配信するのはリスナーポートです。

つまり、どちらの場合も、キュー接続ファクトリを使用してキュー接続を取得します。ある場合には、メッセージの配信に使用されるリソースアダプター(アクティベーション仕様の形式の構成情報を含む)であり、他の場合と同様に、メッセージの配信に使用されるリスナーポート(キューとファクトリにバインドされている)です。

これが今明らかになることを願っています。

15
ag112

どちらも構成ですが、アウトバウンドメッセージには接続ファクトリが使用され、インバウンドメッセージングにはアクティベーション仕様が使用されます。

これは私がIBMから得たものです。

アクティベーション仕様は、JCA1.5仕様の一部です。 MDBアプリケーションは、アクティベーション仕様を使用して、インバウンド・メッセージを処理するためにWebSphereMQキュー・マネージャーに接続します。アクティベーション仕様には、セキュリティ設定などの他のオプションも用意されています。

JMS接続ファクトリには、接続の作成方法に関する情報が含まれています。アプリケーションがJMS接続を必要とする場合、ファクトリは接続インスタンスを作成します。接続ファクトリは、前に作成したアクティベーション仕様と同じ接続情報を必要としますが、MDBからのアウトバウンドメッセージに使用されますが、アクティベーション仕様はインバウンドメッセージに使用されます。

12
Kezealia

ConnectionFactoryのクライアントはアプリケーションです。アプリケーションは、ConnectionFactoryを使用して、キューを介してメッセージングエンジンとの間でメッセージをプッシュ/プルします。

ActivationSpecのクライアントはEJBコンテナです。 EJBコンテナはActivationSpecを取得して、MDBまたはMDPのMessageEndpointFactoryをResourceAdapterに登録します。クライアントがメッセージをメッセージングエンジンにプッシュすると、メッセージングエンジンは、登録されたMessageEndpointFactoryを使用して、メッセージをアプリケーション(MDBやMDPなど)に転送します。これにより、アプリケーションは、クライアントがキューからメッセージをプルしようとすることをポーリングまたはブロックする必要がなく、メッセージを「非同期に」受信できます。

2
Brett Kail