この章では、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());