WebLogic JMS プログラマーズ ガイド

     前  次    新しいウィンドウで目次を開く     
ここから内容の開始

非推奨となった WebLogic JMS 機能

以下の節では、このリリースの WebLogic Server で非推奨となった機能について説明します。

 


サーバ セッション プールの定義

注意 : セッション プールは現在ほとんど使用されていません。理由は、J2EE 仕様の必須の部分ではないこと、JTA ユーザ トランザクションをサポートしていないこと、そして大部分がメッセージ駆動型 Bean (MDB) に取って代わられたことです。MDB の方が簡単で管理しやすく、高機能です。MDB の設計の詳細については、『WebLogic エンタープライズ JavaBeans (EJB) プログラマーズ ガイド』の「メッセージ駆動型 EJB」を参照してください。

WebLogic JMS には、サーバ セッションのサーバ管理プールを定義するためのオプションの JMS 機能が実装されています。この機能を使用すると、アプリケーションで複数のメッセージを並行して処理できます。

サーバ セッション プールの機能は次のとおりです。

次の図に、サーバ セッション プール機能、およびアプリケーションとアプリケーション サーバのコンポーネントの関係を示します。

図 14-1 サーバ セッション プール機能

サーバ セッション プール機能

図に示されているように、アプリケーションにはシングル スレッドのメッセージ リスナが用意されています。JMS によって実装された、アプリケーション サーバ上の接続コンシューマによって、以下のタスクが実行され、1 つまたは複数のメッセージが処理されます。

  1. サーバ セッション プールからサーバ セッションを取得する
  2. サーバ セッションのセッションを取得する
  3. セッションに 1 つまたは複数のメッセージをロードする
  4. サーバ セッションを開始して、メッセージを受信する
  5. メッセージの処理が終了したら、サーバ セッションを解放してプールに戻す

次の図に、メッセージの並行処理を行うための準備に必要な手順を示します。

図 14-2 メッセージの並行処理を行うための準備

メッセージの並行処理を行うための準備

この手順では、アプリケーションで、他のアプリケーション サーバ プロバイダのセッション プール実装を使用できます。サーバ セッション プールはメッセージ駆動型 Bean を使用して実装することもできます。メッセージ駆動型 Bean によるサーバ セッション プールの実装の詳細については、『WebLogic エンタープライズ JavaBeans (EJB) プログラマーズ ガイド』の「メッセージ駆動型 EJB」を参照してください。

コンフィグレーション時にセッション プールと接続コンシューマが定義された場合は、この手順を省略することができます。サーバ セッション プールおよび接続コンシューマのコンフィグレーションについては、『WebLogic JMS のコンフィグレーションと管理』の「セッション プールと接続コンシューマ」を参照してください。

WebLogic JMS は現在、オプションの TopicConnection.createDurableConnectionConsumer() 処理をサポートしていません。この JMS の高度な処理の詳細については、Sun Microsystems の JMS 仕様を参照してください。

手順 1 : JNDI でサーバ セッション プール ファクトリをルックアップする

サーバ セッション プール ファクトリを使用して、サーバ セッション プールを作成します。

WebLogic JMS では、デフォルトで次のような ServerSessionPoolFactory オブジェクトが定義されています。weblogic.jms.extensions.ServerSessionPoolFactory:<name>。ここで <name> には、セッション プールの作成先になる JMS サーバの名前を指定します。

サーバ セッション プール ファクトリを定義したら、そのファクトリをルックアップするために、まず NamingManager.InitialContext() メソッドを使用して JNDI コンテキスト (context) を確立します。サーブレット アプリケーション以外のアプリケーションの場合は、初期コンテキストの作成に使用する環境を渡す必要があります。詳細については、NamingManager.InitialContext() の Javadoc を参照してください。

コンテキストが定義されたら、次のコードを使用して、JNDI でサーバ セッション プール ファクトリをルックアップします。

factory = (ServerSessionPoolFactory) context.lookup(<ssp_name>);

<ssp_name> には、サーバ セッション プール ファクトリの修飾名または非修飾名を指定します。

サーバ セッション プール ファクトリの詳細については、「ServerSessionPoolFactory」または weblogic.jms.extensions.ServerSessionPoolFactory の Javadoc を参照してください。

手順 2 : サーバ セッション プール ファクトリを使用してサーバ セッション プールを作成する

以降の節で説明する ServerSessionPoolFactory メソッドを使用して、キュー (PTP) またはトピック (Pub/Sub) の接続コンシューマで使用するサーバ セッション プールを作成できます。

サーバ セッション プールの詳細については、「ServerSessionPool」または javax.jms.ServerSessionPool の Javadoc を参照してください。

キュー接続コンシューマで使用するサーバ セッション プールを作成する

ServerSessionPoolFactory には、キュー接続コンシューマ用のサーバ セッション プールを作成する、次のメソッドが用意されています。

