Skip navigation

ESB MuleをOracle Application Serverにデプロイする

以下に[ESB Mule JCAリソースアダプター]をOracleアプリケーションサーバにデプロイ手順とESB MuleをOracle Advanced Queueと利用するための設定を説明します。デプロイすることで、EJBとESB Mule間でイベントを送受信することができます。

TODO. If you are using Mule with Oracle Application Server please contact us with your configuration and any tips to getting Oracle Application Server and Mule working together. Thanks!

Oracle Advanced Queuing (AQ)の設定

Oracle AQはコネクション・ファクトリ(Connection Factory)の生成の仕方がJMS仕様から少し異なっているためにESB MuleをOracle AQと使う場合には少しの仕業が必要です。大きな違いは、Oracleはデータベースを中心としたキュー・モデルを使っているために、コネクションを作成するとOracle JDBCコネクションが作成されます。このコネクタを使ってESB MuleはJNDIを使わずに、JMS APIを介してOracleデータベースのキューと接続することができます。(Oracle Standard版は、キューをリポジトリへエキスポートするのを無効にしています。)データベース表が更新された場合に、このコネクタを使ってJMSメッセージを送信することができます。

Oracle JMSプロバイダは標準のESB Mule JMSプロバイダを継承して、Advanced Queueingを基にしたOracle JMS特有の機能を追加します。

このトランスポート・プロバイダのJavaDocはここにあります。
ソースコードはここにあります。

Oracle JMSプロバイダはOracleのネイティブXMLデータ型を含むADT (Advanced Data Type) ペイロードに対応しています。

他のJMSプロバイダと異なり、Oracle JMSプロバイダにはJNDIは 不要 です。

Oracle 9iは、JMS 1.0.2b仕様のみに準拠しています。

 

プロパティ

標準のJMSプロバイダで提供しているプロパティの他に、Oracle JMSプロバイダは以下のプロパティをサポートしています:

プロパティ 説明 デフォルト 必須
url OracleデータベースへのJDBC URL。例:jdbc:oracle:oci:@myhost

URLにユーザ名とパスワードを含めることは可能です。例:jdbc:oracle:oci:scott/tiger@myhost。このように指定した場合は、(標準JMSプロバイダ)プロパティ username (ユーザ名)と password (パスワード)は不要です。

 

 
multipleSessionsPerConnection Oracleのバージョンによって、1つのコネクションに2つ以上のJMSセッションを設定することができません。このような場合は、セッション毎にコネクションを新規に作成しないと、次のようなエラーメッセージが表示されます:
JMS-106: Cannot have more than one open Session on a JMSConnection
false ×
payloadFactory キューのペイロードがADT (Oracle Advanced Data Type)の場合は、エンドポイントのプロパティに適切なペイロード・ファクトリを指定する必要があります。   ×

トランスフォーマー

JMSプロバイダで標準で提供されているトランスフォーマーの他に、Oracle JMSプロバイダは次のorg.mule.vendor.oracle.jms.transformers.
にあるトランスフォーマーを追加しています。|| トランスフォーマー || 説明 ||

StringToXMLMessage 整形式のXML文書の文字列(String)をOracleネイティブXMLデータ型のJMSメッセージに変換する。
XMLMessageToDOM OracleネイティブXMLデータ型のペイロードをもつJMSメッセージをW3C XML Document (DOM)に変換する。
XMLMessageToStream OracleネイティブXMLデータ型のペイロードをもつJMSメッセージをInputStreamのXMLに変換する。
XMLMessageToString OracleネイティブXMLデータ型のペイロードをもつJMSメッセージをXMLの文字列(String)に変換する。

デフォルト・トランスフォーマーは標準JMSプロバイダと同じ (JMSMessageToObjectObjectToJMSMessage) です。

設定の例

以下のOracle JMSプロバイダ用の設定の例です:

<mule-configuration id="TestConfiguration" version="1.0">
    <connector name="oracleJmsConnector" className="org.mule.providers.oracle.jms.OracleJmsConnector">
        <properties>
           <property name="url" value="jdbc:oracle:oci:@myhost" />
        <property name="username" value="scott" />
      <property name="password" value="tiger" />
  </properties>
    </connector>
    <transformers>
        <transformer name="StringToXMLMessage"
             className="org.mule.providers.oracle.jms.transformers.StringToXMLMessage"
             returnClass="oracle.jms.AdtMessage" />
        <transformer name="XMLMessageToString"
             className="org.mule.providers.oracle.jms.transformers.XMLMessageToString"
             returnClass="java.lang.String" />
    </transformers>
    <global-endpoints>
   <endpoint name="XmlQueue" address="oaq://XML_QUEUE" transformers="StringToXMLMessage" />
    </global-endpoints>
    <model name="Test Model">
        <mule-descriptor name="XML-Driven UMO" implementation="com.foo.MyUMO">
      <inbound-router>
                    <endpoint address="oaq://XML_QUEUE" transformers="XMLMessageToString">
              <properties>
                        <property name="payloadFactory" value="oracle.xdb.XMLTypeFactory" />
                </properties>
               </endpoint>
         </inbound-router>
        </mule-descriptor>
    </model>
</mule-configuration>

 

エンドポイント

Oracle AQエンドポイントはJMSエンドポイントと同じ文法を使います。プロトコルには「oaq」を使います。

oaq://my.queue

又は

oaq://topic:my.topic

 

コネクタを宣言しなくても、全ての情報をエンドポイントURIに記述する事で、Oracle AQエンドポイントを定義することはできます(上で示したように)。
例:

oaq://XML_QUEUE?url=jdbc:oracle:oci:scott/tiger@myhost

 

プロバイダの使い方の詳細に付いてはユニット・テストを参照にしてください。

依存するソフトウエア

Oracle JMSプロバイダを利用する場合は、以下のOracleライブラリが必要です。これらはOracleインストレーションにあるはずです。

  • ojdbc14.jar
  • aqapi13.jar
  • jmscommon.jar
  • xdb.jar (ネイティブXMLサポートの場合のみ必要)
  • xmlparserv2.jar (ネイティブXMLサポートの場合のみ必要)

これらのjarファイルはOracleの配布ファイルに含まれているはずです。

ユニット・テスト

ユニット・テスト tests/vendor/oracle をOracleデータベースに対して実行するには、以下のようにしてJMSユーザ「mule」を作成してAQへの権限を付与します:

sqlplus sys/sys@xe as sysdba

create user mule identified by mule;

grant connect, resource, aq_administrator_role to mule identified by mule;
grant execute on sys.dbms_aqadm to mule;
grant execute on sys.dbms_aq to mule;
grant execute on sys.dbms_aqin to mule;
grant execute on sys.dbms_aqjms to mule;
exec dbms_aqadm.grant_system_privilege('ENQUEUE_ANY','mule');
exec dbms_aqadm.grant_system_privilege('DEQUEUE_ANY','mule');

テスト設定ファイル (tests/vendor/oracle/src/test/resources) のURL (jdbc:oracle:thin:@//127.0.0.1:1521/xe) は、Oracle XEがデフォルト・ローカルにインストールされたことを前提としています。もし、それと異なる場合は、テストを実行する前にURLを変更してください。

Adaptavist Theme Builder Powered by Atlassian Confluence