日本語PDF

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の共有インタフェース」を参照してください。

ユーザー名/パスワードが設定されたConnectionの作成

public javax.jms.Connection createConnection(
             java.lang.String username,
             java.lang.String password)
      throws JMSException

このメソッドは、指定されたユーザー名とパスワードを使用して、Point-to-Point操作とパブリッシュ/サブスクライブ操作の両方をサポートするコネクションを作成します。これは新規メソッドで、JMSバージョン1.1仕様をサポートしています。次のパラメータがあります。

パラメータ 説明

username

キュー用にデータベースに接続するユーザー名

password

サーバーへの接続を作成するためのパスワード

コネクションの確立: デフォルトのConnectionFactoryパラメータの使用

public javax.jms.Connection createConnection()
      throws JMSException

このメソッドは、デフォルトのConnectionFactoryパラメータを使用して、Point-to-Point操作とパブリッシュ・サブスクライブ操作の両方をサポートするコネクションを作成します。これは新規メソッドで、JMSバージョン1.1仕様をサポートしています。ConnectionFactoryプロパティにデフォルトのユーザー名およびパスワードを含めないと、JMSExceptionが発生します。

ユーザー名/パスワードが設定されたQueueConnectionの作成

public javax.jms.QueueConnection createQueueConnection(
             java.lang.String username,
             java.lang.String password)
      throws JMSException

このメソッドは、指定されたユーザー名とパスワードを使用してキュー・コネクションを作成します。次のパラメータがあります。

パラメータ 説明

username

キュー用にデータベースに接続するユーザー名

password

サーバーへの接続を作成するためのパスワード

例13-1 ユーザー名/パスワードが設定されたQueueConnectionの作成

QueueConnectionFactory qc_fact = AQjmsFactory.getQueueConnectionFactory(
   "sun123", "oratest", 5521, "thin");
QueueConnection qc_conn = qc_fact.createQueueConnection("jmsuser", "jmsuser");

QueueConnectionの確立: オープンしているJDBCコネクションの使用

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

QueueConnectionの確立: デフォルトのConnectionFactoryパラメータの使用

public javax.jms.QueueConnection createQueueConnection()
      throws JMSException

このメソッドは、デフォルトのConnectionFactoryパラメータによってキュー・コネクションを確立します。QueueConnectionFactoryのプロパティにデフォルトのユーザー名およびパスワードを含めないと、JMSExceptionが発生します。

QueueConnectionの確立: オープンしているOracleOCIConnectionPoolの使用

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オブジェクトを作成します。

例13-4 QueueConnectionの確立: オープンしているOracleOCIConnectionPoolの使用

OracleOCIConnectionPool cpool; /* previously created OracleOCIConnectionPool */
QueueConnection qc_conn = AQjmsQueueConnectionFactory.createQueueConnection(cpool);

セッションの作成

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_ACKNOWLEDGESession.CLIENT_ACKNOWLEDGEおよびSession.DUPS_OK_ACKNOWLEDGEです。

QueueSessionの作成

public javax.jms.QueueSession createQueueSession(
   boolean transacted, int ack_mode)
        throws JMSException

このメソッドはQueueSessionを作成します。トランザクションおよび非トランザクション・セッションがサポートされています。次のパラメータがあります。

パラメータ 説明

transacted

TRUEに設定すると、セッションはトランザクションになります。

ack_mode

コンシューマまたはクライアントが受信したメッセージを認識するかどうかを示します。トランザクション処理のセッションの場合は無視されます。有効な値はSession.AUTO_ACKNOWLEDGESession.CLIENT_ACKNOWLEDGEおよびSession.DUPS_OK_ACKNOWLEDGEです。

例13-5 トランザクションQueueSessionの作成

QueueConnection qc_conn;
QueueSession  q_sess = qc_conn.createQueueSession(true, 0);

QueueSenderの作成

public javax.jms.QueueSender createSender(javax.jms.Queue queue)
                                   throws JMSException

このメソッドはQueueSenderを作成します。送信者の作成時にデフォルト・キューが設定されていない場合は、すべての送信操作で宛先キューを指定する必要があります。次のパラメータがあります。

パラメータ 説明

queue

宛先キューの名前

メッセージの送信: デフォルトの送信オプションのQueueSenderの使用

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パラメータを指定する必要があります。

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

メッセージの送信: 送信オプションを指定したQueueSenderの使用

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

QueueBrowserの作成: 標準JMS型メッセージ

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内のメソッドを使用して、メッセージのリストを参照してください。

関連項目:

MessageSelector

例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'");

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を作成します。ロックされたメッセージは、ブラウズ・セッションによってトランザクションが終了されるまで、他のコンシューマによって削除できません。次のパラメータがあります。

パラメータ 説明

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

QueueBrowserの作成: Oracleオブジェクト型メッセージ

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()メソッドを使用して取得できます。

注意:

シャード・キューは、オブジェクト型メッセージをサポートしていません。

関連項目:

MessageSelector

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

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を作成します。次のパラメータがあります。

パラメータ 説明

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

QueueReceiverの作成: 標準JMS型メッセージ

public javax.jms.QueueReceiver createReceiver(javax.jms.Queue queue,
                                              java.lang.String messageSelector)
                                       throws JMSException

このメソッドは、標準JMS型メッセージ・キューに対するQueueReceiverを作成します。次のパラメータがあります。

パラメータ 説明

queue

アクセス対象のキュー。

messageSelector

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%'");

QueueReceiverの作成: Oracleオブジェクト型メッセージ

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()メソッドを使用して取得できます。

注意:

シャード・キューは、オブジェクト型メッセージをサポートしていません。

関連項目:

MessageSelector

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