ヘッダーをスキップ

Oracle Containers for J2EE サービス・ガイド
10g(10.1.3.1.0)

B31858-01
目次
目次
索引
索引

戻る 次へ

4 Oracle Enterprise Messaging Serviceの使用

Oracle Enterprise Messaging Service(OEMS)は、分散アプリケーションを構築および統合するための強力なメッセージ・プラットフォームです。OEMSにより、Oracleのメッセージ機能とメッセージ統合ソリューションのためのフレームワークが提供されます。

OEMSを構成する主要機能は、次のとおりです。

この章では、これらすべての機能について説明します。OEMS機能のうち、この章で取り上げていないのは、メッセージ・ゲートウェイのみです。メッセージ・ゲートウェイの詳細は、『Oracle Streamsアドバンスト・キューイング・ユーザーズ・ガイドおよびリファレンス』を参照してください。


注意

旧リリースでは、メモリー内、ファイル・ベースおよびデータベースの各永続性オプションを説明する際に、OracleAS JMSおよびOJMSという用語を使用していました。OracleAS JMSはメモリー内およびファイル・ベースのオプションを示し、OJMSはStreams Advanced Queuing(AQ)のJMSインタフェースを示していました。

JMSに関する混乱を避けるため、OracleAS JMSおよびOJMSという用語は使用されません。かわりに、OEMS JMSという用語が使用されます。これは、オラクル社が、メッセージの永続性に関する3つのオプションに対して単一のJMSインタフェースを提供しているという事実を反映しています。3つのサービス品質オプションの間でメッセージの永続性を変更するのであれば、JMSアプリケーション・コードを変更する必要はありません。 


この章には、次の項目が含まれます。

JMSタスク

この章では、次のJMSタスクについて説明します。

JMSの新機能

次のOC4J JMSの機能および動作は、今回のリリースの新機能です。

JMSについて

JavaクライアントおよびJava中間層サービスでは、エンタープライズ・メッセージ・システムを使用できる必要があります。Java Message Service(JMS)は、Javaプログラムに、これらのシステムにアクセスする共通の方法を提供します。JMSは、アプリケーション・コンポーネント間でデータを渡すための標準のメッセージAPIで、異機種間環境およびレガシー環境でのビジネス統合を可能にします。

この章の内容を理解するには、JMSとJMS APIに関する基本的な知識が必要です。チュートリアルやAPIドキュメントなど、JMSに関する基本情報は、Sun社の次のWebサイトを参照してください。

http://java.sun.com/products/jms/index.jsp

JMSには、次の2つのメッセージ・ドメインがあり、それぞれJMS宛先タイプおよびドメイン固有のJavaインタフェースのセットに関連付けられています。

JMS宛先オブジェクトは、JNDI環境にバインドされ、J2EEアプリケーションで使用可能になります。

それぞれのメッセージ・ドメインに対応する2つのメッセージ・インタフェース・セット以外に、JMS 1.1以上では、ドメイン非依存のアプリケーション・コードを実装するための共通インタフェース・セットも提供しています。この共通インタフェース・セットでは、2つのメッセージ・ドメインの動作が個別に管理されますが(この動作は、JMS宛先タイプとの関連付けに応じて、使用されるメッセージ・ドメインによって制御されます)、両方のメッセージ・ドメインに対して共通のプログラミング・インタフェースが提供されます。この共通インタフェース・セットに属するインタフェースと、ドメイン固有のインタフェースとの関連は、JMS 1.1仕様の表2-1を参照してください。

下位互換性

新しいJMSアプリケーションをデプロイする場合は、J2CA 1.5仕様に基づいており、J2EE 1.4標準に規定されているJMSコネクタを使用することをお薦めします。このマニュアルでは、OracleASで導入された新機能について説明します。ただし、オラクル社では、OracleASの旧リリースでサポートされていた独自仕様のOC4Jリソース・プロバイダを通じてデプロイされたJMSアプリケーションのサポートも継続しています。

Oracle JMSコネクタの詳細は、「JMSコネクタ」を参照してください。

JMSのHow-Toドキュメントおよびデモ・セット

How-Toドキュメントおよび使用例のセット(コメント付き構成ファイルを含む)は、How-To Webサイト(http://www.oracle.com/technology/tech/java/oc4j/1013/how_to/index.html)で入手できます。

JMSドキュメントとデモ・セットは、「Messaging(JMS)」という見出しの下にリストされています。デモ・セットのドキュメントおよびデプロイメント・ディスクリプタ・ファイルは、リソース・プロバイダごとに編成されており、サポート対象の様々なリソース・プロバイダに必要とされる各種の構成が含まれます。関連するリソース・プロバイダに適用されるファイルを解凍して使用してください。

JMS構成の概要

この項では、次のJMS構成の概要について説明します。

このOEMSドキュメントと、関連デモおよびHow-Toドキュメントでは、サポートされる様々なリソース・プロバイダと組み合せてJMSコネクタを使用する方法について、特にOEMS JMSのメモリー内およびファイル・ベースの永続性オプションに重点を置いて説明します。

JMS構成の順序

この項では、JMS操作のために次のコンポーネントを準備する方法について説明します。

リソース・プロバイダのセットと、一致するJMSコネクタのセットという形式で、コネクション・ファクトリおよび宛先オブジェクトの一致セットを作成できます(必須ではありません)。または、JMSコネクタの宛先の一致セットを作成せずに、自動宛先ラッピング機能を使用することもできます。

アプリケーションの開発と構成

JMSメッセージ機能を使用するアプリケーションを開発および構成するためのタスクは、次のとおりです。

詳細は、デモ・セットに含まれるHow-Toドキュメントを参照してください。How-Toドキュメントおよびデモ・セットと、そのURLのリストは、「JMSのHow-Toドキュメントおよびデモ・セット」を参照してください。

リソース・プロバイダの構成

アプリケーション・コンポーネント開発者とアプリケーション・アセンブラは、複数のコネクション・ファクトリおよび宛先を開発に使用するため、リソース・プロバイダの構成は、複数の作業に分割されるのが普通です。通常、開発時のコネクション・ファクトリと宛先は、デプロイ時のものとは異なります。開発サーバーと本番サーバーは、別個のマシンであることが普通であり、異なる組織方針に基づいて構成されるためです(場合によっては、異なるリソース・プロバイダが使用されることもあります)。このドキュメントでは、本番のデプロイに重点を置いて説明します。

リソース・プロバイダを構成する場合、次のことを決定する必要があります。

詳細は、デモ・セットのHow-Toドキュメントを参照してください。How-Toドキュメントおよびデモ・セットと、そのURLのリストは、「JMSのHow-Toドキュメントおよびデモ・セット」を参照してください。

JMSコネクタの構成

OEMSへのJMSコネクタ機能の導入により、様々なリソース・プロバイダの仕様からの独立が部分的に実現しています。J2CA 1.5仕様に基づくJMSコネクタは、リソース・プロバイダに対して、互換レイヤーおよび機能付加型のラッパーとして動作します。

JMSコネクタを構成するためのタスクは、次のとおりです。

詳細は、デモ・セットに含まれるHow-Toドキュメントを参照してください。How-Toドキュメントおよびデモ・セットと、そのURLのリストは、「JMSのHow-Toドキュメントおよびデモ・セット」を参照してください。

追加情報および使用例

oc4j-connectors.xmloc4j-ra.xmlおよびra.xmlファイルの具体的な使用例は、http://www.oracle.com/technology/tech/java/oc4j/1013/how_to/index.htmlを参照してください。

JMSコネクタのXMLファイルのリファレンス情報は、『Oracle Containers for J2EEリソース・アダプタ管理者ガイド』の付録A「OC4Jリソース・アダプタ構成ファイル」を参照してください。

次に、「How to Configure and Use Oracle's Generic JMS Resource Adapter with OracleAS JMS」と、対応するデモ・ファイルのセットを含むZIPファイルへのリンクを示します。これらのドキュメントに記載されている汎用JMSリソース・アダプタ(Generic JMS Resource Adapter)という用語は、JMSコネクタのことです。

JMS構成ファイルの構造

この項では、コネクション・ファクトリおよび宛先について、JMS構成ファイル内の参照と定義の間に存在する必要のある整合性について説明します。図4-1「JMS構成」に、相互に一致する必要のある参照と定義を示します。

図4-1    JMS構成


図4-1は、Javaソース・コード、アプリケーション・デプロイメント・ディスクリプタ、リソース・アダプタ・デプロイメント・ディスクリプタおよびリソース・プロバイダ間の様々なリンクを示しています。各矢印の元にはリンク参照があり、各矢印の先には参照されるアイテムのリンク・キー(名前、JNDIロケーションまたはJavaインタフェース)があります。任意の矢印の先にあるリンク・キーと、矢印の元にあるリンク参照のテキスト表現は、特に指定のないかぎり常に同じになります。

構成ファイルは次のとおりです。

デモ・セットには、図4-1「JMS構成」に示されている関係の詳細な説明が含まれます。How-Toドキュメントおよびデモ・セットと、そのURLのリストは、「JMSのHow-Toドキュメントおよびデモ・セット」を参照してください。

関連するHow-To-gjra-with-xxx.zipファイル(xxxは関連するリソース・プロバイダの名前)をダウンロードして解凍します。

関連するhow-to-gjra-with-xxx.htmlドキュメントを開きます。この項の説明は、アイテム間の関係について記載したHow-Toドキュメントの項に対応します。

デモ・セットにも、Javaコードおよびデプロイメント・ディスクリプタのXMLファイルの使用例が含まれます。

Javaソース・コード

J2EEアプリケーションのJavaソース・コードでは、通常、JMSリソースを参照するために論理名を使用します。論理名(<resource-ref>および<message-destination-ref>要素で宣言される参照)は、環境エントリのタイプであり、すべての環境エントリは、JNDIサブコンテキストのjava:comp/env/に配置されます。詳細は、関連するHow-Toドキュメントの「Application Component Provider Task #3: Use Logical Names for JMS Resources」を参照してください。

図4-1には、Javaソース・コードからJ2EEアプリケーション・コンポーネント・デプロイメント・ディスクリプタに向かう次の2つのタイプのリンクがあります。次にリストする各説明の番号は、図のリンク番号に対応しています。

J2EEアプリケーション・コンポーネント・デプロイメント・ディスクリプタ(application-client.xml、ejb-jar.xml、web.xml)

アプリケーション・コンポーネント・プロバイダによって使用される論理名は、物理宛先と多対1の関係にあります。アプリケーション・アセンブラは、物理宛先と1対1の関係にある論理宛先を作成します。次に、アプリケーション・アセンブラは、自身が作成したメッセージ宛先に、アプリケーション・コンポーネント・プロバイダが作成したメッセージ宛先参照およびMDBをリンクする必要があります。これを行うには、適切なメッセージ宛先を名付ける<message-destination-link>要素を追加します。これらのリンクは、宛先チェーンの一部ではありませんが、これにより宛先チェーンを完成するために必要な情報がデプロイヤに提供されます。詳細は、関連するhow-to-gjra-with-xxx.htmlドキュメント(xxxは関連するリソース・プロバイダの名前)の「Application Assembler Task #2: Link to Message Destinations」を参照してください。

図4-1には、J2EEアプリケーション・コンポーネント・デプロイメント・ディスクリプタ内で完結する次の2つのタイプのリンクがあります。

OC4J固有のアプリケーション・コンポーネント・デプロイメント・ディスクリプタ(orion-application-client.xml、orion-ejb-jar.xml、orion-web.xml)

図4-1には、OC4J固有のアプリケーション・コンポーネント・デプロイメント・ディスクリプタから別のファイルに向かう次の7つのタイプの参照があります。

oc4j-connectors.xml

JMSコネクタの宛先は、リソース・プロバイダ(RP)の宛先のラッパーとして機能します。JMSコネクタでRPの宛先をルックアップするには、JMSコネクタが、RPの宛先のJNDIロケーションを特定できる必要があります。

詳細および使用例は、関連するHow-Toドキュメントの「Resource Adapter Task #4: Create RA Destinations」を参照してください。リソース・プロバイダの宛先の作成方法は、関連するHow-Toドキュメントの「Configuring the Resource Provider」を参照してください。

図4-1には、oc4j-connectors.xmlに定義されたJMSコネクタの宛先をRPの宛先に関連付ける次の2つのタイプのリンクがあります。

oc4j-ra.xml

JMSコネクタのコネクション・ファクトリは、リソース・プロバイダ(RP)のコネクション・ファクトリのラッパーとして機能します。JMSコネクタでRPのコネクション・ファクトリをルックアップするには、JMSコネクタが、RPのコネクション・ファクトリのJNDIロケーションを特定できる必要があります。

詳細および使用例は、関連するHow-Toドキュメントの「Resource Adapter Task #3: Create RA Connection Factories」を参照してください。リソース・プロバイダのコネクション・ファクトリの作成方法は、関連するHow-Toドキュメントの「Configuring the Resource Provider」を参照してください(ただし、これらのコネクション・ファクトリがすべて自動的に前もって作成されるOEMS JMSのデータベースの永続性オプションは除きます)。

図4-1には、oc4j-ra.xmlに指定されたJMSコネクタのコネクション・ファクトリの実装を定義し、それらをRPのコネクション・ファクトリに関連付ける次の3つのタイプのリンクがあります。

ra.xml

JMSコネクタを使用する場合、ra.xmlファイルのほとんどの内容は変更する必要がありません。ra.xmlファイルは、J2EE Connector Architecture 1.5のスキーマ・ファイル(JMS以外のリソース・アダプタも含め、多くのタイプのリソース・アダプタと連携するよう設計されている汎用スキーマ)に基づいているためです。

詳細および使用例は、関連するHow-Toドキュメントの「Resource Adapter Task #1: Customize the ra.xml File」を参照してください。

図4-1には、デフォルトのJMSコネクタのコネクション・ファクトリ設定をra.xmlに定義する次の2つのタイプのリンクがあります。

アプリケーション・クライアントのJMSコネクタの省略

JMSコネクタによって提供されるほとんどの機能は、アプリケーション・クライアントに適用されません。アプリケーション・クライアントをできるかぎり軽量化するため、アプリケーション・クライアントでJMSコネクタを使用しないよう選択できます。JMSコネクタを使用しない場合、JMSコネクタにのみ必要なJARファイルをクラスパスに含める必要はありません(JMSコネクタに必要なJARファイルのリストは表4-9を参照してください)。

JMSコネクタを使用しないアプリケーション・クライアントは、JMSコネクタを使用するアプリケーション・コンポーネントと通信できます(ただし、基礎となるリソース・プロバイダ(RP)の宛先が両方のコンポーネントで同じである必要があります)。JMSコネクタの省略は、次のようにorion-application-client.xmlファイルでJMSコネクタのリソースではなくリソース・プロバイダのリソースを参照することで行います。

  1. JMSコネクタのコネクション・ファクトリの省略

    <resource-ref-mapping>要素ごとに、そのlocation属性の値を次のように設定します。

     java:comp/resource/providerName/resourceName
    

    ここで、providerNameは、図4-1「JMS構成」の矢印番号18のリンク・キーと同じであり、resourceNameは、図3-1の矢印番号16のリンク・キーと同じです。 これにより、図3-1の矢印番号6、18、16が、RPのコネクション・ファクトリへの直接リンクで置き換えられ、JMSコネクタのoc4j-ra.mxlおよびra.xmlファイルが省略されます。

  2. JMSコネクタの宛先の省略

    <message-destination-ref-mapping>要素ごとに、そのlocation属性の値を次のように設定します。

     java:comp/resource/providerName/resourceName
    

    ここで、providerNameは、図4-1「JMS構成」の矢印番号12のリンク・キーと同じであり、resourceNameは、図3-1の矢印番号13のリンク・キーと同じです。 これにより、図3-1の矢印番号7、12、13が、RPの宛先への直接リンクで置き換えられ、JMSコネクタのoc4j-connectors.xmlファイルが省略されます。

JNDIに直接アクセスする一部のサード・パーティ・ツールまたはライブラリには、java:comp/resource構文や特定のリソース・プロバイダの特殊な名前(Queues/接頭辞やOEMS JMSのデータベース・オプションで使用されるその他の接頭辞など)を許可しない厳密なロケーション制限または検証ルールが存在する場合があります。その場合、JMSコネクタは省略できません。(一般的に、この制限は、OEMS JMSのメモリー内およびファイル・ベースのオプションには適用されません。これらのリソースについては、JNDIルックアップ単独でresourceNameを使用できるためです。つまり、

 java:comp/resource/providerName/

という接頭辞は、OEMS JMSのメモリー内またはファイル・ベースのオプションの使用時には、単なるオプションとなります。)

アプリケーションは、JMSコネクタの宛先を、RPのコネクション・ファクトリから導出された任意のオブジェクトに渡すことはできません。また、RPの宛先を、JMSコネクタのコネクション・ファクトリから導出された任意のオブジェクトに渡すこともできません。JMSコネクタでは、すべての送信、受信および参照メッセージのJMSDestinationおよびJMSReplyToヘッダー・フィールドで、任意の宛先タイプが別の宛先タイプに自動的に変換されます。たとえば、JMSコネクタを使用しないアプリケーション・クライアントが、RPのメッセージのJMSReplyToヘッダー・フィールドにRPの宛先を設定してメッセージを送信し、JMSコネクタを使用する別のアプリケーション・コンポーネントがそのメッセージを受信してJMSReplyToヘッダー・フィールドを読み取るとします。このとき、受信側は、元のRPのメッセージおよび宛先をラップするJMSコネクタ互換のメッセージおよび宛先を取得します。これ以外の場合には、自動変換されることはありません。たとえば、この使用例において、メッセージを直接送信するかわりにObjectMessageのボディとして送信した場合、受信側がObjectMessageのボディを抽出したときに、JMSコネクタのメッセージではなくRPのメッセージが取得されます。また、このRPメッセージのJMSReplyToヘッダー・フィールドには、JMSコネクタの宛先ではなくRPの宛先が含まれます。

リソース・プロバイダ

アプリケーション・クライアントがJMSメッセージの送受信に使用する、基礎となるコネクション・ファクトリおよび宛先は、リソース・プロバイダ・オブジェクトです。OC4Jでは、JMSコネクタの使用により、OEMS JMS(メモリー内、ファイル・ベース、データベース)、IBM MQ、TIBCOおよびSonicの各リソース・プロバイダをプラグインします。

最終的には、リソース・プロバイダ内で宛先とコネクション・ファクトリを作成する必要があります。

リソース・プロバイダを構成する一般的な手順は、次のとおりです。

JMSプロバイダごとに、プロバイダを構成し、コネクション・ファクトリおよび宛先オブジェクトを作成するための独自の手順があります。OEMS JMS以外のリソース・プロバイダの詳細は、各プロバイダのドキュメントを参照してください。

リソース・プロバイダ参照の宣言

クライアントは、希望する統合機能およびサービス品質(QOS)機能に応じて、それぞれ独自のリソース・アダプタを持つ1つ以上の異なるJMSリソース・プロバイダを使用できます。

リソース・プロバイダへの参照は、orion-application.xmlファイルおよびapplication.xmlファイルの1つ以上の<resource-provider>要素で宣言します。

次のいずれかのファイルを使用して、リソース・プロバイダ参照を宣言します。

次のコードを適切なXMLファイルに追加します。

<resource-provider class="providerClassName" name="providerName">
     <description>description </description>
     <property name="name" value="value" />
</resource-provider>

<resource-provider>属性は、次のように構成します。

<resource-provider>のサブ要素は、次のように構成します。

OC4Jで稼働するアプリケーションまたはリソース・アダプタでリソース・プロバイダにアクセスするには、<resource-provider>要素でリソース・プロバイダ参照を宣言する必要があります。リソース・プロバイダ参照には、OC4Jがリソース・プロバイダと対話するための様々なデータが含まれます。また、リソース・プロバイダ参照には、リソース・プロバイダのリソースにアクセスするためのJNDIサブコンテキストも含まれます。リソース・プロバイダ参照(およびJNDIアクセス)は、orion-application.xmlに配置して特定のアプリケーションのみでローカルに使用するか、%ORACLE_HOME%/j2ee/home/config/application.xmlに配置してすべてのアプリケーションで使用することができます。

リソース・プロバイダ参照を宣言する場合は、常にリソース・プロバイダ参照に使用する名前と、リソース・プロバイダ・インタフェースを実装するJavaクラスを指定する必要があります。

リソース・プロバイダ参照により、リソース・プロバイダのJNDIコンテキスト(リソース・プロバイダのコネクション・ファクトリおよび宛先を含む)が、アプリケーションからアクセス可能なJNDIサブコンテキストにマップされます(この場合、特にJMSコネクタからアクセスできることが重要です)。リソース・プロバイダのリソースに対して、アプリケーションがアクセスできることよりもJMSコネクタがアクセスできることの方が重要なのは、JMSコネクタの使用時には、アプリケーションはリソース・プロバイダの任意のリソースを直接ルックアップまたは使用する必要がなくなるためです(使用してはならないのが普通です)。このJNDIサブコンテキストは、java:comp/resource/providerNameであり、providerNameはリソース・プロバイダ参照の名前です。

http://www.oracle.com/technology/tech/java/oc4j/1013/how_to/index.htmlにあるデモ・セットには、リソース・プロバイダ参照の宣言の例が含まれます。How-Toドキュメントおよびデモ・セットと、そのURLのリストは、「JMSのHow-Toドキュメントおよびデモ・セット」を参照してください。

How-To-gjra-with-xxx.zipファイル(xxxは関連するリソース・プロバイダの名前)をダウンロードして解凍します。

/src/META-INF/orion-application.xmlというファイルを見つけてください。

詳細は、関連するHow-Toドキュメントの「Configuring the Resource Provider」を参照してください。

デモでは、データソースとリソース・プロバイダは、アプリケーションに対してローカルに宣言されています。データソース定義が$J2EE_HOME/config/data-sources.xmlに、リソース・プロバイダ定義が$J2EE_HOME/config/application.xmlに配置されていれば、それらの定義はすべてのアプリケーションに認識されます。(データソースを必要とするか、含んでいるのは、OEMS JMSのデータベースの永続性を使用するプロバイダのデモのみです。)

OC4Jによってサポートされる各リソース・プロバイダでリソース・プロバイダ参照を宣言する方法の詳細(Javaクラスやリソース・プロバイダ参照名の例など)は、次の項を参照してください。

OEMS JMSのメモリー内およびファイル・ベースの永続性

OEMS JMSのメモリー内およびファイル・ベースのオプションでは、次の機能が提供されます。

この項には、次の項目が含まれます。

宛先オブジェクトおよびコネクション・ファクトリの構成

宛先オブジェクトは、キューまたはトピックです。OEMS JMSのメモリー内およびファイル・ベースのオプションは、OC4Jとともにすでにインストールされています。したがって、構成する必要があるのは、アプリケーションで使用するカスタムの宛先オブジェクトとコネクション・ファクトリのみです。

宛先オブジェクトとコネクション・ファクトリを構成するための主要ツールは、Application Server Controlコンソールです。XMLファイルを直接編集することも可能です。

デフォルトの宛先オブジェクトおよびコネクション・ファクトリ

デフォルトのメリットは、次のとおりです。

XA(グローバル・トランザクション対応)、非XA、および様々なJMSインタフェースの異なる組合せに対して、6つのデフォルト・コネクション・ファクトリが作成されます。アプリケーションでは、Application Server Controlコンソールまたはjms.xmlファイルで追加することなく、これらのコネクション・ファクトリを使用できます。connection-factory要素の1つ以上のオプション属性にデフォルト以外の値を指定する場合にのみ、新規コネクション・ファクトリを定義します。

デフォルトのコネクション・ファクトリ・オブジェクトは、OC4Jによって内部的に作成され、JMSコネクションが作成されるOC4Jサーバー内のデフォルトのJNDIロケーションにバインドされます。

次のデフォルトのコネクション・ファクトリが作成されます(jms.xmlファイルで明示的に定義していない場合でも作成されます)。カスタムのコネクション・ファクトリを作成する場合は、これらのデフォルトを予約済のJNDIロケーションとして扱い、他のJNDIロケーションを使用する方が安全です。

  XA  非XA 

デフォルトのキュー・コネクション・ファクトリ 

jms/XAQueueConnectionFactory 

jms/QueueConnectionFactory 

デフォルトのトピック・コネクション・ファクトリ 

jms/XATopicConnectionFactory 

jms/TopicConnectionFactory 

デフォルトの統合コネクション・ファクトリ 

jms/XAConnectionFactory 

jms/ConnectionFactory 

デフォルトの宛先は、次のとおりです。

Application Server Controlコンソールでの構成

Application Server Controlコンソールは、OEMS JMSのメモリー内およびファイル・ベースの永続性オプションのコネクション・ファクトリおよび宛先オブジェクトを構成するための主要ツールです。宛先オブジェクトごとに、その名前、ロケーションおよび宛先タイプ(キューまたはトピック)を指定する必要があります。

Application Server Controlコンソールへのパス:

「OC4J: ホーム」→「管理」タブ→「サービス」→「JMSプロバイダ」→「タスクに移動」→「OracleAS JMSの構成」→適切なタブを選択。

表4-1構成要素」に、OracleAS JMSのリソース・プロバイダの構成要素とその属性を示します。

構成要素

表4-1に、各構成要素と、Application Server Controlコンソール、MBeanおよびjms.xmlファイルでの設定場所を示します。

表4-1    構成要素 
コンソールおよびMBeanでの設定場所  jms.xmlの要素  説明および属性 

JMSAdministrator MBeanにより、サーバーのホスト名とポート、および複数の関連属性と操作を指定可能。

JMSAdministrator MBeanへのパス:

「OC4J: ホーム」→「管理」タブ→「タスク名: JMX」→「システムMBeanブラウザ」→「タスクに移動」→「J2EEDomain:oc4j」、「J2EEServer:standalone」、「JMSAdministratorResource」、「JMSAdministrator」にドリルダウン 

<jms-server> 

サーバー構成のルート要素です。

<jms-server>要素には、次の属性が含まれます。

host: このサーバーがバインドされるString(DNSまたはドット表記法によるホスト名)で定義されるホスト名です。デフォルトでは、サーバーは、0.0.0.0(構成ファイルでは[ALL])にバインドされます。オプション設定です。

port: このサーバーがバインドされるint(有効なTCP/IPポート番号)として定義されるポートです。デフォルト設定は、9127です。この設定は、OC4Jのスタンドアロン構成にのみ適用されます。Oracle Application Serverの構成では、構成ファイル内のポート設定は、OC4Jサーバーの起動時に(OPMNなどで)使用されるコマンドライン引数で上書きされます。オプション設定です。 

リソース・プロバイダの宛先を作成し、その属性を「宛先の追加」ページで指定。

「宛先の追加」ページへのパス:

「OC4J: ホーム」→「管理」タブ→「タスク名: サービス」→「JMSプロバイダ」→「タスクに移動」→「宛先」タブ→「新規作成」 

<queue>  

この要素では、キューを構成します。キューは、OC4Jの起動時に使用可能となり、サーバーが再起動または再構成されるまで使用できます。0(ゼロ)個以上のキューを任意の順序で構成できます。新規に構成したキューは、OC4Jを再起動するまで使用できません。

<queue>要素には、次の属性が含まれます。

name: この必須属性は、キューのプロバイダ固有の名前(String)です。この名前には、空でなく有効な任意の文字列を使用できます(空白や他の特殊文字も使用できますが、お薦めしません)。この属性で指定した名前をSession.createQueue()で使用すると、プロバイダ固有の名前をJMSキューに変換できます。2つの宛先に同じ名前を指定することはできません。デフォルトはありません。

location: この必須属性では、キューがバインドされるJNDIロケーション(String)を指定します。この値は、有効な名前に関するJNDIルールに従う必要があります。

persistence-file: オプションのパスおよびファイル名(String)です。persistence-file属性のパスは、ファイルの絶対パス、またはapplication.xmlに定義されているpersistenceディレクトリに対する相対パスです。デフォルト・パスは、Oracle Application Server環境の場合はJ2EE_HOME/persistence/<group>で、スタンドアロン環境の場合はJ2EE_HOME/persistenceです。

キューおよびトピックごとに、独自の永続性ファイル名を指定する必要があります。同じ永続性ファイルに書き込む2つのオブジェクトを使用することはできません。

persistence-file属性の詳細は、「永続性のリカバリ」を参照してください。 

トピックの宛先を作成し、その属性を「宛先の追加」ページで指定。

「宛先の追加」ページへのパス:

「OC4J: ホーム」→「管理」タブ→「タスク名: サービス」→「JMSプロバイダ」→「タスクに移動」→「宛先」タブ→「新規作成」 

<topic>  

この要素では、トピックを構成します。トピックは、OC4Jの起動時に使用可能となり、サーバーが再起動または再構成されるまで使用できます。0(ゼロ)個以上のトピックを任意の順序で構成できます。新規に構成したトピックは、OC4Jを再起動するまで使用できません。

<topic>要素には、次の属性が含まれます。

name: この必須属性は、トピックのプロバイダ固有の名前(String)です。この名前には、空でなく有効な任意の文字列を使用できます(空白や他の特殊文字も使用できますが、お薦めしません)。この属性で指定した名前をSession.createTopic()で使用すると、プロバイダ固有の名前をJMSトピックに変換できます。2つの宛先に同じ名前を指定することはできません。デフォルトはありません。

location: この必須属性では、トピックがバインドされるJNDIロケーション(String)を指定します。この値は、有効な名前に関するJNDIルールに従う必要があります。デフォルトはありません。

persistence-file: オプションのパスおよびファイル名(String)です。persistence-file属性のパスは、ファイルの絶対パス、またはapplication.xmlに定義されているpersistenceディレクトリに対する相対パスです。デフォルト・パスは、Oracle Application Server環境の場合はJ2EE_HOME/persistence/<group>で、スタンドアロン環境の場合はJ2EE_HOME/persistenceです。

キューおよびトピックごとに、独自の永続性ファイル名を指定する必要があります。同じ永続性ファイルに書き込む2つのオブジェクトを使用することはできません。

persistence-file属性の詳細は、「永続性のリカバリ」を参照してください。 

「説明」フィールドは、説明の適用されるトピックまたはキューを作成する「宛先の追加」ページに存在。 

<description>  

<queue>または<topic>のサブ要素です。キューまたはトピックの用途をユーザーに知らせるユーザー定義文字列です。オプション設定です。 

コネクション・ファクトリを作成し、その属性を「コネクション・ファクトリの追加」ページで指定。

「コネクション・ファクトリの追加」または「コネクション・ファクトリの編集」ページへのパス:

「OC4J: ホーム」→「管理」タブ→「タスク名: サービス」→「JMSプロバイダ」→「タスクに移動」→「コネクション・ファクトリ」タブ→「新規作成」または「プロパティの編集」 

<connection-factory>

または

<queue-connection-factory>

または

<topic-connection-factory>  

コネクション・ファクトリの構成です。コネクション・ファクトリ要素には、次の属性が含まれます。

  • location: 必須。コネクション・ファクトリのバインド先となるJNDIロケーション。この値は、有効な名前に関するJNDIルールに準拠する必要があります。

  • host: オプション。このコネクション・ファクトリの接続先となる固定のOC4Jホスト。デフォルトでは、コネクション・ファクトリは、jms-server要素に構成されているものと同じホストを使用します。デフォルト以外の値を使用すると、ローカルで使用可能なOC4Jサーバーや他のOracle Application Serverまたはクラスタ構成を省略し、すべてのJMS操作を特定のOC4J JVMに送ることができます。オプションの文字列で、DNSまたはドット表記法によるホスト名です。デフォルトは、ALLです。

  • port: オプション。このコネクション・ファクトリの接続先となる固定のポート。デフォルトでは、コネクション・ファクトリは、jms-server要素に構成されているものと同じポート(あるいは、コマンドラインによりOracle Application Serverまたはクラスタ構成に対して指定したポートの値)を使用します。デフォルト以外の値を使用すると、ローカルで使用可能なサーバーや他のOracle Application Serverまたはクラスタ構成を省略し、すべてのJMS操作を特定のOC4J JVMに送ることができます。オプションのintで、有効なTCP/IPのポート番号です。デフォルトは9127です。

  • username: オプション。このコネクション・ファクトリから作成されるJMSデフォルト接続の認証に使用するユーザー名。アプリケーションで接続を作成し、アプリケーションとoc4j-ra.xmlファイルのいずれでもusername/passwordを指定しない場合、この要素のusernameおよびpassword属性が使用されます。ユーザー名自体は、他のOC4J機能を使用して正しく作成および構成する必要があります。オプションの文字列です。デフォルトは、空の文字列です。

  • password: オプション。このコネクション・ファクトリから作成されるJMSデフォルト接続の認証に使用するパスワード。パスワード自体は、他のOC4J機能を使用して正しく作成および構成する必要があります。プロパティのpassword属性は、パスワードの間接化をサポートします。詳細は、『Oracle Containers for J2EEセキュリティ・ガイド』を参照してください。オプションの文字列です。デフォルトは、空の文字列です。

  • clientID: オプション。このコネクション・ファクトリで作成される接続用として、管理上構成されている固定のJMS clientIDclientIDを指定しない場合、デフォルトは空の文字列です。この値は、JMS仕様に基づいて、クライアント・プログラムで上書きすることもできます。clientIDが使用されるのは、トピックの永続サブスクリプションの場合のみで、この値はキューと非永続トピックの操作には関係しません。オプションの文字列です。デフォルトは、空の文字列です。

 

XA対応のコネクション・ファクトリを作成し、その属性を「コネクション・ファクトリの追加」ページで指定。

「コネクション・ファクトリの追加」または「コネクション・ファクトリの編集」ページへのパス:

「OC4J: ホーム」→「管理」タブ→「タスク名: サービス」→「JMSプロバイダ」→「タスクに移動」→「コネクション・ファクトリ」タブ→「新規作成」または「プロパティの編集」 

<xa-connection-factory>

または

<xa-queue-connection-factory>

または

<xa-topic-connection-factory>  

コネクション・ファクトリ構成のXAバリアントです。

XA対応のコネクション・ファクトリ要素には、前述のXA非対応のコネクション・ファクトリ要素と同じ属性が含まれます。

 

 

<log>  

ファイルまたはODL形式によるJMSアクティビティのロギングを有効化します。ロギングの詳細は、『Oracle Containers for J2EE構成および管理ガイド』のOC4Jロギングの有効化に関する項を参照してください。 

JMSAdministratorResource MBeanでシステム・プロパティ設定を編集。

JMSAdministratorResource MBeanのシステム・プロパティ設定へのパス:「OC4J: ホーム」→「管理」タブ→「タスク名: JMX」→「システムMBeanブラウザ」→「タスクに移動」→「J2EEDomain:oc4j」、「J2EEServer:standalone」、「JMSAdministratorResource」、「JMSAdministrator」→「操作」タブ→setConfigPropertyにドリルダウン 

<config-properties>

 

システム・プロパティを設定します。設定は、jms.xmlファイルに永続化されます。

<config-property>: <config-properties>のサブ要素です。

これらの設定の詳細は、「JMS構成プロパティ」を参照してください。 

jms.xmlを使用した構成

OEMS JMSのメモリー内およびファイル・ベースの構成設定は、jms.xmlファイルに永続化されます。jms.xmlの設定は、次のとおりです。

後述の例は、jms.xmlファイル内の<jms-server>以降の要素の構造を示しています。この例では、次のように宛先とコネクション・ファクトリを構成します。

<jms-router>以降の要素の詳細な構造例は、「jms.xmlでのJMSルーターの構成」を参照してください。

ポートの構成

スタンドアロンOC4Jインスタンスでは、JMSAdministrator MBeanでポート範囲を設定できます。変更を有効にするには、OC4Jインスタンスを再起動する必要があります。再起動を必要とするのは、ポート設定の特殊な場合です。

管理されている完全なOracle Application Server環境では、Application Server Controlコンソールを使用してポート範囲を構成します。

Application Server Controlコンソールでポート範囲を構成する場合のパス:

「OC4J: ホーム」→「管理」タブ→「タスク名: JVMプロパティ」→「JMSポート」

JMSメッセージの送受信

JMSメッセージを送受信するためのコードは、関連するJMSコネクタまたはリソース・プロバイダに依存しません。

この例は、http://www.oracle.com/technology/tech/java/oc4j/1013/how_to/index.htmlにあるデモ・セットのMyChannel.javaファイルからの抜粋です。

/src/common/MyChannel.javaというファイルを見つけてください。

デモにおいては、MyChannel.javaがJMSメッセージを送受信する唯一のクラスです。他のすべてのクラスでは、MyChannelをコールして送受信を行います。MyChannelは、様々なリソース・プロバイダのすべてに対応します。実際、コネクション・ファクトリと宛先のルックアップに使用できる(論理名に基づかない)代替JNDIロケーションを説明するPlayer.javaのいくつかのコメントを除けば、すべてのリソース・プロバイダの.javaソースは同じものです。

How-Toドキュメントおよびデモ・セットと、そのURLのリストは、「JMSのHow-Toドキュメントおよびデモ・セット」を参照してください。

   public MyChannel(String connectionFactoryName, String destinationName) throws 
Exception {

        Context ctx = new InitialContext();

        // Get the destination.
        Destination destination = (Destination) ctx.lookup(destinationName);

        // Get the connection factory.
        ConnectionFactory cf = (ConnectionFactory)
 ctx.lookup(connectionFactoryName);

        // Use the connection factory to create a connection.
        connection = cf.createConnection();

        // Start the connection.
        connection.start();

        // Use the connection to create a session.
        session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);

        // Use the session and destination to create a message producer and a message 
consumer.
        producer = session.createProducer(destination);
        consumer = session.createConsumer(destination);
    }

    /**
     * Send message.
     * prerequisite: channel is open
     * @param obj object to be sent
     */
    public void send(Serializable obj) throws JMSException {

        // Use the session to create a new message.
        ObjectMessage msg = session.createObjectMessage(obj);

        // Use the message producer to send the message.
        producer.send(msg);
        System.out.println("Sent message: " + obj);
    }

    /**
     * Receive message (wait forever).
     * prerequisite: channel is open
     * @return object which was received in message, or <code>null</code> if no message 
was received
     */
    public Serializable receive() throws JMSException {

        // Use the message consumer to receive a message.
        ObjectMessage msg = (ObjectMessage) consumer.receive();

        System.out.println("Got message: " + msg.getObject());
        return msg.getObject();
    }

    /**
     * Receive message (wait a while).
     * prerequisite: channel is open
     * @param timeout maximum time (in milliseconds) to wait for a message to arrive
     * @return object which was received in message,
     * or <code>null</code> if no message was received
     */
    public Serializable receive(long timeout) throws JMSException {

        // Use the message consumer to receive a message (if one comes in time).
        ObjectMessage msg = (ObjectMessage) consumer.receive(timeout);

        if (msg == null) return null;
        System.out.println("Got message: " + msg.getObject());
        return msg.getObject();
    }

    /**
     * Close channel.
     * prerequisite: channel is open
     * Once a MyChannel object is closed, it may no longer be used to send or receive
     * messages.
     */
    public void close() throws JMSException {

        // Close the connection (and all of its sessions, producers and consumers).
        connection.close();
    }

    private Connection connection;
    private Session session;
    private MessageProducer producer;
    private MessageConsumer consumer;
}