public ServerSessionPool getServerSessionPool(
QueueConnection connection,
int maxSessions,
boolean transacted,
int ackMode,
String listenerClassName
) throws JMSException

サーバ セッション プールに関連付けられるキュー接続、接続コンシューマ (手順 3 で作成予定) で取得できる並行セッションの最大数、セッションをトランザクション処理するかどうか、確認応答モード (トランザクション処理されないセッションの場合にのみ適用可能)、およびインスタンス化されメッセージの受信および並行処理に使用されるメッセージ リスナ クラスを指定する必要があります。

ServerSessionPoolFactory クラスのメソッドの詳細については、weblogic.jms.extensions.ServerSessionPoolFactory の Javadoc を参照してください。ConnectionConsumer クラスの詳細については、javax.jms.ConnectionConsumer の Javadoc を参照してください。

トピック接続コンシューマで使用するサーバ セッション プールを作成する

ServerSessionPoolFactory には、トピック接続コンシューマ用のサーバ セッション プールを作成する、次のメソッドが用意されています。

public ServerSessionPool getServerSessionPool(
TopicConnection connection,
int maxSessions,
boolean transacted,
int ackMode,
String listenerClassName
) throws JMSException

サーバ セッション プールに関連付けられるトピック接続、接続コンシューマ (手順 3 で作成予定) で取得できる並行セッションの最大数、セッションをトランザクション処理するかどうか、確認応答モード (トランザクション処理されないセッションの場合にのみ適用可能)、およびインスタンス化され、メッセージの受信および並行処理に使用されるメッセージ リスナ クラスを指定する必要があります。

ServerSessionPoolFactory クラスのメソッドの詳細については、weblogic.jms.extensions.ServerSessionPoolFactory の Javadoc を参照してください。ConnectionConsumer クラスの詳細については、javax.jms.ConnectionConsumer の Javadoc を参照してください。

手順 3 : 接続コンシューマを作成する

以下の方法のいずれかを使用して、サーバ セッションを取得し、メッセージを並行処理するための接続コンシューマを作成できます。

ConnectionConsumer クラスの詳細については、「ConnectionConsumer」または javax.jms.ConnectionConsumer の Javadoc を参照してください。

キュー用の接続コンシューマを作成する

QueueConnection には、キュー用の接続コンシューマを作成する、次のメソッドが用意されています。

public ConnectionConsumer createConnectionConsumer(
Queue queue,
String messageSelector,
ServerSessionPool sessionPool,
int maxMessages
) throws JMSException

関連付けられるキューの名前、メッセージをフィルタ処理するためのメッセージ セレクタ、サーバ セッションにアクセスするためのサーバ セッション プール、およびサーバ セッションに同時に割り当てることができるメッセージの最大数を指定する必要があります。メッセージ セレクタの詳細については、「メッセージのフィルタ処理」を参照してください。

QueueConnection クラスのメソッドの詳細については、javax.jms.QueueConnection の Javadoc を参照してください。ConnectionConsumer クラスの詳細については、javax.jms.ConnectionConsumer の Javadoc を参照してください。

トピック用の接続コンシューマを作成する

TopicConnection には、トピック用の ConnectionConsumers を作成する、以下の 2 種類のメソッドが用意されています。

public ConnectionConsumer createConnectionConsumer(
Topic topic,
String messageSelector,
ServerSessionPool sessionPool,
int maxMessages
) throws JMSException
public ConnectionConsumer createDurableConnectionConsumer(
Topic topic,
String messageSelector,
ServerSessionPool sessionPool,
int maxMessages
) throws JMSException

各メソッドには、関連付けられるトピックの名前、メッセージをフィルタ処理するためのメッセージ セレクタ、サーバ セッションにアクセスするためのサーバ セッション プール、およびサーバ セッションに同時に割り当てることができるメッセージの最大数を指定する必要があります。メッセージ セレクタの詳細については、「メッセージのフィルタ処理」を参照してください。

いずれのメソッドも接続コンシューマを作成しますが、後者のメソッドは、恒久サブスクライバで使用する恒久接続コンシューマも作成します。恒久サブスクライバの詳細については、「恒久サブスクリプションの設定」を参照してください。

TopicConnection クラスのメソッドの詳細については、javax.jms.TopicConnection の Javadoc を参照してください。ConnectionConsumer クラスの詳細については、javax.jms.ConnectionConsumer の Javadoc を参照してください。

例 : PTP クライアントのサーバ セッション プールの設定

次の例では、JMS クライアント用のサーバ セッション プールを設定する方法を示します。startup() メソッドは、「例 : PTP アプリケーションの設定」で説明されている examples.jms.queue.QueueSend サンプルの init() メソッドとほぼ同じです。このメソッドでもサーバ セッション プールを設定できます。

次の例に startup() メソッドを示し、併せて各設定の手順も説明します。

サーバ セッション プール アプリケーションを実装するには、次のパッケージをインポート リストに追加します。

