8.5.3. コア API を使用したサーバーへの接続

Core API を使用すると、JNDI ルックアップを使用せずにクライアント接続を行うことができます。Core API を使用するクライアントでは、JNDI ベースのクライアントと同様、クラスパスでクライアント JAR が必要になります。

ServerLocator

クライアントは ServerLocator インスタンスを使用して ClientSessionFactory インスタンスを作成します。名前が示すように、ServerLocator インスタンスはサーバーを検索し、そのサーバーへの接続を作成するために使用されます。

JMS では、JMS Connection Factory と同様に ServerLocator を考えてみましょう。

ServerLocator インスタンスは、ActiveMQClient ファクトリークラスを使用して作成されます。

ServerLocator locator = ActiveMQClient.createServerLocatorWithoutHA(new TransportConfiguration(InVMConnectorFactory.class.getName()));
ClientSessionFactory

クライアントは ClientSessionFactory を使用して ClientSession インスタンスを作成します。これは基本的にサーバーへの接続です。JMS 関係ではこれを JMS 接続と考えます。

ClientSessionFactory インスタンスは ServerLocator クラスを使用して作成されます。

ClientSessionFactory factory =  locator.createClientSessionFactory();
ClientSession

クライアントは ClientSession を使用してメッセージの消費と生成を行い、トランザクションでメッセージをグループ化します。ClientSession インスタンスは、トランザクションセマンティクスと非トランザクションセマンティクスの両方をサポートし、JTA トランザクションの一部として、メッセージング操作を実行できるように XAResource インターフェースも提供できます。

ClientSession インスタンスは ClientConsumersClientProducers をグループ化します。

ClientSession session = factory.createSession();

今説明したことを簡単な例で以下に示します。

ServerLocator locator = ActiveMQClient.createServerLocatorWithoutHA(
  new TransportConfiguration( InVMConnectorFactory.class.getName()));

// In this simple example, we just use one session for both
// producing and consuming
ClientSessionFactory factory =  locator.createClientSessionFactory();
ClientSession session = factory.createSession();

// A producer is associated with an address ...
ClientProducer producer = session.createProducer("example");
ClientMessage message = session.createMessage(true);
message.getBodyBuffer().writeString("Hello");

// We need a queue attached to the address ...
session.createQueue("example", "example", true);

// And a consumer attached to the queue ...
ClientConsumer consumer = session.createConsumer("example");

// Once we have a queue, we can send the message ...
producer.send(message);

// We need to start the session before we can -receive- messages ...
session.start();
ClientMessage msgReceived = consumer.receive();

System.out.println("message = " + msgReceived.getBodyBuffer().readString());

session.close();