JMSユーティリティの使用

OEMS JMS実装は、OEMSとの通信に使用されるコマンドライン・ユーティリティに含まれており、JMS宛先のリスト作成や参照などのタスクを実行します。ユーティリティ・クラス(com.evermind.server.jms.JMSServerUtils)は、oc4j-internal.jarのOC4Jに付属しています。このユーティリティによって提供されるタスクの多くは、Oracle Enterprise Manager 10gコンソールを使用してアクセス可能な一連のMBeanからも使用できます。MBeanの使用方法の詳細は、「JMS MBeanの使用」を参照してください。

ユーティリティでは、実行時に次のJARファイルが必要です。これらのJARファイルは、CLASSPATH環境変数に追加できます。

ユーティリティの構文は次のとおりです。

java com.evermind.server.jms.JMSServerUtils [generic-options] [command] 
[command-options] [arguments]

使用方法の詳細を参照するには、helpコマンドを使用します。

java com.evermind.server.jms.JMSServerUtils help

すべてのオプションおよびコマンドは、表4-2表4-3および表4-4に説明されています。汎用オプションは、OracleAS JMSサーバーへの接続に使用されます。


注意

JMSServerUtilsを使用してサーバーに接続するには、OEMS JMSサーバーが実行されている必要があります。また、JMSServerUtilsで、管理者ロール内のユーザーとして接続できるのはJMSサーバーのみです。ユーザーは、セキュリティ・ユーザー・マネージャ内でロールに追加されます。セキュリティ・ロール内でのユーザーの定義の詳細は、『Oracle Containers for J2EEセキュリティ・ガイド』を参照してください。 


表4-2    JMSユーティリティの汎用オプション 
オプション  説明 

-host <hostname>  

OracleAS JMSサーバーがインストールされている(リモート)ホスト。クライアントがOracleAS JMSサーバーと同じノードに存在している場合、このオプションは不要です。  

-port <port>  

OracleAS JMSサーバーへのアクセスに使用される(リモート)ポート。デフォルトのJMSポート番号は9127です。  

-username <username>  

JMS接続を作成する際にOracleAS JMSサーバーにアクセするためのユーザー名。このユーザーは、管理ロール内のユーザー・マネージャ・セキュリティ構成に定義されています。 

-password <password>  

JMS接続を作成する際にOracleAS JMSサーバーにアクセするためのパスワード。このパスワードは、管理ロール内のユーザー・マネージャ・セキュリティ構成に定義されています。 

-clientID <ID>  

すべてのJMS接続にこの識別子を使用します。トピックの永続サブスクリプションを特定する場合にのみ必要です。 

コマンドは、実行される処理の内容を表します。表4-3で各コマンドを説明します。一部のコマンドには、実行する処理をさらに特定するための独自のオプション(command-options)があります。

表4-3    JMSユーティリティ・コマンド 
コマンド  説明 

help  

すべてのユーティリティ・コマンドの詳細なヘルプを出力します。 

check
[<other-selector>]
 

-selectorコマンド・オプションを指定して、JMSメッセージ・セレクタの妥当性をチェックします。オプションで、指定された2つのセレクタが等価として処理されているかどうかをチェックします(永続サブスクリプションの再アクティブ化に便利です)。2つ目のセレクタは、オプションの<other-selector>で指定します。  

knobs  

使用可能なすべてのシステム・プロパティ(表4-6を参照)とOC4J JMSサーバーの現在の設定を表示します。 

stats  

OC4J JMSサーバーの使用可能なすべてのDMS統計を表示します(JMS以外の統計も含まれます)。(DMSの詳細は、『Oracle Application Serverパフォーマンス・ガイド』を参照してください。) 

destinations  

OC4J JMSが認識しているすべての永続宛先オブジェクトのリストを出力します。 

durables  

OC4J JMSが認識しているすべての永続サブスクリプションのリストを出力します。 

subscribe <topic>  

<topic>に永続サブスクリプションを作成します。名前、メッセージ・セレクタ、ローカルであるかどうか、および永続サブスクリプションのクライアント識別子を指定します。これにより、既存のアクティブでない永続サブスクリプションが置き換えられます。名前は、-nameコマンド・オプションを使用して特定します。メッセージ・セレクタは、-selectorコマンド・オプションを使用して特定します。永続サブスクリプションがローカルであるかどうかは、-noLocalコマンド・オプションを使用して特定します。クライアント識別子は、-clientID汎用オプションを使用して定義します。 

unsubscribe  

既存のアクティブでない永続サブスクリプションを削除します。永続サブスクリプションは、名前(-nameコマンド・オプション)およびクライアント識別子(-clientID汎用オプション)で特定します。 

browse <destination>  

指定された宛先(jms.xmlに定義されているキューまたはトピックの永続サブスクリプション)のメッセージを参照します。 

drain <destination>  

指定された宛先(キューまたはトピックの永続サブスクリプション)のメッセージをデキューします。 

copy <from-destination> <to-destination>  

ある宛先(キューまたはトピックの永続サブスクリプション)から別の宛先にメッセージをコピーします。発信側と受信側の宛先が同一の場合はコマンドは実行されず、かわりにエラーが生成されます。 

move <from-destination> <to-destination>  

ある宛先(キューまたはトピックの永続サブスクリプション)から別の宛先にメッセージを移動します。発信側と受信側の宛先が同一の場合はコマンドは実行されず、かわりにエラーが生成されます。 

表4-4    JMSユーティリティ・コマンドのオプション 
コマンド・オプション  説明 

-selector <selector>  

指定されたJMSメッセージ・セレクタを使用して、キュー・レシーバおよび永続サブスクライバを作成します。 

-noLocal [true|false]  

trueに設定されている場合、サブスクライバは同じ接続でパブリッシュされたメッセージを参照できません。永続サブスクライバの作成時に使用します。デフォルト値は、falseです。  

-name <name>  

トピックで実行中の永続サブスクリプションの名前を定義します。このオプションは、トピックの読取りを行うコマンドでは必須で、キューの読取りでは無視されます。  

-silent  

処理中にはメッセージを出力しません。標準エラーと出力された、処理済のメッセージの合計件数を保持します。 

-count <count>  

現行の操作中には、指定された数を超えるメッセージは処理しません。数値が負の値またはゼロの場合は、選択されたすべてのメッセージが処理されます。  

次の例では、クライアント・ユーティリティと同じコンピュータに配置されているOracleAS JMSサーバーに接続して例外キューを参照し、このキューで処理されたメッセージの数を戻します。

java com.evermind.server.jms.JMSServerUtils -username <username> -password
 <password> browse jms/Oc4jJmsExceptionQueue 
トピックのリスニング

トピックをリスニングするには、まず(JMSUtilsを使用して)永続サブスクリプションを設定し、(所有する任意のパブリッシャを使用して)いくつかのメッセージをパブリッシュし、(JMSServerUtilsで参照して)これらのメッセージを取得します。

トピックをリスニングするには、次のようにします。

  1. 永続サブスクリプションを設定します。

    java com.evermind.server.jms.JMSServerUtils -username oc4jadmin -password welcome1 
    -port 9127 -clientID demedclient subscribe -name demedjmsutils "Demo Topic"
    
  2. そのトピックでいくつかのメッセージをパブリッシュします。

  3. 次のようにしてメッセージを参照します。

    java com.evermind.server.jms.JMSServerUtils -username oc4jadmin -password welcome1 
    -port 9127 -clientID demedclient browse -name demedjmsutils "Demo Topic"
    

サブスクリプションと参照の両方で、同じclientIDおよびnameを使用します。これらはJMSの基本的なオプションで、clientIDはコネクション・ファクトリを、nameはそのコネクション・ファクトリの特定のサブスクリプションを指定します。

JMS MBeanの使用

OEMS JMS実装は、OEMSとの通信に使用される一連のJMX MBeanに含まれており、JMS宛先のリスト作成や参照などのタスクを実行します。MBeanには、Oracle Enterprise Manager 10gコンソールを使用してアクセスします。MBeanを介して使用可能な属性や操作の多くは、コマンドライン・ユーティリティからも使用できます。コマンドライン・ユーティリティの使用方法の詳細は、「JMSユーティリティの使用」を参照してください。

次のMBeanには、Oracle Enterprise Manager 10gコンソールを使用してアクセスします。

ファイル・ベースの永続性の構成

次の項では、ファイル・ベースの永続性について説明します。

ファイル・ベースの永続性が有効の場合、OC4Jでは、次の操作が自動的に実行されます。

永続性が有効化されていても、ファイルに残るのは特定のメッセージのみです。メッセージが永続化されるためには、次の条件がすべて満たされている必要があります。

DeliveryModePERSISTENTまたはNON_PERSISTENTに設定する方法は、JMS仕様を参照してください。

メッセージ・プロデューサにデフォルトのDeliveryModeを設定する方法は、http://java.sun.com/j2ee/1.4/docs/api/javax/jms/MessageProducer.html#setDeliveryMode(int)を参照してください。

デフォルト設定を上書きしてメッセージごとにDeliveryModeを設定する方法は、http://java.sun.com/j2ee/1.4/docs/api/javax/jms/MessageProducer.html#send(javax.jms.Destination,%20javax.jms.Message,%20int,%20int,%20long)およびhttp://java.sun.com/j2ee/1.4/docs/api/javax/jms/MessageProducer.html#send(javax.jms.Message,%20int,%20int,%20long)を参照してください。

ファイル・ベースの永続性を有効化する際の注意

前述の条件が満たされる場合、ファイル・ベースの永続性オプションにより、メッセージ用にリカバリ可能な永続記憶域が提供されます。各宛先は、宛先オブジェクトに送信されたメッセージを格納するためのファイルを指し示す相対または絶対パス名に関連付けることができます。ファイルは、ファイル・システムの任意の場所に配置できます(必ずしもJ2EE_HOMEディレクトリ内である必要はありません)。同じディレクトリに複数の永続性ファイルを配置できます。永続性ファイルは、リモート・ネットワークのファイル・システムに配置するか、ローカル・ファイル・システムの一部とすることが可能です。

Application Server Controlコンソールでのファイル・ベースの永続性の有効化

Application Server Controlコンソールは、宛先オブジェクト用にファイル・ベースの永続性を有効化するための主要ツールです。次のパスを使用して、Application Server Controlコンソールで永続性ファイルのパラメータを指定します。

Application Server Controlコンソールで宛先の永続性ファイルを指定する場合のパス:

「OC4J: ホーム」→「管理」タブ→「タスク名: サービス」→「JMSプロバイダ」→「タスクに移動」→「宛先」→「新規作成」→「永続性ファイル」

永続性ファイルは、新規の宛先を作成するときにApplication Server Controlコンソールで指定できます。既存の宛先の永続性ファイルの指定は、コンソールでは変更できません。永続性の指定は、jms.xmlファイルで変更できます。「jms.xmlファイルでのファイル・ベースの永続性の有効化」を参照してください。

jms.xmlファイルでのファイル・ベースの永続性の有効化

宛先オブジェクトのファイル・ベースの永続性は、jms.xmlファイルのpersistence-file属性を指定することで有効化できます。

次のXML構成の例に、persistence-file属性を使用してファイル名をpersと定義する方法を示します。

<queue name="foo" location="jms/persist" persistence-file="pers">
</queue>

persistence-file属性のパスは、ファイルの絶対パス、またはapplication.xmlに定義されているpersistenceディレクトリに対する相対パスです。

OC4Jサーバーは、永続性ファイル用のディレクトリを一切作成しません。そのため、永続性ファイルをjms.xmlに定義する場合、次のように既存の絶対ディレクトリを指定する必要があります。

persistence-file="/this/dir/exists/PersistenceFile"

または、次のようにファイル名のみを指定します。

persistence-file="PersistenceFile"

ファイル名のみを指定する場合、永続性ファイルは、デフォルトで$J2EE_HOME/persistence(スタンドアロン・インスタンスの場合)または$J2EE_HOME/persistence/<group_name>(完全なOracle Application Server環境の場合)に作成されます。

persistence-file属性の詳細は、表4-1「構成要素」を参照してください。

Oracle Application Serverでは、複数のOC4Jインスタンスが同じファイル・ディレクトリに書き込む場合があり、その際に同じ永続性ファイル名を指定する場合もあります。この属性を設定するとファイル・ベースの永続性が有効化されますが、永続性ファイルが他のOC4Jインスタンスにより上書きされる可能性もあります。

永続性のリカバリ

次の項では、永続性のリカバリの様々な側面について説明します。

リカバリ可能性の有効範囲

OEMS JMSのファイル・ベースの永続性オプションでは、発生する可能性のある一部の障害からのリカバリが可能ですが、すべての障害からリカバリできるわけではありません。次のいずれかの障害が発生した場合、永続性ファイルのリカバリ可能性は保証されません。

永続性ファイルの管理

JMSサーバーの稼働中は、現在使用中の永続性ファイルのコピー、削除または名前変更を実行しないでください。使用中の永続性ファイルに対してこれらのアクションを実行すると、リカバリ不可能なエラーが発生します。

ただし、OEMSサーバーで永続性ファイルが使用されていない場合は、これらのファイルに対して次の管理およびメンテナンス操作を実行できます。

永続性ファイルの連結、分割、並替え、マージはできません。このような操作を実行すると、永続性ファイル内のデータが破損し、リカバリ不可能になります。

