8.5. サーバーへの接続

クライアントをサーバーに接続する場合は、適切なコネクターが必要です。これには 2 つの方法があります。サーバーに設定され、JNDI ルックアップから取得できる ConnectionFactory を使用することができます。または、ActiveMQ Artemis コア API を使用して、クライアント側で ConnectionFactory 全体を設定することもできます。

8.5.1. JMS 接続ファクトリー

クライアントでは JNDI を使用して、サーバーへの接続を提供する ConnectionFactory オブジェクトをルックアップできます。接続ファクトリーでは、それぞれ以下の 3 つのタイプのコネクターを公開することができます。

remote-connector を参照する connection-factory は、リモートクライアントがサーバーからメッセージを送受信するために使用できます (connection-factory に適切なエクスポートエントリーがあることを前提とします)。remote-connector は、connection-factory の使用して接続先をクライアントに指示する socket-binding と関連付けられます。

in-vm-connector を参照する connection-factory は、ローカルクライアントよるローカルサーバーとのメッセージの送受信にに適しています。in-vm-connector は、複数のメッセージングサーバーを 1 つの JVM で実行できるため、connection-factory を使用して接続先をクライアントに指示する server-id と関連付けられます。

http-connector を参照する connection-factory は、HTTP ポートに接続してサーバーからメッセージを送受信してからメッセージングプロトコルにアップグレードするにあたり、リモートクライアントで使用するのに適しています。http-connector は、デフォルトで http という名前の HTTP ソケットを表す socket-binding に関連付けられています。

JMS 2.0 以降、デフォルトの JMS 接続ファクトリーは、JNDI 名 java:comp/DefaultJMSConnectionFactory で Java EE アプリケーションを利用できます。messaging-activemq サブシステムでは、このデフォルトの接続ファクトリーを提供するために使用される pooled-connection-factory を定義します。

以下は、JBoss EAP の full 設定プロファイルに含まれるデフォルトのコネクターおよび接続ファクトリーです。

<subsystem xmlns="urn:jboss:domain:messaging-activemq:4.0">
  <server name="default">
    [...]
    <http-connector name="http-connector" socket-binding="http" endpoint="http-acceptor" />
    <http-connector name="http-connector-throughput" socket-binding="http" endpoint="http-acceptor-throughput">
      <param name="batch-delay" value="50"/>
    </http-connector>
    <in-vm-connector name="in-vm" server-id="0"/>
    [...]
    <connection-factory name="InVmConnectionFactory" connectors="in-vm" entries="java:/ConnectionFactory" />
    <pooled-connection-factory name="activemq-ra" transaction="xa" connectors="in-vm" entries="java:/JmsXA java:jboss/DefaultJMSConnectionFactory"/>
    [...]
    </server>
</subsystem>

ファクトリーの entries 属性では、ファクトリーが公開される JNDI 名を指定します。リモートクライアントに利用できるのは、java:jboss/exported 名前空間にバインドされた JNDI 名のみです。connection-factoryjava:jboss/exported 名前空間にバインドされたエントリーを持っている場合、リモートクライアントは java:jboss/exported の後のテキストを使用して connection-factory をルックアップします。たとえば、RemoteConnectionFactory はデフォルトで java:jboss/exported/jms/RemoteConnectionFactory にバインドされています。これは、リモートクライアントが jms/RemoteConnectionFactory を使用してこの connection-factory をルックアップすることを意味します。pooled-connection-factory はリモートクライアントに適していないため、pooled-connection-factory では java:jboss/exported 名前空間内にエントリーがバインドされないようにする必要があります。