この章では、Oracle Streams Advanced Queuing(AQ)のJava Message Service(JMS)操作インタフェースのうち、Point-to-Point操作固有のコンポーネントについて説明します。Point-to-Pointおよびパブリッシュ・サブスクライブで共有されるコンポーネントについては、第15章「Oracle JMSの共有インタフェース」を参照してください。
内容は次のとおりです。
public javax.jms.Connection createConnection(
java.lang.String username,
java.lang.String password)
throws JMSException
このメソッドは、指定されたユーザー名とパスワードを使用して、Point-to-Point操作とパブリッシュ・サブスクライブ操作の両方をサポートするコネクションを作成します。これは新規メソッドで、JMSバージョン1.1仕様をサポートしています。次のパラメータがあります。
| パラメータ | 説明 |
|---|---|
username |
キュー用にデータベースに接続するユーザー名 |
password |
サーバーへの接続を作成するためのパスワード |
public javax.jms.Connection createConnection()
throws JMSException
このメソッドは、デフォルトのConnectionFactoryパラメータを使用して、Point-to-Point操作とパブリッシュ・サブスクライブ操作の両方をサポートするコネクションを作成します。これは新規メソッドで、JMSバージョン1.1仕様をサポートしています。ConnectionFactoryプロパティにデフォルトのユーザー名およびパスワードを含めないと、JMSExceptionが発生します。
public javax.jms.QueueConnection createQueueConnection(
java.lang.String username,
java.lang.String password)
throws JMSException
このメソッドは、指定されたユーザー名とパスワードを使用してキュー・コネクションを作成します。次のパラメータがあります。
| パラメータ | 説明 |
|---|---|
username |
キュー用にデータベースに接続するユーザー名 |
password |
サーバーへの接続を作成するためのパスワード |
public static javax.jms.QueueConnection createQueueConnection( java.sql.Connection jdbc_connection) throws JMSException
このメソッドは、オープンしているJDBCコネクションを使用してキュー・コネクションを作成します。これは静的であり、次のパラメータを取ります。
| パラメータ | 説明 |
|---|---|
jdbc_connection |
データベースへの有効なオープン・コネクション |
ユーザーがJMS操作に対して既存の(たとえばコネクション・プールの)JDBCコネクションを使用するときに、例13-2のメソッドを使用できます。この場合、JMSは新しいコネクションをオープンせずに、提供されたJDBCコネクションを使用してJMS QueueConnectionオブジェクトを作成します。
例13-2 QueueConnectionの確立: オープンしているJDBCコネクションの使用
Connection db_conn; /* previously opened JDBC connection */
QueueConnection qc_conn = AQjmsQueueConnectionFactory.createQueueConnection(
db_conn);
例13-3のメソッドは、データベース(JDBCサーバー・ドライバ)内のJavaストアド・プロシージャからJMSを使用する場合に、JMS QueueConnectionを確立する唯一の方法です。
public javax.jms.QueueConnection createQueueConnection()
throws JMSException
このメソッドは、デフォルトのConnectionFactoryパラメータによってキュー・コネクションを確立します。QueueConnectionFactoryのプロパティにデフォルトのユーザー名およびパスワードを含めないと、JMSExceptionが発生します。
public static javax.jms.QueueConnection createQueueConnection(
oracle.jdbc.pool.OracleOCIConnectionPool cpool)
throws JMSException
このメソッドは、オープンしているOracleOCIConnectionPoolを使用してキュー・コネクションを作成します。これは静的であり、次のパラメータを取ります。
| パラメータ | 説明 |
|---|---|
cpool |
データベースに対してオープンなOCIコネクション・プール |
ユーザーがJMS操作に対して既存のOracleOCIConnectionPoolインスタンスを使用するとき、例13-4のメソッドを使用できます。この場合、JMSは新しいOracleOCIConnectionPoolインスタンスをオープンせずに、提供されたOracleOCIConnectionPoolインスタンスを使用してJMS QueueConnectionオブジェクトを作成します。
public javax.jms.Session createSession(boolean transacted,
int ack_mode)
throws JMSException
このメソッドは、Point-to-Point操作とパブリッシュ・サブスクライブ操作の両方をサポートするSessionを作成します。これは新規メソッドで、JMSバージョン1.1仕様をサポートしています。トランザクションおよび非トランザクション・セッションがサポートされています。次のパラメータがあります。
| パラメータ | 説明 |
|---|---|
transacted |
TRUEに設定すると、セッションはトランザクションになります。 |
ack_mode |
コンシューマまたはクライアントが受信したメッセージを認識するかどうかを示します。トランザクション処理のセッションの場合は無視されます。有効な値はSession.AUTO_ACKNOWLEDGE、Session.CLIENT_ACKNOWLEDGEおよびSession.DUPS_OK_ACKNOWLEDGEです。 |
public javax.jms.QueueSession createQueueSession(
boolean transacted, int ack_mode)
throws JMSException
このメソッドはQueueSessionを作成します。トランザクションおよび非トランザクション・セッションがサポートされています。次のパラメータがあります。
| パラメータ | 説明 |
|---|---|
transacted |
TRUEに設定すると、セッションはトランザクションになります。 |
ack_mode |
コンシューマまたはクライアントが受信したメッセージを認識するかどうかを示します。トランザクション処理のセッションの場合は無視されます。有効な値はSession.AUTO_ACKNOWLEDGE、Session.CLIENT_ACKNOWLEDGEおよびSession.DUPS_OK_ACKNOWLEDGEです。 |
public javax.jms.QueueSender createSender(javax.jms.Queue queue)
throws JMSException
このメソッドはQueueSenderを作成します。送信者の作成時にデフォルト・キューが設定されていない場合は、すべての送信操作で宛先キューを指定する必要があります。次のパラメータがあります。
| パラメータ | 説明 |
|---|---|
queue |
宛先キューの名前 |
public void send(javax.jms.Queue queue,
javax.jms.Message message)
throws JMSException
このメソッドは、メッセージをデフォルトの送信オプションでQueueSenderを使用して送信します。この操作では、メッセージのpriority(1)とtimeToLive(infinite)のデフォルト値を使用します。次のパラメータがあります。
| パラメータ | 説明 |
|---|---|
queue |
このメッセージを送信するためのキュー |
message |
送信するメッセージ |
QueueSenderがデフォルト・キューで作成されている場合、必ずしもsend()コールにqueueパラメータを指定する必要はありません。キューがsend()操作で指定されている場合、この値はQueueSenderのデフォルト・キューをオーバーライドします。
QueueSenderがデフォルト・キューを使用しないで作成されている場合、send()コールごとにqueueパラメータを指定する必要があります。
public void send(javax.jms.Queue queue,
javax.jms.Message message,
int deliveryMode,
int priority,
long timeToLive)
throws JMSException
このメソッドは、送信オプションを指定してQueueSenderを使用してメッセージを送信します。次のパラメータがあります。
| パラメータ | 説明 |
|---|---|
queue |
このメッセージを送信するためのキュー |
message |
送信するメッセージ |
deliveryMode |
使用する配信モード |
priority |
このメッセージの優先順位 |
timeToLive |
ミリ秒で指定されるメッセージの保存時間(ゼロは無制限) |
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);
public javax.jms.QueueBrowser createBrowser(javax.jms.Queue queue,
java.lang.String messageSelector)
throws JMSException
このメソッドは、Text、Stream、Objects、BytesまたはMapMessageメッセージ本体を使用するキューに対するQueueBrowserを作成します。次のパラメータがあります。
| パラメータ | 説明 |
|---|---|
queue |
アクセス対象のキュー。 |
messageSelector |
messageSelector式と一致したプロパティを持つメッセージのみが配信されます。 |
java.util.Enumeration内のメソッドを使用して、メッセージのリストを参照してください。
public javax.jms.QueueBrowser createBrowser(javax.jms.Queue queue,
java.lang.String messageSelector,
boolean locked)
throws JMSException
このメソッドは、TextMessage、StreamMessage、ObjectMessage、BytesMessageまたはMapMessageメッセージ本体を使用するキューに対して、ブラウズ中にメッセージをロックするQueueBrowserを作成します。ロックされたメッセージは、ブラウズ・セッションによってトランザクションが終了されるまで、他のコンシューマによって削除できません。次のパラメータがあります。
| パラメータ | 説明 |
|---|---|
queue |
アクセス対象のキュー。 |
messageSelector |
messageSelector式と一致したプロパティを持つメッセージのみが配信されます。 |
locked |
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);
public javax.jms.QueueBrowser createBrowser(javax.jms.Queue queue,
java.lang.String messageSelector,
java.lang.Object payload_factory)
throws JMSException
このメソッドは、Oracleオブジェクト型メッセージ・キューに対するQueueBrowserを作成します。次のパラメータがあります。
| パラメータ | 説明 |
|---|---|
queue |
アクセス対象のキュー。 |
messageSelector |
messageSelector式と一致したプロパティを持つメッセージのみが配信されます。 |
| payload_factory | Oracleのユーザー定義型にマップするJavaクラスのCustomDatumFactoryまたはORADataFactory |
SQLオブジェクト型ペイロードにマップされる特定のJavaクラスに対するCustomDatumFactoryは、静的メソッドgetFactoryを使用して取得できます。
|
注意: CustomDatumは今後のリリースではサポートされなくなります。かわりに、ORADataFactoryペイロード・ファクトリを使用してください。 |
キューtest_queueは、SCOTT.EMPLOYEE型のペイロードを持ち、このOracleオブジェクト型に対してJPublisherによって生成されるJavaクラスがEmployeeであると仮定します。Employeeクラスは、CustomDatumインタフェースを実装します。このクラスに対するCustomDatumFactoryは、Employee.getFactory()メソッドを使用して取得できます。
public javax.jms.QueueBrowser createBrowser(javax.jms.Queue queue,
java.lang.String messageSelector,
java.lang.Object payload_factory,
boolean locked)
throws JMSException
このメソッドは、Oracleオブジェクト型メッセージ・キューに対して、ブラウズ中にメッセージをロックするQueueBrowserを作成します。次のパラメータがあります。
| パラメータ | 説明 |
|---|---|
queue |
アクセス対象のキュー。 |
messageSelector |
messageSelector式と一致したプロパティを持つメッセージのみが配信されます。 |
| payload_factory | Oracleのユーザー定義型にマップするJavaクラスのCustomDatumFactoryまたはORADataFactory |
locked |
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);
public javax.jms.QueueReceiver createReceiver(javax.jms.Queue queue,
java.lang.String messageSelector)
throws JMSException
このメソッドは、標準JMS型メッセージ・キューに対するQueueReceiverを作成します。次のパラメータがあります。
| パラメータ | 説明 |
|---|---|
queue |
アクセス対象のキュー。 |
messageSelector |
messageSelector式と一致したプロパティを持つメッセージのみが配信されます。 |
例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%'");
public javax.jms.QueueReceiver createReceiver(javax.jms.Queue queue,
java.lang.String messageSelector,
java.lang.Object payload_factory)
throws JMSException
このメソッドは、Oracleオブジェクト型メッセージ・キューに対するQueueReceiverを作成します。次のパラメータがあります。
| パラメータ | 説明 |
|---|---|
queue |
アクセス対象のキュー。 |
messageSelector |
messageSelector式と一致したプロパティを持つメッセージのみが配信されます。 |
| payload_factory | Oracleのユーザー定義型にマップするJavaクラスのCustomDatumFactoryまたはORADataFactory |
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());