OEMS JMSのメモリー内およびファイル・ベースのオプションでは、内部構成およびトランザクション状態管理のために、ユーザー指定の永続性ファイルとロック・ファイルに加えて特殊ファイルjms.stateが使用されます。OEMS JMSサーバーは、通常の操作中にこのファイルとその内容をクリーン・アップします。アーカイブを目的とする場合でも、このファイルは削除、移動、コピーまたは変更しないでください。jms.stateファイルを操作すると、メッセージとトランザクションが消失する可能性があります。


注意

jms.stateファイルの位置は、OC4Jの運用モード(スタンドアロンまたはOracle Application Server)に応じて次のように異なります。

  • スタンドアロン: J2EE_HOME/persistenceディレクトリ

  • Oracle Application Server: J2EE_HOME/persistence/<group_name>ディレクトリ

persistenceディレクトリの位置は、application.xmlファイルで定義されます。  


JMSクライアントへのエラーのレポート

JMSクライアントがメッセージをエンキューまたはデキューしたり、トランザクションをコミットまたはロールバックするときの操作順序は、次のとおりです。

  1. クライアントがファンクション・コールを実行します。

  2. 事前永続性操作が行われます。

  3. 永続性が発生します。

  4. 事後永続性操作が行われます。

  5. クライアントのファンクション・コールが戻ります。

事前永続性フェーズまたは永続性フェーズで障害が発生すると、クライアントは、JMSExceptionや他のなんらかのタイプのエラーを受け取りますが、永続性ファイルは変更されません。

事後永続性フェーズで障害が発生すると、クライアントは、JMSExceptionや他のなんらかのタイプのエラーを受け取ります。ただし、永続性ファイルはそのまま更新され、OEMS JMSは操作が成功した場合と同様にリカバリします。

異常終了

OC4Jが正常終了すると、ロック・ファイルが自動的にクリーン・アップされます。ただし、(kill -9コマンドなどにより)OC4Jが異常終了すると、ロック・ファイルはファイル・システムに残ります。通常、残されたロック・ファイルは、OC4Jに認識されます。認識されない場合は、異常終了してからOC4Jを再起動する前に、ロック・ファイルを手動で削除する必要があります。

ロック・ファイルのデフォルトの位置は、persistenceディレクトリです(J2EE_HOME/persistence)。persistenceディレクトリは、application.xmlファイルで定義されます。その他の位置は、宛先オブジェクトのpersistence-file属性内で設定できます。

リカバリ手順

ロック・ファイルは、複数のOC4Jプロセスが同じ永続性ファイルに書き込まないようにします。複数のOC4J JVMが、同じ位置の同じ永続性ファイルを指し示すように構成されていると、データが相互に上書きされ、永続化されたJMSメッセージが破損または消失する可能性があります。このような共有違反を防止するため、OEMS JMSでは、各永続性ファイルがロック・ファイルに関連付けられます。そのため、各永続性ファイル(/path/to/persistenceFileなど)は、/path/to/persistenceFile.lockというロック・ファイルに関連付けられます。永続性ファイルの詳細は、「ファイル・ベースの永続性の構成」を参照してください。

OC4Jには、ロック・ファイルを作成および削除するための適切なパーミッションが必要です。

終了後に再起動した場合、次のいずれかのロック・ファイル操作が適用されます。

JMS永続性のロック・ファイルには、サーバーおよびpersistenceディレクトリの位置情報が含まれています。JMSサーバーの起動時にロック・ファイルが存在し、ロック・ファイルが(同じIPアドレスを持つ)同じサーバーで、同じpersistenceディレクトリの位置を使用して作成されている場合、JMSサーバーは、そのロック・ファイルの制御を継承して正常に起動します。

これ以降に記載するOEMS JMSのファイル・ベースのリカバリ手順では、関連するすべてのロック・ファイルが削除されていると仮定して説明を続けます。

OEMS JMSは、異常終了時にOEMS JMSで構成されていたすべての永続性ファイルに対してリカバリ操作を実行します。つまり、OC4Jが異常終了し、ユーザーがJMSサーバーの構成を変更してOC4Jを再起動した場合、JMSサーバーは、元の構成に存在していたすべての永続性ファイルをリカバリしようとします。JMSサーバーは、リカバリの成功後に、指定された新しい構成に移行します。

古い構成のリカバリに失敗すると、JMSサーバーは起動しません。サーバーは停止されるか、またはリカバリに成功するまで繰り返し再起動されます。

JMSサーバーは、jms.stateファイルに現行の永続性構成をキャッシュします。このファイルは、トランザクション状態の維持にも使用されます。現行構成を完全にリカバリしない場合は、jms.stateファイルとすべてのロック・ファイルを削除し、構成の変更を受け入れることで、サーバーを白紙の状態で起動できます。(この方法はお薦めしません。)jms.stateファイルが見つからない場合は、JMSサーバーにより新規作成されます。

なんらかの理由でjms.stateファイル自体が破損した場合は、このファイルを削除する必要があります。これに伴い、保留中のすべてのトランザクション(コミットされたが、そのトランザクションに参加する個々の宛先オブジェクトすべてによってコミットされていないトランザクション)は消失します。

異常終了時にメッセージ・アクティビティが進行中だった場合、OEMS JMSは、永続性ファイルのリカバリを試行します。データの(前述したタイプの)破損は、破損データのクリーン・アウトにより処理されますが、これによりメッセージとトランザクションが消失する可能性があります。

永続性ファイルのヘッダーが破損すると、この種の破損ファイルはユーザー構成エラーと区別できないことが多いため、OEMS JMSではファイルをリカバリできなくなる場合があります。oc4j.jms.forceRecovery管理プロパティ(表4-6「システム・プロパティ」を参照)を使用すると、(メッセージの消失やユーザー構成エラーの隠蔽というデメリットはありますが)無効なデータをすべて消去してリカバリを続行するようにJMSサーバーに指示できます。

事前定義済の例外キュー

OEMS JMSのメモリー内およびファイル・ベースのオプションには、JMS仕様の拡張機能として、配信できないメッセージを処理するための事前定義済の例外キューが付属しています。これは、単一の永続的なグローバル例外キューであり、OEMS JMSの宛先から配信できないメッセージが格納されます。例外キューには、次の固定プロパティがあります。

例外キューは、JMSサーバーとそのクライアントで常に使用可能です。jms.xml構成ファイルで明示的に定義することはできません。定義しようとすると、エラーが発生します。例外キューの名前、JNDIロケーション、およびpersistenceディレクトリへのパス名は、各ネームスペースにおける予約語になります。これらの名前で他のエンティティを定義しようとすると、エラーが発生します。

メッセージは、期限切れまたはリスナー・エラーが原因で配信できなくなることがあります。次の項では、期限切れで配信できないメッセージに対して実行される操作について説明します。

メッセージの期限切れ

デフォルトでは、永続的な宛先に送信されたメッセージが期限切れになると、そのメッセージは例外キューに移動されます。期限切れになったメッセージのJMSXStateは、EXPIREDを示す値である3に設定されますが、メッセージ・ヘッダー、プロパティおよびボディは特に変更されません。メッセージはObjectMessageにラップされ、ラップされたメッセージが例外キューに送られます。

ラップしているObjectMessageDeliveryModeは、元のメッセージと同じです。

デフォルトでは、非永続的または一時的な宛先オブジェクトで期限切れになったメッセージは、例外キューに移動されません。通常、これらの宛先オブジェクトに送信されたメッセージは、永続化の必要がないと判断され、期限切れバージョンも存在しません。

送信先となる宛先オブジェクトが永続的、非永続的、一時的のいずれであるかにかかわらず、期限切れのメッセージをすべて例外キューに送信するよう指定できます。これには、OC4Jサーバーの起動時に、oc4j.jms.saveAllExpired管理プロパティをtrueに設定します(表4-6「システム・プロパティ」を参照)。この場合、期限切れのメッセージはすべて例外キューに移動します。これにより、非永続的なメッセージが例外キューに送られた場合でも、その非永続的な性質は変化しません。

メッセージのページング

OEMS JMSのメモリー内およびファイル・ベースのオプションでは、次の場合にメッセージ本文のページング・インおよびページング・アウトがサポートされます。

ページングされるのはメッセージ本文のみです。メッセージ・ヘッダーとプロパティは、ページングされません。ページングしきい値は、システム・プロパティのoc4j.jms.pagingThresholdを使用して設定できます(表4-6「システム・プロパティ」を参照)。

しきい値の範囲は、0.01.0です。JVMメモリーを使用しないJavaプログラムを記述するのはまず不可能であり、プログラムは、JVMヒープがいっぱいになる前にメモリーをすべて消費して終了するのが普通です。

たとえば、ページングしきい値が0.5の場合にJVMのメモリー使用率が0.6に上昇すると、JMSサーバーは、メモリー使用率がしきい値を下回るまで、またはメッセージ本文をそれ以上ページング・アウトできなくなるまで、可能なかぎり多くのメッセージ本文をページング・アウトしようとします。

ページング・アウトされたメッセージがJMSクライアントからリクエストされると、JMSサーバーは、(JVMのメモリー使用率とは関係なく)そのメッセージ本文を自動的にページング・インし、正しいメッセージ・ヘッダーと本文をクライアントに配信します。クライアントに配信されたメッセージは、サーバーJVMでのメモリー使用率に応じて再びページング・アウトの対象とみなすことができます。

メモリー使用率がページングしきい値を下回ると、JMSサーバーは、メッセージ本文のページング・アウトを停止します。すでにページング・アウトされていたメッセージ本文が自動的にページング・インされることはありません。メッセージ本文のページング・インは、必要な場合(つまり、メッセージがデキューされるかクライアントにより参照される場合)にのみ発生します。

デフォルトでは、ページングしきい値は1.0に設定されます。つまり、デフォルトでは、メッセージ本文はページングされません。

ページングしきい値として適切な値は、JMSアプリケーション、送受信するメッセージのサイズ、および実際の使用例における試行結果とメモリー使用率の監視結果に応じて選択する必要があります。

ページングしきい値には、正しい値を指定する必要があります。JMSのセマンティクスは、ページングが有効であるかどうかにかかわらず常に維持されます。ページングしきい値の設定により、JMSサーバーは、ページングを使用しない場合よりも多くのメッセージをメモリー内で処理できます。

JMS構成プロパティ

OEMS JMSのメモリー内およびファイル・ベースのオプションとJMSクライアントの実行時構成は、JVMシステム・プロパティを通じて管理します。これらのプロパティは、JMSの基本機能には影響しません。これらのプロパティは、JMSサーバーに固有の機能、拡張機能およびパフォーマンスの最適化に関係します。knobsコマンドライン・コマンドを使用すると、これらのプロパティを確認できます。

実行時に構成プロパティを編集するための主要ツールは、JMSAdministrator MBeanです。

別の方法として、スタンドアロン環境では、次のようにコマンドライン引数で構成プロパティを渡すことができます。

java -D<propertyname>=<value>

これらのプロパティ設定は、jms.xmlファイルに永続化されます。

JMSAdministratorResource MBeanのJMS構成プロパティ設定へのパス:

「OC4J: ホーム」→「管理」タブ→「タスク名: JMX」→「システムMBeanブラウザ」→「タスクに移動」→「J2EEDomain:oc4j」、「J2EEServer:standalone」、「JMSAdministratorResource」、「JMSAdministrator」にドリルダウン→「操作」タブ→setConfigProperty

表4-6に、OEMS JMSリソース・プロバイダのメモリー内およびファイル・ベースのオプションのシステム・プロパティとその説明を示します。

表4-6    システム・プロパティ 
JVMシステム・プロパティ  サーバー/クライアント  説明 

oc4j.jms.serverPoll  

JMSクライアント 

JMSコネクションがOC4Jサーバーをpingして、通信例外を例外リスナーにレポートする間隔(ミリ秒単位)。

型はlong、デフォルトは15000です。 

oc4j.jms.messagePoll  

JMSクライアント 

JMSコンシューマが新規メッセージの有無をチェックするまでに待機する最大間隔(ミリ秒単位)。

型はlong、デフォルトは1000です。 

oc4j.jms.listenerAttempts  

JMSクライアント 

メッセージが配信不可能と宣言されるまでの、リスナーによる配信試行回数。

このプロパティで配信試行回数が制限されるのは、setMessageListener()メソッドのいずれかを使用してJMSに登録されたMessageListenerによってメッセージが受信される場合のみです。受信メソッドのいずれかを使用してメッセージが受信される場合は(以前のMessageListenerへの配信試行によって、メッセージがすでに配信不可能であると宣言されている場合を除き)、配信試行回数は制限されません。JMSコネクタの場合、受信メソッドを使用してMDB用にインバウンド・メッセージ機能を実装するため、このプロパティは適用されません。また、J2EE 1.4におけるメッセージ・リスナーの使用に関する制限のため、このプロパティは、アプリケーション・クライアントにのみ適用されます。MDBでメッセージ配信試行を制限するには、MaxDeliveryCntアクティブ化仕様プロパティを使用する必要があります。orion-ejb-jar.xmlデモ・ファイルには、MaxDeliveryCntプロパティに関するコメントが含まれます。

型はint、デフォルトは5です。 

oc4j.jms.maxOpenFiles  

OC4Jサーバー 

永続性ファイルのオープン・ファイル記述子の最大数。これは、オペレーティング・システムにより許可されているオープン・ファイル記述子の最大数より多くの永続的な宛先オブジェクトでサーバーを構成する場合に使用します。

型はint、デフォルトは64です。 

oc4j.jms.saveAllExpired  

OC4Jサーバー 

すべての宛先オブジェクト(永続的、非永続的および一時的)に存在する期限切れになったすべてのメッセージを例外キューに保存します。

型はboolean、デフォルトはfalseです。 

oc4j.jms.socketBufsize  

JMSクライアント 

クライアント/サーバー通信にTCP/IPソケットを使用する場合は、ソケットのI/Oストリームに指定されたバッファ・サイズを使用します。最小バッファ・サイズの8KBが規定されます。クライアントとサーバーの間で送信されるメッセージのサイズが大きいほど、バッファ・サイズを大きくすると妥当なパフォーマンスが得られます。

型はint、デフォルトは64*1024です。 

oc4j.jms.debug  

JMSクライアント 

trueの場合、JMSクライアントとJMSサーバーでNORMALイベントのトレースが有効化されます。すべてのログ・イベント(NORMALWARNINGERRORおよびCRITICAL)が、stderrに送信され、(可能であれば)J2EE_HOME/log/server.logまたはJ2EE_HOME/log/jms.logのいずれかにも送信されます。このプロパティをtrueに設定すると、通常は大量のトレース情報が生成されます。

型はboolean、デフォルトはfalseです。 

oc4j.jms.noDms  

JMSクライアント 

trueの場合、インスツルメンテーションが無効化されます。

型はboolean、デフォルトはfalseです。 

oc4j.jms.forceRecovery 

OC4Jサーバー 

trueの場合、破損した永続性ファイルが強制的にリカバリされます。デフォルトでは、JMSサーバーは、ヘッダーが破損した永続性ファイルのリカバリを実行しません(一般的に、この状態は構成エラーと区別できないためです)。強制リカバリを実行すると、通常、JMSサーバーは正常に起動し、永続性ファイルと宛先オブジェクトが使用可能になります。

型はboolean、デフォルトはfalseです。 

oc4j.jms.pagingThreshold 

OC4Jサーバー 

JMSサーバーは、メモリー使用率がこの値を超えるとメッセージ本文のページングを開始します。この値は、JVMで使用中のメモリー量の見積です。この値の範囲は、0.0(プログラムでメモリーをまったく使用していない状態)〜1.0(プログラムで使用可能なすべてのメモリーを使用している状態)です。

型はdouble、デフォルトは1.0です。

詳細は、「メッセージのページング」を参照してください。 

oc4j.jms.pseudoTransactionEnlistment 

OC4Jサーバー 

このプロパティは下位互換性のためにのみ使用します。デフォルトでは無効化されています。trueに設定すると、自動登録機能が有効化されます。この機能を使用すると、XA JMS接続だけでなくXA JMS以外の接続でも、ネイティブJMSプロバイダによってOC4Jグローバル・トランザクションに自動的に登録できます。この機能は、今後のリリースでは使用できなくなります。

XAまたはXA JMS以外の接続をOC4Jグローバル・トランザクションに登録するには、この構成プロパティは設定しないでください。かわりに次のようにします。

JMS APIを使用して、OC4J-JMSのjavax.jms.XA*実装を使用しているOC4Jグローバル・トランザクションにXA接続を明示的に登録します。また、XA JMS以外の接続から作成された、指定のJMSセッションのローカル・トランザクションを明示的にコミットまたはロールバックします。 

jms.xmlファイルでのJMS構成プロパティの設定

次の例は、jms.xmlファイルで構成プロパティを設定する方法を示しています。

    <config-properties>
      <config-property name="oc4j.jms.debug" value="true">
      </config-property>
    </config-properties>

この例は、「jms.xmlを使用した構成」に記載されているjms.xmlの一部です。このプロパティは、表4-1「構成要素」にも記載されています。

OEMS JMSのメモリー内およびファイル・ベースのリソース名

この項では、変数resourceNameを使用して、リソース・プロバイダ(RP)のJNDIコンテキスト内に存在するRPのリソース(コネクション・ファクトリまたは宛先)のJNDIロケーションを示します。

OEMS JMSリソースのresourceNameは、「宛先オブジェクトおよびコネクション・ファクトリの構成」で説明したとおり、コンソールでJNDIロケーションとして指定します。コネクション・ファクトリのresourceNameの値は、特定のOEMS JMSコネクション・ファクトリを識別するために使用されます(図4-1の矢印番号16のリンク・キーを参照)。宛先のresourceNameの値は、特定のOEMS JMS宛先を識別するために使用されます(図4-1の矢印番号13のリンク・キーを参照)。コネクション・ファクトリおよび宛先のresourceNameの値は、JMSコネクタが省略される場合にも使用されることがあります(「アプリケーション・クライアントのJMSコネクタの省略」を参照)。

OEMS JMSのメモリー内およびファイル・ベースの直接ルックアップを使用するアプリケーション・クライアントに必要なクラスパス

OEMS JMSのメモリー内およびファイル・ベースのオプションをアプリケーション・クライアントから直接使用する場合、表4-7「OEMS JMSのメモリー内およびファイル・ベースのルックアップに必要なクライアント・サイドのJARファイル」にリストされたクラスパスに各JARファイルが含まれている必要があります。

表4-7    OEMS JMSのメモリー内およびファイル・ベースのルックアップに必要なクライアント・サイドのJARファイル 
JAR  ORACLE_HOMEパス 

oc4jclient.jar 

/j2ee/<instance> 

jta.jar 

/j2ee/<instance>/lib 

jms.jar 

/j2ee/<instance>/lib 

jndi.jar 

/j2ee/<instance>/lib 

javax77.jar 

/j2ee/<instance>/lib 

optic.jar

opmn:ormi接頭辞がOracle Application Server環境で使用される場合にのみ必須) 

/opmn/lib 

OEMS JMSのデータベースの永続性

OEMS JMSのデータベースの永続性オプションは、Oracle Database Streams Advanced Queuing(AQ)機能へのJMSインタフェースです。この項では、AQを永続的なメッセージ・ストアとして使用するOEMS JMSの構成方法と使用方法について詳細に説明します。

OEMS JMSのメモリー内およびファイル・ベースのオプションと同様に、OEMS JMSのデータベースのオプションを通じてAQにアクセスする場合は、アプリケーションでJMSコネクタを使用することをお薦めします。

AQを使用してOEMS JMSを構成する方法の詳細は、『Oracle Streamsアドバンスト・キューイング・ユーザーズ・ガイドおよびリファレンス』を参照してください。

この項には、次の項目が含まれます。

OEMS JMSのデータベース・オプションの使用方法

OEMS JMSのデータベース・オプションで、リソース・プロバイダの宛先オブジェクト(キューおよびトピック)を作成してアクセスする手順は、次のとおりです。

OEMS JMSのデータベース・オプションのインストールと構成

管理者またはDBAは、『Oracle Streamsアドバンスト・キューイング・ユーザーズ・ガイドおよびリファレンス』および共通のデータベース・マニュアルに従って、OEMS JMSをインストールする必要があります。OEMS JMSのインストールおよび構成後に、追加の構成を適用します。これには、次が含まれます。

  1. 管理者またはDBAは、JMSクライアントからデータベースへの接続に使用するRDBMSユーザーを作成する必要があります。このユーザーに、OEMS JMS操作を実行するための適切なアクセス権限を付与します。OEMS JMSにより、データベース・ユーザーは、適切なアクセス権限があれば任意のスキーマのキューにアクセスできます。「ユーザーの作成と権限の割当て」を参照してください。

  2. 管理者またはDBAは、JMS宛先オブジェクトをサポートするための表およびキューを作成する必要があります。「OEMS JMSのデータベース・オプションの宛先オブジェクトの作成」を参照してください。


    注意

    次の各項では、キュー、トピック、表の作成と、権限の割当てを実行するSQLを使用します。

    これらの使用例は、http://www.oracle.com/technology/tech/java/oc4j/1013/how_to/index.htmlを参照してください。 


ユーザーの作成と権限の割当て

JMSクライアントからデータベースへの接続に使用するRDBMSユーザーを作成します。このユーザーに、OEMS JMS操作を実行するためのアクセス権限を付与します。必要な権限は、必要な機能に応じて異なります。各種機能に必要な権限の詳細は、『Oracle Streamsアドバンスト・キューイング・ユーザーズ・ガイドおよびリファレンス』を参照してください。

次の例では、jmsuserを作成します。このユーザーは、固有のスキーマ内で作成し、OEMS JMS操作に必要な権限を付与する必要があります。次の文を実行するには、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フェーズ・コミット権限の詳細は、第3章「OC4Jトランザクション・サポート」を参照してください。

OEMS JMSのデータベース・オプションの宛先オブジェクトの作成

DBMS_AQADMパッケージの詳細と、OEMS JMSのデータベース・オプションのメッセージ・タイプは、『Oracle Streamsアドバンスト・キューイング・ユーザーズ・ガイドおよびリファレンス』を参照してください。


注意

これらの使用例は、http://www.oracle.com/technology/tech/java/oc4j/1013/how_to/index.htmlを参照してください。  


次の例では、OEMS JMSのデータベースにキューとトピックを作成します。

  1. OEMS JMSの宛先(キューまたはトピック)を処理する表を作成します。

    トピックとキューの両方でキュー表を使用します。次のSQLの例では、キュー用に1つの表(demoTestQTab)を作成します。

    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パラメータは、複数のコンシューマが存在するかどうかを指定します。キューの場合、multiple_consumersfalseに設定します。トピックの場合、multiple_consumerstrueに設定します。

  2. JMS宛先を作成します。次のSQLの例では、キュー表demoTestQTab内にdemoQueueというキューを作成し、キューを開始します。

    DBMS_AQADM.CREATE_QUEUE(
          Queue_name          => 'demoQueue',
          Queue_table         => 'demoTestQTab');
    
    DBMS_AQADM.START_QUEUE(
          queue_name         => 'demoQueue');
    
例:

次の例では、トピック表demoTestTTab内にdemoTopicというトピックを作成する方法を示します。作成後は、2つの永続サブスクライバがトピックに追加されます。最後に、トピックを開始します。


注意

OEMS JMSのデータベース・オプションでは、DBMS_AQADM.CREATE_QUEUEメソッドを使用してキューとトピックの両方を作成します。  


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.START_QUEUE('demoTopic');


注意

OEMS JMSのデータベース・オプションでは、DBMS_AQADM.CREATE_QUEUEメソッドに渡される名前(Queue_name)が宛先のJNDI名に組み込まれます。たとえば、demoQueueというQueue_nameを使用して作成されたキューは、Queues/demoQueueというJNDI名で使用できます。

OEMS JMSの宛先をJMSコネクタの宛先でラップするには、OEMS JMSが提供する宛先のJNDI名と、oc4j-connectors.xmlファイルに定義されたJMSコネクタの宛先に対応する<config-property>jndiName$J2EE_HOME/configでのグローバル設定またはアプリケーションの.earファイルにオプションで含まれるローカル設定)が一致している必要があります。図4-1「JMS構成」の矢印番号13を参照してください。 


OEMS JMSのデータベース参照の宣言

リソース・プロバイダ参照の宣言の概要は、「リソース・プロバイダ参照の宣言」を参照してください。

リソース・プロバイダ参照を宣言する場合は、常にリソース・プロバイダ参照に使用する名前と、リソース・プロバイダ・インタフェースを実装するJavaクラスを指定する必要があります。

OEMS JMSのデータベース・オプションの場合、クラスはoracle.jms.OjmsContextです。OJMSReferenceという名前のリソース・プロバイダ参照を宣言するには、次のようにします。

    <resource-provider class="oracle.jms.OjmsContext" name="OJMSReference">
    ...
    </resource-provider>

たとえば、OEMS JMSの参照の名前がOJMSReferenceで、リソース・プロバイダ・キューのJNDIコンテキスト内のJNDIロケーションがQueues/MY_QUEUEである場合、アプリケーションとリソース・アダプタは、JNDIロケーションjava:comp/resource/OJMSReference/Queues/MY_QUEUEを使用してこのリソース・プロバイダ・キューにアクセスできます。

OEMS JMSの参照を宣言する一般的な手順は、次のとおりです。

  1. 最初に、data-sources.xmlファイルにローカル・データソースを作成します。デモ・セットには、この例が含まれます。/ojms/src/META-INF/data-sources.xmlを参照してください。

  2. 次に、OC4Jにdata-sources.xmlファイルの配置場所を指示するため、orion-application.xml<data-sources>要素を追加します。

        <data-sources path="data-sources.xml"/>
    

