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());