13 Oracle Java Message ServiceのPoint-to-Point
次のトピックでは、Oracle Database Advanced Queuing (AQ)のJava Message Service (JMS)操作インタフェースのうち、Point-to-Point操作固有のコンポーネントについて説明します。Point-to-Pointおよびパブリッシュ/サブスクライブで共有されるコンポーネントについては、「Oracle Java Message Serviceの共有インタフェース」を参照してください。
13.1 ユーザー名/パスワードが設定されたConnectionの作成
public javax.jms.Connection createConnection(
java.lang.String username,
java.lang.String password)
throws JMSException
このメソッドは、指定されたユーザー名とパスワードを使用して、Point-to-Point操作とパブリッシュ/サブスクライブ操作の両方をサポートするコネクションを作成します。これは新規メソッドで、JMSバージョン1.1仕様をサポートしています。次のパラメータがあります。
| パラメータ | 説明 |
|---|---|
|
|
キュー用にデータベースに接続するユーザー名 |
|
|
サーバーへの接続を作成するためのパスワード |
13.2 コネクションの確立: デフォルトのConnectionFactoryパラメータの使用
public javax.jms.Connection createConnection()
throws JMSException
このメソッドは、デフォルトのConnectionFactoryパラメータを使用して、Point-to-Point操作とパブリッシュ・サブスクライブ操作の両方をサポートするコネクションを作成します。これは新規メソッドで、JMSバージョン1.1仕様をサポートしています。ConnectionFactoryプロパティにデフォルトのユーザー名およびパスワードを含めないと、JMSExceptionが発生します。
13.3 ユーザー名/パスワードが設定されたQueueConnectionの作成
public javax.jms.QueueConnection createQueueConnection(
java.lang.String username,
java.lang.String password)
throws JMSException
このメソッドは、指定されたユーザー名とパスワードを使用してキュー・コネクションを作成します。次のパラメータがあります。
| パラメータ | 説明 |
|---|---|
|
|
キュー用にデータベースに接続するユーザー名 |
|
|
サーバーへの接続を作成するためのパスワード |
例13-1 ユーザー名/パスワードが設定されたQueueConnectionの作成
QueueConnectionFactory qc_fact = AQjmsFactory.getQueueConnectionFactory(
"sun123", "oratest", 5521, "thin");
QueueConnection qc_conn = qc_fact.createQueueConnection("jmsuser", "jmsuser");13.4 QueueConnectionの確立: オープンしているJDBCコネクションの使用
public static javax.jms.QueueConnection createQueueConnection( java.sql.Connection jdbc_connection) throws JMSException
このメソッドは、オープンしているJDBCコネクションを使用してキュー・コネクションを作成します。これは静的であり、次のパラメータを取ります。
| パラメータ | 説明 |
|---|---|
|
|
データベースへの有効なオープン・コネクション |
ユーザーがJMS操作に対して既存の(たとえばコネクション・プールの)JDBCコネクションを使用するときに、例13-2のメソッドを使用できます。この場合、JMSは新しいコネクションをオープンせずに、提供されたJDBCコネクションを使用してJMS QueueConnectionオブジェクトを作成します。
例13-3のメソッドは、データベース(JDBCサーバー・ドライバ)内のJavaストアド・プロシージャからJMSを使用する場合に、JMS QueueConnectionを確立する唯一の方法です。
例13-2 QueueConnectionの確立: オープンしているJDBCコネクションの使用
Connection db_conn; /* previously opened JDBC connection */
QueueConnection qc_conn = AQjmsQueueConnectionFactory.createQueueConnection(
db_conn);
例13-3 データベース内のJavaプロシージャからのQueueConnectionの作成
OracleDriver ora = new OracleDriver(); QueueConnection qc_conn = AQjmsQueueConnectionFactory.createQueueConnection(ora.defaultConnection());
13.5 QueueConnectionの確立: デフォルトのConnectionFactoryパラメータの使用
public javax.jms.QueueConnection createQueueConnection()
throws JMSException
このメソッドは、デフォルトのConnectionFactoryパラメータによってキュー・コネクションを確立します。QueueConnectionFactoryのプロパティにデフォルトのユーザー名およびパスワードを含めないと、JMSExceptionが発生します。
13.6 QueueConnectionの確立: オープンしているOracleOCIConnectionPoolの使用
public static javax.jms.QueueConnection createQueueConnection(
oracle.jdbc.pool.OracleOCIConnectionPool cpool)
throws JMSException
このメソッドは、オープンしているOracleOCIConnectionPoolを使用してキュー・コネクションを作成します。これは静的であり、次のパラメータを取ります。
| パラメータ | 説明 |
|---|---|
|
|
データベースに対してオープンなOCIコネクション・プール |
ユーザーがJMS操作に対して既存のOracleOCIConnectionPoolインスタンスを使用するとき、例13-4のメソッドを使用できます。この場合、JMSは新しいOracleOCIConnectionPoolインスタンスをオープンせずに、提供されたOracleOCIConnectionPoolインスタンスを使用してJMS QueueConnectionオブジェクトを作成します。
例13-4 QueueConnectionの確立: オープンしているOracleOCIConnectionPoolの使用
OracleOCIConnectionPool cpool; /* previously created OracleOCIConnectionPool */ QueueConnection qc_conn = AQjmsQueueConnectionFactory.createQueueConnection(cpool);
13.7 セッションの作成
public javax.jms.Session createSession(boolean transacted,
int ack_mode)
throws JMSException
このメソッドは、Point-to-Point操作とパブリッシュ・サブスクライブ操作の両方をサポートするSessionを作成します。これは新規メソッドで、JMSバージョン1.1仕様をサポートしています。トランザクションおよび非トランザクション・セッションがサポートされています。次のパラメータがあります。
| パラメータ | 説明 |
|---|---|
|
|
TRUEに設定すると、セッションはトランザクションになります。 |
|
|
コンシューマまたはクライアントが受信したメッセージを認識するかどうかを示します。トランザクション処理のセッションの場合は無視されます。有効な値は |
13.8 QueueSessionの作成
public javax.jms.QueueSession createQueueSession(
boolean transacted, int ack_mode)
throws JMSException
このメソッドはQueueSessionを作成します。トランザクションおよび非トランザクション・セッションがサポートされています。次のパラメータがあります。
| パラメータ | 説明 |
|---|---|
|
|
TRUEに設定すると、セッションはトランザクションになります。 |
|
|
コンシューマまたはクライアントが受信したメッセージを認識するかどうかを示します。トランザクション処理のセッションの場合は無視されます。有効な値は |
例13-5 トランザクションQueueSessionの作成
QueueConnection qc_conn; QueueSession q_sess = qc_conn.createQueueSession(true, 0);
13.9 QueueSenderの作成
public javax.jms.QueueSender createSender(javax.jms.Queue queue)
throws JMSException
このメソッドはQueueSenderを作成します。送信者の作成時にデフォルト・キューが設定されていない場合は、すべての送信操作で宛先キューを指定する必要があります。次のパラメータがあります。
| パラメータ | 説明 |
|---|---|
|
|
宛先キューの名前 |
13.10 メッセージの送信: デフォルトの送信オプションのQueueSenderの使用
public void send(javax.jms.Queue queue,
javax.jms.Message message)
throws JMSException
このメソッドは、メッセージをデフォルトの送信オプションでQueueSenderを使用して送信します。この操作では、メッセージのpriority(1)とtimeToLive(infinite)のデフォルト値を使用します。次のパラメータがあります。
| パラメータ | 説明 |
|---|---|
|
|
このメッセージを送信するためのキュー |
|
|
送信するメッセージ |
QueueSenderがデフォルト・キューで作成されている場合、必ずしもsend()コールにqueueパラメータを指定する必要はありません。キューがsend()操作で指定されている場合、この値はQueueSenderのデフォルト・キューをオーバーライドします。
QueueSenderがデフォルト・キューを使用しないで作成されている場合、send()コールごとにqueueパラメータを指定する必要があります。
例13-6 任意のキューにメッセージを送信するセンダーの作成
/* Create a sender to send messages to any queue */ QueueSession jms_sess; QueueSender sender1; TextMessage message; sender1 = jms_sess.createSender(null); sender1.send(queue, message);
例13-7 特定のキューにメッセージを送信するセンダーの作成
/* Create a sender to send messages to a specific queue */ QueueSession jms_sess; QueueSender sender2; Queue billed_orders_que; TextMessage message; sender2 = jms_sess.createSender(billed_orders_que); sender2.send(queue, message);
13.11 メッセージの送信: 送信オプションを指定したQueueSenderの使用
public void send(javax.jms.Queue queue,
javax.jms.Message message,
int deliveryMode,
int priority,
long timeToLive)
throws JMSException
このメソッドは、送信オプションを指定してQueueSenderを使用してメッセージを送信します。次のパラメータがあります。
| パラメータ | 説明 |
|---|---|
|
|
このメッセージを送信するためのキュー |
|
|
送信するメッセージ |
|
|
使用する配信モード |
|
|
このメッセージの優先順位 |
|
|
ミリ秒で指定されるメッセージの保存時間(ゼロは無制限) |
QueueSenderがデフォルト・キューで作成されている場合、必ずしもsend()コールにqueueパラメータを指定する必要はありません。キューがsend()操作で指定されている場合、この値はQueueSenderのデフォルト・キューをオーバーライドします。
QueueSenderがデフォルト・キューを使用しないで作成されている場合、send()コールごとにqueueパラメータを指定する必要があります。
例13-8 メッセージの送信: 送信オプションを指定したQueueSenderの使用1
/* Create a sender to send messages to any queue */ /* Send a message to new_orders_que with priority 2 and timetoLive 100000 milliseconds */ QueueSession jms_sess; QueueSender sender1; TextMessage mesg; Queue new_orders_que sender1 = jms_sess.createSender(null); sender1.send(new_orders_que, mesg, DeliveryMode.PERSISTENT, 2, 100000);
例13-9 メッセージの送信: 送信オプションを指定したQueueSenderの使用2
/* Create a sender to send messages to a specific queue */ /* Send a message with priority 1 and timetoLive 400000 milliseconds */ QueueSession jms_sess; QueueSender sender2; Queue billed_orders_que; TextMessage mesg; sender2 = jms_sess.createSender(billed_orders_que); sender2.send(mesg, DeliveryMode.PERSISTENT, 1, 400000);
13.12 QueueBrowserの作成: 標準JMS型メッセージ
public javax.jms.QueueBrowser createBrowser(javax.jms.Queue queue,
java.lang.String messageSelector)
throws JMSException
このメソッドは、Text、Stream、Objects、BytesまたはMapMessageメッセージ本体を使用するキューに対するQueueBrowserを作成します。次のパラメータがあります。
| パラメータ | 説明 |
|---|---|
|
|
アクセス対象のキュー。 |
|
|
|
java.util.Enumeration内のメソッドを使用して、メッセージのリストを参照してください。
関連項目:
例13-10 QueueBrowserの作成: セレクタの指定なし
/* Create a browser without a selector */ QueueSession jms_session; QueueBrowser browser; Queue queue; browser = jms_session.createBrowser(queue);
例13-11 QueueBrowserの作成: セレクタの指定あり
/* Create a browser for queues with a specified selector */ QueueSession jms_session; QueueBrowser browser; Queue queue; /* create a Browser to look at messages with correlationID = RUSH */ browser = jms_session.createBrowser(queue, "JMSCorrelationID = 'RUSH'");
13.13 QueueBrowserの作成: 標準JMS型メッセージ、メッセージのロック
public javax.jms.QueueBrowser createBrowser(javax.jms.Queue queue,
java.lang.String messageSelector,
boolean locked)
throws JMSException
このメソッドは、TextMessage、StreamMessage、ObjectMessage、BytesMessageまたはMapMessageメッセージ本体を使用するキューに対して、ブラウズ中にメッセージをロックするQueueBrowserを作成します。ロックされたメッセージは、ブラウズ・セッションによってトランザクションが終了されるまで、他のコンシューマによって削除できません。次のパラメータがあります。
| パラメータ | 説明 |
|---|---|
|
|
アクセス対象のキュー。 |
|
|
|
|
|
TRUEに設定すると、ブラウズ中のメッセージはロックされます(UPDATEのSELECTと同様)。 |
例13-12 QueueBrowserの作成: セレクタの指定なし、メッセージをロック
/* Create a browser without a selector */ QueueSession jms_session; QueueBrowser browser; Queue queue; browser = jms_session.createBrowser(queue, null, true);
例13-13 QueueBrowserの作成: セレクタの指定あり、メッセージをロック
/* Create a browser for queues with a specified selector */ QueueSession jms_session; QueueBrowser browser; Queue queue; /* create a Browser to look at messages with correlationID = RUSH in lock mode */ browser = jms_session.createBrowser(queue, "JMSCorrelationID = 'RUSH'", true);
13.14 QueueBrowserの作成: Oracleオブジェクト型メッセージ
public javax.jms.QueueBrowser createBrowser(javax.jms.Queue queue,
java.lang.String messageSelector,
java.lang.Object payload_factory)
throws JMSException
このメソッドは、Oracleオブジェクト型メッセージ・キューに対するQueueBrowserを作成します。次のパラメータがあります。
| パラメータ | 説明 |
|---|---|
|
|
アクセス対象のキュー。 |
|
|
|
|
payload_factory |
Oracleのユーザー定義型にマップするJavaクラスの |
SQLオブジェクト型ペイロードにマップされる特定のJavaクラスに対するCustomDatumFactoryは、静的メソッドgetFactoryを使用して取得できます。
注意:
CustomDatumは今後のリリースではサポートされなくなります。かわりに、ORADataFactoryペイロード・ファクトリを使用してください。
キューtest_queueは、SCOTT.EMPLOYEE型のペイロードを持ち、このOracleオブジェクト型に対してJPublisherによって生成されるJavaクラスがEmployeeであると仮定します。Employeeクラスは、CustomDatumインタフェースを実装します。このクラスに対するCustomDatumFactoryは、Employee.getFactory()メソッドを使用して取得できます。
注意:
シャード・キューは、オブジェクト型メッセージをサポートしていません。
関連項目:
例13-14 ADTMessageに対するQueueBrowserの作成
/* Create a browser for a Queue with AdtMessage messages of type EMPLOYEE*/
QueueSession jms_session
QueueBrowser browser;
Queue test_queue;
browser = ((AQjmsSession)jms_session).createBrowser(test_queue,
"corrid='EXPRESS'",
Employee.getFactory());13.15 QueueBrowserの作成: Oracleオブジェクト型メッセージ、メッセージのロック
public javax.jms.QueueBrowser createBrowser(javax.jms.Queue queue,
java.lang.String messageSelector,
java.lang.Object payload_factory,
boolean locked)
throws JMSException
このメソッドは、Oracleオブジェクト型メッセージ・キューに対して、ブラウズ中にメッセージをロックするQueueBrowserを作成します。次のパラメータがあります。
| パラメータ | 説明 |
|---|---|
|
|
アクセス対象のキュー。 |
|
|
|
|
payload_factory |
Oracleのユーザー定義型にマップするJavaクラスの |
|
|
TRUEに設定すると、ブラウズ中のメッセージはロックされます(UPDATEのSELECTと同様)。 |
注意:
CustomDatumは今後のリリースではサポートされなくなります。かわりに、ORADataFactoryペイロード・ファクトリを使用してください。
注意:
シャード・キューは、オブジェクト型メッセージをサポートしていません。
例13-15 AdtMessageキューに対するQueueBrowserの作成、メッセージをロック
/* Create a browser for a Queue with AdtMessage messagess of type EMPLOYEE* in lock mode/
QueueSession jms_session
QueueBrowser browser;
Queue test_queue;
browser = ((AQjmsSession)jms_session).createBrowser(test_queue,
null,
Employee.getFactory(),
true);13.16 QueueReceiverの作成: 標準JMS型メッセージ
public javax.jms.QueueReceiver createReceiver(javax.jms.Queue queue,
java.lang.String messageSelector)
throws JMSException
このメソッドは、標準JMS型メッセージ・キューに対するQueueReceiverを作成します。次のパラメータがあります。
| パラメータ | 説明 |
|---|---|
|
|
アクセス対象のキュー。 |
|
|
|
関連項目:
例13-16 QueueReceiverの作成: セレクタの指定なし
/* Create a receiver without a selector */ QueueSession jms_session QueueReceiver receiver; Queue queue; receiver = jms_session.createReceiver(queue);
例13-17 QueueReceiverの作成: セレクタの指定あり
/* Create a receiver for queues with a specified selector */ QueueSession jms_session; QueueReceiver receiver; Queue queue; /* create Receiver to receive messages with correlationID starting with EXP */ browser = jms_session.createReceiver(queue, "JMSCorrelationID LIKE 'EXP%'");
13.17 QueueReceiverの作成: Oracleオブジェクト型メッセージ
public javax.jms.QueueReceiver createReceiver(javax.jms.Queue queue,
java.lang.String messageSelector,
java.lang.Object payload_factory)
throws JMSException
このメソッドは、Oracleオブジェクト型メッセージ・キューに対するQueueReceiverを作成します。次のパラメータがあります。
| パラメータ | 説明 |
|---|---|
|
|
アクセス対象のキュー。 |
|
|
|
|
payload_factory |
Oracleのユーザー定義型にマップするJavaクラスの |
SQLオブジェクト型ペイロードにマップされる特定のJavaクラスに対するCustomDatumFactoryは、静的メソッドgetFactoryを使用して取得できます。
注意:
CustomDatumは今後のリリースではサポートされなくなります。かわりに、ORADataFactoryペイロード・ファクトリを使用してください。
キューtest_queueは、SCOTT.EMPLOYEE型のペイロードを持ち、このOracleオブジェクト型に対してJPublisherによって生成されるJavaクラスがEmployeeであると仮定します。Employeeクラスは、CustomDatumインタフェースを実装します。このクラスに対するORADataFactoryは、Employee.getFactory()メソッドを使用して取得できます。
注意:
シャード・キューは、オブジェクト型メッセージをサポートしていません。
関連項目:
例13-18 QueueReceiverの作成: AdtMessageメッセージ
/* Create a receiver for a Queue with AdtMessage messages of type EMPLOYEE*/
QueueSession jms_session
QueueReceiver receiver;
Queue test_queue;
browser = ((AQjmsSession)jms_session).createReceiver(
test_queue,
"JMSCorrelationID = 'MANAGER',
Employee.getFactory());