data-sourcesのパスは、orion-application.xmlファイルに対する相対パスです。

  • 最後に、リソース・プロバイダ参照にデータソースを設定するため、以前作成した<resource-provider>要素に<property>サブ要素を追加します。

        <resource-provider class="oracle.jms.OjmsContext" name="OJMSReference">
            <property name="datasource" 
    value="jdbc/xa/MyChannelDemoDataSource"></property>
        </resource-provider>
    

    データソースの構成方法の詳細は、このマニュアルの「データソース」の章を参照してください。使用するドライバ(OCIまたはシン)を選択する場合は、実際のアプリケーション・パフォーマンスを測定するのが最も効果的です。OCIドライバは、非XA操作では一般的に高速ですが、XA操作ではシン・ドライバより大幅に遅くなる可能性があります。

    How-Toドキュメントおよびデモ・セットと、そのURLのリストは、「JMSのHow-Toドキュメントおよびデモ・セット」を参照してください。

    OEMS JMSのデータベース・オプションのリソース名

    OEMS JMSのデータベース・オプションのリソースのresourceNameは、次のとおりです。

    typeName/instanceName

    typeNameおよびinstanceNameの値は、リソースのタイプ(コネクション・ファクトリまたは宛先)に応じて変化します。次に、この詳細を説明します。

    OEMS JMSのデータベース・オプションのコネクション・ファクトリの場合:

    typeNameは、コネクション・ファクトリ・タイプに応じて次のいずれかになります。

    instanceNameには、何を指定してもかまいません(OEMS JMSのデータベース・オプションのコネクション・ファクトリはカスタマイズできず、同じコネクション・ファクトリ・タイプの複数のインスタンスは必要とされないため、この名前は無視されます)。

    たとえば、OEMS JMSのデータベース・オプションで、非XAキューのコネクション・ファクトリのresourceNameは次のようになります(無視されるinstanceNameは、任意でmyQCFに設定します)。

     QueueConnectionFactories/myQCF
    

    前の手順で作成されたコネクション・ファクトリのresourceNameの値は、OEMS JMSのデータベース・オプションで特定のコネクション・ファクトリを識別するために使用されます(図4-1「JMS構成」の矢印番号16のリンク・キーを参照)。これらの値は、リソース・アダプタが省略される場合にも使用されることがあります(「アプリケーション・クライアントのJMSコネクタの省略」を参照)。

    次の表に、実装されるjavax.jms.*インタフェースを示します。

    表4-8    実装されるjavax.jms.*インタフェース 
    typeName  CF  QCF  TCF  XACF  XAQCF  XATCF 

    ConnectionFactories 

     

     

     

     

     

     

    QueueConnectionFactories 

     

     

     

     

     

     

    TopicConnectionFactories 

     

     

     

     

     

     

    XAConnectionFactories 

     

     

     

     

     

     

    XAQueueConnectionFactories 

     

     

     

     

     

     

    XATopicConnectionFactories 

     

     

     

     

     

     

    アプリケーションで(<res-type>要素の指定どおり)javax.jms.TopicConnectionFactoryを必要とする場合、適切なコネクション・ファクトリを戻すタイプ名は、TopicConnectionFactoriesおよびXATopicConnectionFactoriesのみです。

    OEMS JMSのデータベース・オプションの宛先の場合:

    typeNameは、宛先タイプに応じて次のいずれかになります。

    instanceNameは、宛先の名前(DBMS_AQADM.CREATE_QUEUEに渡されるQueue_Nameパラメータ)です。宛先が<resource-provider>要素のusernameプロパティで指定されたユーザーによって所有されていない場合は、instanceNameowner接頭辞(ownerは宛先の所有者)を付ける必要があります。(付ける必要がない場合でも、owner接頭辞は許可されます。)

    たとえば、OEMS JMSのデータベース・オプションで、DBMS_AQADM.CREATE_QUEUEのコール内で使用されるdemoQueueというキューのresourceNameは、次のとおりです。

    Queues/demoQueue
    

    ownersomeUserなど)を指定する必要がある場合、resourceNameは次のようになります。

    Queues/someUser.demoQueue
    

    前の手順により作成された宛先のresourceNameの値は、OEMS JMSのデータベース・オプションで特定の宛先を識別するために使用されます(図4-1の矢印番号13のリンク・キーを参照)。これらの値は、リソース・アダプタが省略される場合にも使用されることがあります(「アプリケーション・クライアントのJMSコネクタの省略」を参照)。

    OEMS JMSのデータベースの永続性を使用したメッセージの送受信

    アプリケーションでは、メッセージの送受信にJMSコネクタを使用することをお薦めします。この方法の場合、使用するリソース・プロバイダとは無関係に送受信コードを記述できます。「JMSメッセージの送受信」に記載されている例は、渡される宛先およびコネクション・ファクトリのロケーションを別にするだけで、OEMS JMSのデータベースを含むすべてのリソース・プロバイダで使用できます。

    OEMS JMSのデータベース・オプションの直接ルックアップを使用するアプリケーション・クライアントに必要なクラスパス

    OEMS JMSのデータベース・オプションをアプリケーション・クライアントから直接使用する場合、表4-9「OEMS JMSのデータベース・オプションのルックアップに必要なクライアント・サイドのJARファイル」にリストされたクラスパスに各JARファイルが含まれている必要があります。

    表4-9    OEMS JMSのデータベース・オプションのルックアップに必要なクライアント・サイドのJARファイル 
    JAR  ORACLE_HOMEパス 

    oc4jclient.jar 

    /j2ee/<instance> 

    ejb.jar 

    /j2ee/<instance>/lib 

    jta.jar 

    /j2ee/<instance>/lib 

    jms.jar 

    /j2ee/<instance>/lib 

    jndi.jar 

    /j2ee/<instance>/lib 

    javax77.jar 

    /j2ee/<instance>/lib 

    adminclient.jar 

    /j2ee/<instance>/lib 

    ojdbc14dms.jar 

    /j2ee/<instance>/../../oracle/jdbc/lib 

    dms.jar 

    /j2ee/<instance>/../../oracle/lib 

    bcel.jar 

    /j2ee/<instance>/lib 

    optic.jar

    opmn:ormi接頭辞がOracle Application Server環境で使用される場合にのみ必須) 

    /opmn/lib 

    Oracle Application ServerおよびOracleデータベースと組み合せたOEMS JMSのデータベース・オプションの使用方法

    この項では、OEMS JMSのデータベース・オプションとOracle Application Serverを組み合せて使用するユーザーにとって一般的な問題について説明します。

    aqapi.jarのコピー時のエラー

    OEMS JMSのデータベース・オプションをOracle Application Serverと組み合せて使用する場合に発生する一般的なエラーは、次のとおりです。

    PLS-00306 "wrong number or types of arguments"
    

    このメッセージが表示される場合は、Oracle Application Serverで使用されているaqapi.jarファイルに、AQで使用されているOracleデータベースのリリースとの互換性がありません。OEMS JMSのデータベース・オプションの現行リリースでサポートされている旧Oracleデータベースは、9.0.1.4、9.2.0.2以上、10.1.0以上および10.2.0以上です。

    Oracle Application ServerおよびOracle Databaseのどちらにも、OEMS JMSクライアントJARファイルが付属しています。よくある間違いは、双方の環境に互換性があると誤解して、Oracleデータベースのインストール環境とOracle Application Serverのインストール環境の間でaqapi.jarファイルをコピーすることです。どちらのインストールからもこのファイルをコピーしないでください。

    Oracle Application Serverのインストール環境の場合、OEMS JMSのデータベース・オプションのクライアントJARファイルは、ORACLE_HOME/rdbms/jlib/aqapi.jarです。このファイルは、CLASSPATHに含める必要があります。

    メッセージ・セレクタの使用時における順序の保存

    データベース永続性モードでメッセージ・セレクタを使用する際に順序が重要な場合には、Javaシステム・プロパティoracle.jms.orderWithSelectorをtrueに設定する必要があります。このプロパティは、デフォルトでfalseに設定されています。

    このシステム・プロパティを使用するには、AQユーザーにALTER SESSION権限が必要です。また、ORDER BY句に変換されるため、このプロパティをtrueに設定するとパフォーマンスに影響があります。

    サード・パーティJMSプロバイダの使用

    この項では、サポートされるサード・パーティJMSリソース・プロバイダへの参照を宣言する方法について簡単に説明します。

    リソース・プロバイダにXAインタフェースが存在し、JMSコネクタとアプリケーションがそのインタフェースを使用するよう構成されている場合、OC4Jでは、サポートされるすべてのリソース・プロバイダにおいて2フェーズ・コミット(2pc)に対応します。サポートされるすべてのサード・パーティ・プロバイダには、XAインタフェースがあります。

    OC4Jでサポートされる各サード・パーティJMSプロバイダのバージョンは、「サード・パーティJMSプロバイダの使用」にリストされています。

    この項では、次のサード・パーティJMSプロバイダの参照を宣言する方法について説明します。

    コンテキスト・スキャン・リソース・プロバイダ・クラスは、汎用のリソース・プロバイダ・クラスです。このクラスは、サード・パーティのメッセージ・プロバイダで使用するためにOCJに付属しています。


    注意

    リソース・プロバイダ参照を宣言するには、次のファイルのいずれかを使用します。

    • リソース・プロバイダ参照をすべてのアプリケーションに認識させるには(グローバル)、グローバルapplication.xmlファイルを使用します。

    • リソース・プロバイダ参照を単一のアプリケーションに認識させるには(ローカル)、そのアプリケーションに固有のorion-application.xmlファイルを使用します。

     

    IBM WebSphere MQのリソース・プロバイダ参照の宣言

    WebSphere MQは、IBM社のメッセージ・プロバイダです。WebSphere MQのリソースは、次のロケーションで使用できます。

    java:comp/resource/providerName 
    

    ここで、providerNameは、<resource-provider>要素で使用される名前です。

    WebSphere MQのリソース・プロバイダ参照を宣言する手順は、次のとおりです。

    1. システムにWebSphere MQをインストールして構成します。次に、ベンダーから提供されている例またはツールを実行してインストールが成功していることを確認します。手順の詳細は、WebSphere MQソフトウェアに付属のドキュメントを参照してください。

    2. WebSphere MQをカスタム・リソース・プロバイダとして追加します。

      次の例は、orion-application.xmlファイルの<resource-provider>要素を使用して、WebSphere MQのリソース・プロバイダ参照を宣言する方法を示しています。

      <resource-provider
          class="com.evermind.server.deployment.ContextScanningResourceProvider"
          name="MQSeries">
        <description> MQSeries resource provider </description>
        <property
            name="java.naming.factory.initial"
            value="com.sun.jndi.fscontext.RefFSContextFactory">
        </property>
        <property
            name="java.naming.provider.url"
            value="file:/home/developer/services_guide_demo/mqseries/src/bindings">
        </property>
      </resource-provider>
      

      この例は、デモ・セットの環境での構成方法を示しています。この例は、デモ作成者の環境にのみ適用されるため、他の環境で使用する場合は適切に編集する必要があります。

    3. IBM社のドキュメントに従って、WebSphere MQのJMSクライアントに必要なJARファイルをJ2EE_HOME/applibに追加します。

      詳細は、デモ・セットのhow-to-gjra-with-mqseries.htmlドキュメントにある「Resource Provider Task #3: Declare a Resource Provider Reference」を参照してください。

    How-Toドキュメントおよびデモ・セットと、そのURLのリストは、「JMSのHow-Toドキュメントおよびデモ・セット」を参照してください。

    TIBCO Enterprise Message Serviceのリソース・プロバイダ参照の宣言

    TIBCO Enterprise Message Serviceは、TIBCO Software社のメッセージ・プロバイダです。TIBCOのリソースは、次のロケーションで使用できます。

    java:comp/resource/providerName
    

    ここで、providerNameは、<resource-provider>要素で使用される名前です。

    TIBCOのリソース・プロバイダ参照を宣言する手順は、次のとおりです。

    1. システムにTIBCO Enterprise Message Serviceをインストールして構成します。次に、ベンダーから提供されている例またはツールを実行してインストールが成功していることを確認します。手順の詳細は、TIBCOソフトウェアに付属のドキュメントを参照してください。

    2. TIBCOをカスタム・リソース・プロバイダとして追加します。次の例は、orion-application.xmlファイルの<resource-provider>要素を使用して、TIBCOのリソース・プロバイダ参照を宣言する方法を示しています。

          <resource-provider
             class="com.evermind.server.deployment.ContextScanningResourceProvider"
             name="TibcoJMSReference">
              <property 
                  name="java.naming.factory.initial" 
                  value="com.tibco.tibjms.naming.TibjmsInitialContextFactory">
              </property>
              <property 
                  name="java.naming.provider.url" 
                  value="tibjmsnaming://jleinawe-sun:7222">
              </property>
          </resource-provider>
      

      この例は、デモ・セットの環境での構成方法を示しています。この例は、デモ作成者の環境にのみ適用されるため、他の環境で使用する場合は適切に編集する必要があります。

    3. TIBCO社のドキュメントに従って、TIBCOのJMSクライアントに必要なJARファイルをJ2EE_HOME/applibに追加します。

      詳細は、デモ・セットのhow-to-gjra-with-tibco.htmlドキュメントにある「Resource Provider Task #3: Declare a Resource Provider Reference」を参照してください。

    How-Toドキュメントおよびデモ・セットと、そのURLのリストは、「JMSのHow-Toドキュメントおよびデモ・セット」を参照してください。

    SonicMQのリソース・プロバイダ参照の宣言

    SonicMQは、Sonic Software社のメッセージ・プロバイダです。SonicMQのリソースは、次のロケーションで使用できます。

    java:comp/resource/providerName
    

    ここで、providerNameは、<resource-provider>要素で使用される名前です。

    SonicMQのリソース・プロバイダ参照を宣言する手順は、次のとおりです。

    1. システムにSonicMQをインストールして構成します。次に、ベンダーから提供されている例またはツールを実行してインストールが成功していることを確認します。手順の詳細は、Sonicソフトウェアに付属のドキュメントを参照してください。

    2. SonicMQをカスタム・リソース・プロバイダとして追加します。次の例は、orion-application.xmlファイルの<resource-provider>要素を使用して、SonicMQのリソース・プロバイダ参照を宣言する方法を示しています。

          <resource-provider
             class="com.evermind.server.deployment.ContextScanningResourceProvider"
             name="SonicJMSReference">
              <property
                  name="java.naming.factory.initial"
                  value="com.sonicsw.jndi.mfcontext.MFContextFactory">
              </property>
              <property 
                  name="java.naming.provider.url"
                  value="tcp://stadd41:2506">
              </property>
              <property
                  name="com.sonicsw.jndi.mfcontext.domain"
                  value="Domain1">
              </property>
          </resource-provider>
      

      この例は、デモ・セットの環境での構成方法を示しています。この例は、デモ作成者の環境にのみ適用されるため、他の環境で使用する場合は適切に編集する必要があります。

    3. Sonic社のドキュメントに従って、SonicMQのJMSクライアントに必要なJARファイルをJ2EE_HOME/applibに追加します。

      詳細は、デモ・セットのhow-to-gjra-with-sonic.htmlドキュメントにある「Resource Provider Task #3: Declare a Resource Provider Reference」を参照してください。

    How-Toドキュメントおよびデモ・セットと、そのURLのリストは、「JMSのHow-Toドキュメントおよびデモ・セット」を参照してください。

    JMSコネクタ

    Oracle Application Serverには、JMSコネクタと呼ばれる、J2CA 1.5に準拠したリソース・アダプタがあります。JMSコネクタは、アプリケーションがJMS 1.1または1.02bを実装する任意のJMSプロバイダにアクセスする際に統一されたメカニズムを提供します。OracleASjmsはJMSコネクタのインスタンスで、OEMS JMSのメモリー内およびファイル・ベースのオプションで使用できるように構成されています。JMSコネクタでは、Oracle固有のAPIは使用されていません。サポートされるJMS実装には、OEMS JMSに加え、IBM Websphere MQ JMS、TIBCO Enterprise Message Server、SonicMQ JMSなどのサード・パーティ製品が含まれます。

    JMSコネクタは、OC4J実装でJMSを使用する場合に推奨されます。JMSコネクタは、J2CA 1.5標準と、JMS 1.1および1.02b標準に準拠しています。OC4J用の最小限のカスタマイズが含まれますが、個々のJMSプロバイダ用のカスタマイズは含まれません。JMSコネクタは、すべての標準的なJMS実装をシームレスに統合するよう設計されています。


    注意

    JMSプロバイダではカスタムの拡張機能がサポートされることが多いため、一般的にJMSコネクタでは、特定のJMSプロバイダへの最適なアクセスは保証されません。 


    JMSコネクタには、次の機能が含まれます。

    通常、JMSコネクタは、接続先のEISがJMSリソース・プロバイダである場合に使用します。ただし、JMSコネクタは、EISでJ2EEアプリケーション・コンポーネントへの通知手段としてJMSメッセージ機能を使用する場合にも使用できます。この場合、リソース・アダプタ(およびJMSリソース・プロバイダ)は、EIS固有のリソース・アダプタに存在するインバウンド通信機能のかわりに使用できます。この2面アダプタ・ソリューション(EIS固有のアダプタをアウトバウンド通信に使用し、JMSコネクタをインバウンド通信に使用する方法)により、通常であれば不可能であるEISとJ2EEアプリケーション間の双方向通信が可能になります。

    リソース・アダプタの詳細は、『Oracle Containers for J2EEリソース・アダプタ管理者ガイド』を参照してください。

    JMSコネクタの変更

    OC4Jに付属のJMSコネクタは、OEMS JMSのメモリー内およびファイル・ベースの永続性オプションをサポートするよう事前に構成されています。OEMS JMSのデータベース・オプション、またはサポートされるOracle以外のJMSプロバイダのいずれかを統合する場合は、JMSコネクタ用に別の構成を作成する必要があります。アプリケーションのローカル・アダプタを使用してOEMS JMSのメモリー内およびファイル・ベースのオプションに接続する場合も、別のJMSコネクタを作成することが可能です。

    How-Toドキュメントおよびデモ・セットと、そのURLのリストは、「JMSのHow-Toドキュメントおよびデモ・セット」を参照してください。

    新規JMSコネクタ・モジュールを作成および構成する手順は、次のとおりです。

    1. 接続先のリソース・プロバイダのデモ・セットに移動します。

    2. How-Toドキュメントを読みます。

    3. 新規JMSコネクタ・モジュールのテンプレートとして使用する次のファイルをコピーします。

      • ra.xml

      • oc4j-ra.xml

      • oc4j-connectors.xml

    4. How-Toドキュメントの「Configuring the Resource Adapter」の指示に従って、ra.xmloc4j-ra.xmlおよびoc4j-connectors.xmlファイルを変更します。

    5. 次の構造を使用して、新規.rarファイルを作成します(ファイル名は任意です)。

      META-INF/ra.xml

      META-INF/oc4j-ra.xml

    6. 希望する可視性レベルに応じて、次のいずれかの場所に新規oc4j-connectors.xmlを配置します。

      • アプリケーション単位のローカルな可視性を確保するには、アプリケーションの.earファイルのトップレベルにあるMETA-INF/ディレクトリに新規oc4j-connectors.xmlファイルを配置します。

        グローバルな可視性を確保するには、1つ以上の新規<connector>要素を$J2EE_HOME/config/oc4j-connectors.xmlファイルにコピーします。新規コネクタの名前(<connector>name属性)が、他のコネクタまたは任意のJNDIオブジェクトの名前と競合していないことを確認してください。

    7. 次のように、デプロイの準備を行います。

      • ローカルな可視性を確保する場合は、次のようにします。

        • 新規.rarファイルを.earファイルに配置します。

        • 次のような<connectors>要素を.earファイルのMETA-INF/orion-application.xmlファイルに挿入します。

          <connectors path="oc4j-connectors.xml"/>
          
        • 次のような<module>要素を.earファイルのMETA-INF/application.xmlファイルに挿入します。

          <module>
              <connector>rarFileName</connector>
          </module>
          
      • グローバルな可視性を確保する場合は、『Oracle Containers for J2EEデプロイメント・ガイド』に記載されているコネクタのデプロイ手順に従ってください。

    JMSコネクタの構成

    Application Server Controlコンソールは、JMSコネクタを構成するための主要ツールです。

    コネクション・ファクトリおよび宛先

    デフォルト・アプリケーションには、デフォルトのJMSコネクタ用に次の宛先オブジェクトが定義されています。

    これらの宛先およびJNDIサブコンテキストをラップする自動宛先は、コンソールやJMSAdministrator MBeanで事前に宛先を定義することなくアプリケーションで使用できます。自動宛先ラッピング機能を使用する場合、JNDIルックアップの名前には次の形式を使用します。

    <JNDIsubcontext>/providerName
    

    ここで、<JNDIsubcontext>は、oc4j-connectors.xmlファイルで指定されたJNDIサブコンテキストをラップする自動宛先です。たとえば、自動宛先ラッピングをJMSコネクタと組み合せて使用する場合、JNDI名は次の形式になります。

    OracleASjms/Queues/jms/<queue_name>
    

    または

    OracleASjms/Topics/jms/<topic_name>
    

    JMSコネクタのデフォルトのコネクション・ファクトリは、次のとおりです。

      XA  非XA 

    デフォルトのキュー・コネクション・ファクトリ 

    OracleASjms/MyXAQCF 

    OracleASjms/MyQCF 

    デフォルトのトピック・コネクション・ファクトリ 

    OracleASjms/MyXATCF 

    OracleASjms/MyTCF 

    デフォルトの統合コネクション・ファクトリ 

    OracleASjms/MyXACF 

    OracleASjms/MyCF 

    この表のデフォルト・コネクション・ファクトリは、OC4Jに付属のデフォルトのoc4j-ra.xmlファイルに明示的に宣言されています。

    データベースの永続性の宛先

    自動宛先ラッピングは、OEMS JMSのデータベース・オプションを使用するためにJMSコネクタをカスタマイズする際にも使用できます。前述のデフォルトのコネクタと同様に、JNDIルックアップの名前には次の形式を使用します。

    <JNDIsubcontext>/providerName
    

    ここで、<JNDIsubcontext>は、oc4j-connectors.xmlファイルで指定されたJNDIサブコンテキストをラップする自動宛先で、<providerName>は、接頭辞queueまたはtopicが付く物理データベース宛先です。

    たとえば、自動宛先ラッピングを、OracleDB/wrapのJNDIsubcontextとともにデプロイされたOEMSデータベースのJMSコネクタと組み合せて使用する場合、そのデータベースのJNDI名は次の形式になります。

    OracleDB/wrap/Queues/<queue_name>
    

    または

    OracleDB/wrap/Topics/<topic_name>
    
    JMSコネクタのコネクション・ファクトリおよび宛先の作成

    JMSコネクタのコネクション・ファクトリおよび宛先を構成する方法(oc4j-connectors.xmloc4j-ra.xmlおよびra.xmlファイルの例を含む)は、http://www.oracle.com/technology/tech/java/oc4j/1013/how_to/index.htmlのドキュメントを参照してください。

    関連するhow-to-gjra-with-xxx.zipファイル(xxxはリソース・プロバイダの名前)をダウンロードして解凍します。関連するHow-Toドキュメントの「Configuring the Resource Adapter」を参照してください。

    JMSコネクタのXMLファイルのリファレンス情報は、『Oracle Containers for J2EEリソース・アダプタ管理者ガイド』の付録A「OC4Jリソース・アダプタ構成ファイル」を参照してください。

    JMSコネクタの設定

    表4-10に、JMSコネクタの構成設定とその説明を示します。

    Application Server ControlコンソールのJMSコネクタ設定へのパス:

    「OC4J: ホーム」→「アプリケーション」タブ→「ビュー: スタンドアロン・リソース・アダプタ」→「OracleAS JMS」

    表4-10    JMSコネクタの構成設定 
    コンソール設定  XML永続性ファイル  説明 

    「OC4J: ホーム」→「アプリケーション」タブ→「ビュー: スタンドアロン・リソース・アダプタ」→「OracleAS JMS」→「コネクション・ファクトリ」タブ→「作成」ボタン

    コネクション・ファクトリ・インタフェース

    図4-1の矢印番号14のリンク参照。  

    この設定は、oc4j-ra.xmlファイルの<connectionfactory-interface>要素で永続化されます。  

    コネクション・ファクトリ・インタフェース設定では、作成するコネクション・ファクトリのタイプを定義します。  

    JNDIロケーション

    図4-1の矢印番号5のリンク・キー。  

    この設定は、oc4j-ra.xmlファイルの<connector-factory>要素のlocation属性で永続化されます。  

    JNDIロケーション設定では、リソース・アダプタの新規コネクション・ファクトリをバインドするJNDIロケーションを指定します。EISに接続するアプリケーション・コンポーネントがコネクション・ファクトリを特定できるように、有効なJNDIロケーションを入力します。

    このJNDIロケーションは、jndiLocationとは異なることに注意してください。  

    接続プーリング  

    この設定は、oc4j-ra.xmlファイルの<connection-pooling>要素に永続化されます。  

    接続プーリングにより、EISへの一連の接続をアプリケーション内で再利用できます。アプリケーションでは、独自の排他的接続プールを作成するか、このリソース・アダプタで使用可能ないずれかの共有接続プールを使用するかを選択できます。

    接続プールなし: 接続プーリングを無効化する場合、このオプションを選択します。

    プライベート接続プールの使用: 選択したコネクション・ファクトリで排他的に使用する新規接続プールを作成する場合、このオプションを選択します。

    共有接続プールの使用: 複数のコネクション・ファクトリで利用可能な共有接続プールを使用する場合、このオプションを選択します。

    oc4j-ra.xmlファイルには、JMSコネクタのOC4J固有の構成が含まれます。<connector-factory>のサブ要素には、コネクション・ファクトリの接続プーリングを設定するための<connection-pooling>と、コンテナ管理のサインオンを設定するための<security-config>があります。各connector-factoryで、プライベート接続プールを構成するか、<oc4j-connector-factories><connection-pool>サブ要素を通じて設定される共有接続プールを使用することが可能です。 

    jndiLocation

    図4-1の矢印番号16のリンク参照。  

    この設定は、oc4j-ra.xmlファイルの<connector-factory>要素の<config-property>サブ要素で永続化されます。 

    jndiLocation設定では、作成されるリソース・アダプタのコネクション・ファクトリでラップするリソース・プロバイダのコネクション・ファクトリを指定します。

    このjndiLocationは、JNDIロケーションとは異なることに注意してください。 

    <なし>  

    この設定は、oc4j-ra.xmlファイルの<connector-factory>要素の<config-property>サブ要素で永続化されます。 

    clientId設定では、JMSコネクタ接続で作成される新規リソース・プロバイダ接続に適用するクライアントIDを指定します。  

    「OC4J: ホーム」→「アプリケーション」タブ→「ビュー: スタンドアロン・リソース・アダプタ」→「OracleAS JMS」→「管理対象オブジェクト」タブ→「作成」ボタン

    オブジェクト・クラス 

    この設定は、oc4j-connectors.xmlファイルの<adminobject-config>要素の<adminobject-class>サブ要素で永続化されます。  

    オブジェクト・クラス設定では、作成される管理対象オブジェクト(宛先)のタイプを定義します。ドロップダウン・リストから選択します。 

    JNDIロケーション

    図4-1の矢印番号7および11のリンク・キー。  

    この設定は、oc4j-connectors.xmlファイルの<adminobject-config>要素のlocation属性で永続化されます。  

    JNDIロケーション設定では、リソース・アダプタの新規管理対象オブジェクト(宛先)をバインドするJNDIロケーションを指定します。 

    jndiName

    図4-1の矢印番号13のリンク参照。  

    この設定は、oc4j-connectors.xmlファイルの<adminobject-config>要素にある<config-property>サブ要素のvalue属性で永続化されます。  

    jndiName設定は、作成されるリソース・アダプタの管理対象オブジェクト(宛先)でラップするリソース・プロバイダの宛先のJNDI名です。

    注意: このjndiName設定の説明は、個別にバインドされるリソース・プロバイダのキューおよびトピックに適用されます。詳細は、デモ・セットのoc4j-connectors.xmlファイルのコメントを参照してください。 

    resourceProviderName

    図4-1の矢印番号12のリンク参照。  

    この設定は、oc4j-connectors.xmlファイルの<adminobject-config>要素にある<config-property>サブ要素のvalue属性で永続化されます。 

    resourceProviderName設定では、作成されるリソース・アダプタの管理対象オブジェクト(宛先)でラップされる宛先を所有するリソース・プロバイダを指定します。 

    「ResourceAdapter」→「管理」→「enableDMS」 

    この設定は、ra.xmlのサブ要素である<resourceadapter><config-property>サブ要素で永続化されます。

    また、この設定は、oc4j-connector.xmlのサブ要素である<connector><config-property>サブ要素でも永続化されます。

    oc4j-connector.xmlファイルは、ra.xmlよりも優先されます。 

    このプロパティは、JMSリソース・アダプタによりDMSパフォーマンス・メトリックが収集されるかどうかを指定します。このプロパティは、デフォルトでtrueに設定されます。このプロパティをfalseに設定すると、JMSリソース・アダプタによりDMSパフォーマンス・メトリックの収集が停止されます。 

    「ResourceAdapter」→「管理」→「loggerName」 

    この設定は、ra.xmlのサブ要素である<resourceadapter><config-property>サブ要素で永続化されます。

    また、この設定は、oc4j-connector.xmlのサブ要素である<connector><config-propety>サブ要素でも永続化されます。

    oc4j-connector.xmlファイルは、ra.xmlよりも優先されます。 

    このプロパティは、JMSリソース・アダプタのロギングを処理するログ出力の名前を指定します。ログ出力はj2ee-logging.xmlで定義できます。このプロパティのデフォルト値はnullです(nullの場合、ログ出力の名前はoracle.j2ee.ra.jms.genericに設定されます)。 

    XMLファイルでのJMSコネクタの構成

    JMSコネクタの構成設定は、次のファイルで永続化されます。

    oc4j-connectors.xmloc4j-ra.xmlおよびra.xmlファイルの具体的な使用例は、http://www.oracle.com/technology/tech/java/oc4j/1013/how_to/index.htmlを参照してください。

    JMSコネクタのXMLファイルのリファレンス情報は、『Oracle Containers for J2EEリソース・アダプタ管理者ガイド』の付録A「OC4Jリソース・アダプタ構成ファイル」を参照してください。


    注意

    XMLファイルで直接変更した構成を有効化するには、OC4Jインスタンスを再起動する必要があります。 


    メッセージドリブンBeanの使用

    OC4Jでは、JMSコネクタを使用してメッセージ・プロバイダをプラグインするMDBをサポートしています。このプロバイダには、OEMS JMSやサポートされているサード・パーティのメッセージ・プロバイダが含まれます。これにより、JMS接続プーリングや、変化する負荷に応じてサイズ変更(動的負荷調整)を行うMDBリスナー・スレッド・セットなど、各種の有益な機能が提供されます。

    MDBの使用方法の詳細な例は、http://www.oracle.com/technology/tech/java/oc4j/1013/how_to/index.htmlのメッセージングのデモに含まれます。

    How-Toの.zipファイルのいずれかをダウンロードして解凍します。MDBの構成例は、/src/ejb/META-INF/ejb-jar.xmlおよび/src/ejb/META-INF/orion-ejb-jar.xmlファイルで確認できます。

    接続プーリング

    JMSコネクタでは、J2CAの接続プーリングが使用されます。接続プーリングの詳細は、『Oracle Containers for J2EEリソース・アダプタ管理者ガイド』を参照してください。

    MDBエンドポイントの微調整

    各MDBエンドポイントは、一連の構成プロパティ(ActivationSpecプロパティと呼ばれる)と関連付けられています。このプロパティは、JMSコネクタによりメッセージ・エンドポイントがアクティブ化され、メッセージ・エンドポイントがメッセージドリブンBeanと関連付けられる際に使用されます。このプロパティは、特にパフォーマンス、ロギング、例外キュー、メッセージ承認およびサブスクリプションの操作に使用されます。

    通常、このプロパティはorion-ejb-jar.xmlに設定されています。ただし、JMSコネクタがアプリケーションの.earファイルに含まれる場合には、ejb-jar.xmlファイルでもこのプロパティを設定できます。各ファイルでの構文は異なります。

    orion-ejb-jar.xmlを使用する場合、プロパティは次の構文を使用して、各<message-driven-deployment>ノードに追加されます。

    <config-property>
       <config-property-name>ExamplePropertyName</config-property-name>
       <config-property-value>ExampleValue</config-property-value>
    </config-property>
    

    ejb-jar.xmlファイルを使用する場合、プロパティは次の構文を使用して、各<message-driven>ノードに追加されます。

    <activation-config-property>
       <activation-config-property-name>ExamplePropertyName
       </activation-config-property-name>
       <activation-config-property-value>ExampleValue
       </activation-config-property-value>
    </activation-config-property>
    

    次の表に、MDBエンドポイントの微調整に使用可能な構成プロパティを説明します。

    表4-11    MDBの構成プロパティ 
    構成プロパティ  説明 

    ReceiverThreads 

    (整数でデフォルトは1

    エンドポイントに作成するリスナー・スレッドの最大数を設定します。キューでは、メッセージを使用できる割合を増加する際には、複数のスレッドを使用すると便利です。トピックでは、この値は常に1である必要があります。(各リスナー・スレッドにより、独自のセッションとTopicSubscriberが取得されます。永続サブスクライバでは、同じサブスクリプション名のサブスクライバを複数持つことはできません。非永続サブスクライバでは、スレッド数が多いとサブスクライバの数が増え、各メッセージのコピーも増加するため、複数のスレッドを持つことにメリットはありません。)ListenerThreadMinBusyDurationを参照してください。 

    ListenerThreadMaxPollInterval 

    (ミリ秒でデフォルトは5000

    リスナー・スレッドによるポーリングで、処理を待機しているメッセージの有無が確認されます。ポーリングを頻繁に実行すると、指定したリスナー・スレッドが(平均では)より迅速に新しいメッセージに対応できます。リソース・プロバイダは、ポーリングが行われるたびに受信リクエストを処理する必要があるため、ポーリングを頻繁に実行するとオーバーヘッドが発生します。

    オラクル社のJMSコネクタ実装では、(アクティビティが認識されると)アクティビティの期間中はポーリング間隔が短く(ポーリング率が高く)なり、非アクティブの期間中はポーリング間隔が長く(ポーリング率が低く)なる、調整可能なアルゴリズムが適用されます。ListenerThreadMaxPollIntervalプロパティには、この調整可能なアルゴリズムで使用されるポーリング間隔に上限があります。 

    ListenerThreadMaxIdleDuration 

    (ミリ秒でデフォルトは300000

    メッセージを受信していないリスナー・スレッドが保持される期間を表します。(エンドポイントがアクティブなかぎり、少なくとも1つのリスナー・スレッドが残ります。) 

    ListenerThreadMinBusyDuration 

    (ミリ秒でデフォルトは10000

    リスナー・スレッドがメッセージを受信した際に、(新しいメッセージの到着を待機する必要があったため)ListenerThreadMinBusyDurationで指定された期間中(ミリ秒)に一度もアイドル状態になっておらず、エンドポイントの現行のリスナー数がReceiverThreadsの値より少ない場合、(アプリケーション・サーバーにより)追加のリスナー・スレッドが作成されます。 

    MaxDeliveryCnt 

    (整数でデフォルトは5

    メッセージにJMSXDeliveryCountプロパティがあり、そのプロパティの値がMaxDeliveryCntの値よりも大きい場合、メッセージは破棄されます(onMessageには送信されません)。例外キューが有効な場合(UseExceptionQueueを参照)は、そのメッセージのコピーが例外キューに送信されます。MaxDeliveryCnt0に設定すると、メッセージは破棄されません。(MDBが例外をスローすることでメッセージに対応すると、メッセージは配信されたとみなされず、再度配信されることに注意してください。MDBが指定されたメッセージに常に例外をスローすることで対応し、メッセージが破棄されないようにMaxDeliveryCnt0に設定されていると、MDBが無限ループに陥り、同じメッセージの処理に何度も失敗します。) 

    EndpointFailureRetryInterval 

    (ミリ秒でデフォルトは60000

    JMSプロバイダに障害が発生すると、リスナー・スレッドは自動的に終了します。(たとえば、リスナー・スレッドがMessageConsumer.recieve()をコールすると例外が発生します。)エンドポイントの実行中にすべてのリスナー・スレッドが終了した場合は、エンドポイント障害とみなされます。この状態では、MDBはメッセージを受信できません。これは、維持ネットワークの障害またはJMSサーバーが起動していないなどの原因で発生します。この場合、JMSコネクタは、成功するかエンドポイントが停止されるまで、EndpointFailureRetryIntervalで指定された間隔(ミリ秒)ごとに新しいリスナー・スレッドの開始が試行され(JMSプロバイダに再接続され)ます。リスナー・スレッドの作成に成功すると、リスナー・スレッド管理は通常の動作に戻ります。(ReceiverThreadsListenerThreadMaxIdleDurationおよびListenerThreadMinBusyDurationを参照してください。)これにより、接続障害からのほぼ透過的なリカバリが実現されますが、どんな場合にも完全に透過的であるとはかぎりません。

    • 新規JMSセッションの作成が必要ですが、JMSメッセージの順序保証が適用されるのは単一のセッション内で受信されたメッセージのみであるため、再接続後に受信したメッセージは再接続前に受信したメッセージを考慮せずに順序付けされます。これが当てはまるかどうかは、JMSプロバイダの動作によって異なります。(JMSで必要な程度よりも厳密である完全なメッセージ順序付けを提供するJMSプロバイダでは、メッセージの順序付けに関する問題は表示されません。)

    • エンドポイントが非永続サブスクライバの場合、メッセージは失われるか破棄されます。この問題は、キューを使用している場合、または永続サブスクライバとともにトピックを使用している場合には発生しません。実際にメッセージの消失/重複が発生するかどうか(また、2つの問題のどちらが発生するか)は、JMSプロバイダの固有の動作によって異なります。この問題を回避するには、失敗する可能性のあるJMSプロバイダ接続とともに、非永続サブスクライバを使用しないでください。

     

    ClientId 

    (文字列でデフォルトはなし)

    設定すると、リスナー・スレッドにより使用される接続は、このクライアントIDを使用するように設定されます。 

    ResUserResPassword 

    (文字列でデフォルトはnull

    これらのプロパティを使用すると、ユーザー/パスワードをリソース・プロバイダに渡すことができます。これらのプロパティのどちらも設定されていない場合、MDBのインバウンド・メッセージの処理(および有効化されている場合は例外キューの処理)に使用される接続は、引数のないcreate*Connectionメソッドを使用して作成されます。これらのプロパティのいずれかまたは両方が設定されている場合は、ユーザー/パスワード引数としてcreate*Connectionメソッドに渡されます。(設定されていないプロパティが1つのみの場合は、create*Connectionのその特定の引数にはNULLが使用されます。)ResPasswordプロパティでは、標準のパスワードの間接化オプションがサポートされています(たとえば、->joeuserでjoeuserのパスワードを表すことができます)。 

    AcknowledgeMode 

    (文字列でデフォルトはAuto-acknowledge

    Auto-acknowledgeまたはDups-ok-acknowledgeに設定されている必要があります。メッセージを使用し、MDBのonMessageメソッドをコールするリスナー・スレッドにより提供されるサービス品質を制御します。 

    MessageSelector 

    (文字列でデフォルトのメッセージのフィルタ処理はなし)

    MDBのonMessageメソッドに送信されるメッセージのフィルタ処理に使用されるセレクタ式。(たとえば、リスナー・スレッドに作成されるJMS MessageConsumersのmessageSelectorとして使用されます。) 

    SubscriptionDurability 

    (文字列でデフォルトはNonDurable

    トピックの場合は、DurableまたはNonDurableに設定されている必要があります。(キューには設定しないでください。)リスナー・スレッドにより使用されるトピック・コンシューマの永続性を制御します。SubscriptionDurabilityがDurable(およびDestinationTypejavax.jms.Topicまたはjavax.jms.Destination)に設定されている場合は、SubscriptionNameプロパティが必要です。 

    SubscriptionName 

    (文字列でデフォルトはなし)

    このプロパティは、SubscriptionDurabilityDurable(およびDestinationTypejavax.jms.Topicまたはjavax.jms.Destination)の場合に必要です。(それ以外の場合は無視されます。)リスナー・スレッドにより使用される永続性サブスクライバの作成に使用される名前です。指定されたJMSサーバーでは、指定されたサブスクリプション名を割り当てるMDBは多くとも1つである必要があります(このMDBに所有されているリスナー・スレッドは最高でも1つである必要があります)。 

    TransactionTimeout 

    (ミリ秒でデフォルトは300000

    現行のトランザクションを終了するまでにJMSコネクタがメッセージの到着を待機する期間を制限します。トランザクション・マネージャにより、トランザクションが存在できる期間が制限されます(transaction-manager.xmlを参照してください)。TransactionTimeoutは、問題が発生しないかぎり、onMessageのルーチン中にはトランザクション・マネージャによるトランザクションのタイムアウトが行われないように設定する必要があります。たとえば、トランザクション・マネージャのタイムアウトが30秒に設定されていて、onMessageルーチンは問題が発生しないかぎり10秒より長くかからない場合、このプロパティは20秒(20000ミリ秒)に設定します。 

    UseExceptionQueue 

    (ブールでデフォルトはfalse

    UseExceptionQueuetrueの場合、そうでない場合には破棄されるメッセージは例外キューに送信されます。(これが発生するのは、最大配信数を超えた場合のみです。MaxDeliveryCntプロパティを参照してください。)元のメッセージを例外キューに直接送信するのではなく、次の手順を実行します。

    • 同じタイプの新しいメッセージを作成します。

    • 元のメッセージのプロパティおよびボディを新しいメッセージにコピーします。

    • ヘッダーがコピーされている場合、そのメッセージを例外キューに送信すると多くの場合は破棄(リソース・プロバイダにより上書き)されます。そのため、元のメッセージのヘッダーはコピーのプロパティに変換し、getJMS{Header}を使用して取得された各ヘッダーをプロパティGJRA_CopyOfJMS{Header}に割り当てます。javax.jms.Destinationは有効なプロパティ・タイプではないため、宛先ヘッダーを説明メッセージに変換します。(現在これと同じサービス、特にJMSXDeliveryCountプロパティはJMSX*プロパティでは提供されていません。)

    • (先行する)コピー・プロセスまたは増加プロセスの一部が失敗しても、中止しないでください。残りの手順の完了を試行してください。(バイト/マップ/ストリーム・メッセージ・タイプでは、ボディの一部はコピーされたがその他の部分がコピーされていないことを意味します。)

    • コピー・プロセスが完全に成功したら、GJRA_CopySuccessfulというブール・プロパティに値trueを設定して追加します。

    • メッセージが配信されなかった理由を示す、GJRA_DeliveryFailureReasonという文字列プロパティを追加します。

    • MDBのonMessage メソッドにより配信失敗の直前に例外が生成された場合には、例外情報が含まれるGJRA_onMessageExceptionsという文字列プロパティを追加します。結果のメッセージを例外キューに送信します。

    • 結果のメッセージを例外キューに送信します。例外キューへのメッセージの送信は、一度しか試行されないことに注意してください。この試行に失敗すると、メッセージは例外キューに追加されずに破棄されます。

    前の手順のその他の実行方法は、IncludeBodiesInExceptionQueueプロパティを参照してください。

    ExceptionQueueName プロパティは必須です。

    第1の宛先として使用されるだけでなく、ConnectionFactoryJndiNameプロパティで指定されるコネクション・ファクトリは、例外キューにも使用されます。(DestinationNameプロパティで指定される)第1の宛先がトピックの場合、コネクション・ファクトリはキューおよびトピックの両方でサポートされている必要があります。(たとえば、指定されたコネクション・ファクトリの<connectionfactory-interface>oc4j-ra.xmlを参照)の場合は、javax.jms.ConnectionFactoryまたはjavax.jms.XAConnectionFactoryである必要があります。) 

    ExceptionQueueName 

    (文字列でデフォルトはなし)

    例外キューとして使用するjavax.jms.QueueオブジェクトのJNDIロケーションです。(例外キューの使用の詳細は、UseExceptionQueueプロパティを参照してください。)このプロパティは、UseExceptionQueuetrueの場合には必須で、UseExceptionQueuefalseの場合には無視されます。 

    IncludeBodiesInExceptionQueue 

    (ブールでデフォルトはtrue

    例外キューに送信されたメッセージにメッセージ本文を含めるかどうかを制御します。(例外キューの使用の詳細は、UseExceptionQueueプロパティを参照してください。)通常の操作中に例外キューに大量のメッセージが送信され、例外キューにはメッセージ本文が不要な場合には、パフォーマンスを向上させるためにこのプロパティをfalseに設定します。UseExceptionQueueがfalseの場合、このプロパティは無視されます。このプロパティを使用できない場合が2つあります。

    • 元のメッセージにメッセージ本文がない場合は、例外キューに送信されるメッセージにも本文は含まれません。

    • なんらかの理由で元のメッセージのコピーを作成できない場合には、かわりに元のメッセージが例外キューに送信されます。これにより、例外キューにメッセージ本文が送信されます。

     

    LogLevel 

    (文字列でデフォルトはなし)

    JMSコネクタで記録するメッセージの詳細レベルを制御します。これらのメッセージは主にJMSコネクタ自体のデバッグを目的としていますが、JMSコネクタの使用に関する問題のデバッグにも便利です。本番コードでは、このプロパティは設定しないでください。(デバッグ目的で一時的にのみ設定してください。JMSコネクタの今後のリリースで特定のログ・メッセージおよびログ・レベルが追加/削除/変更されます。)使用可能な値は次のとおりです。

    • ConnectionPool

    • ConnectionOps

    • TransactionalOps

    • ListenerThreads

    • INFO

    • CONFIG

    • FINE

    • FINER

    • FINEST

    • SEVERE

    • WARNING

    • OFF

     
    動的負荷調整

    リスナー・スレッドの動的負荷調整は、次の<activation-config>プロパティに基づきます。表4-11「MDBの構成プロパティ」で説明されています。

    MDBインスタンスの動的負荷調整を含むMDB構成の詳細は、『Oracle Containers for J2EE Enterprise JavaBeans開発者ガイド』を参照してください。

    論理名を使用したリソースの参照

    この項では、クライアント・アプリケーションで論理名を使用する方法について説明します。これにより、OC4Jに固有ではないデプロイメント・ディスクリプタに含まれるインストール環境固有のJMS構成に依存する設定の数を減らすことができます。この間接化により、クライアント実装を任意のJMS構成に対して汎用的にすると同時に、特定のJMSリソース・プロバイダから分離することができます。

    論理名を使用すると、リソース・プロバイダに依存しないクライアント・アプリケーション・コードを作成できます。論理名を構成および使用する一般的な手順は、次のとおりです。

    1. クライアント・アプリケーション・コードで、JMSの宛先およびコネクション・ファクトリの論理名を使用します。

    2. J2EEアプリケーション・コンポーネント・デプロイメント・ディスクリプタ(application-client.xmlejb-jar.xmlなど)で論理名を宣言します。

    3. OC4J固有のアプリケーション・コンポーネント・デプロイメント・ディスクリプタ(orion-application-client.xmlorion-ejb-jar.xmlなど)の明示的なJNDIロケーションに論理名をマップします。

    論理名を構成して使用する方法は、http://www.oracle.com/technology/tech/java/oc4j/1013/how_to/index.htmlのHow-Toドキュメントと.javaおよび.xmlファイルを参照してください。

    how-to-gjra-with-xxx.zipファイルのいずれか(xxxはリソース・プロバイダの名前)をダウンロードして解凍します。

    この項には、次の項目が含まれます。

    クライアントでは、JMSの宛先とコネクション・ファクトリを使用してメッセージを送受信します。クライアントでJMSの宛先オブジェクトまたはコネクション・ファクトリを取得する場合は、論理名(環境エントリ)を使用することをお薦めします。一般的に、論理名を適用できない場合を除き、JNDIロケーションを直接使用することは避けてください。または、アプリケーションの移植性を確保するために、その他のメカニズムを使用します。

    論理名の宣言方法

    アプリケーション・コードで論理名を使用するには、アプリケーションをデプロイする前に、次のいずれかのXMLデプロイメント・ファイルに論理名を宣言する必要があります。

    詳細は、http://www.oracle.com/technology/tech/java/oc4j/1013/how_to/index.htmlのHow-Toドキュメントを参照してください。「Developing the Application Components」のタスク番号2「Declare Logical Names for JMS Resources」を参照してください。

    コネクション・ファクトリおよび宛先の論理名を宣言する手順は、次のとおりです。

    次の例では、キューの論理名を指定する方法を示します。この例では、jms/PlayerConnectionFactoryがコネクション・ファクトリの論理名であり、jms/PlayerCommandDestinationが宛先キューの論理名です。この例は、デモ・セットのapplication-client.xmlファイルからの抜粋です。

    <resource-ref>
      <res-ref-name>jms/PlayerConnectionFactory</res-ref-name>
      <res-type>javax.jms.ConnectionFactory</res-type>
      <res-auth>Application</res-auth>
    </resource-ref>
    <message-destination-ref>
      <message-destination-ref-name>jms/PlayerCommandDest</message-destination-ref-name>  
      <message-destination-type>javax.jms.Queue</message-destination-type>
      <message-destination-usage>Produces</message-destination-usage>
    </message-destination-ref>
    

    論理名を指定する方法の説明コメント付きの詳細な例は、http://www.oracle.com/technology/tech/java/oc4j/1013/how_to/index.htmlのデモに含まれます。

    /src/client/META-INF/application-client.xml

    および

    /src/ejb/META-INF/ejb-jar.xmlというファイルを見つけてください。

    How-Toドキュメントおよびデモ・セットと、そのURLのリストは、「JMSのHow-Toドキュメントおよびデモ・セット」を参照してください。

    明示的なJNDIロケーションへの論理名のマッピング

    作成した論理名は、リソースのJNDIロケーションにマップする必要があります。通常は、デプロイヤがこれらを設定します。このマッピングは、次のいずれかのOC4Jデプロイメント・ディスクリプタ・ファイルで定義します。

    アプリケーション・コンポーネントのデプロイメント・ディスクリプタで論理名をマップする手順は、次のとおりです。

    OEMS JMSの3つのサービス品質オプションにおけるマッピングと、アプリケーション・コンポーネントでこのネーミング規則を使用する方法の詳細は、次の項を参照してください。

    Javaアプリケーション・クライアントに対するJNDIネーミング・プロパティの設定

    OC4Jスタンドアロン環境では、Javaアプリケーション・クライアントは、jndi.propertiesファイルの次のプロパティ定義に基づいてOEMS JMSの宛先オブジェクトにアクセスします。

    java.naming.factory.initial=
       com.evermind.server.ApplicationClientInitialContextFactory 
    java.naming.provider.url=ormi://myhost/myApplicationDeploymentName 
    java.naming.security.principal=oc4jadmin 
    java.naming.security.credentials=welcome 
    

    ポートを指定する場合は、オプションの:port要素を次のように使用します。

    java.naming.provider.url=ormi://myhost:port/myApplicationDeploymentName
    

    デフォルトのRMIポートは、23791です。

    次の操作が必要です。

    Oracle Application Server環境では、Javaアプリケーション・クライアントは、jndi.propertiesファイルの次のプロパティ定義に基づいてOEMS JMSの宛先オブジェクトにアクセスします。

    java.naming.factory.initial=
       com.evermind.server.ApplicationClientInitialContextFactory 
    java.naming.provider.url=opmn:ormi://$HOST:$OPMN_REQUEST_PORT:$OC4J_INSTANCE/myApplicat
    ionDeploymentName 
    java.naming.security.principal=oc4jadmin 
    java.naming.security.credentials=welcome 
    

    jndi.propertiesファイルの詳細な例は、http://www.oracle.com/technology/tech/java/oc4j/1013/how_to/index.htmlを参照してください。

    次のファイルを見つけてください。

    /src/client/jndi.properties

    論理名を使用したクライアントからのJMSメッセージ送信

    リソースを定義してJNDIプロパティを構成した後、クライアントでは、次の手順に従ってJMSメッセージを送信する必要があります。この手順は、「JMSメッセージの送受信」に記載されている手順を要約したものです。

    1. JNDIルックアップを使用して、構成済のJMS宛先とそのコネクション・ファクトリを取得します。

    2. コネクション・ファクトリから接続を作成します。

    3. 接続を使用してセッションを作成します。

    4. 取得済のJMS宛先を指定して、メッセージ・プロデューサを作成します。

    5. メッセージを作成します。

    6. メッセージ・プロデューサを使用してメッセージを送信します。

    7. 接続をクローズします。

    JMSコネクタのルックアップを使用するアプリケーション・クライアントに必要なクラスパス

    JMSコネクタをアプリケーション・クライアントから使用する場合、表4-12「JMSコネクタのルックアップに必要なクライアント・サイドのJARファイル」にリストされたクラスパスに各JARファイルが含まれている必要があります。

    表4-12    JMSコネクタのルックアップに必要なクライアント・サイドのJARファイル 
    JAR  ORACLE_HOMEパス 

    oc4jclient.jar 

    /j2ee/<instance> 

    jta.jar 

    /j2ee/<instance>/lib 

    jms.jar 

    /j2ee/<instance>/lib 

    jndi.jar 

    /j2ee/<instance>/lib 

    javax77.jar 

    /j2ee/<instance>/lib 

    adminclient.jar 

    /j2ee/<instance>/lib 

    oc4j-internal.jar 

    /j2ee/<instance>/lib 

    connector.jar 

    /j2ee/<instance>/lib 

    jmxri.jar 

    /j2ee/<instance>/lib 

    jazncore.jar 

    /j2ee/<instance> 

    oc4j.jar 

    /j2ee/<instance> 

    dms.jar 

    /lib 

    OEMS JMSでの高可用性およびクラスタリングの使用

    可用性の高いJMSサーバーは、JMS要求がソフトウェアまたはハードウェア障害による中断なしで処理されるという保証を提供します。高可用性を実現する方法の1つはフェイルオーバー機能を使用することです。サーバー・インスタンスの1つに障害が発生すると、ソフトウェア、ハードウェアおよびインフラストラクチャ・メカニズムの組合せにより、別のサーバー・インスタンスが要求の処理を引き継ぎます。

    高可用性の詳細は、『Oracle Application Server高可用性ガイド』を参照してください。

    表4-13「高可用性の概要」に、OEMS JMSでの高可用性のサポートを示します。

    表4-13    高可用性の概要 
    機能  データベース  メモリー内およびファイル・ベース 

    高可用性 

    RAC + OPMN 

    OPMN 

    構成 

    RAC構成、リソース・プロバイダ構成 

    専用JMSサーバー、jms.xml構成、opmn.xml構成 

    メッセージ・ストア 

    RACデータベース上 

    専用JMSサーバー/永続性ファイル内 

    フェイルオーバー 

    同一または異なるマシン(RACによる) 

    Oracle Application Server Cold Failover Cluster(中間層)内の同一または異なるマシン 

    OEMS JMSのクラスタリング環境にデプロイされたJMSアプリケーションは、複数のOC4Jインスタンスまたはプロセス間でJMSリクエストのロード・バランシングを実行できます。ステートレス・アプリケーションのクラスタリングは一般的に行われます。アプリケーションは複数のサーバーにデプロイされ、ユーザー・リクエストはそのうちの1つにルーティングされます。

    JMSは、ステートフルAPIです。JMSクライアントとJMSサーバーの両方に、相互の状態(接続、セッション、永続サブスクリプションに関する情報など)が保持されます。ユーザーは、その環境を構成し、クラスタ対応アプリケーションを記述するときに少数の単純なテクニックを使用できます。

    次の項では、OEMS JMSで高可用性とクラスタリングを実現する方法について説明します。

    OEMS JMSのメモリー内およびファイル・ベースの高可用性の構成

    OEMS JMSのクラスタリングでは、通常、この種の環境にデプロイされたアプリケーションが、複数のOC4Jインスタンス間でメッセージのロード・バランシングを実行できます。また、この環境では、コンテナ・プロセスを複数のノード間で分散できるため、ある程度の高可用性が実現します。いずれかのプロセスまたはノードが停止した場合は、代替ノード上のプロセスがメッセージの処理を続行します。

    この項には、OEMS JMSのクラスタリングに関する次の項目が含まれます。

    用語

    ここで説明する用語の詳細は、『Oracle Application Server高可用性ガイド』および『Oracle Process Manager and Notification Server管理者ガイド』を参照してください。

    分散宛先

    この構成では、OHSは、HTTPリクエストを処理し、Oracle Application Serverクラスタ内の2つ以上のOracle Application Serverインスタンス間でリクエストのロード・バランシングを実行します。

    宛先のコピーはそれぞれ一意で、OC4Jインスタンス間ではレプリケートまたは同期化されません。宛先は、永続的でもメモリー内でもかまいません。1つのOC4Jインスタンスにエンキューされたメッセージは、そのOC4Jインスタンスからでなければデキューできません。

    この種のデプロイメントには、次のような多数のメリットがあります。

    分散宛先クラスタの構成

    各Oracle Application Serverインスタンス内に、2つのOC4Jインスタンスが定義されています。これらのOC4Jインスタンスでは、それぞれ別のアプリケーションが実行されます。つまり、OC4Jインスタンス#1(Home1)はアプリケーション#1を実行し、OC4Jインスタンス#2(Home2)はアプリケーション#2を実行します。各OC4Jインスタンスは複数のJVMを実行するよう構成できるため、アプリケーションは複数のJVM間でスケーラビリティを持つことができます。

    Oracle Application Serverクラスタ内では、各Oracle Application Serverインスタンスの構成情報は(ホスト名やポート番号など、インスタンス固有の情報を除いて)同一です。つまり、Oracle Application Serverインスタンス#1のOC4Jインスタンス#1にデプロイされたアプリケーション#1は、Oracle Application Serverインスタンス#2のOC4Jインスタンス#1にもデプロイされます。このタイプのアーキテクチャでは、複数のOracle Application Serverインスタンス間でメッセージのロード・バランシングを実行できます。特に、ハードウェア障害への対策としてOracle Application Serverインスタンス#2が別のノードにデプロイされている場合、JMSアプリケーションの高可用性が実現します。

    各アプリケーションのセンダーとレシーバは、1つのOC4Jインスタンスにともにデプロイする必要があります。つまり、あるOC4JプロセスでJMSサーバーにエンキューされたメッセージは、そのOC4Jプロセスからでなければデキューできません。

    すべてのファクトリと宛先は、すべてのOC4Jプロセス上で定義されます。各OC4Jプロセスには、それぞれの宛先の個別コピーがあります。宛先のコピーは、レプリケートまたは同期化されません。そのため、この図では、アプリケーション#1はmyQueue1という宛先に書込みを行います。この宛先は、2つの場所(Oracle Application Serverインスタンス#1および#2)に物理的に存在し、各OC4Jインスタンス内でそれぞれのJMSサーバーにより管理されます。

    この種のJMSデプロイメントは、特定のタイプのJMSアプリケーションにのみ適していることに注意してください。メッセージの順序が重要でない場合、メッセージは同じ名前を持つ分散キューにエンキューされます。JMSのPoint-to-Pointメッセージングのセマンティクスでは、メッセージは複数のキュー間で複製できません。前述の例では、メッセージはロード・バランシング・アルゴリズムにより決定されたキューに送信され、着信時にMDBによりデキューされます。

    Cold Failover Cluster

    この構成は2ノード・クラスタです。常にアクティブなノードは1つのみです。2つ目のノードは、1つ目のノードに障害が発生した場合にアクティブになります。より大規模なクラスタでは、次の項で説明する専用JMSサーバー構成とCold Failover Clusterを組み合せて使用できます。この場合、2つのノードを専用JMSサーバーとして構成し、任意の時点で1つのノードのみがアクティブになるよう設定します。コールド・フェイルオーバーの詳細は、『Oracle Application Server高可用性ガイド』を参照してください。

    Cold Failover Clusterの構成

    次の例に示すように、両方のノードを同じ構成にします。両方のOC4Jインスタンスのjms.xmlファイルを変更します。jms-serverのhostパラメータを次のように設定します。

    <jms-server host=vmt.my.company.com port="9127">
    ….
    ….
    </jms-server>
    

    ファイル・ベースのメッセージの永続性をキューに使用する場合、両方のノードからアクセスできる共有ディスク上にファイルを置く必要があります。共有ディスクは、一方のノードから他方のノードにフェイルオーバーする際に、仮想IPを使用する必要があります。次のようにpersistence-fileを構成します。

    <queue name="Demo Queue" location="jms/demoQueue" 
    persistence-file="/path/to/shared_file_system/demoQueueFile">
            <description>A dummy queue</description>
    </queue> 
    
    停止と起動

    各ノードでは、次のコマンドを使用して停止と起動を行います。

    $ORACLE_HOME/opmn/bin/opmnctl stopall
    $ORACLE_HOME/opmn/bin/opmnctl startall
    

    専用JMSサーバー

    この構成では、Oracle Application Serverクラスタ環境で1つのOC4Jインスタンスが専用JMSサーバーとして構成されます。このOC4Jインスタンスはすべてのメッセージを処理するため、常にメッセージの順序付けが維持されます。すべてのJMSアプリケーションは、この専用サーバーを使用してコネクション・ファクトリと宛先をホスティングし、エンキューおよびデキューのリクエストを処理します。

    専用JMSプロバイダとして機能するOC4J JVMは、クラスタ内のすべてのJMSアプリケーションに対して1つのみです。そのために、opmn.xmlファイル内のJMSポート範囲は専用OC4Jインスタンス用の1つのポートのみに制限されます。

    次の図は、OC4JのHomeインスタンス内のアクティブなJMSサーバーを示していますが、JMSプロバイダは独自のOC4Jインスタンス内でホスティングすることをお薦めします。たとえば、HomeはOracle Application Serverのインストール後に実行されるデフォルトのOC4Jインスタンスですが、Oracle Enterprise Manager 10g Application Server Controlコンソールを使用して2つ目のOC4Jインスタンスを作成する必要があります。後述のopmn.xmlファイルの例では、JMSserverというOC4Jインスタンスを作成しています。

    図4-3    専用JMSサーバー


    OC4JインスタンスJMSserverを作成した後、このOracle Application Serverインスタンスについてopmn.xmlファイルに次の2つの変更を加える必要があります。

    1. このOC4Jインスタンス(JMSserver)用に起動されるJVMが1つのみであることを確認します。

      OC4Jインスタンス内のJVMを1つに限定することで、他のJVMが同じ永続性ファイル・セットを使用しないことが保証されます。

    2. このインスタンスのJMSポート範囲の値を1つのみ指定します。

      ポート値を1つにすると、OPMNでは、常にこの値が専用JMSサーバーに割り当てられます。このポート値を使用して、jms.xmlファイル内でコネクション・ファクトリを定義できます。他のOC4Jインスタンスは、これを専用JMSサーバーへの接続に使用します。

    OPMNと動的ポート割当ての詳細は、『Oracle Process Manager and Notification Server管理者ガイド』を参照してください。

    OPMN構成の変更

    次のXMLは、opmn.xmlファイルからの抜粋であり、必要な変更内容と変更する場所を示しています。

    OEMS JMSの構成

    この使用例で前述したように、OC4Jインスタンスの1つはJMSサーバー専用です。他のOC4JインスタンスおよびOC4J外部で実行されるスタンドアロンJMSクライアントは、JMS要求を専用JMSサーバーに転送するように設定する必要があります。すべてのコネクション・ファクトリと宛先は、JMSサーバー・インスタンスのjms.xmlファイル内で定義されます。このjms.xmlファイルを、JMSサーバーと通信する他のすべてのOC4Jインスタンスにコピーする必要があります。

    専用JMSサーバー上のjms.xmlファイル内で構成するコネクション・ファクトリでは、サーバーのホスト名とポート番号を明示的に指定する必要があります。jms.xmlのホスト名とポート番号は、前述のとおり専用サーバー用にOPMNで定義されているホスト名および単一のポート番号と一致する必要があります。他のすべてのOC4Jインスタンスでも同じコネクション・ファクトリ構成を使用します。これにより、すべてのOC4Jインスタンスが、操作時に専用JMSサーバーを参照することになります。

    したがって、専用JMSサーバーがhost1のポート3701で実行される場合、クラスタ内の各OC4Jインスタンス用のjms.xmlファイルに定義されるすべてのコネクション・ファクトリは、host1のポート3701を指し示す必要があります。このポートは、専用JMSサーバーのための専用OC4Jインスタンス(この例ではJMSserver)で使用されるopmn.xmlファイルに記述された単一のポートです。

    専用JMSサーバー上のjms.xmlファイル内で構成されている宛先は、他のすべてのOC4Jインスタンス上でも構成する必要があります。ただし、これらの宛先の物理ストアは専用JMSサーバー上にあります。

    キュー・コネクション・ファクトリ定義の例

    次に、専用サーバーのjms.xmlファイル内でキュー・コネクション・ファクトリを定義する例を示します。

    <!-- Queue connection factory -->
    <queue-connection-factory name="jms/MyQueueConnectionFactory"
              host="host1" port="3701"
              location="jms/MyQueueConnectionFactory"/>
    

    管理上の変更(新規宛先オブジェクトの追加)は、専用JMSサーバーのjms.xmlファイルに加える必要があります。次に、JMSアプリケーションを実行する他のすべてのOC4Jインスタンスのjms.xmlファイル内で、同じ変更を実行します。この変更には、手動で実行する方法と、専用JMSサーバーのjms.xmlファイルを他のOC4Jインスタンスにコピーする方法があります。

    JMSコネクタのデプロイ

    JMSコネクタは、専用JMSサーバーのメッセージを送受信するアプリケーションのホストである各OC4Jインスタンスにデプロイされます。このJMSコネクタにより、専用JMSサーバーを参照する、ローカルに構成されたJMSコネクション・ファクトリのJNDIマッピングが提供されます。OC4Jインスタンスにデプロイされたアプリケーションは、JMSコネクタ実装を介して基礎となるJMS管理オブジェクトにアクセスできます。JMSコネクタの使用方法の詳細は、「JMSコネクタ」を参照してください。

    JMSコネクタ用のキュー・コネクション・ファクトリの定義

    次の例では、事前に(前の例を参照)jms.xmlファイルに定義されているキュー・コネクション・ファクトリ(jms/MyQueueConnectionFactory)をマップするoc4j-ra.xmlファイルにキュー・コネクション・ファクトリを定義しています。

    <connector-factory location="MyJMSConnector/QCF"
       connector-name="MyJMSConnector">
       <config-property name="jndiLocation" value="jms/MyQueueConnectionFactory"/>
       <connection-pooling use="private">
          <property name="waitTimeout" value="300" />
          <property name="scheme" value="fixed_wait" />
          <property name="maxConnections" value="50" />
          <property name="minConnections" value="0" />
       </connection-pooling>
       <security-config use="principal-mapping-entries">
          <principal-mapping-entries>
             <principal-mapping-entry>
                <initiating-user>servletuser</initiating-user>
                <res-user>jmsuser</res-user>
                <res-password>->jmsuser</res-password>
             </principal-mapping-entry>
          </principal-mapping-entries>
       </security-config>
       <connectionfactory-interface>
          javax.jms.QueueConnectionFactory</connectionfactory-interface>
    </connector-factory>
    

    この例で説明すると、OC4JインスタンスにデプロイされたアプリケーションはロケーションMyJMSConnector/QCFを使用して専用サーバーのコネクション・ファクトリをルックアップしています。このロケーションは、jms.xmlファイルに定義されている実際のJMSキュー・コネクション・ファクトリのJNDIロケーション(jms/MyQueueConnectionFactory)にマップされています。リソース・アダプタの構成やデプロイ、およびJMSコネクタの構成の詳細は、「JMSコネクタ」を参照してください。

    アプリケーションのデプロイ

    JMSアプリケーションが実際にデプロイされる場所は、ユーザーが決定します。専用JMSサーバーは、JMS要求を処理する一方で、デプロイされたJMSアプリケーションも実行できます。また、JMSアプリケーションは他のOC4Jインスタンス(つまりHome)にもデプロイできます。

    専用JMSサーバーのjms.xmlファイルは、JMSアプリケーションがデプロイされるOC4Jインスタンスすべてに伝播させる必要があることに注意してください。JMSアプリケーションは、別のJVMで実行中のスタンドアロンJMSクライアントにデプロイすることもできます。

    高可用性

    OPMNには、専用JMSサーバーの稼働を維持するために、フェイルオーバー・メカニズムが用意されています。なんらかの理由でJMSサーバーに障害が発生すると、OPMNはそれを検出してJVMを再起動します。ハードウェア障害が発生した場合、メッセージをリカバリする唯一の方法は、永続する宛先がネットワーク・ファイル・システム上でホスティングされるようにすることです。OC4Jインスタンスを起動し、これらの永続するファイルを指すように構成できます。

    OPMNによるOracle Application Serverプロセスの管理の詳細は、『Oracle Process Manager and Notification Server管理者ガイド』を参照してください。

    カスタム・トポロジ

    前述の構成に加え、OEMS JMSは、任意のユーザー定義トポロジとなるように構成できます。

    メカニズム

    この項では、カスタム・トポロジを作成して機能させるためのメカニズムについて説明します。これらのメカニズムは、このマニュアルの別の項でもすでに定義されていますが、この項では、カスタム・トポロジを使用する場合に理解する必要のあるより高度な内容について説明します。

    ローカルのOC4J JVMのサーバー以外にJMSサーバーを使用する場合、目的のJMSサーバーを参照するコネクション・ファクトリが必要です。この構成には、ホストおよびポートのマッピングを使用します。

    最初に、JMSサーバーをホストとポートに関連付ける必要があります。通常、ホストは、JMSサーバーが稼働するマシンの単一のホスト(IPアドレス)です。複数のホスト(IPアドレス)を持つマシンの場合、特定のアドレスをjms.xmlファイルの<jms-server>要素のhost属性を使用して指定しないかぎり、すべてのアドレスがJMSサーバーに関連付けられます。portは、port属性を使用して異なる値を指定しないかぎり、9127です。表4-1「構成要素」<jms-server>エントリと、「ポートの構成」を参照してください。OPMNが使用される場合、port属性は無視され、ポート割当てはopmn.xmlファイルに設定されたポート範囲の値に基づいて自動的に処理されます。「OPMN構成の変更」を参照してください。

    各JMSサーバーにホストとポートを指定したら、特定のJMSサーバーを参照するためのコネクション・ファクトリを作成できます。コネクション・ファクトリで特定のJMSサーバーを参照するための最初の手順では、コネクション・ファクトリ要素のhost属性を、特定のJMSサーバーのホスト(IPアドレス)と同じ値に設定します。表4-1「構成要素」で、<connection-factory><xa-connection-factory>などのコネクション・ファクトリ要素を参照してください。単一のホスト(IPアドレス)を持つ同じマシン上のJMSサーバーをコネクション・ファクトリで参照する場合、この手順は省略できます(host属性は無視できます)。コネクション・ファクトリで特定のJMSサーバーを参照するための次の手順では、コネクション・ファクトリ要素のport属性を、特定のJMSサーバーのポートと同じ値に設定します。ポートが9127の場合、この手順は省略できます(port属性は無視できます)。

    ここまでの手順によってJMSサーバーJMS1を参照するためのコネクション・ファクトリCF1が構成された場合、CF1から作成される接続は、JMS1への接続になります。この接続を通じて実行されるすべての操作は、JMS1を対象とします。この接続を使用して他のJMSサーバーと通信することはできません。(JMS1を対象とするものでないかぎり、この接続を使用してローカルのJVMで稼働するJMSサーバーと通信することもできません。)同様に、この接続を使用してセッションを作成し、そのセッションでメッセージ・プロデューサを作成すると、そのセッションとメッセージ・プロデューサは両方ともJMS1に接続されます。このメッセージ・プロデューサを通じて送信されるすべてのメッセージは、JMS1を対象とし、JMS1によって(メモリー内またはファイルに)格納され、(JMS1に接続されたメッセージ・コンシューマまたはキュー・ブラウザを使用して)JMS1からのみ受信または参照可能となります。ただし、このJMSサーバーとの関連付けは、javax.jms.Messageオブジェクトには拡張されません。あるJMSサーバーと関連付けられたセッションやメッセージ・プロデューサから作成(または受信)されたメッセージ・オブジェクトは、任意のメッセージ・プロデューサを使用して送信できます。つまり、アプリケーションでは、JMSサーバーJMS1で管理されている物理宛先から(JMS1に関連付けられたメッセージ・コンシューマを使用して)メッセージを受信した後に、そのメッセージをJMSサーバーJMS2で管理されている物理宛先に(JMS2に関連付けられたメッセージ・プロデューサを使用して)送信することが可能です。

    複数のJMSサーバーを扱う場合は、物理宛先(メッセージが格納される物理的な場所)、宛先構成(jms.xmlの要素と属性)および宛先管理オブジェクト(JNDIでルックアップされるJavaオブジェクト)を区別する必要があります。

    JMSサーバーの観点から検討すると、次のようになります。

    JMSクライアントの観点から検討すると、次のようになります。

    たとえば、JMSサーバーJMS1のjms.xmlファイルが次のように記述されているとします。

       <queue name="queue1"
              location="jms/alpha"
              persistence-file="foo">
       </queue>
    

    また、JMSサーバーJMS2のjms.xmlファイルが次のように記述されているとします。

    
       <queue name="queue1"
              location="jms/omega"
              persistence-file="bar">
       </queue>
    
       <queue name="queue2"
              location="jms/alpha">
       </queue>
    

    表4-14「様々なメッセージ使用例の結果」は、宛先が列1のサーバーから列2のJNDIロケーションを使用してルックアップされ、列3のサーバーに接続されたメッセージ・プロデューサを通じてPERSISTENTメッセージが送信された場合に、列4の結果となることを示しています。

    表4-14    様々なメッセージ使用例の結果 
    宛先がルックアップされるJVM内のサーバー  宛先のルックアップに使用されるJNDIロケーション  メッセージ・プロデューサの接続先  結果(メッセージが受信される物理宛先またはエラー) 

    JMS1 

    jms/alpha 

    JMS1 

    JMS1のqueue1、ファイルfooに永続化 

    JMS1 

    jms/alpha 

    JMS2 

    JMS2のqueue1、ファイルbarに永続化 

    JMS2 

    jms/alpha 

    JMS2 

    JMS2のqueue2、JMS2のメモリー内に格納 

    JMS2 

    jms/alpha 

    JMS1 

    エラー(JMS1にqueue2はないため) 

    JMS1 

    jms/omega 

    任意 

    JNDIでのjms/omegaのルックアップ・エラー 

    JMS2 

    jms/omega 

    JMS1 

    JMS1のqueue1、ファイルfooに永続化 

    JMS2 

    jms/omega 

    JMS2 

    JMS2のqueue1、ファイルbarに永続化 

    この例(および分散宛先構成でのコネクション・ファクトリ)では、様々なJVMで同じJNDIロケーションに異なる値をバインドしているか、異なる値を必要とするため、あるJVMから別のJVMにJNDI値を自動的に伝播できません。

    次の組合せを使用する場合について検討します。

    この組合せでは、次の要件に注意する必要があります。

    考慮事項

    専用JMSサーバー構成と分散宛先構成は、任意のJMSアプリケーションの各インスタンスが常に単一のJMSサーバーとのみ通信することが保証されている構成です。この項で説明する考慮事項は、これらの使用例には適用されません。同様に、JMSアプリケーション・インスタンスが常に単一のJMSサーバーとのみ通信することが保証される他の使用例にも適用されません。

    たとえば、アプリケーションAのすべてのインスタンスでJMSサーバー#1を使用し、アプリケーションBのすべてのインスタンスでJMSサーバー#2を使用する場合、次の考慮事項は適用されません。

    ただし、単一のJMSアプリケーション・インスタンスが2つ以上のJMSサーバーと通信するその他の使用例では、次のようにいくつかの考慮事項があります。

    これらの考慮事項は、単一のJMSアプリケーション・インスタンスで2つの異なるJMSリソース・プロバイダを使用する場合にも適用されます。たとえば、アプリケーションでは、メモリー・ベースまたはファイル・ベースの永続性を確保するためにOEMS JMSのメモリー内のオプションを使用し、同時に、データベースに基づく永続性を確保するためにOEMS JMSのデータベースのオプションを使用する可能性があります。

    使用例

    この項では、アプリケーション固有のメッセージ要件が存在する2つの使用例と、各使用例でスループットを改善するために使用できるカスタム・トポロジについて説明します。これらの例は、実際の状況的にも作成可能なトポロジ的にも、完全なものではありません。

    使用例1: 一部の宛先のみでグローバル整合性を必要とする場合

    一部の宛先では専用JMSサーバー構成に基づくグローバル整合性を必要とする一方で、他の宛先にはそのような要件はないことがあります。この場合、グローバル整合性(単一のJMSサーバーを通じたすべてのメッセージのルーティング)を必要としない宛先でその要件を無理に満たす必要はありません。かわりに、分散宛先構成などを使用してローカルに分割することが可能です。

    たとえば、グローバル整合性を必要とする宛先AおよびBと、必要としない宛先CおよびDがあるとします。この場合、すべてのjms.xmlファイルで、4つのすべての宛先を定義します。宛先AおよびB用に、専用JMSサーバーとして機能する1つのマシンを選択します。コネクション・ファクトリで参照できるように、専用JMSサーバーには、固定のホスト値とポート値を割り当てる必要があります。jms.xmlファイルには、少なくとも2つのコネクション・ファクトリを定義します。1つのコネクション・ファクトリは(固定のホスト値とポート値を持つ)専用JMSサーバーを参照し、もう1つはローカルJVM内の(デフォルトのホスト値とポート値を持つ)JMSサーバーを参照します。宛先AおよびBにアクセスするには(グローバル整合性を確保するには)、Javaコードで、専用JMSサーバーを参照するコネクション・ファクトリを使用します。宛先CおよびDにアクセスするには、ローカルJVM内のJMSサーバーを参照するコネクション・ファクトリを使用します。

    使用例2: ロード・バランシングのために複数の専用JMSサーバーを使用する場合

    前の例では、2つの宛先(AおよびB)がグローバル整合性を必要としていました。この場合、宛先Aと宛先Bの両方に専用JMSサーバーを用意する必要がありますが、これら2つのJMSサーバーは同じである必要はありません。グローバル整合性を必要とする複数の宛先を頻繁に使用する場合は、それらの宛先に対する負荷を複数の専用JMSサーバー間で分散すると効果的である可能性があります。特にこの方法が有効なのは、宛先が一般的なトランザクションにあまり関与しない場合や、複数の宛先を処理する専用JMSサーバーがシステムのボトルネックとなっている場合です。

    この場合、すべてのjms.xmlファイルで、4つのすべての宛先を定義します。宛先A用に、専用JMSサーバーとして機能する1つのマシンを選択します。宛先B用に、専用JMSサーバーとして機能するもう1つのマシン(または同じマシン上の別のJVM)を選択します。コネクション・ファクトリで参照できるように、これら2つの専用JMSサーバーには、固定のホスト値とポート値を割り当てる必要があります。jms.xmlファイルには、少なくとも3つのコネクション・ファクトリを定義します。1つのコネクション・ファクトリは宛先Aの専用JMSサーバーを、1つは宛先Bの専用JMSサーバーを、1つはローカルJVM内のJMSサーバーをそれぞれ参照します。宛先Aにアクセスするには、Javaコードで、宛先Aの専用JMSサーバーを参照するコネクション・ファクトリを使用します。宛先Bにアクセスするには、宛先Bの専用JMSサーバーを参照するコネクション・ファクトリを使用します。宛先CおよびDにアクセスするには、ローカルJVMのJMSサーバーを参照するコネクション・ファクトリを使用します。

    OEMS JMSのデータベース・オプションの高可用性の構成

    OEMS JMSのデータベース・オプションで高可用性を実現するには、次のようにします。

    Oracle Application Serverクラスタ内の各アプリケーション・インスタンスは、OC4Jリソース・プロバイダを使用して、RACモードで稼働しているバックエンドOracleデータベースを参照します。これらのリソース・プロバイダから導出されたオブジェクトで起動されるJMS操作は、Real Application Clusters(RAC)データベースに送られます。

    アプリケーション障害が発生すると、そのアプリケーション内の状態情報は失われます(つまり、接続、セッションおよびメッセージの状態はコミットされていません)。アプリケーション・サーバーが再起動されると、アプリケーションはJMS状態を適切に再作成して操作を再開する必要があります。

    バックエンド・データベース(非RACデータベース)のネットワーク・フェイルオーバーが発生すると、サーバー内の状態情報は失われます(つまり、トランザクションの状態はコミットされていません)。また、アプリケーション内部のJMSオブジェクト(コネクション・ファクトリ、宛先オブジェクト、接続、セッションなど)も無効になることがあります。

    データベース障害の発生後に、アプリケーション・コードでこれらのJMSオブジェクトを使用すると、常に例外がスローされます。リカバリするためには、このような例外をスローしているすべてのJMSオブジェクトをアプリケーションで再作成する必要があります。この処理には、JNDIを使用したコネクション・ファクトリの再ルックアップも含まれます。

    RACデータベース使用時のフェイルオーバー

    RACデータベースを使用するアプリケーションでは、データベース・フェイルオーバーを使用する必要があります。この項で説明されているように、フェイルオーバーには2つのタイプがあります。

    RACネットワーク・フェイルオーバー

    RACデータベースに対して実行するスタンドアロン・クライアントでは、API oracle.oc4j.sql.DataSourceUtils.isOracleFatalError()を起動して接続オブジェクトが無効であるかどうかを判断し、接続を再取得するためのコードを記述する必要があります。その後、必要に応じてデータベース接続を再確立します。isOracleFatalError()メソッドは、ネットワーク・フェイルオーバー中にデータベースによりスローされたSQLエラーが致命的エラーであるかどうかを検出します。このメソッドはSQLエラーとデータベース接続を取得して、致命的エラーの場合はtrueを戻します。trueの場合は、トランザクションを積極的にロールバックし、JMSの状態(失われた接続、セッションおよびメッセージなど)を再作成する必要があります。

    次の例にこのロジックの概略を示します。

    Message getMessage(QueueSession session, Queue rcvrQueue) {
       try {    
          Message msgRec = null;
          QueueReceiver rcvr = session.createReceiver(rcvrQueue);
          msgRec = rcvr.receive();
          rcvr.close();
          return msgRec;
       }
       catch (Exception ex) {    
          if (ex instanceof JMSException) {
             Exception exLinked = ((JMSException) ex).getLinkedException();
             if (exLinked instanceof SQLException) {
                if (DataSourceUtils.isOracleFatalError((SQLException) exLinked) {
                   // failover logic
                }
             }
          }
       }
    }
    
    透過的アプリケーション・フェイルオーバー(TAF)

    TAFが構成されているほとんどの場合、アプリケーションは他のデータベース・インスタンスへのフェイルオーバーが発生したことを認識しません。そのため、障害からリカバリするために何かする必要はありません。

    ただし、障害の発生時にOC4JからORAエラーがスローされる場合があります。JMSクライアントは、これらのエラーを関連するSQL例外とともにJMSExceptionとしてユーザーに渡します。この場合は、次の1つ以上の操作を実行してください。

    接続リカバリのためのサンプル・コード

    次の例は、任意の永続性オプションで使用できるOEMS JMSのアプリケーション・コードです。このキューにより、ネットワークの障害、サーバーの再起動、JMSサーバーのフェイルオーバーなどの状況で発生することのある断続的な接続に対応できます。

     while (!shutdown) {
            Context ctx = new InitialContext();
    
            // get the queue connection factory
            QueueConnectionFactory qcf =
                            (QueueConnectionFactory) ctx.lookup(QCF_NAME);
    
            // get the queue
            Queue q = (Queue) ctx.lookup(Q_NAME);
    
            ctx.close();
    
            QueueConnection qc = null;
            try {
                // create a queue connection, session, sender and receiver
                qc = qcf.createQueueConnection();
                QueueSession qs = qc.createQueueSession(true, 0);
                QueueSender snd = qs.createSender(q);
                QueueReceiver rcv = qs.createReceiver(q);
    
                // start the queue connection
                qc.start();
    
                // receive requests using the queue receiver and send
                // replies using the queue sender
                while (!done) {
                    Message request = rcv.receive();
                    Message reply = qs.createMessage();
    
                    // put code here to process request and construct reply
    
                    snd.send(reply);
                    qs.commit();
                }
            } catch (JMSException ex) {
                if (transientServerFailure) {
                    // retry
                } else {
                    shutdown = true;
                }
            } finally {
               // close the queue connection
               if (qc != null) qc.close();
            }
        }
    

    接続リカバリのためのJ2CA構成

    接続プーリングでは、アプリケーションによって接続がクローズされる場合、実際には物理接続はコネクタによってクローズされず、接続プールに戻されることに注意してください。接続に失敗すると、無効な接続がプールに戻される可能性があります。続けて新規接続を作成すると、無効な接続が取得されることがあります。その場合、前述のコードの有効性は失われます。フェイルオーバーの信頼性を保証するには、接続を作成するコネクション・ファクトリの接続プーリングを無効にする必要があります。これを行うには、oc4j-ra.xmlファイルのコネクション・ファクトリの<connector-factory>要素を次のように変更します。

        <connection-pooling use="none">
        </connection-pooling>
    

    クラスタリングのベスト・プラクティス

    JMSルーター

    複雑な異機種間エンタープライズ・コンピューティング環境では、様々なメッセージング・システムと統合して相互運用するメッセージング・インフラストラクチャが必要です。JMSルーターにより、次の宛先間をブリッジできる信頼性の高い非同期JMSメッセージ・ルーティング・サービスが提供されます。

    JMSルーターにより、次の動作が保証されます。

    ユーザーは、ルーター・ジョブの作成時に、メッセージを選択的にルーティングするメッセージ・セレクタを指定できます。セレクタの条件を満たすメッセージのみが、JMSルーターによってソース宛先からターゲット宛先にルーティングされます。メッセージ・セレクタは、有効なJMSメッセージ・セレクタである必要があります。JMSキューおよびトピック用のメッセージ・セレクタの構文とセマンティックは、JMS 1.1仕様を参照してください。

    JMSルーターでは、JMSルーター・ジョブのソースまたはターゲットがJMSトピックである場合、関連するJMSプロバイダがJMS 1.1をサポートしている必要があります。

    JMS 1.1仕様は、http://java.sun.com/products/jms/docs.htmlで入手できます。

    JMSの宛先をブリッジするJMSルーターには、次のメリットがあります。

    JMSプロバイダ

    JMSルーターでは、JMSコネクタを使用して次のJMSプロバイダにアクセスします。

    JMSルーターでは、OC4J付属パッケージのスタンドアロンJMSコネクタ・インスタンスであるOracleASjmsを使用して、JMSルーターと同じコンテナ内で稼働するOEMS JMSのメモリー内およびファイル・ベースのオプションにアクセスします。したがって、OEMS JMSのメモリー内またはファイル・ベースの宛先を対象にメッセージをルーティングする場合、追加のアダプタをデプロイする必要はありません。

    OracleAS JMS以外のJMSプロバイダを対象にメッセージをルーティングする場合、そのJMSプロバイダ用のスタンドアロンJMSコネクタをデプロイする必要があります。

    JMSルーターでは、JMSプロバイダの認証と認可に、J2CAアダプタによる宣言的なコンテナ管理のサインオン・メカニズムを使用します。JMSルーターは、ロールjmsRouterのかわりに実行されます。したがって、JMSルーターに使用されるすべてのリソース・アダプタには、<default-mapping>要素、またはoc4j-ra.xml<initiating-user>jmsRouterを保持する<principal-mapping-entry>要素に基づく有効なプリンシパル・マッピングが含まれる必要があります。

    OEMS JMSでJMSルーターを使用する方法の詳細は、http://www.oracle.com/technology/tech/java/oc4j/1013/how_to/index.htmlのドキュメントを参照してください。

    構成

    この項では、次のJMSルーター・オブジェクトに関する構成について説明します。

    JMSルーターの主要な管理インタフェースは、JMSルーターMBeanです。このMBeanにより、構成の管理、個々のJMSルーター・ジョブの起動と停止、およびジョブのステータスの監視を行うことができます。

    JMSルーターは、jms.xmlファイルを通じて静的に構成することも可能です。

    ルーター・ジョブ

    JMSルーター・ジョブは、ソース宛先からターゲット宛先にメッセージを移動するメッセージ・ルーティング・タスクとして定義されます。ルーター・ジョブを処理する場合、JMSルーターは、ソース宛先からメッセージをデキューし、ターゲット宛先にそのメッセージをエンキューします。

    ソース宛先とターゲット宛先は、JMSキューまたはトピックのいずれかです。ソースがJMSキューである場合、JMSルーターは、すべてのメッセージをキューから移動します。ソースがトピックである場合、JMSルーターは、JMS永続サブスクライバが作成されてからそのトピックにパブリッシュされたすべてのメッセージを移動します。


    注意

    JMSルーター・ジョブでは、ソースがキューであるか永続サブスクライバであるかにかかわらず、そのソースを共有できません。 


    JMSルーター・ジョブでは、表4-16「JMSルーター設定」に記載されているオブジェクトを使用します。

    JMSルーターでは、JMSコネクタを使用して、JMSの宛先とコネクション・ファクトリにアクセスします。JMSルーターでは、すべてのJMSルーター・ジョブのソース宛先およびターゲット宛先が、アクセス先のJMSプロバイダに存在し、適切に構成されたJMSコネクタ内で設定されている必要があります。キュー、トピックおよびコネクション・ファクトリを構成する方法の詳細は、「宛先オブジェクトおよびコネクション・ファクトリの構成」を参照してください。リソース・アダプタを構成する方法の詳細は、「JMSコネクタ」、および『Oracle Containers for J2EEリソース・アダプタ管理者ガイド』を参照してください。

    グローバル・ルーター・パラメータ

    同時ジョブの数は、JMSルーター属性maxLocalConcurrencyで構成できます。この属性により、多くのアクティブなジョブを処理するJMSルーターがOC4J J2EEコンテナを占有しないよう調整できます。また、この属性では、JMSルーターが使用するJMSコネクタで作成されるJMSセッションの上限数も設定できます。

    サブスクリプション

    ソースがJMSトピックである場合、トピックの永続サブスクライバ名を指定できます。実際の永続サブスクライバは、関連するルーター・ジョブの作成前に作成できます。永続サブスクライバ名を指定しない場合、JMSルーターにより、ジョブ名に基づいたサブスクライバ名が作成されます。JMSルーターがジョブの処理を開始したときに、サブスクライバ名に関連付けられた永続サブスクライバが存在しない場合、ルーターにより永続サブスクライバが作成されます。JMSルーターは、永続サブスクライバが作成されてからそのトピックにパブリッシュされたすべてのメッセージを移動します。

    デフォルトでは、JMSルーターは、JMSルーター・ジョブが削除された段階で永続サブスクライバも削除するよう試みます。JMSルーターが永続サブスクライバの削除に失敗した場合は、不要なメッセージが蓄積されないように、ユーザーがメッセージ・システムの管理インタフェースを使用してその永続サブスクライバを削除する必要があります。オプションで、JMSルーター・ジョブの削除時に永続サブスクライバを削除しないようJMSルーターを設定することも可能です。

    ログ・キューおよび例外キュー

    この項では、ログ・キューと例外キューについて説明します。

    ログ・キュー

    JMSルーターでは、内部ロギングにキューを使用します。各ルーター・ジョブには、ソース・ログ・キューとターゲット・ログ・キューが必要です。これらのキューは、ルーター・ジョブを処理する際のサービス品質を確保するために使用されます。OEMS JMSのメモリー内およびファイル・ベースのオプションでは、ログ・キューはJMSルーターによって作成されます。OEMS JMSのデータベースのオプションやサポートされる他のOracle以外のJMSプロバイダでは、JMSキューをそのシステムで作成し、キューの名前をルーター・ジョブの作成時に指定する必要があります。ログ・キューは、複数のジョブで共有可能です。

    JMSルーターのログ・キューは、アクセス先のメッセージ・システムに存在し、適切なリソース・アダプタ内で構成されている必要があります。

    例外キュー

    ターゲット宛先に対するメッセージの送信に失敗した場合、JMSルーターは、メッセージの順序を維持するために関連するルーター・ジョブの処理をブロックします。

    問題のあるメッセージを含むジョブの処理をJMSルーターで継続するには、例外キューを使用してジョブを構成します。JMSルーターでは、ソース宛先の残りのメッセージを処理するために、問題のあるメッセージを例外キューに移動できます。

    JMSルーター・ジョブごとに1つの例外キューを割り当てます。この例外キューは、ソース宛先と同じメッセージ・システム内にあるJMSキューで、ソース宛先と同じコネクション・ファクトリを使用してアクセスできる必要があります。例外キューの物理的なJMS宛先は、JMSルーター・ジョブでの使用前に存在している必要があります。OEMS JMSのメモリー内およびファイル・ベースのオプションでは、Oc4jJmsExceptionQueueという例外キューがデフォルトで定義されています。

    JMSルーターで問題のあるメッセージを例外キューに移動するためには、関連するルーター・ジョブのuseExceptionQueueフラグをtrueに設定する必要があります。

    JMSルーターの例外キューをオプションで構成する場合、その例外キューは、アクセス先のメッセージ・システムに存在し、適切なリソース・アダプタ内で構成されている必要があります。

    JMSルーターとそのオブジェクトの構成

    JMSルーターの主要な管理インタフェースは、JMSルーターMBeanです。このMBeanを使用して、構成の管理、個々のJMSルーター・ジョブの起動と停止、およびジョブのステータスの監視を行います。

    この項では、JMSルーターMBeanで使用できる操作および設定について説明します。

    JMSルーターMBeanへのパス:

    「OC4J: ホーム」→「管理」タブ→「サービス」→「JMSプロバイダ」→アイコンをクリック→適切なタブを選択→「関連リンク: OracleAS JMS Router」


    注意

    JMSルーターは、OC4Jインスタンスごとに1つのJMSルーターMBeanをエクスポートします(jmsrouter:j2eeType=OracleASJMSRouter)。  


    次の表に、JMSルーターMBeanで使用可能な操作とその説明を示します。すべての操作はJMSルーターを動的に更新し、その変更はjms.xmlに永続化されます。

    表4-15    JMSルーターMBeanの操作 
    操作  説明 

    addRouterJob 

    JMSルーター・ジョブを構成します。 

    alterRouterJob 

    JMSルーター・ジョブの属性を変更します。alterRouterJobのすべてのパラメータのデフォルト値は、パラメータを変更しないままの状態です。  

    configureRouter 

    JMSルーターの特定のグローバル・パラメータ(maxLocalConcurrencyなど)を構成します。  

    pauseRouterJob 

    JMSルーター・ジョブの実行を一時停止します。 

    removeRouterJob 

    JMSルーター・ジョブを削除します。  

    resetRouterJob 

    JMSルーター・ジョブの失敗数を0(ゼロ)にリセットします。 

    resumeRouterJob 

    JMSルーター・ジョブの実行を再開します。  

    表4-16「JMSルーター設定」に、JMSルーターMBeanでのルーター設定およびルーター・ジョブ設定とその説明を示します。表の最初の列は、JMSルーターMBeanでの設定の名前です。JMSルーターMBeanで実行した設定は、jms.xmlファイルに永続化されます。表の2番目の列は、jms.xmlファイルでの対応する要素の名前です。

    表4-16    JMSルーター設定 
    MBean設定  XMLエンティティ  説明 

    jobName

    addRouterJob操作により編集可能。  

    <job-name>

    ルーター・ジョブ要素 

    このルーター・ジョブの名前。構成対象のOC4Jインスタンスに対して一意である必要があります。 

    messageSource

    addRouterJob操作により編集可能。  

    <message-source>

    ルーター・ジョブ要素 

    メッセージのソースとして使用する宛先(トピックまたはキュー)のJNDIロケーション。

    自動宛先ラッピングを使用する場合、名前には次の形式を使用できます。

    <JNDIsubcontext>/providerName

    ここで、<JNDIsubcontext>は、oc4j-connectors.xmlで指定された自動宛先ラッピングのJNDIサブコンテキストです。

    たとえば、自動宛先ラッピングをJMSコネクタと組み合せて使用する場合、名前は次の形式になります。

    OracleASjms/Queues/jms/queue_name

    または

    OracleASjms/Topics/jms/topic_name 

    sourceConnectionFactory

    addRouterJob操作により編集可能。  

    <source-connection-factory>

    ルーター・ジョブ要素 

    メッセージ・ソースへのアクセスに使用するコネクション・ファクトリのJNDIロケーション。

    たとえば、JMSコネクタを使用する場合、名前は次のようになります。

    OracleASjms/MyCF

    メッセージ・ソースがJMSトピックの場合、この名前には、JMSキューおよびトピックの両方をサポートするコネクション・ファクトリを指定する必要があります。 

    messageTarget

    addRouterJob操作により編集可能。  

    <message-target>

    ルーター・ジョブ要素 

    メッセージ伝播のターゲットとして使用する宛先(トピックまたはキュー)のJNDIロケーション。

    自動宛先ラッピングを使用する場合、名前には次の形式を使用できます。

    <JNDIsubcontext>/providerName

    ここで、<JNDIsubcontext>は、oc4j-connectors.xmlで指定された自動宛先ラッピングのJNDIサブコンテキストです。

    たとえば、自動宛先ラッピングをJMSコネクタと組み合せて使用する場合、名前は次の形式になります。

    OracleASjms/Queues/jms/queue_name

    または

    OracleASjms/Topics/jms/topic_name 

    targetConnectionFactory

    addRouterJob操作により編集可能。  

    <target-connection-factory>

    ルーター・ジョブ要素 

    messageTargetへのアクセスに使用するコネクション・ファクトリのJNDIロケーション。

    たとえば、JMSコネクタを使用する場合、名前は次のようになります。

    OracleASjms/MyCF

    メッセージ・ソースがJMSトピックの場合、この名前には、JMSキューおよびトピックの両方をサポートするコネクション・ファクトリを指定する必要があります。 

    sourceLogQueue

    addRouterJob操作により編集可能。  

    <source-log-queue>

    ルーター・ジョブ要素 

    JMSルーターがソース・メッセージ・システムの内部ロギングに使用するキューのJNDIロケーション。ログ・キューは、次の名前で識別されるコネクション・ファクトリを通じてアクセスできる必要があります。

    sourceConnectionFactory

    OEMS JMSのメモリー内またはファイル・ベースの宛先を使用している場合、このパラメータはオプションです。指定しない場合、JMSルーターでは次のキューが使用されます。

    OracleASRouter_LOGQ

    このキューが存在しない場合、JMSルーターにより作成されます。 

    targetLogQueue

    addRouterJob操作により編集可能。  

    <target-log-queue>

    ルーター・ジョブ要素 

    JMSルーターがターゲット・メッセージ・システムの内部ロギングに使用するキューのJNDIロケーション。ログ・キューは、次の名前で識別されるコネクション・ファクトリを通じてアクセスできる必要があります。

    targetConnectionFactory

    OEMS JMSのメモリー内またはファイル・ベースの宛先を使用している場合、このパラメータはオプションです。指定しない場合、JMSルーターでは次のキューが使用されます。

    OracleASRouter_LOGQ

    このキューが存在しない場合、JMSルーターにより作成されます。 

    messageSelector

    addRouterJob操作により編集可能。  

    <message-selector>

    ルーター・ジョブ要素 

    オプション。messageSourceからメッセージを選択的に受信するためのメッセージ・セレクタ。デフォルトはnoneです。 

    subscriberName

    addRouterJob操作により編集可能。  

    <subscriber-name>

    ルーター・ジョブ要素 

    オプション。messageSourceがトピックの場合、使用する永続サブスクライバの名前。指定した永続サブスクライバが存在せず、messageSourceがトピックの場合、JMSルーターにより作成されます。

    デフォルト値は次のとおりです。

    OracleASRouter_jobName 

    ここで、jobNameは、ルーター・ジョブの名前です。 

    exceptionQueue

    addRouterJobおよびalterRouterJob操作により編集可能。  

    <exception-queue>

    ルーター・ジョブ要素 

    配信できないメッセージを配置するキューのJNDIロケーション。例外キューは、sourceConnectionFactoryからアクセスできる必要があります。

    このパラメータは、useExceptionQueueがtrueの場合にのみ指定する必要があります。useExceptionQueueがtrueのときに、このパラメータがオプションになるのは、メッセージ・プロバイダがOEMS JMSのメモリー内またはファイル・ベースの永続性オプションの場合です。指定しない場合、JMSルーターでは、OEMS JMSの例外キューであるOc4jJmsExceptionQueueが使用されます。このキューはすでに存在しているため、個別に作成する必要はありません。

    alterRouterJobを使用する場合、デフォルトはnullです。  

    maxRetries

    addRouterJobおよびalterRouterJob操作により編集可能。  

    max-retries

    ルーター・ジョブ属性 

    オプション。JMSルーターでこのジョブの実行を一時停止する前にメッセージの配信を試行する回数。

    値は、整数値文字列である必要があります。文字列が整数を示していない場合、無視されてデフォルトが使用されます。

    addRouterJobを使用する場合、デフォルトは16です。alterRouterJobを使用する場合、デフォルトはnullです。  

    pollingInterval

    addRouterJobおよびalterRouterJob操作により編集可能。  

    polling-interval

    ルーター・ジョブ属性 

    オプション。メッセージがメッセージ・ソースに存在しない場合に、メッセージ・ソースを再度チェックする前に待機する最低限の秒数。

    値は、整数を示す文字列である必要があります。文字列が整数を示していない場合、無視されてデフォルトが使用されます。

    addRouterJobを使用する場合、デフォルトは5です。alterRouterJobを使用する場合、デフォルトはnullです。  

    useExceptionQueue

    addRouterJobおよびalterRouterJob操作により編集可能。  

    use-exception-queue

    ルーター・ジョブ属性 

    オプション。値がtrueに設定され、例外キューが使用できる場合、配信できないメッセージは例外キューに配置されます。それ以外の場合、例外キューは使用されません。

    addRouterJobを使用する場合、デフォルトはfalseです。alterRouterJobを使用する場合、デフォルトはnullです。  

    pauseJob

    addRouterJob操作により編集可能。  

    pause-job

    ルーター・ジョブ属性 

    オプション。trueの場合、ジョブは、非アクティブ化モードで追加されます。

    ジョブを開始するには、resumeJobを起動します。

    trueではない場合、ジョブは、アクティブ化モードで作成されます。

    デフォルトはfalseです。 

    batchSize

    addRouterJobおよびalterRouterJob操作により編集可能。  

    batch-size

    ルーター・ジョブ属性 

    オプション。1回のトランザクションでデキューおよびエンキューするメッセージの数。

    addRouterJobを使用する場合、デフォルトは30です。alterRouterJobを使用する場合、デフォルトはnullです。  

    removeSubscriber

    removeRouterJob操作により編集可能。  

    remove-subscriber

    ルーター・ジョブ属性 

    trueで、かつルーター・ジョブで永続サブスクライバを使用している場合、JMSルーターによりその永続サブスクライバが削除されます。

    falseの場合、永続サブスクライバは削除されません。JMSルーターによる永続サブスクライバの削除に失敗した場合、ユーザーが手動で削除する必要があります。

    デフォルトはtrueです。  

    maxLocalConcurrency

    configureRouter操作により編集可能。  

    maxlocalconcurrency

    グローバルJMSルーター属性 

    オプション。可能にするデキュー操作の最大同時実行数。この引数では、JMSルーターがメッセージをデキューするために一度に使用できるスレッドの数を制限します。このパラメータは、JMSルーターによって使用されるコンテナ・リソースの量を制限します。

    デフォルト値は-1で、同時に処理できるルーター・ジョブの数に制限がないことを示します。 

    jms.xmlでのJMSルーターの構成

    J2EE_HOME/config/jms.xmlファイルは、JMSルーター・ジョブおよびグローバル構成を永続化するのに使用されます。

    JMSルーターは、jms.xmlファイルの<jms-router>要素で構成します。<jms-router>要素には、0個以上の<router-job>要素が含まれます。JMSルーター・ジョブは、<router-job>要素で定義します。

    jms.xmlファイルのJMSルーター要素とその説明は、表4-16「JMSルーター設定」を参照してください。

    最小構成の例: jms.xmlでのJMSルーター構成

    この例では、単一のJMSルーター・ジョブの最小構成を示します。このジョブは、OEMS JMSのメモリー内のキューをソースおよびターゲットとして使用し、グローバルにデプロイされたJMSコネクタ・インスタンスのOracleASjmsをJMSオブジェクトとして利用します。

    <?xml version="1.0"?>
    <jms xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchema 
    Location="http://www.oracle.com/technology/oracleas/schema/jms-server-10_1.xsd" 
    schema-major-version="10" schema-minor-version="1">
      <!-- OracleAS JMS server configuration -- omitted for brevity  -->
      <jms-server>
         ...
      </jms-server>
    
      <!-- JMS Router configuration -->
      <jms-router max-local-concurrency="-1" >
    
         <!-- Minimal configuration for a JMS Router job.-->
         <router-job job-name="routerjob1">
    
            <!-- The name of a JMS Router destination -->
            <message-source>OracleASjms/Topics/jms/mySource</message-source>
    
            <!-- Connection factory for the message source. -->
            <source-connection-factory>OracleASjms/MyCF</source-connection-factory>
    
            <!-- The name of a JMS Router destination -->
            <message-target>OracleASjms/Queues/jms/myTarget</message-target>
    
            <!--Connection factory for the message target. -->
            <target-connection-factory>OracleASjms/MyCF</target-connection-factory>
    
         </router-job>
      </jms-router>
    
    </jms>
    
    構文の例: jms.xmlでのJMSルーター構成

    この例では、使用可能なすべての属性値を設定するルーター・ジョブを定義して、jms.xmlのJMSルーターに関する構文を示します。この例では、単一のJMSルーター・ジョブの構成を定義しますが、このジョブは、OEMS JMSのメモリー内のキューをソースとして、OEMS JMSのデータベースのキューをターゲットとして使用します。また、JMSコネクタ・インスタンスのOracleASjmsをソースJMSオブジェクトとして、JMSコネクタ・インスタンスのojmsaqをターゲット・オブジェクトとして利用します。

    <?xml version="1.0"?>
    <jms xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchema 
    Location="http://www.oracle.com/technology/oracleas/schema/jms-server-10_1.xsd" 
    schema-major-version="10" schema-minor-version="1">
      <!-- OracleAS JMS server configuration -- omitted for brevity  -->
      <jms-server>
         ...
      </jms-server>
    
      <!-- JMS Router configuration -->
      <jms-router max-local-concurrency="-1" >
    
          <router-job
              job-name="routerjob1"
              max-retries="16"
              polling-interval="5"
              pause-job="false"
              use-exception-queue="true"
              batch-size="30"
          >
              <!-- The name of an JMS Router source destination -->
              <message-source>OracleASjms/Topics/jms/mySource</message-source>
    
              <!-- Connection factory for the message source. -->
              <source-connection-factory>OracleASjms/MyCF</source-connection-factory>
    
              <!-- A message selector used at the message source -->
              <message-selector>color='blue'</message-selector>
    
              <!--This is the default subscriber name for this job as written to this file 
    by the JMS Router -->
              <subscriber-name>OracleASRouter_routerjob1</subscriber-name>
    
              <!--There is no need to specify the log queue for OracleAS JMS, but the 
    default value will be written back to this file by the JMS Router -->
              <source-log-queue>OracleASjms/Queues/OracleASRouter_LOGQ</source-log-queue>
    
              <!-- An exception queue --> 
              <exception-queue>OracleASjms/Queues/jms/myExQ</exception-queue>
    
              <!-- The name of an JMS Router target destination -->
              <message-target>ojmsaq/Queues/Queues/MyDBTarget</message-target>
    
              <!-Connection factory for the message target. -->
              <target-connection-factory>ojmsaq/CF</target-connection-factory>
    
              <!-- A log queue must be specified for all providers but OracleAS JMS. This 
    queue must already exist  ->
              <target-log-queue>ojmsaq/Queues/Queues/MyJMSRouterLog</target-log-queue>
    
          </router-job>
      </jms-router>
    
    </jms>
    

    ルーターの管理

    この項では、JMSルーターを管理するためのJMSルーターMBeanの操作について説明します。

    JMSルーターMBeanでは、次の操作を実行できます。

    JMSルーターMBeanの操作とその説明は、表4-15「JMSルーターMBeanの操作」を参照してください。

    JMSルーターMBeanへのパス:

    「OC4J: ホーム」→「管理」タブ→「サービス」→「JMSプロバイダ」→アイコンをクリック→適切なタブを選択→「関連リンク: OracleAS JMS Router」

    ルーター・ロギング

    JMSルーターは、すべての重要なイベントおよびエラー・メッセージをOC4Jの標準ログ・ファイルに記録します。ログ出力名は、oracle.j2ee.jms.routerです。

    JMSルーターのステータス情報

    JMSルーターの実行時ステータス情報にアクセスするには、JMSルーターMBeanのRouterJobsStatusおよびRouterGlobalStatus属性を使用します。

    表4-17    JMSルーターおよびルーター・ジョブのステータス 
    統計  説明 

    NumberJobs 

    構成されているジョブの数 

    RouterState 

    JMSルーターの状態を示す文字列 

    Retries 

    JMSルーターがこのジョブでメッセージ配信に失敗した回数 

    ExceptionQMessages 

    このジョブにより例外キューに移動されたメッセージの数 

    LastErrorTime 

    このジョブがエラー状態にある場合、最後のエラーが発生した時刻 

    TargetQMessages 

    このジョブによりターゲット・キューに伝播されたメッセージの数 

    JobState 

    このジョブの状態を示す文字列 

    エラー処理

    JMSルーター・ジョブの処理中には、ソースまたはターゲット宛先への接続障害やメッセージ操作の失敗などの様々な障害が発生する可能性があります。JMSルーターは、障害の性質やルーター・ジョブの構成に基づいて、障害を次のように処理します。

    JMSルーターが、メッセージの内容を原因としてターゲット宛先にメッセージをエンキューできない場合で、かつ

    メッセージがソース宛先から例外キューに移動される場合、エラー情報の維持を目的として、JMSルーターにより元のメッセージに特定のメッセージ・プロパティが追加されます。表4-18「例外キューのメッセージに追加されるプロパティ」に、これらのメッセージとその説明を示します。

    表4-18    例外キューのメッセージに追加されるプロパティ 
    JMSプロパティ  説明 

    oraMsgRouter_origMsgid 

    ソース・メッセージのID 

    oraMsgRouter_jobName 

    ルーター・ジョブの名前 

    oraMsgRouter_srcCF 

    デキューまたはエンキューに使用されたコネクション・ファクトリの名前 

    oraMsgRouter_srcQName 

    メッセージが取得されたソース・キューの名前 

    oraMsgRouter_moveReason 

    メッセージが例外キューに移動された理由 

    oraMsgRouter_moveTime 

    メッセージが例外キューに移動された時刻 

    障害の原因がメッセージの内容ではない場合、JMSルーターは、次の式に基づいて徐々に間隔を空けながら失敗した操作を自動的に再試行します。

    (2^n) * (pollingInterval),
    

    この間隔は、最大15分です。この再試行操作は、成功するまで、またはmaxRetries属性(表4-16「JMSルーター設定」を参照)で指定された構成可能な最大再試行回数に到達してルーター・ジョブの処理が停止されるまで継続されます。

    maxRetries設定で指定された再試行回数に到達してルーター・ジョブの処理が停止された場合に、ジョブの処理を再開するには、resetJobをコールして失敗回数を0にリセットします。

    各ジョブの失敗回数は、メモリーに格納されます。そのため、JMSルーターが再起動すると、すべてのジョブの失敗回数は0にリセットされます。

    ジョブの一時停止と再開

    JMSルーター・ジョブには、表4-16「JMSルーター設定」に記載したpauseJob設定で指定できるactivatedモードとdeactivatedモードがあります。

    deactivatedモードのジョブは、JMSルーターで処理されません。

    ジョブをdeactivatedモードに移行するには、JMSルーターMBeanのpauseJob操作を使用します。

    ジョブをactivatedモードに移行するには、JMSルーターMBeanのresumeJob操作を使用します。

    デフォルトでは、ジョブはactivatedモードで作成されます。

    OC4Jクラスタ環境での実行

    OC4Jクラスタ環境では、JMSルーター・インスタンスは、OC4Jインスタンスごとに実行できます。これらのJMSルーター・インスタンスは、個別に構成され、相互に独立して実行されます。あるOC4Jインスタンス上に構成されたJMSルーター・ジョブは、そのOC4Jインスタンスで稼働するJMSルーター・インスタンスによってのみ処理されます。

    原則として、異なるJMSルーター・ジョブでは、一般的なソース(キューまたは永続サブスクライバ)を共有することはできません。違反した場合、JMSルーター・ジョブにリカバリ不可能な障害が発生する可能性があります。OC4Jクラスタ環境では、クラスタ内のすべてのOC4Jインスタンスにこの原則が適用されます。

    リモート宛先を使用したルーティング

    JMSルーターでは、OEMS JMSのリモート・コネクション・ファクトリを使用して、あるOC4JインスタンスからOEMS JMSを介して別のOC4Jインスタンスにメッセージをルーティングできます。詳細は、「カスタム・トポロジ」を参照してください。

    リモートOEMS JMSインスタンスのコネクション・ファクトリを使用してJMSルーター・ジョブを定義する場合、そのコネクション・ファクトリを使用してアクセスされる任意のJMS宛先は、リモートとローカル両方のOC4Jインスタンスで定義される必要があります。ソース・コネクション・ファクトリがリモートである場合、これらのJMS宛先には、メッセージ・ソース、JMSルーターのソース・ログ・キュー、および(オプションの)例外キューが含まれます。ターゲット・コネクション・ファクトリがリモートである場合、適切なJMS宛先には、メッセージ・ターゲットと、JMSルーターのターゲット・ログ・キューが含まれます。

    メッセージ・ソースまたはメッセージ・ターゲットがリモートである場合、JMSルーター・ジョブの作成時に、JMSルーター・ログ・キューをリモート・インスタンス上に手動で作成して指定する必要があります。

    OEMS JMSのHTTPトネリングを使用したリモート宛先へのルーティング

    OEMS JMSでは、JMSメッセージがファイアウォールを通過できるようHTTPトネリングがサポートされています。この機能は、Webで稼働しているOC4Jインスタンス上にJMS HTTPトンネル・プロバイダを構成することで有効化されます。Webで稼働するOC4Jインスタンスは、ファイアウォールの内側に配置されている場合があります。この機能は、OEMS JMSのメモリー内およびファイル・ベースでのみ使用可能です。リモート宛先へのルーティングの詳細は、「リモート宛先を使用したルーティング」および「カスタム・トポロジ」を参照してください。

    JMS HTTPトンネル・プロバイダが構成されている場合、JMSアプリケーションはtunnelhostおよびport属性が定義されているコネクション・ファクトリをルックアップしてHTTPトネリングを使用します。tunnel属性は、JMS HTTPトンネル・プロバイダのURLを指定します。hostおよびport属性は、JMSリクエストを処理するターゲットJMSサーバーを指定します。前述のコネクション・ファクトリを使用してJMSアプリケーションによりJMS接続が作成されると、ターゲットJMSサーバーへの通信はJMS HTTPトンネル・プロバイダ経由でルーティングされます。アプリケーションとJMS HTTPトンネル・プロバイダ間の通信には、HTTP(またはSSLを使用するよう構成されている場合はHTTPS)が使用されます。JMS HTTPトンネル・プロバイダとターゲットJMSサーバー間の通信には、TCPが使用されます。

    JMS HTTPトンネル・プロバイダの構成

    <http-tunnel>要素がOC4Jインスタンスのjms.xml構成ファイルに含まれている場合、OC4Jインスタンスは、JMS HTTPトンネル・プロバイダとして機能します。<http-tunnel>要素は、<jms-server>要素のオプションのサブ要素です。各OC4Jインスタンスに定義できるJMS HTTPトンネルは最大で1つです。


    注意

    OC4Jインスタンスのjms.xml構成ファイルで<http-tunnel> 要素が追加、変更または削除された場合には、OC4Jインスタンスを再起動する必要があります。 


    次の表に、<http-tunnel>ノードの構成要素を示します。

    表4-19    OEMS JMS HTTPトンネルの構成 
    要素および属性  説明 

    authentication 

    authentication属性には、値requiredまたはnoneを指定します。デフォルト値は、requiredです。

    requiredは、接続のユーザー/パスワードが、ターゲットJMSサーバーにリレーされる前にJMS HTTPトンネル・プロバイダによって認証されることを意味します。認証に失敗するとリクエストは拒否されます。

    noneは、(その他すべての設定で許可されている場合には)ユーザーは認証されずに、JMS HTTPトンネル・プロバイダによってターゲットJMSサーバーにリレーされることを意味します。このプロパティをnoneに設定すると、ターゲットJMSサーバーで実行される認証は抑制されません。 

    tcp-relay 

    tcp-relay要素は、ターゲットJMSサーバーがJMS HTTPトンネル・プロバイダとは異なるJVMに存在するJMSリクエストが、(その他の設定で許可されている場合には)JMS HTTPトンネル・プロバイダによってターゲットJMSサーバーにリレーされることを指定します。

    tcp-relay要素が省略されている場合、ターゲットJMSサーバーがJMS HTTPトンネル・プロバイダとは異なるJVMに存在するJMSリクエストは、JMS HTTPトンネル・プロバイダによって拒否されます。 

    filter 

    tcp-relay要素のfilter属性はlistまたはautoで、デフォルトでlistに設定されます。

    listは、ターゲットJMSサーバーのアドレスがターゲット・アドレスのリストに含まれる場合には、JMS HTTPトンネル・プロバイダによりターゲットJMSサーバーへのJMSリクエストのみがリレーされることを意味します。その他すべてのJMSリクエストはJMS HTTPトンネル・プロバイダによって拒否されます。リストの各ターゲットJMSサーバー・アドレスは、targetサブ要素を使用して指定されます。

    autoは、JMS HTTPトンネル・プロバイダにより、(コネクション・ファクトリ定義にhost/port属性で指定されているように)ターゲットJMSサーバー・アドレスが実際のJMSサーバーに対応しているかどうかが確認されることを意味します。プロバイダにより、指定されたhost/portにトネリング・プロトコルを使用してリクエストが送信されます(TCPが使用されます)。レスポンスが戻ってきた場合、そのhost/portはJMSリクエストに対する有効なターゲットであるとみなされ、リクエストがリレーされます(その他すべての設定で許可されている場合)。

    確実に自動検出できる特定のhost/portの組合せはキャッシュされるため、指定されたhost/portでは自動検出は繰り返されません。host/portのリストを手動で作成する必要がないため、自動検出は便利です。ただし、安全性に関するコーディングが不十分な、JMS以外のhost/portにおけるサーバー・プロセス・リスニングが、自動検出中の調査で不適切な反応をする可能性があります。有効なレスポンスがtimeoutの期間中に戻されない場合、自動検出は失敗したとみなされます。 

    timeout 

    tcp-relay要素のtimeout属性は、JMS HTTPトンネル・プロバイダがターゲットJMSサーバーからのレスポンスを待機する期間を制限します。値はミリ秒単位で入力します。デフォルト値は、5000です。 

    target 

    tcp-relayの下位の各targetサブ要素は、JMS HTTPトンネル・プロバイダがJMSリクエストをリレーするターゲットJMSサーバーのホストおよびポートをリストします。この要素は、tcp-relayフィルタがlistの場合に使用され、フィルタがautoの場合には無視されます。複数のtarget要素を指定できます。各ターゲット・アドレスは次の書式である必要があります。

    <target host="host" port="port"/>  

    次の例では、jms.xmlファイルに構成されたJMS HTTPトンネルを示します。

    <jms>
       <jms-server>
       ...
          <http-tunnel authentication="required">
             <tcp-relay filter="list" timeout="5000">
                <target host="host1" port="9127"/>
                <target host="host2" port="9127"/>
             </tcp-relay>
          </http-tunnel>
       ...
       </jms-server>
    
       <jms-router>
       ...
       </jms-router>
    </jms>
    
    

    その他のHTTPトンネルの例

    JMS HTTPトンネル・プロバイダは、JMS HTTPトンネル・プロバイダのOC4JインスタンスでJMS接続のユーザー名/パスワードが両方とも有効(認証がrequiredに設定されているため)で、ターゲットJMSサーバーがJMSトネリング・プロトコルに肯定的に対応する場合に、JMSリクエストをJMSサーバーにリレーするように構成できます。

    <http-tunnel authentication="none"/>

    JMS HTTPトンネル・プロバイダは、JMS HTTPトンネル・プロバイダのOC4JインスタンスでJMS接続のユーザー名/パスワードが両方とも有効(認証がrequiredに設定されているため)で、ターゲットJMSサーバーがJMS HTTPプロトコルに肯定的に対応する場合に、リクエストを任意のJMSサーバーに転送するように構成できます。

    <http-tunnel authentication="required">
       <tcp-relay filter="auto"/>
    </http-tunnel>
    

    JMS HTTPトンネル・プロバイダは、server1.xyz.com port 9127またはserver2.xyz.com port 2000のJMSサーバー宛のJMSリクエストのみをリレーするように構成できます。

    <http-tunnel authentication="none">
       <tcp-relay filter="list">
          <target host="server1.xyz.com" port="9127">
          <target host="server2.xyz.com" port="2000">
       </tcp-relay>
    </http-tunnel>
    

    SSLを使用したJMS HTTPトネリング

    JMS HTTPトンネル・プロバイダの機能はWebアプリケーションとして構成され、Oracle Application ServerでOracle HTTP Serverを使用する場合とOracle HTTP Serverを使用しないスタンドアロンの場合のどちらでも、Secure Socket Layer(SSL)通信でのOC4Jのサポートを利用できます。

    SSL通信の設定方法の詳細は、『Oracle Containers for J2EEセキュリティ・ガイド』を参照してください。

    コネクション・ファクトリの構成

    コネクション・ファクトリ構成に構成済のOEMS JMS HTTPトンネル・プロバイダのURLに設定されたtunnel属性が含まれる場合、OEMS JMSアプリケーションはJMS HTTPトンネルのみを通過します。

    この章の表4-1ですでに説明したコネクション・ファクトリ属性に加え、JMSのコネクション・ファクトリ属性も設定されています。


    注意

    OC4Jインスタンスのjms.xml構成ファイルでコネクション・ファクトリが追加、変更または削除された場合には、OC4Jインスタンスを再起動する必要があります。 


    表4-20    コネクション・ファクトリの属性 
    属性  説明 

    tunnel 

    この属性は、JMS HTTPトンネル・プロバイダ・サーブレットのURLです。URLは、jms.xml構成ファイルに<http-tunnel>要素が定義されているJMSサーバーを指している必要があります。次の書式で指定する必要があります。

    スタンドアロンのOC4J:

    • http:///hostname:port//jms(SSL以外のHTTPトネリングの場合)

    • https:///hostname:port//jms(HTTP over SSLトネリングの場合)

    iAS:

    • http:///hostname:port/j2ee//jms(SSL以外のHTTPトネリングの場合)

    • https:///hostname:port/j2ee//jms(HTTP over SSLトネリングの場合)

    HTTPSを介してJMS HTTPトネリングを使用している場合には、ポート番号が、SSL対応のOC4J Webサイトを指定している必要があります。 

    keystore 

    この属性には、キーストアの名前およびパスが含まれます。キーストアは、SSLを使用してJMS HTTPトンネル・プロバイダ・サーブレットを通過する場合にのみ使用されます。絶対パスをお薦めします。 

    keystore-password 

    この属性はキーストアのパスワードです。keystore属性が指定されている場合には、この属性は必須です。 

    truststore 

    この属性には、トラストストアの名前およびパスが含まれます。トラストストアを指定しない場合、OC4Jではキーストアがトラストストアとして使用されます。トラストストアは、SSLを使用してJMS HTTPトンネル・プロバイダ・サーブレットを通過する場合にのみ使用されます。絶対パスをお薦めします。 

    truststore-password 

    この属性はトラストストアのパスワードです。truststore属性が指定されている場合には、この属性は必須です。 

    Provider 

    この属性は、JavaセキュリティAPIにjava.security.Providerを実装するクラスの名前です。値が指定されていない場合、デフォルトのプロバイダoracle.security.pki.OraclePKIProviderが使用されます。Provider属性は、SSLを使用してJMS HTTPトンネル・プロバイダ・サーブレットを通過する場合にのみ使用されます。 

    コネクション・ファクトリの構成例

    次の例では、JNDIロケーションjms/SomeQCFでルックアップされるOEMS JMSのQueueConnectionFactoryを作成します。JMS接続の作成に使用される場合、接続は、ホストjmstunnelhostに存在するSSL以外のHTTPトンネルを通過します。

    <queue-connection-factory 
       name="jms/SomeQCF"
       location="jms/SomeQCF"
       host="server1.abc.com" port="9127"
       tunnel="http://jmstunnelhost:8888/jms"/>
    

    次の例では、JNDIロケーションjms/AnXaTCFでルックアップされるOEMS JMSのXATopicConnectionFactoryを作成します。JMS接続の作成に使用される場合、keystoreおよびkeystore-passwordが有効であれば、接続は、ホストserver1.xyz.comに存在するSSLのHTTPSトンネルを通過します。

    <xa-topic-connection-factory
       name="jms/AnXaTCF"
       location="jms/AnXaTCF"
       host="server1.xyz.com" port="2000"
       tunnel="https://server1.xyz.com:4443/jms"
       keystore="/location/of/keystore"
       keystore-password="keypass"/>
    

    ホスト名の競合の解決

    OEMS JMSのメモリー内およびファイル・ベースのオプションでは、識別子(メッセージIDなど)が一意である必要があります。識別子の一部は、JMSサーバーおよびクライアントのマシンのホスト名から構成されます。同じJMSサーバーと通信している異なる2つのマシンのホスト名が同一である場合、IDは一意ではなくなり、JMSの機能が予期したとおりに機能しない可能性があります。

    たとえば、イントラネットAのJMSクライアントAで、イントラネットBのJMSサーバーへのアクセスにJMS HTTPトンネル・プロバイダを使用していて、イントラネットBのJMSクライアントBもそのJMSサーバーにアクセスしている場合、JMSクライアントAが稼働しているマシンのホスト名は、JMSクライアントBが稼働しているマシンのホスト名とは異なる必要があります。2つのイントラネットへの接続にJMS HTTPトネリングが使用されている場合、これらのイントラネットの管理者は、ホスト名の競合を避けるためにそれぞれを調整する必要があります。


    注意

    同じマシン(つまりホスト名が同じ)の同一または異なるJVMで2つ以上のJMSサーバー(またはJMSクライアント、あるいはその両方)が稼働していても、JVM全体および個々のJVM内で一意のIDが生成されるため特に問題はありません。ホスト名の競合は、2つの異なるマシンに同じホスト名がある場合にのみ問題になります。 


    JMSのロギングの構成

    この項では、JMS固有のロギングを構成するための様々なオプションを説明します。OEMSはOC4Jロギング実装を使用して、JMSに関連するメッセージを記録します。通常、メッセージは、問題のトラブルシューティングや診断に使用されます。OC4Jロギングはデフォルトの設定を使用するように構成されます。ただし、これらの設定をJMS用に変更して、さらに詳細なログ・メッセージを取得できます。OC4Jロギング実装の詳細は、『Oracle Containers for J2EE開発者ガイド』を参照してください。

    標準のJMS

    標準のJMS機能のトレースに使用可能なログ出力は2つあります。それらのログ出力は次のとおりです。

    標準のJMSログ出力は、J2EE_HOME/config/j2ee-logging.xmlファイルに構成されます。たとえば、高度なサーバー・レベルのロギングを構成し、ログ・レベルをFINESTに設定するには、次のログ出力ノードを追加します。

    <loggers>
       ...
       <logger name='com.evermind.jms.JMSServer' level='FINEST'
          useParentHandlers='false'>
          <handler name='oc4j-handler'/>
          <handler name='console-handler'/>
       </logger>
    <loggers>
    

    この例では、ログ出力からのメッセージは、oc4j-handlerおよびconsole-handlerログ・ハンドラでの指定どおりに出力に送信されます。

    JMSプロバイダ

    com.evermind.server.jmsログ出力は、OEMS JMSファイル全体の永続性プロバイダ実装のログ情報を取得するために使用されます。JMSプロバイダのログ出力は、J2EE_HOME/config/j2ee-logging.xmlファイルに構成されます。たとえば、ログ出力を構成してログ・レベルをFINESTに設定するには、次のログ出力ノードを追加します。

    <loggers>
       ...
       <logger name='com.evermind.jms' level='FINEST'
          useParentHandlers='false'>
          <handler name='oc4j-handler'/>
          <handler name='console-handler'/>
       </logger>
    <loggers>
    

    この例では、ログ出力からのメッセージは、oc4j-handlerおよびconsole-handlerログ・ハンドラでの指定どおりに出力に送信されます。

    JMSコネクタ

    JMSコネクタを使用する際には、すべてのコネクタのログ出力を設定するオプションと、各コネクタのログ出力を設定するオプションがあります。

    すべてのコネクタ

    oracle.j2ee.ra.jms.genericログ出力は、すべてのコネクタに対して使用します。ログ出力は、J2EE_HOME/config/j2ee-logging.xmlファイルに構成されます。たとえば、ログ出力を構成してログ・レベルをFINESTに設定するには、次のログ出力ノードを追加します。

    <loggers>
       ...
       <logger name='oracle.j2ee.ra.jms.generic' level='FINEST'
          useParentHandlers='false'>
          <handler name='oc4j-handler'/>
          <handler name='console-handler'/>
       </logger>
    <loggers>
    

    この例では、ログ出力からのメッセージは、oc4j-handlerおよびconsole-handlerログ・ハンドラでの指定どおりに出力に送信されます。

    各コネクタ

    ログ出力は各コネクタに構成し、そのコネクタに関する特定のメッセージを指定できます。ログ出力は、J2EE_HOME/config/oc4j-connectors.xmlファイル、またはra.xmlファイルに構成されます。次に例を示します。

    <config-property>
       <config-property-name>loggerName</config-property-name>
       <config-property-type>java.lang.String</config-property-type>
       <config-property-value>mylog</config-property-value>
    </config-property>
    <config-property>
       <config-property-name>logLevel</config-property-name>
       <config-property-type>java.lang.String</config-property-type>
       <config-property-value>FINEST</config-property-value> 
    </config-property>
    

    メッセージ・エンドポイント

    ログ・レベルは、LogLevel構成プロパティを使用して、特定のメッセージ・エンドポイント用に調整できます。本番コードでは、このプロパティは設定しないでください。デバッグ目的で一時的にのみ設定してください。

    このプロパティは、<message-driven-deployment>ノード内のorion-ejb-jar.xmlファイルに追加されます。次に例を示します。

    <enterprise-beans>
       <message-driven-deployment ... >
          ...
          <config-property>
             <config-property-name>LogLevel</config-property-name>
             <config-property-value>FINEST</config-property-value>
          </config-property>
       </message-driven-deploymnet>
    </enterprise-beans>
    


    注意

    LogLevelプロパティは、ejb-jar.xmlファイルにも設定できます。構成プロパティの使用方法の詳細は、「MDBエンドポイントの微調整」を参照してください。設定できる有効なログ・レベルの詳細なリストは、表4-11「MDBの構成プロパティ」LogLevelエントリを参照してください。 



  • 戻る 次へ
    Oracle
    Copyright © 2006 Oracle Corporation.

    All Rights Reserved.
    目次
    目次
    索引
    索引