import weblogic.jms.extensions.ServerSessionPoolFactory

セッション プールの作成に必要なセッション プール ファクトリの静的変数を定義します。

private final static String SESSION_POOL_FACTORY=
"weblogic.jms.extensions.ServerSessionPoolFactory:examplesJMSServer";

private QueueConnectionFactory qconFactory;
private QueueConnection qcon;
private QueueSession qsession;
private QueueSender qsender;
private Queue queue;
private ServerSessionPoolFactory sessionPoolFactory;
private ServerSessionPool sessionPool;
private ConnectionConsumer consumer;

必要な JMS オブジェクトを作成します。

public String startup(
String name,
Hashtable args
) throws Exception
{
String connectionFactory = (String)args.get("connectionFactory");
String queueName = (String)args.get("queue");
if (connectionFactory == null || queueName == null) {
throw new IllegalArgumentException("connectionFactory="+connectionFactory+
", queueName="+queueName);
}
Context ctx = new InitialContext();
qconFactory = (QueueConnectionFactory)
ctx.lookup(connectionFactory);
qcon =qconFactory.createQueueConnection();
qsession = qcon.createQueueSession(false,
Session.AUTO_ACKNOWLEDGE);
queue = (Queue) ctx.lookup(queueName);
qcon.start();

手順 1

JNDI でサーバ セッション プール ファクトリをルックアップします。

 sessionPoolFactory = (ServerSessionPoolFactory) 
ctx.lookup(SESSION_POOL_FACTORY);

手順 2

次のように、サーバ セッション プール ファクトリを使用してサーバ セッション プールを作成します。

 sessionPool = sessionPoolFactory.getServerSessionPool(qcon, 5,
false, Session.AUTO_ACKNOWLEDGE,
examples.jms.startup.MsgListener);

このコードでは、以下のように定義されています。

手順 3

次のように、接続コンシューマを作成します。

 consumer = qcon.createConnectionConsumer(queue, "TRUE",
sessionPool, 10);

このコードでは、以下のように定義されています。

この例で使用されている JMS クラスの詳細については、「JMS API について」または javax.jms の Javadoc を参照してください。

例 : Pub/Sub クライアントのサーバ セッション プールの設定

次の例では、JMS クライアント用のサーバ セッション プールを設定する方法を示します。startup() メソッドは、「例 : Pub/Sub アプリケーションの設定」で説明されている examples.jms.topic.TopicSend サンプルの init() メソッドとほぼ同じです。このメソッドでもサーバ セッション プールを設定できます。

次の例に startup() メソッドを示し、併せて各設定手順も述べます。

サーバ セッション プール アプリケーションを実装するには、次のパッケージをインポート リストに追加します。

import weblogic.jms.extensions.ServerSessionPoolFactory

セッション プールの作成に必要なセッション プール ファクトリの静的変数を定義します。

private final static String SESSION_POOL_FACTORY=
"weblogic.jms.extensions.ServerSessionPoolFactory:examplesJMSServer";

private TopicConnectionFactory tconFactory;
private TopicConnection tcon;
private TopicSession tsession;
private TopicSender tsender;
private Topic topic;
private ServerSessionPoolFactory sessionPoolFactory;
private ServerSessionPool sessionPool;
private ConnectionConsumer consumer;

必要な JMS オブジェクトを作成します。

public String startup(
String name,
Hashtable args
) throws Exception
{
String connectionFactory = (String)args.get("connectionFactory");
String topicName = (String)args.get("topic");
if (connectionFactory == null || topicName == null) {
throw new IllegalArgumentException("connectionFactory="+connectionFactory+
", topicName="+topicName);
}
Context ctx = new InitialContext();
tconFactory = (TopicConnectionFactory)
ctx.lookup(connectionFactory);
tcon = tconFactory.createTopicConnection();
tsession = tcon.createTopicSession(false,
Session.AUTO_ACKNOWLEDGE);
topic = (Topic) ctx.lookup(topicName);
tcon.start();

手順 1

JNDI でサーバ セッション プール ファクトリをルックアップします。

 sessionPoolFactory = (ServerSessionPoolFactory) 
ctx.lookup(SESSION_POOL_FACTORY);

手順 2

次のように、サーバ セッション プール ファクトリを使用してサーバ セッション プールを作成します。

 sessionPool = sessionPoolFactory.getServerSessionPool(tcon, 5,
false, Session.AUTO_ACKNOWLEDGE,
examples.jms.startup.MsgListener);

このコードでは、以下のように定義されています。

手順 3

次のように、接続コンシューマを作成します。

 consumer = tcon.createConnectionConsumer(topic, "TRUE",
sessionPool, 10);

このコードでは、以下のように定義されています。

この例で使用されている JMS クラスの詳細については、「JMS API について」または javax.jms の Javadoc を参照してください。


ページの先頭       前  次