WebLogic JMS プログラマーズ ガイド
![]() |
![]() |
![]() |
![]() |
以下の節では、このリリースの WebLogic Server で非推奨となった機能について説明します。
注意 : セッション プールは現在ほとんど使用されていません。理由は、J2EE 仕様の必須の部分ではないこと、JTA ユーザ トランザクションをサポートしていないこと、そして大部分がメッセージ駆動型 Bean (MDB) に取って代わられたことです。MDB の方が簡単で管理しやすく、高機能です。MDB の設計の詳細については、『WebLogic エンタープライズ JavaBeans (EJB) プログラマーズ ガイド』の「メッセージ駆動型 EJB」を参照してください。
WebLogic JMS には、サーバ セッションのサーバ管理プールを定義するためのオプションの JMS 機能が実装されています。この機能を使用すると、アプリケーションで複数のメッセージを並行して処理できます。
onMessage()
メソッドがあります。 onMessage()
メソッドが実行されます。 次の図に、サーバ セッション プール機能、およびアプリケーションとアプリケーション サーバのコンポーネントの関係を示します。
図に示されているように、アプリケーションにはシングル スレッドのメッセージ リスナが用意されています。JMS によって実装された、アプリケーション サーバ上の接続コンシューマによって、以下のタスクが実行され、1 つまたは複数のメッセージが処理されます。
次の図に、メッセージの並行処理を行うための準備に必要な手順を示します。
この手順では、アプリケーションで、他のアプリケーション サーバ プロバイダのセッション プール実装を使用できます。サーバ セッション プールはメッセージ駆動型 Bean を使用して実装することもできます。メッセージ駆動型 Bean によるサーバ セッション プールの実装の詳細については、『WebLogic エンタープライズ JavaBeans (EJB) プログラマーズ ガイド』の「メッセージ駆動型 Bean」を参照してください。
コンフィグレーション時にセッション プールと接続コンシューマが定義された場合は、この手順を省略することができます。サーバ セッション プールおよび接続コンシューマのコンフィグレーションについては、『WebLogic JMS のコンフィグレーションと管理』の「JMS システム リソースのコンフィグレーション」を参照してください。
WebLogic JMS は現在、オプションの TopicConnection.createDurableConnectionConsumer()
操作をサポートしていません。この JMS の高度な操作の詳細については、Sun Microsystems の JMS 仕様を参照してください。
サーバ セッション プール ファクトリを使用して、サーバ セッション プールを作成します。
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 を参照してください。
以降の節で説明する 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 を参照してください。
以下の方法のいずれかを使用して、サーバ セッションを取得し、メッセージを並行処理するための接続コンシューマを作成できます。
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 を参照してください。
次の例では、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;
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();
JNDI でサーバ セッション プール ファクトリをルックアップします。
sessionPoolFactory = (ServerSessionPoolFactory)
ctx.lookup(SESSION_POOL_FACTORY);
次のように、サーバ セッション プール ファクトリを使用してサーバ セッション プールを作成します。
sessionPool = sessionPoolFactory.getServerSessionPool(qcon, 5,
false, Session.AUTO_ACKNOWLEDGE,
examples.jms.startup.MsgListener);
qcon
は、サーバ セッション プールに関連付けられるキュー接続を示します。5
は、接続コンシューマ (手順 3 で作成予定) で取得できる並行セッションの最大数を示します。false
は、セッションをトランザクション処理しないことを示します。AUTO_ACKNOWLEDGE
は、確認応答モードを示します。examples.jms.startup.MsgListener
は、インスタンス化され、メッセージの受信および並行処理に使用されるメッセージ リスナを示します。
consumer = qcon.createConnectionConsumer(queue, "TRUE",
sessionPool, 10);
queue
は、関連付けられるキューを示します。TRUE
は、メッセージをフィルタ処理するためのメッセージ セレクタを示します。sessionPool
は、サーバ セッションにアクセスするためのサーバ セッション プールを示します。10
は、サーバ セッションに同時に割り当てることができるメッセージの最大数を示します。この例で使用されている JMS クラスの詳細については、「JMS API について」または javax.jms の Javadoc を参照してください。
次の例では、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;
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();
JNDI でサーバ セッション プール ファクトリをルックアップします。
sessionPoolFactory = (ServerSessionPoolFactory)
ctx.lookup(SESSION_POOL_FACTORY);
次のように、サーバ セッション プール ファクトリを使用してサーバ セッション プールを作成します。
sessionPool = sessionPoolFactory.getServerSessionPool(tcon, 5,
false, Session.AUTO_ACKNOWLEDGE,
examples.jms.startup.MsgListener);
tcon
は、サーバ セッション プールに関連付けられるトピック接続を示します。5
は、接続コンシューマ (手順 3 で作成予定) で取得できる並行セッションの最大数を示します。false
は、セッションをトランザクション処理しないことを示します。AUTO_ACKNOWLEDGE
は、確認応答モードを示します。examples.jms.startup.MsgListener
は、インスタンス化され、メッセージの受信および並行処理に使用されるメッセージ リスナを示します。
consumer = tcon.createConnectionConsumer(topic, "TRUE",
sessionPool, 10);
topic
は、関連付けられるトピックを示します。TRUE
は、メッセージをフィルタ処理するためのメッセージ セレクタを示します。sessionPool
は、サーバ セッションにアクセスするためのサーバ セッション プールを示します。10
は、サーバ セッションに同時に割り当てることができるメッセージの最大数を示します。この例で使用されている JMS クラスの詳細については、「JMS API について」または javax.jms の Javadoc を参照してください。
![]() |
![]() |
![]() |