Oracle JMS(OJMS)は、OracleデータベースのOracle Streams Advanced Queuing(AQ)機
能へのJMSインタフェースです。OJMSはJMS 1.0.2b仕様を実装し、J2EE 1.3仕様との互換性 があります。OC4JでのOJMSアクセスは、リソース・プロバイダ・インタフェースを介して発 生します。AQとOJMSの詳細は、『Oracle Streamsアドバンスト・キューイング・ユーザー ズ・ガイドおよびリファレンス』を参照してください。
この項の内容は次のとおりです。
■ OJMSをリソース・プロバイダとして使用する方法
■ Oracle Application ServerおよびOracleデータベースとOJMSの併用
OJMS をリソース・プロバイダとして使用する方法 をリソース・プロバイダとして使用する方法 をリソース・プロバイダとして使用する方法 をリソース・プロバイダとして使用する方法
OJMSキューにアクセスする手順は、次のとおりです。
1. データベースにOJMSをインストールして構成します。3-24ページの「JMSプロバイダの インストールと構成」を参照してください。
2. データベース上でRDBMSユーザーを作成して権限を割り当てます。JMSアプリケーショ ンは、このユーザーを使用してバックエンド・データベースに接続します。ユーザーには、
OJMS操作を実行するための権限が必要です。OJMSを使用すると、データベース・ユー ザーは任意のスキーマのキューにアクセスできます。ただし、ユーザーに適切なアクセス 権限がある必要があります。3-25ページの「ユーザーの作成と権限の割当て」を参照して ください。
3. OJMSでJMS Destinationオブジェクトを作成します。3-25ページの「JMS Destination オブジェクトの作成」を参照してください。
4. OC4JのXML構成で、バックエンド・データベースに関する情報を使用して、
<resource-provider>要素でOJMSリソース・プロバイダを定義します。必要に応じ て、データ・ソースまたはLDAPディレクトリ・エントリを作成します。3-26ページの
「OJMSリソース・プロバイダの定義」を参照してください。
5. JNDIルックアップを介して実装内のリソースにアクセスします。3-29ページの「OJMSリ ソースへのアクセス」を参照してください。
JMS プロバイダのインストールと構成 プロバイダのインストールと構成 プロバイダのインストールと構成 プロバイダのインストールと構成
ユーザーまたはDBAが、『Oracle Streamsアドバンスト・キューイング・ユーザーズ・ガイド およびリファレンス』と汎用データベース・マニュアルに従ってOJMSをインストールする必 要があります。このJMSプロバイダをインストールして構成した後に、追加構成を適用する必 要があります。これには、次が含まれます。
1. ユーザーまたはDBAが、JMSクライアントからデータベースへの接続に使用するRDBMS ユーザーを作成する必要があります。このユーザーに、OJMS操作を実行するための適切 なアクセス権限を付与します。3-25ページの「ユーザーの作成と権限の割当て」を参照し てください。
2. ユーザーまたはDBAが、JMS Destinationオブジェクトをサポートするための表と キューを作成する必要があります。3-25ページの「JMS Destinationオブジェクトの作成」
を参照してください。
注意 注意 注意
注意: 次の項では、SQLを使用してキュー、トピック、それぞれの表を作成 し、JMSデモで提供されている権限を割り当てます。JMSデモについては、
次のURLのOTN WebサイトのOC4Jサンプル・コード・ページを参照して
ください。
http://www.oracle.com/technology/tech/java/oc4j/demos/
index.html
Oracle JMS
ユーザーの作成と権限の割当て ユーザーの作成と権限の割当て ユーザーの作成と権限の割当て ユーザーの作成と権限の割当て
JMSクライアントからデータベースへの接続に使用するRDBMSユーザーを作成します。この ユーザーに、OJMS操作を実行するためのアクセス権限を付与します。必要な権限は、必要な 機能に応じて異なります。各種機能に必要な権限の詳細は、『Oracle Streamsアドバンスト・
キューイング・ユーザーズ・ガイドおよびリファレンス』を参照してください。
次の例では、jmsuserを作成します。このユーザーを固有のスキーマ内で作成し、OJMS操作 に必要な権限を付与する必要があります。次の文を実行するには、SYS DBAであることが必要 です。
DROP USER jmsuser CASCADE ;
GRANT connect,resource,AQ_ADMINISTRATOR_ROLE TO jmsuser IDENTIFIED BY jmsuser ;
GRANT execute ON sys.dbms_aqadm TO jmsuser;
GRANT execute ON sys.dbms_aq TO jmsuser;
GRANT execute ON sys.dbms_aqin TO jmsuser;
GRANT execute ON sys.dbms_aqjms TO jmsuser;
connect jmsuser/jmsuser;
ユーザーの必要に応じて、2フェーズ・コミット権限やシステム管理権限など、他の権限の付 与が必要になる場合があります。2フェーズ・コミット権限の詳細は、第7章の「Java Transaction API」を参照してください。
JMS Destination オブジェクトの作成 オブジェクトの作成 オブジェクトの作成 オブジェクトの作成
各JMSプロバイダには、JMS Destinationオブジェクトを作成するための固有のメソッドが必 要です。DBMS_AQADMパッケージとOJMSメッセージ・タイプの詳細は、『Oracle Streamsア ドバンスト・キューイング・ユーザーズ・ガイドおよびリファレンス』を参照してください。
この例では、OJMSには次のメソッドが必要です。
1. JMS Destination(キューまたはトピック)を処理する表を作成します。
OJMSでは、トピックとキューの両方にキュー表が使用されます。JMSの例では、キュー 用に1つの表demoTestQTabが作成されます。
このキュー表を作成するには、次のSQLを実行します。
DBMS_AQADM.CREATE_QUEUE_TABLE(
Queue_table => 'demoTestQTab', Queue_payload_type => 'SYS.AQ$_JMS_MESSAGE', sort_list => 'PRIORITY,ENQ_TIME',
multiple_consumers => false, compatible => '8.1.5');
multiple_consumersパラメータは、複数のコンシューマが存在するかどうかを指定し ます。そのため、キューの場合は常にfalse、トピックの場合は常にtrueです。
2. JMS Destinationを作成します。トピックを作成する場合は、そのトピックの各サブスク ライバを追加する必要があります。JMSの例では、1つのキューdemoQueueが必要です。
注意 注意 注意
注意: OJMSの例で表の作成に使用するSQLは、次のURLのOTN Webサ イトのOC4Jサンプル・コード・ページから入手できるJMSの例に含まれて います。
http://www.oracle.com/technology/tech/java/oc4j/demos/
index.html
次のコマンドでは、キュー表demoTestQTabにキューdemoQueueが作成されます。作成 後に、このキューが起動されます。
DBMS_AQADM.CREATE_QUEUE(
Queue_name => 'demoQueue', Queue_table => 'demoTestQTab');
DBMS_AQADM.START_QUEUE(
queue_name => 'demoQueue');
トピックを追加する場合は、次の例を参照してください。この例は、トピック表
demoTestTTabにトピックdemoTopicを作成する方法を示しています。作成後は、2つ の永続サブスクライバがトピックに追加されます。最後にトピックが起動され、ユーザー にそのトピックに対する権限が付与されます。
DBMS_AQADM.CREATE_QUEUE_TABLE(
Queue_table => 'demoTestTTab', Queue_payload_type => 'SYS.AQ$_JMS_MESSAGE', multiple_consumers => true,
compatible => '8.1.5');
DBMS_AQADM.CREATE_QUEUE( 'demoTopic', 'demoTestTTab');
DBMS_AQADM.ADD_SUBSCRIBER('demoTopic',
sys.aq$_agent('MDSUB', null, null));
DBMS_AQADM.ADD_SUBSCRIBER('demoTopic',
sys.aq$_agent('MDSUB2', null, null));
DBMS_AQADM.START_QUEUE('demoTopic');
OJMS リソース・プロバイダの定義 リソース・プロバイダの定義 リソース・プロバイダの定義 リソース・プロバイダの定義
OJMSリソース・プロバイダを定義するには、Oracle Enterprise Manager 10gを使用する方法 と、XMLファイルを手動で編集する方法があります。次の各項では、それぞれの方法について 説明します。
■ Oracle Enterprise Manager 10gを介したOJMSプロバイダの構成
■ OC4J XMLファイルでのOJMSプロバイダの構成
Oracle Enterprise Manager 10gを介したを介したを介したを介したOJMSプロバイダの構成プロバイダの構成プロバイダの構成プロバイダの構成 OJMSプロバイダは、JMSセク
ションでApplication Server Controlを使用して構成できます。OJMSプロバイダを追加するに
は、「管理」ページの「アプリケーション・デフォルト」列で「JMSプロバイダ」を選択しま す。
「新規新規新規新規JMSプロバイダの追加プロバイダの追加」ボタンをクリックし、各プロバイダの追加プロバイダの追加 JMSプロバイダを構成します。
OJMSまたはサード・パーティのJMSプロバイダを構成できます。OC4Jインストールでは、
トピックとキューを除き、事前構成済のOracleAS JMSが常に提供されます。
注意 注意 注意
注意: Oracle AQでは、DBMS_AQADM.CREATE_QUEUEメソッドを使用して
キューとトピックの両方が作成されます。
注意 注意 注意
注意: ここで定義する名前は、アプリケーションのデプロイメント・ディス クリプタでキューまたはトピックの定義に使用したのと同じ名前にする必要 があります。
注意 注意 注意
注意: OJMSプロバイダとサード・パーティのプロバイダはどちらも構成方 法が同じであるため、この項の説明にはサード・パーティのJMSプロバイダ の構成手順も含まれています。
Oracle JMS
JMSプロバイダのタイプを選択した後、次の情報を指定する必要があります。
■ OJMS: OJMSをインストールして構成するデータベースのデータ・ソース名とJNDIロケー
ションを指定します。
■ サード・パーティのJMSプロバイダ: サード・パーティのプロバイダの名前、JNDI初期コ ンテキスト・ファクトリ・クラスおよびJNDI URLを指定します。このJMSプロバイダに ついてjava.naming.factory.initialおよびjava.naming.provider.urlなどの JNDIプロパティを追加するには、「プロパティの追加プロパティの追加プロパティの追加」をクリックします。行が追加され、プロパティの追加 各JNDIプロパティの名前と値を追加できます。
ここで構成するのはプロバイダのみで、Destinationオブジェクト(トピック、キューおよ びサブスクリプション)は構成しません。
特定のアプリケーション専用のJMSプロバイダを構成するには、「アプリケーション」ページ でアプリケーションを選択し、「リソース」列にスクロールして「JMSプロバイダ」を選択しま す。デフォルトのJMSプロバイダの場合と同じ画面が表示されます。
OC4J XMLファイルでのファイルでのファイルでのファイルでのOJMSプロバイダの構成プロバイダの構成プロバイダの構成プロバイダの構成 <resource-provider>要素内でOJMSプロ バイダを構成します。
■ すべてのアプリケーション(グローバル)に対するJMSプロバイダである場合は、グロー バルのapplication.xmlファイルを構成します。
■ 単一のアプリケーション(ローカル)に対するJMSプロバイダである場合は、アプリケー ションのorion-application.xmlファイルを構成します。
次のコード例に、OJMSにXML構文を使用してJMSプロバイダを構成する方法を示します。
<resource-provider class="oracle.jms.OjmsContext" name="ojmsdemo">
<description> OJMS/AQ </description>
<property name="datasource" value="jdbc/emulatedDS"></property>
</resource-provider>
<resource-provider>要素の属性は、次のとおりです。
■ class属性: OJMSプロバイダはclass属性で構成されている oracle.jms.OjmsContextクラスにより実装されます。
■ name属性: OJMSリソース・プロバイダの名前はojmsdemoです。
また、<property>要素のname/value属性では、OJMSで使用されるデータ・ソースが識別 されます。トピックまたはキューはこのデータ・ソースに接続して、メッセージ操作を容易に する表とキューにアクセスします。この例では、データ・ソースはjdbc/emulatedDSとして 識別されます。
リソース・プロバイダ構成で<property>要素の属性を構成する方法は、アプリケーションの 実行場所に応じて異なります。OJMSを使用し、データベース内のAQにアクセスする場合は、
データ・ソース・プロパティまたはURLプロパティを使用してリソース・プロバイダを構成す る必要があります。ここでは、それぞれの方法について説明します。
■ データ・ソース・プロパティを使用したリソース・プロバイダの構成
■ URLプロパティを使用したリソース・プロバイダの構成
データ・ソース・プロパティを使用したリソース・プロバイダの構成 データ・ソース・プロパティを使用したリソース・プロバイダの構成 データ・ソース・プロパティを使用したリソース・プロバイダの構成 データ・ソース・プロパティを使用したリソース・プロバイダの構成
アプリケーションがOC4J内で実行される場合は、データ・ソースを使用します。データ・
ソースを使用するには、最初に、OJMSプロバイダがインストールされている
data-sources.xmlファイル内で構成する必要があります。JMSトピックおよびキューでは、
メッセージ操作を容易にするためにデータベース表とキューが使用されます。使用するデー タ・ソースのタイプは、必要な機能に応じて異なります。