この章では次の内容を含むリソース・アダプタの管理対象オブジェクトの構成および管理の方法について説明します。
この項では次の内容を含む、リソース・アダプタとともに使用される管理対象オブジェクトについて説明します。
管理対象オブジェクトとは、リソース・アダプタとともに提供され、そのリソース・アダプタとともにアプリケーション・コンポーネントによって使用されるJavaオブジェクトのユーティリティです。リソース・アダプタは管理対象オブジェクトを提供する場合と提供しない場合があります。一般に、管理対象オブジェクトはメッセージ機能に使用され、個々のメッセージ・スタイルやメッセージ・プロバイダに特有なものです。たとえば、Java Message System(JMS)のAPIを通してメッセージをOracleのアドバンスト・キューイングに同期的に送受信するために、JMSのキュー・オブジェクトが必要となる場合があります。Oracle J2CAの管理対象オブジェクトは、JMS環境において定義されるキュー・オブジェクトのように、他の場所で定義されたエンティティ用のプレースホルダとして機能します。(管理対象オブジェクトは非同期のメッセージ機能には必要なく、「リソース・アダプタ構成の理解」の説明のように、その設定にはアクティブ化仕様JavaBeansがかわりに関与します。)
管理対象オブジェクトのクラスはリソース・アダプタ・プロバイダによって提供されます。それぞれのクラスはいくつかの適切な標準的なインタフェースを実装するJavaBeansのクラスである必要があります。管理対象オブジェクトの構成は次のことを含みます。
デプロイ用のra.xml
ファイルを通してリソース・アダプタ・プロバイダによって行われるか、後にApplication Server Controlを通してOC4Jの管理者によって行われるプロパティの設定
アプリケーション・コンポーネントによる検索のために、Application Server Controlを通して行われるJNDIへのオブジェクトのバインディング
後述の項では、2つの特定の種類の管理対象オブジェクトの例を説明します。さらに多くの例が可能です。
CCIのInteractionSpec
インタフェースは相互作用のためのプロパティを保持するメカニズムを提供します。(相互作用およびCCIのInteraction
の詳細は、「J2EE Connector Architectureのインタフェース・ライブラリ」を参照してください。)相互作用仕様の実装はEISのファンクション名およびInteraction Verbを含む標準的なプロパティをサポートする必要があります。Interaction Verbは、相互作用の実行結果としてデータ・レコードを同期的に受信するか、データ・レコードを同期的に送信するか、両方を行うかを指定します。相互作用オブジェクトに結果セットの要件(たとえばフェッチ・サイズ)についての情報を提供する標準的なプロパティもあります。
相互作用仕様のインスタンスはオプションで管理対象オブジェクトとして登録されることが可能であり、それによってアプリケーション・コンポーネントはデプロイ中に指定された標準的なリソース環境参照を通してJNDIネームスペースで管理対象オブジェクトを検索できます。
その他の情報は、J2EE Connector Architecture Specificationのバージョン1.5を参照してください。
JMSには2つの操作モードがあり、それらはパブリッシュ/サブスクライブおよびPoint-to-Pointと呼ばれます。パブリッシュ/サブスクライブ・モードはJMSで定義されるトピック・オブジェクトを使用し、Point-to-PointモードはJMSで定義されるキュー・オブジェクトを使用します。J2EE Connector Architectureにおいてこれらのメッセージ機能のモードは、管理対象オブジェクトがトピック用のプレースホルダおよびキュー用のプレースホルダとしてそれぞれ機能するように使用されることに関連します。これらの管理対象オブジェクトは、JMSクライアントによる使用のために管理者により作成されますが、JMS用の構成情報を指定するための便利な方法を提供します。
Point-to-Pointメッセージ機能はメッセージのキューを使用し、クライアントは1つのキューにメッセージを送信し、一般にそのすべてのメッセージを1つのキューから配信します。ほとんどのキューは管理者によって作成された静的リソースです。JMSはクライアントがどのようにメッセージをキューに送信し、どのようにキューからメッセージを受信するかについて定義しています。
パブリッシュ/サブスクライブ・メッセージ機能はメッセージ・トピックを使用しており、それぞれのトピックは考えられるメッセージ・サブジェクトの階層のノードを表しています。パブリッシュ/サブスクライブ・モデルは、JMSクライアントがメッセージをトピックにどのように公開できるか、またはJMSクライアントがトピックからのメッセージにどのようにサブスクライブできるかについて指定しています。JMSにおいて、トピック・オブジェクトはより具体的にはブローカのように機能しており、それに対して公開されたメッセージを採取し、必要に応じてサブスクライバにメッセージを配布します。パブリッシャとサブスクライバはお互いに独立しており、パブリッシャおよびサブスクライバが追加されたり削除されたりするとトピック・エンティティは自動的に調整します。
トピックはjavax.jms.Topic
インタフェースを実装するクラスのインスタンスによって表されています。キューはjavax.jms.Queue
インタフェースを実装するクラスのインスタンスによって表されています。それぞれはプロバイダ固有のメッセージ宛先アドレスをカプセル化しています。より具体的には、Topic
オブジェクトはプロバイダ固有のトピック名をカプセル化し、一方Queue
オブジェクトはプロバイダ固有のキュー名をカプセル化しています。管理対象オブジェクトとして、トピックとキューはプロバイダ固有の構成情報もまた含んでいます。
Topic
およびQueue
インタフェースはJNDIに依存しませんが、JNDIを使用してTopic
およびQueue
インスタンスをバンドし検索することがJMSの規則となっています。トピックおよびキューはこの章の後の方の例に使用されています。
注意: トピックとキューは同時使用をサポートしています。 |
管理対象オブジェクトは次のJMSトピックおよびJMSキューの例にあるように、一般にリソース・アダプタ・プロバイダによってデプロイ用にra.xml
ファイル内に構成されます。<adminobject>
要素は<resourceadapter>
要素のサブ要素です。
<connector ... > ... <resourceadapter> ... <!-- Queue admin object --> <adminobject> <adminobject-interface>javax.jms.Queue</adminobject-interface> <adminobject-class> oracle.j2ee.ra.jms.generic.AdminObjectQueueImpl </adminobject-class> <config-property> <config-property-name>jndiName</config-property-name> <config-property-type>java.lang.String</config-property-type> <config-property-value>MQQ</config-property-value> </config-property> <config-property> <config-property-name>resourceProviderName</config-property-name> <config-property-type>java.lang.String</config-property-type> <config-property-value>MQSeries</config-property-value> </config-property> </adminobject> <!-- Topic admin object --> <adminobject> <adminobject-interface>javax.jms.Topic</adminobject-interface> <adminobject-class> oracle.j2ee.ra.jms.generic.AdminObjectTopicImpl </adminobject-class> <config-property> <config-property-name>jndiName</config-property-name> <config-property-type>java.lang.String</config-property-type> <config-property-value>MQT</config-property-value> </config-property> <config-property> <config-property-name>resourceProviderName</config-property-name> <config-property-type>java.lang.String</config-property-type> <config-property-value>MQSeries</config-property-value> </config-property> </adminobject> ... </resourceadapter> ... </connector>
<adminobject-class>
要素は管理対象オブジェクト・クラスを指定し、<adminobject-interface>
要素はこのクラスが実装するインタフェースを指定します。
<config-property>
要素とそのサブ要素は管理対象オブジェクトのプロパティの名前、タイプおよびデプロイ済の値を指定します。
この例においてはキュー用にJMSのQueue
インタフェースがAdminObjectQueueImpl
クラスによって実装されています。この管理対象オブジェクトは次のプロパティを持っています。
jndiName
: タイプはString
、デプロイ済の値はMQQ
resourceProviderName
: タイプはString
、デプロイ済の値はMQSeries
この例においてはトピック用にJMSのTopic
インタフェースがAdminObjectTopicImpl
クラスによって実装されています。この管理対象オブジェクトは次のプロパティを持っています。
jndiName
: タイプはString
、デプロイ済の値はMQT
resourceProviderName
: タイプはString
、デプロイ済の値はMQSeries
(次の項、「OC4Jにおける管理対象オブジェクトのバインドと編集」に説明されているように、デプロイ済の値は後でApplication Server Controlで変更可能です。)
注意: OC4Jの起動時および再起動時に加えて、リソース・アダプタのデプロイ中にもOC4Jは構成済のプロパティ値を使用してそれぞれの管理対象オブジェクトをインスタンス化します。 |
OC4Jにおいて管理対象オブジェクトを使用するためには、最初にApplication Server Controlの「作成」機能を使用してそれをJNDIロケーションにバインドする必要があります。プロパティ値はこのとき、または後に編集できます。変更はリソース・アダプタが再起動するときに有効になります。続く項では関連する手順について説明します。
OC4Jはそれぞれの管理対象オブジェクトをJNDIネームスペースにバインドします。リソースがjava:comp/env
から直接見えるようにするには、適切なリソース参照が存在する必要があります。Webモジュール用のweb.xml
ファイルかEJBモジュール用のejb-jar.xml
ファイルの<resource-ref>
要素を使用してこれを行うことができます。しかし、このようなリソース参照がなくても、管理対象オブジェクトをバインドするときに指定するJNDIロケーションによって検索を行うことができます。
管理対象オブジェクトを使用するためには、Application Server Controlコンソールで次の手順を行い、それを作成してバインドする必要があります。
適切な「リソース・アダプタ」ホームページから「管理対象オブジェクト」タブに移動します。
「作成」機能を選択します。
「管理対象オブジェクトの作成」ページが表示されたら、管理対象オブジェクトのクラスを選択します。使用可能なクラスのリストはra.xml
ファイルの<adminobject-class>
要素によります。
次の「管理対象オブジェクトの作成」ページでJNDIロケーションを指定します。
オプションで構成プロパティ用に任意の新しい値を指定します。使用可能な構成プロパティのリストとそれらの初期値は、選択する管理対象オブジェクトのクラスのra.xml
の構成によります。
変更を適用します。
Application Server Controlオンライン・ヘルプの「管理対象オブジェクトの作成 - クラスの選択」ページおよび「管理対象オブジェクトの作成」ページに関する状況依存トピックも参照してください。
管理対象オブジェクトを作成してバインドするとき、OC4Jはoc4j-connectors.xml
ファイル内に適切なエントリを作成します。それぞれの管理対象オブジェクト用に、OC4Jはトップレベルの<connector>
要素のサブ要素である<adminobject-config>
要素を書き込みます。<adminobject-config>
要素は次のものを含みます。
JNDIロケーション用のlocation
属性です。たとえば次のものがあります。
<adminobject-config location="mqjms/MyQ" >
実装するクラスの名前用の<adminobject-class>
サブ要素です。たとえば次のものがあります。
<adminobject-class> oracle.j2ee.ra.jms.generic.AdminObjectQueueImpl </adminobject-class>
name
およびvalue
属性を持つ管理対象オブジェクトのそれぞれのプロパティ用の<config-property>
サブ要素です。たとえば次のものがあります。
<config-property name="jndiName" value="MQQ" /> <config-property name="resourceProviderName" value="MQSeries" />
表7-1は、Application Server Controlプロパティと、oc4j-connectors.xml
ファイルの<adminobject-config>
要素の対応する属性およびサブ要素との相関を要約しています。
表7-1 管理対象オブジェクトのJNDIロケーションおよび構成プロパティ
Application Server Controlプロパティ | 対応するXMLエンティティ | 説明 |
---|---|---|
オブジェクト・クラス |
|
管理対象オブジェクトを表すJavaBeansクラスです。 |
JNDIロケーション |
|
管理対象オブジェクト・インスタンスのJNDIロケーションです。 |
名前(構成プロパティの下) |
|
管理対象オブジェクトの構成プロパティの名前です。 |
値(構成プロパティの下) |
|
管理対象オブジェクトの構成プロパティの値です。 |
注意: ra.xml ファイルに定義されている任意の管理対象オブジェクト・タイプ用に複数の管理対象オブジェクトを作成してバインドできます。 |
以前に作成した管理対象オブジェクトのプロパティ値を編集できます。既存の管理対象オブジェクトは、そのJNDIロケーションによって識別されます(ロケーションの変更はできません)。
Application Server Controlコンソールで次の手順を行います。
適切な「リソース・アダプタ」ホームページの「管理対象オブジェクト」タブに移動します。
編集する管理対象オブジェクトのJNDIロケーションを選択します。
「管理対象オブジェクト」ページが表示されたら、管理対象オブジェクトの構成プロパティを表示します。さらに、希望する編集可能な構成プロパティに対して新しい値を指定します。
変更を適用します。
Application Server Controlオンライン・ヘルプの「管理対象オブジェクト」ページに関する状況依存トピックも参照してください。
先に説明したように、管理対象オブジェクトが一度デプロイされ、構成されると、それらはJNDIルックアップを通してアプリケーション・コンポーネントによってアクセスされます。
この章の前の方のJMSトピックおよびJMSキューの説明をさらに詳しく検討してみます。ここではトピックおよびキュー用の管理対象オブジェクトが、JNDIロケーションであるmqjms/MyT
およびmqjms/MyQ
とともにそれぞれデプロイされたと仮定します。
さらに、そのトピックおよびキューは、web.xml
ファイルの次のリソース環境参照マッピングとともにサーブレットにおいて使用されると仮定します。
<web-app ... > ... <resource-env-ref> <resource-env-ref-name>jms/TOPIC1</resource-env-ref-name> <resource-env-ref-type>javax.jms.Topic</resource-env-ref-type> </resource-env-ref> <resource-env-ref> <resource-env-ref-name>jms/QUEUE1</resource-env-ref-name> <resource-env-ref-type>javax.jms.Queue</resource-env-ref-type> </resource-env-ref> ... </web-app>
orion-web.xml
ファイルに反映されるように、Webモジュール構成がApplication Server Controlなどを通して次のようなマッピングになると仮定します。
<orion-web-app ...> ... <resource-env-ref-mapping name="jms/QUEUE1" location="mqjms/MyQ" /> <resource-env-ref-mapping name="jms/TOPIC1" location="mqjms/MyT" /> ... </orion-web-app>
前述のエントリは(mqjms/MyQ
のような)実際のJNDIロケーションを(jms/QUEUE1
のような)論理JNDIロケーションにマップします。これらのエントリによって、サーブレットはトピックを次のように検索できます。
InitialContext ic = new InitialContext(); Topic ourT = (Topic)ic.lookup("java:comp/env/jms/TOPIC1");
また、サーブレットはキューを次のように検索できます。
InitialContext ic = new InitialContext(); Queue ourQ = (Queue)ic.lookup("java:comp/env/jms/QUEUE1");