インフロー・トランザクション・ユーザーズ・ガイド

     前  次    新規ウィンドウで目次を開く    PDFとして表示 - 新規ウィンドウ  Adobe Readerを取得 - 新規ウィンドウ
コンテンツはここから始まります

Oracle Tuxedo JCA Adapterインフロー・トランザクション・ガイド

このドキュメントでは、コネクタ・ベースのMDB (JMSベースのMDB)機能を使用して、インフロー・トランザクションの構成、デプロイメントを行う方法について説明します。また、プログラミングに関する内容も一部取り上げます。この機能を使用すると、Oracle TuxedoからJavaアプリケーション・サーバーへのインフロー(インバウンド)トランザクションが可能になります。この付録の内容は次のとおりです。

詳細は、『Tuxedo JCA Adapterプログラミング・ガイド』および『Tuxedo JCA Adapterユーザーズ・ガイド』を参照してください。

 


パッケージングとコンテンツ

インフロー・トランザクション機能は、 RARファイルとして配布されます。jarファイルを解凍し、Oracle Tuxedo JCA Adapter (Tuxedo JCA Adapter)構成をアプリケーション・サーバーにインストールする前に構成を変更する必要があります。

サポートされるアプリケーション・サーバーとOracle Tuxedoのバージョン

表1は、サポートされるOracle Tuxedoとアプリケーション・サーバーのバージョンのリストです。

表1 サポートされるバージョン
名前
バージョン
アプリケーション・サーバー
WebLogic Serverバージョン11gR1と12c、WebSphere 7.0と8.0
Oracle Tuxedo
11gR1PS1以降

RARファイル名

RARファイル名は、com.oracle.tuxedo.TuxedoAdapter.rarです。Tuxedo JCA Adapter構成を変更した後、(任意の名前を使用して)構成をアーカイブ化し、Tuxedo JCA Adapterをアプリケーション・サーバーに構成できます。

RARファイルのコンテンツ

表2は、RARファイルのコンテンツのリストです。

表2 RARファイルのコンテンツ
ファイル名
説明
adapter.properties
Tuxedo JCA Adapterメッセージ・カタログ。
adapter_ja.properties
Tuxedo JCA Adapterのメッセージ・カタログの日本語版。
com.bea.core.i18n_[version].jar
I18Nライブラリ
com.bea.core.jatmi_[version].jar
JATMIライブラリ
com.oracle.tuxedo.adapter_[version].jar
Tuxedo JCA Adapter
dmconfig.xml
Tuxedo JCA Adapter構成のdmconfigサンプル・ファイル。
javax.ejb_[version].jar
EJBライブラリ
javax.transaction_[version].jar
JTAライブラリ
tja.xsd
Oracle用のTuxedo JCA Adapterスキーマ・ファイル
META-INF/MANIFEST.MF
マニフェスト・ファイル
META-INF/client-side.ra.xml
クライアント側専用のリソース・アダプタ・デプロイメント記述子サンプル
META-INF/ra.xml
接続ファクトリ・ベースの構成用リソース・アダプタ・デプロイメント記述子サンプル
META-INF/sample.weblogic-ra.xml
接続ファクトリ・ベースの構成用WebLogic Serverのweblogic-ra.xmlサンプル・ファイル
META-INF/server.ra.xml
dmconfigベース構成用リソース・アダプタ・デプロイメント記述子サンプル
META-INF/weblogic-ra.xml
WebLogic Serverのweblogic-ra.xmlサンプル・ファイル

 


インフロー・トランザクションの概要

Tuxedo JCA Adapterは、トランザクションなどのOracle Tuxedo TDOMAINプロトコルをサポートしています。図1を参照してください。Tuxedo JCA Adapterは、Oracle Tuxedoからインバウンド・リクエストを受信し、関連するOracle Tuxedoトランザクション・コンテキストがあるかどうかチェックします。トランザクション・コンテキストがある場合、Tuxedo JCA Adapterは、Oracle Tuxedoトランザクション・コンテキストに基づきjavax.transaction.xa.Xidを作成します。

Tuxedo JCA Adapterは、このXIDをExecutionContextに設定し、実行するためにExecutionContextとともにWorkインスタンスをアプリケーション・サーバーWorkManagerに送信します。インポートしたトランザクションをこの手順でJavaアプリケーション・サーバーに伝播すると、アプリケーション・サーバーと後続の参加者はインポートしたトランザクションの一部として機能できます。

注意: JCA 1.5準拠のアプリケーション・サーバーではExecutionContextを使用しますが、JCA 1.6準拠のアプリケーション・サーバーではTransactionContextを使用します。
図1 Oracle Tuxedo TDOMAINプロトコル

Oracle Tuxedo TDOMAINプロトコル

 


インフロー・トランザクションの構成

構成は2つのパートに分けることができます。

Tuxedo JCA Adapter構成

「エクスポートした」サービスとは、Oracle Tuxedoクライアントからアクセス可能なJavaリソースです。つまりこの場合はコネクタ・ベースのMDBになります。Javaアプリケーション・サーバーにあるリソースにOracle Tuxedoクライアントがアクセスできるよう、「Export」要素をdmconfigファイルに構成する必要があります。

dmconfigファイル内の1つの「Export」要素は、Oracle Tuxedoクライアントにエクスポートしたリソースを参照します。 リスト1は、Oracle Tuxedoクライアントにエクスポートした2つのサービス(TolowerEcho)を示しています。RemoteNameは、Oracle Tuxedo GWTDOMAINゲートウェイによってサービスが呼び出される場合に使用されるサービス名です。name属性はリソースのサービス名です。Typeはインフロー・トランザクション用MDBにする必要があり、SourceはMDBのJNDIバインディングです。

リスト1 エクスポートされたサービスの例
<Export name=”Tolower”>
  <RemoteName>TolowerMDB</RemoteName>
  <SessionName>session_1</SessionName>
  <Type>MDB</Type>
  <Source>eis/Tolower</Source>
</Export>
<Export name=”Echo”>
  <RemoteName>EchoMDB</RemoteName>
  <SessionName>session_1</SessionName>
  <Type>MDB</Type>
  <Source>eis/Echo</Source>
</Export>

1つのMDBを使用してエクスポートされた複数のサービスもサポートされます。これには、アダプタ・アプリケーション開発者の自由度を向上する目的があります。dmconfigファイルのSource要素で指定したJNDI名と同一の名前を使用して複数のサービスを構成できます。ただし、当該MDBにはアプリケーションによって実装されたインタフェースが1つしかないため、アプリケーションが独自にディスパッチを実行する必要があります。 リスト2は、1つのMDBを使用してエクスポートされた複数のサービスの例を示しています。

リスト2 1つのMDBを使用してエクスポートされた複数のサービスの例
<Export name=”INFO_SERVICE”>
  <RemoteName>INFO</RemoteName>
  <SessionName>session_1</SessionName>
  <Type>MDB</Type>
  <Source>eis/services</Source>
</Export>
<Export name=”ACCOUNT_SERVICE”>
  <RemoteName>ACCOUNT</RemoteName>
  <SessionName>session_1</SessionName>
  <Type>MDB</Type>
  <Source>eis/services</Source>
</Export>

この例では、JNDI名eis/servicesにバインドする同一のMDBを使用して、Oracle Tuxedoクライアントに2つのサービス(INFOACCOUNT)をエクスポートします。ここでは、MDBに渡したサービス名を使用してディスパッチするMDBを1つ構成してデプロイする必要があります。 リスト3は、独自にディスパッチを実行するMDBサンプル・コード・フラグメントを示しています。

リスト3 MDBコード・フラグメント
public Reply service(TPServiceInformation mydata)
    throws TuxedoReplyException
{
  String serviceName = mydata.getServiceName();
  if (serviceName.equals(“ACCOUNT_SERVICE”)) {
    doAccount1(mydata);
  }
   else if (serviceName.equals(“INFO_SERVICE”)) {
    doInfo(mydata);
  }
  else {
    /* throws an exception */
  }
}

リスト4は、Tuxedo JCA Adapter構成ファイルの詳細な例を示しています。

リスト4 Tuxedo JCA Adapter構成ファイルの例
<?xml version="1.0" encoding="UTF-8"?><TuxedoConnector>
  <LocalAccessPoint name="JDOM">
    <AccessPointId>JDOM_ID</AccessPointId>
    <NetworkAddress>//localhost:10801</NetworkAddress>
  </LocalAccessPoint>
  <RemoteAccessPoint name="TDOM1">
    <AccessPointId>TDOM1_ID</AccessPointId>
    <NetworkAddress>//localhost:12478</NetworkAddress>
  </RemoteAccessPoint>
  <SessionProfile name="profile_1">
    <BlockTime>60000</BlockTime>
    <ConnectionPolicy>ON_STARTUP</ConnectionPolicy>
  </SessionProfile>
  <Session name="session_1">
    <LocalAccessPointName>JDOM</LocalAccessPointName>
    <RemoteAccessPointName>TDOM1</RemoteAccessPointName>
    <ProfileName>profile_1</ProfileName>
  </Session>
  <Export name="Tolower">
    <RemoteName>TolowerMDB</RemoteName>
    <SessionName>session_1</SessionName>
    <Type>MDB</Type>
    <Source>eis/tolower</Source>
  </Export>
  <Export name="Echo">
    <RemoteName>EchoMDB</RemoteName>
    <SessionName>session_1</SessionName>
    <Type>MDB</Type>
    <Source>eis/echo</Source>
  </Export>
  <Export name="INFO_SERVICE">
    <RemoteName>INFO</RemoteName>
    <SessionName>session_1</SessionName>
    <Type>MDB</Type>
    <Source>eis/services</Source>
  </Export>
  <Export name="ACCOUNT_SERVICE">
    <RemoteName>ACCOUNT</RemoteName>
    <SessionName>session_1</SessionName>
    <Type>MDB</Type>
    <Source>eis/services</Source>
  </Export>
</TuxedoConnector>

複数のMDBを使用してエクスポートされた複数のサービス

複数のMDBを使用してエクスポートされた複数のサービスもサポートされます。dmconfigの「source」要素で指定された同一のJNDI名を使用して構成できます。Tuxedo JCA Adapterは「source」要素の値に基づいてディスパッチします。リスト5に、dmconfigファイルの構成例を示します。

リスト5 複数のMDBを使用してエクスポートされた複数のサービスのdmconfigファイル
<Export name="SERVICE_1">
  <RemoteName>TJA_SERVICE_1</RemoteName>
  <Type>MDB</Type>
  <Source>eis/service</Source>
</Export>
</Export name="SERVICE_2">
  <RemoteName>TJA_SERVICE_2</RemoteName>
  <Type>MDB</Type>
  <Source>eis/service</Source>
</Export>
<Export name="INFO">
  <RemoteName>TJA_INFO</RemoteName>
  <Type>MDB</Type>
  <Source>eis/info</Source>
</Export>
</TuxedoConnector>

前述の例では、次の2つのMDBを構成してデプロイする必要があります。

1つ目のMDBはSERVICE_1SERVICE_2を内部でディスパッチする必要があります。

リソース・アダプタ・デプロイメント記述子の構成

リソース・アダプタ・デプロイメント記述子(ra.xml)を構成する必要があります。ra.xmlという名前は変更できません。すべてのRARファイルは、1つのra.xmlファイルを格納する必要があります。MDBを使用してインフロー・トランザクションを機能させるには、inbound-resourceadapter要素を構成する必要があります。この要素は、Tuxedo JCA Adapter専用のインタフェースとアクティブ化仕様を記述するために使用されます。

inbound-resourceadapter要素を修正します。構成可能なプロパティは、sourceプロパティのみです。構成済の場合、JCAコンテナには、EJB記述子(ejb-jar.xml)ファイルで指定されるsourceプロパティが必要になります。

リスト6は、ra.xmlファイルの例を示しています。ベースとしてTuxedo JCA Adapterとともに配布されるra.xmlファイルを使用して、必要に応じてカスタマイズできます。

リスト6 ra.xmlファイルの例
<?xml version="1.0" encoding="UTF-8"?>
<connector xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/connector_1_5.xsd"
    version="1.5">
  <display-name>Tuxedo JCA Adapter</display-name>
  <vendor-name>Oracle</vendor-name>
  <eis-type>Tuxedo</eis-type>
  <resourceadapter-version>12c(12.1.1)</resourceadapter-version>
  <license>
    <description>Tuxedo SALT license</description>
    <license-required>false</license-required>
  </license>
  <resourceadapter>
    <resourceadapter-class>com.oracle.tuxedo.adapter.TuxedoResourceAdapter</resourceadapter-class>
    <!--
      The following is the list of properties name can be configured as adapter-wise configuration.
      traceLevel  - java.lang.String  - a numerical value
      xaAffinity  - java.lang.String  - transaction affinity to a remote domain, "true" or "false", default to true
      keyFileName - java.lang.String  - encryption key file name
      throwFailureReplyException - java.lang.Boolean - default to ture
      appManagedLocalTxTimeout   - java.lang.Integer - Application managed transaction or AUTOTRAN timeout
                                                       defaults to 300 seconds
      fieldTable16Class - java.lang.String - a comma-separated list of fully qualified FML classes
      fieldTable32class - java.lang.String - a comma-separated list of fully qualified FML32 classes
      viewFile16Class   - java.lang.String - a comma-separated list of fully qualified VIEW classes
      viewFile32Class   - java.lang.String - a comma-separated list of fully qualified VIEW32 classes
      tpusrFile         - java.lang.String - path name to the TPUSR file 
      remoteMBEncoding  - java.lang.String - remote Tuxedo encoding name for multi-byte language
      mBEncodingMapFile - java.lang.String - path name to Multi-byte encoding name mapping
      autoTran          - java.lang.Boolean- enable adapter-wise AUTOTRAN, default to false
    -->
    <outbound-resourceadapter>
      <connection-definition>
        <managedconnectionfactory-class>com.oracle.tuxedo.adapter.spi.TuxedoManagedConnectionFactory</managedconnectionfactory-class>
        <!--
          The following is the list of properties that you can use
          to configure thee connection pool or connection factory.
          You must either configure localAccessPointSpec or
          connectionFactoryName if transaction is used.
          These property described here is serving as template, user should not
          configure them here, instead user should configure them either through WebSphere console 
          or weblogic-ra.xml side file.
        -->
        <config-property>
          <description>factory-wise AUTOTRAN setting, default to false, overrides adapter-wise setting</description>
          <config-property-name>autoTran</config-property-name>
          <config-property-type>java.lang.Boolean</config-property-type>
        </config-property>
        <config-property>
          <description>factory-wise Failure Reply Exception setting, default to true, overrides adapter-wise setting</description>
          <config-property-name>throwFailureReplyException</config-property-name>
          <config-property-type>java.lang.Boolean</config-property-type>
        </config-property>
        <config-property>
          <description>factory-wise application managed transaction or AUTOTRAN time out, overrides adapter-wise setting</description>
          <config-property-name>appManagedLocalTxTimeout</config-property-name>
          <config-property-type>java.lang.Integer</config-property-type>
        </config-property>
        <config-property>
          <description>connection factory or pool name, this is required if XA or local application managed
                       transaction is required</description>
          <config-property-name>connectionFactoryName</config-property-name>
          <config-property-type>java.lang.String</config-property-type>
        </config-property>
        <config-property>
          <description>application password in either clear text or cipher text using com.oracle.tuxedo.tools.EncryptPassword tool</description>
          <config-property-name>applicationPassword</config-property-name>
          <config-property-type>java.lang.String</config-property-type>
        </config-property>
        <config-property>
          <description>local access point specification of the format //hostname:port/domainId=DOMAINID</description>
          <config-property-name>localAccessPointSpec</config-property-name>
          <config-property-type>java.lang.String</config-property-type>
        </config-property>
        <config-property>
          <description>factory-wise SSL to configure whether mutual authentication is required, default to false</description>
          <config-property-name>mutualAuthenticationRequired</config-property-name>
          <config-property-type>java.lang.Boolean</config-property-type>
        </config-property>
        <config-property>
          <description>factory-wise SSL for configuring identity key store file name, must be configured if SSL is desired</description>
          <config-property-name>identityKeyStoreFileName</config-property-name>
          <config-property-type>java.lang.String</config-property-type>
        </config-property>
        <config-property>
          <description>factory-wise SSL setting for private key alias used in the key store, must be configured if SSL is desired</description>
          <config-property-name>privateKeyAlias</config-property-name>
          <config-property-type>java.lang.String</config-property-type>
        </config-property>
        <config-property>
          <description>factory-wise trusted key store file name, must be configured if SSL is desired</description>
          <config-property-name>trustedKeyStoreFileName</config-property-name>
          <config-property-type>java.lang.String</config-property-type>
        </config-property>
        <config-property>
          <description>factory-wise password for identityKeyStore in clear text</description>
          <config-property-name>identityKeyStorePassPhrase</config-property-name>
          <config-property-type>java.lang.String</config-property-type>
        </config-property>
        <config-property>
          <description>factory-wise password for privateKeyAlias in clear text</description>
          <config-property-name>privateKeyAliasPassPhrase</config-property-name>
          <config-property-type>java.lang.String</config-property-type>
        </config-property>
        <config-property>
          <description>factory-wise password for trustedKeyStore in clear text</description>
          <config-property-name>trustedKeyStorePassPhrase</config-property-name>
          <config-property-type>java.lang.String</config-property-type>
        </config-property>
        <config-property>
          <description>factory-wise RemoteAccessPoint specification of the format //hostname:port/domainId=DOMAINID</description>
          <config-property-name>remoteAccessPointSpec</config-property-name>
          <config-property-type>java.lang.String</config-property-type>
        </config-property>
        <config-property>
          <description>factory-wise allow anonymous access to Tuxedo, default to false</description>
          <config-property-name>rapAllowAnonymous</config-property-name>
          <config-property-type>java.lang.Boolean</config-property-type>
        </config-property>
        <config-property>
          <description>factory-wise application key value for anonymous user, default to -1</description>
          <config-property-name>rapDefaultApplicationKey</config-property-name>
          <config-property-type>java.lang.Integer</config-property-type>
        </config-property>
        <config-property>
          <description>factory-wise application key fully qualified class name for AppKey generator</description>
          <config-property-name>rapApplicationKeyClass</config-property-name>
          <config-property-type>java.lang.String</config-property-type>
        </config-property>
        <config-property>
          <description>factory-wise custom application key parameter</description>
          <config-property-name>rapApplicationKeyClassParam</config-property-name>
          <config-property-type>java.lang.String</config-property-type>
        </config-property>
        <config-property>
          <description>factory-wise session profile block timeout value, default to 60000 milliseconds</description>
          <config-property-name>spBlockTime</config-property-name>
          <config-property-type>java.lang.Integer</config-property-type>
        </config-property>
        <config-property>
          <description>factory-wise whether allows interoperate with 6.5 Tuxedo Domain, default to false</description>
          <config-property-name>spInteroperate</config-property-name>
          <config-property-type>java.lang.Boolean</config-property-type>
        </config-property>
        <config-property>
          <description>factory-wise security setting, legal values: NONE, DM_PW, APP_PW</description>
          <config-property-name>spSecurity</config-property-name>
          <config-property-type>java.lang.String</config-property-type>
        </config-property>
        <config-property>
          <description>factory-wise credential propagation policy, either LOCAL or GLOBAL</description>
          <config-property-name>spCredentialPolicy</config-property-name>
          <config-property-type>java.lang.String</config-property-type>
        </config-property>
        <config-property>
          <description>factory-wise number of seconds that session waits between automatic connection establishment,
                       default to 60 seconds. A value of 0 disabled connection retry</description>
          <config-property-name>spRetryInterval</config-property-name>
          <config-property-type>java.lang.Long</config-property-type>
        </config-property>
        <config-property>
          <description>factory-wise maximum number of times adapter will try to establish a session connection to
                       remote Tuxedo access point. Default value is Long.MAX_VALUE.</description>
          <config-property-name>spMaxRetries</config-property-name>
          <config-property-type>java.lang.Long</config-property-type>
        </config-property>
        <config-property>
          <description>factory-wise compression threshold, default to Integer.MAX_VALUE</description>
          <config-property-name>spCompressionLimit</config-property-name>
          <config-property-type>java.lang.Integer</config-property-type>
        </config-property>
        <config-property>
          <description>factory-wise minimum encryption strength requirement, legal values are 0, 40, 56, 128, 256.
                       Default value is 0.</description>
          <config-property-name>spMinEncryptBits</config-property-name>
          <config-property-type>java.lang.String</config-property-type>
        </config-property>
        <config-property>
          <description>factory-wise maximum encryption strength requirement, legal values are 0, 40, 56, 128, 256.
                       Default value is 128.</description>
          <config-property-name>spMaxEncryptBits</config-property-name>
          <config-property-type>java.lang.String</config-property-type>
        </config-property>
        <config-property>
          <description>factory-wise the maximum idle time before sending application level keep alive.
                       It is measured in millisecond, and roundup to seconds. Default value is 0.</description>
          <config-property-name>spKeepAlive</config-property-name>
          <config-property-type>java.lang.Long</config-property-type>
        </config-property>
        <config-property>
          <description>factory-wise how long adapter will wait for acknowledgement before adapter decides the
                       connection already lost.  Measurement in millisecond, and its default value is 10 seconds.
                       A value of 0 will disable the wait, and thus will not close the connection</description>
          <config-property-name>spKeepAliveWait</config-property-name>
          <config-property-type>java.lang.Long</config-property-type>
        </config-property>
        <config-property>
          <description>factory-wise valid Tuxedo service names in a comma-separated list.  If not specified then
                       default import will be used and will grant all service request to remote Tuxedo domain</description>
          <config-property-name>impResourceName</config-property-name>
          <config-property-type>java.lang.String</config-property-type>
        </config-property>
        <config-property>
          <description>Exported resource, types of resource supported are EJB, POJO, MDB.</description>
          <config-property-name>exportSpec</config-property-name>
          <config-property-type>java.lang.String</config-property-type>
        </config-property>
        <connectionfactory-interface>javax.resource.cci.ConnectionFactory</connectionfactory-interface>
        <connectionfactory-impl-class>com.oracle.tuxedo.adapter.cci.TuxedoConnectionFactory</connectionfactory-impl-class>
        <connection-interface>javax.resource.cci.Connection</connection-interface>
        <connection-impl-class>com.oracle.tuxedo.adapter.cci.TuxedoJCAConnection</connection-impl-class>
      </connection-definition>
<!--
      <transaction-support>NoTransaction</transaction-support>
      <transaction-support>LocalTransaction</transaction-support>
-->
      <transaction-support>XATransaction</transaction-support>
      <authentication-mechanism>
        <authentication-mechanism-type>BasicPassword</authentication-mechanism-type>
        <credential-interface>javax.resource.spi.security.PasswordCredential</credential-interface>
      </authentication-mechanism>
      <reauthentication-support>false</reauthentication-support>
    </outbound-resourceadapter>
    <inbound-resourceadapter>
      <messageadapter>
        <messagelistener>
          <messagelistener-type>com.oracle.tuxedo.adapter.intf.TuxedoMDBService</messagelistener-type>
          <activationspec>
            <activationspec-class>com.oracle.tuxedo.adapter.spi.TuxedoActivationSpec</activationspec-class>
            <required-config-property>
              <config-property-name>source</config-property-name>
            </required-config-property>
          </activationspec>
        </messagelistener>
      </messageadapter>
    </inbound-resourceadapter>
  </resourceadapter>
</connector>

inbound-resourceadapter要素には、コネクタ・ベースのMDBで実装する必要があるインタフェース・クラスとアクティブ化仕様クラスが含まれます。

完全修飾インタフェース名は、com.oracle.tuxedo.adapter.intf.TuxedoMDBServiceです。完全修飾アクティブ化仕様は、com.oracle.tuxedo.adapter.spi.TuxedoActivationSpecです。Tuxedo JCA Adapter ra.xmlファイルでこれらの2つの値のいずれも変更しないでください

インバウンド・サービス・リクエストのためのリソース・アダプタ・デプロイメント記述子の構成

Tuxedo JCA Adapterは実行時に、構成されたJava Beanプロパティ、ResourceAdapterおよびActivationSpec内部的に統合して使用し、インバウンド通信の構成とします。

アプリケーション・ベースのディスパッチを使用する方法では、ActivationSpec Java Beanプロパティを構成する必要はありません。アダプタ・ベースのディスパッチの場合は、リソース・アダプタ・デプロイメント記述子に、必須の構成プロパティ「source」を指定する必要があります。

次の構成フラグメントは、リソース・アダプタ・デプロイメント記述子(ra.xml)の一部です。Oracle Tuxedo JCA Connectorがインバウンド・サービス・リクエストを受け入れられるように構成されています。

リスト7 インバウンド・サービス・リクエストの例
<connector...>
    ...
    <resourceadapter>
      <resourceadapter-class>com.oracle.tuxedo.adapter.TuxedoResourceAdapterImpl
      </resourceadapter-class>
      ...
      <outbound-resourceadapter>
      </outbound-resourceadapter>
      <inbound-resourceadapter>
        <messageadapter>
          <messagelistener>
            <messagelistener-type>
              com.oracle.tuxedo.adapter.intf.TuxedoMDBService
            </messagelistener-type>
            <activationspec>
              <activationspec-class>
              com.oracle.tuxedo.adapter.spi.TuxedoActivationSpec
              <activationspec-class>
            </activationspec>
          </messagelistener>
        </messageadapter>
      </inbound-resourceadapter>
    ...
    </resourceadapter>
</connector>

前述のリソース・アダプタ・デプロイメント記述子は、TuxedoMDBServiceインタフェースに基づく単一のMDBを実装、デプロイし、そのMDB内のサービス名を使用してディスパッチを実行するユーザーにのみ適しています。

次のリソース・アダプタ・デプロイメント記述子フラグメントは、Tuxedo JCA AdapterがインバウンドMDBサービス・リクエストを送信するのに適切な構成を示しています。

リスト8 インバウンドMDBサービス・リクエスト
<connector...>
    ...
    <resourceadapter>
      <resourceadapter-class>com.oracle.tuxedo.adapter.TuxedoResourceAdapterImpl
      </resourceadapter-class>
      ...
      <outbound-resourceadapter>
      </outbound-resourceadapter>
      <inbound-resourceadapter>
        <messageadapter>
          <messagelistener>
            <messagelistener-type>
              com.oracle.tuxedo.adapter.intf.TuxedoMDBService
            </messagelistener-type>
            <activationspec>
              <activationspec-class>
              com.oracle.tuxedo.adapter.spi.TuxedoActivationSpec
              <activationspec-class>
              <required-config-property>
                <config-property-name>source</config-property-name>
              </required-config-property>
            </activationspec>
          </messagelistener>
        </messageadapter>
      </inbound-resourceadapter>
    ...
    </resourceadapter>
</connector>

dmconfig構成

非JMSベースのMDBと通常のEJBを区別するために、「Export」を型「MDB」で構成する必要があります。アプリケーション・ベースのディスパッチの場合、「Source」と「SourceLocation」は不要なため、省略できます(指定しても無視されます)。

リスト9に、アプリケーション・ベースのディスパッチのdmcomfigの例を示します。

リスト9 dmconfig構成
<Export name="TOLOWER">
  <RemoteName>TJA_TOLOWER</RemoteName>
  <SessionName>session_1</SessionName>
  <Type>MDB</Type>
</Export>

次に、Tuxedo JCA Adapterベースのディスパッチを有効にして、使用する例を示します。

リスト10 Tuxedo JCA Adapterベースのディスパッチの有効化
<Export name="TOLOWER">
  <RemoteName>TJA_TOLOWER</RemoteName>
  <SessionName>session_1</SessionName>
  <Type>MDB</Type>
  <Source>eis/tolower</Source>
</Export>

この「Source」要素にはターゲットのMDBのJNDI名を記述します(Tuxedo JCA Adapterがインバウンド・サービス・リクエストをディスパッチするために必要)。

ファクトリ・ベースの構成

ファクトリ・ベースの構成を使用して、インバウンド・サービス・リクエストで非JMSベースのMDBをサポートするために、新しいプロパティ「exportSpec」が追加されました。リスト11に、「exportSpec」の再帰下降文法の定義を示します。

リスト11 exportSpec
exportSpec        ::= expResources | EMPTY
expResources    ::= resource [resources]
resources           ::= ';' resource  [resources]
resource            ::=  resourceName [resourceDesc]
resourceDesc    ::=  '(' attrDescs ')'
attrDescs             ::= attrDesc ':' attrDescs
attrDesc                ::= attrName '=' [resourceName|resourceNameList]
resourceNameList ::= resourceName [resourceNames]
resourceNames      ::= ',' resourceName [resourceNames]
resourceName       ::= alphabet [alphanumeric]
attrName               ::= "remoteName" | "remoteAccessPointList" |
                                   "type" | "source" | "sourceLocation"
alphabet                 ::= "a"-"z" "A"-"Z"
alphanumeric         ::= {alphabet | numeric} [alphanumeric]
numeric                  ::= "0"-"9"

リスト12に、ファクトリ・ベースの構成例を示します。

リスト12 ファクトリ・ベースの構成例
<properties>
  <property>
    <name>exportSpec</name>
    <value>TOLOWER(remoteName=TJA_TOLOWER:type=MDB)</value>
   </property>
</properties>

このタイプの構成はWebSphereではサポートされていません。WebLogic ServerとJBossでは、アウトバウンド・リソース・アダプタも構成される必要があります。

注意: WebSphereの遅延バインディング手法のため、ファクトリ・ベースの構成が機能するのは、TuxedoからインバウンドMDBリクエストがある前に接続ファクトリ参照があった場合のみです。

リスト13に、MDBのJNDI名を構成するファクトリ・ベースの別の構成例を示します。

リスト13 MDBのJNDI名を含むファクトリ・ベースの構成
<properties>
  <property>
    <name>exportSpec</name>
    <value>TOLOWER(remoteName=TJA_TOLOWER:type=MDB:source=eis/tolower)</value>
   </property>
</properties

TuxedoMDBServiceインタフェース

Tuxedo JCA Adapterで提供されるEJB MDBインタフェースは、非JMSベースのMDBで実装する必要があります。MDBインタフェースは、Tuxedo JCA Adapterによってサポートされる既存のEJBと類似していますが、同じではありません。

リスト14に、MDNインタフェースの例を示します。

リスト14 MDBインタフェース
package com.oracle.tuxedo.adapter.intf;
import weblogic.wtc.jatmi.Reply;
import com.oracle.tuxedo.adapter.tdom.TPServiceInformation;
import com.oracle.tuxedo.adapter.TuxedoReplyException;
public interface TuxedoMDBService {
public Reply service(TPServiceInformation service) throws TuxedoReplyException;
}
注意: これはJMSベースのMDBと異なり、「onMessage」インタフェースでなく「service」インタフェースを持っています。

リスト15に、EJB 3.0仕様に基づいてこのインタフェースを実装するMDBコードの例を示します。

リスト15 EJB 3.0仕様
@MessageDriven(name = "TolowerMDB", activationConfig =
{
@ActivationConfigProperty(propertyName="source", propertyValue="eis/tolower")
})
@TransactionAttribute(SUPPORTS)
public class TolowerMDBBean implements TuxedoMDBService
{
  public Reply service(TPServiceInformation mydata)
    throws TuxedoReplyException
  {
     TypedString  data;
     String            lowered;
      TypedString return_data;
    String serviceName = mydata.getServiceName();
      data = (TypedString)mydata.getServiceData();
      lowered = data.toString().toLowerCase();
      return_data = new TypedString(lowered);
      mydata.setReplyBuffer(return_data);
       return mydata;`
  }
}

リスト16に、まったく同じ内容をEJB 2.1で実装した場合の例を示します。

リスト16 EJB 2.1に基づくサンプル
package ejbs;
import com.oracle.tuxedo.adapter.TuxedoReplyException;
import com.oracle.tuxedo.adapter.intf.TuxedoMDBService;
import com.oracle.tuxedo.adapter.tdom.TPServiceInformation;
import javax.ejb.MessageDrivenBean;
import javax.ejb.MessageDrivenContext;
import javax.jms.Message;
import weblogic.wtc.jatmi.Reply;
import weblogic.wtc.jatmi.TypedString;
public class TolowerMDBBeanBean
    implements MessageDrivenBean, TuxedoMDBService
{
    public TolowerMDBBeanBean()
    {
    }
    public MessageDrivenContext getMessageDrivenContext()
    {
        return fMessageDrivenCtx;
    }
    public void setMessageDrivenContext(MessageDrivenContext ctx)
    {
        fMessageDrivenCtx = ctx;
    }
    public void ejbCreate()
    {
    }
    public void onMessage(Message message)
    {
    }
    public void ejbRemove()
    {
    }
    public Reply service(TPServiceInformation mydata)
        throws TuxedoReplyException
    {
        TypedString data = (TypedString)mydata.getServiceData();
        String lowered = data.toString().toLowerCase();
        TypedString return_data = new TypedString(lowered);
        mydata.setReplyBuffer(return_data);
        return mydata;
    }
    private static final long serialVersionUID = 1L;
    private MessageDrivenContext fMessageDrivenCtx;
}

インバウンドMDBのためのOracle Tuxedo GWTDOMAINゲートウェイの構成

Tuxedo JCA Adapterと通信するには、Oracle Tuxedo GWTDOMAINゲートウェイを構成する必要もあります。リスト17に、Oracle Tuxedo /Domain構成ファイルの例を示します。

リスト17 Tuxedo /Domain構成ファイルの例
#
*DM_RESOURCES
#
VERSION=U22
# 
#
#
*DM_LOCAL_DOMAINS
#
# NOTE: Remove DYNAMIC_RAP line if you are not running with Tuxedo 11.1.1.2.0
#
"TDOM1"    GWGRP=GROUP3
	TYPE=TDOMAIN
	DOMAINID="TDOM1_ID"
	BLOCKTIME=60
	SECURITY=NONE
            DMTLOGDEV="C:\test\JCA\inflow_tx/tdom/DMTLOG"
            DYNAMIC_RAP="YES"
#
*DM_REMOTE_DOMAINS
#
#
JDOM 	TYPE=TDOMAIN
	DOMAINID="JDOM_ID"
#
#
*DM_TDOMAIN
#
TDOM1	NWADDR="//localhost:12478"
JDOM 	NWADDR="//localhost:10801"
#
#
*DM_LOCAL_SERVICES
#
#Exported
#
#
*DM_REMOTE_SERVICES
#
#Imported
#
TolowerMDB
EchoMDB
INFO
ACCOUNT

この例では、Oracle TuxedoはTolowerMDBEchoMDBINFO、およびACCOUNTサービスをインポートします。一方、Tuxedo JCA Adapterはこれらをエクスポートします。

 


インフロー・トランザクション・アダプタのデプロイメント

WebSphere Integrated Solution Consoleで、https://localhost:9047/ibm/console/logon.jsp (ここで9047は、アプリケーション・サーバーのリスニングするポート番号)を入力します。

Tuxedo JCA Adapter dmconfigファイルの
Websphere用の構成

WebSphereアプリケーション・サーバーにTuxedo JCA Adapterをデプロイする前に、dmconfig構成ファイルを作成する必要があります。リスト18は、dmconfigファイルの例を示しています。

リスト18 dmconfigファイルのWebsphereの例
<?xml version="1.0" encoding="UTF-8"?><TuxedoConnector>
  <LocalAccessPoint name="JDOM">
    <AccessPointId>JDOM_ID</AccessPointId>
    <NetworkAddress>//localhost:10801</NetworkAddress>
  </LocalAccessPoint>
  <RemoteAccessPoint name="TDOM1">
    <AccessPointId>TDOM1_ID</AccessPointId>
    <NetworkAddress>//localhost:12478</NetworkAddress>
  </RemoteAccessPoint>
  <SessionProfile name="profile_1">
    <BlockTime>60000</BlockTime>
    <ConnectionPolicy>ON_STARTUP</ConnectionPolicy>
  </SessionProfile>
  <Session name="session_1">
    <LocalAccessPointName>JDOM</LocalAccessPointName>
    <RemoteAccessPointName>TDOM1</RemoteAccessPointName>
    <ProfileName>profile_1</ProfileName>
  </Session>
  <Export name="ECHOMDB">
    <RemoteName>ECHO</RemoteName>
    <SessionName>session_1</SessionName>
    <Type>MDB</Type>
   <Source>eis/echo</Source>
  </Export>
</TuxedoConnector>

リソース・アダプタ・デプロイメント記述子

リソース・アダプタ・デプロイメント記述子は、ゼロから作成することも既存のものを変更することもできます。 リスト8は、デプロイメント記述子の例を示しています。

リスト19 デプロイメント記述子の例
<?xml version="1.0" encoding="UTF-8"?>
<connector xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/connector_1_5.xsd"
    version="1.5">
  <display-name>Tuxedo JCA Adapter</display-name>
  <vendor-name>Oracle</vendor-name>
  <eis-type>Tuxedo</eis-type>
  <resourceadapter-version>12c(12.1.1)</resourceadapter-version>
  <license>
    <description>Tuxedo SALT license</description>
    <license-required>false</license-required>
  </license>
  <resourceadapter>
    <resourceadapter-class>com.oracle.tuxedo.adapter.TuxedoResourceAdapter</resourceadapter-class>
    <!--
      The following is the list of properties name can be configured as adapter-wise configuration.
      traceLevel  - java.lang.String  - a numerical value
      xaAffinity  - java.lang.String  - transaction affinity to a remote domain, "true" or "false", default to true
      keyFileName - java.lang.String  - encryption key file name
      throwFailureReplyException - java.lang.Boolean - default to ture
      appManagedLocalTxTimeout   - java.lang.Integer - Application managed transaction or AUTOTRAN timeout
                                                       defaults to 300 seconds
      fieldTable16Class - java.lang.String - a comma-separated list of fully qualified FML classes
      fieldTable32class - java.lang.String - a comma-separated list of fully qualified FML32 classes
      viewFile16Class   - java.lang.String - a comma-separated list of fully qualified VIEW classes
      viewFile32Class   - java.lang.String - a comma-separated list of fully qualified VIEW32 classes
      tpusrFile         - java.lang.String - path name to the TPUSR file 
      remoteMBEncoding  - java.lang.String - remote Tuxedo encoding name for multi-byte language
      mBEncodingMapFile - java.lang.String - path name to Multi-byte encoding name mapping
      autoTran          - java.lang.Boolean- enable adapter-wise AUTOTRAN, default to false
    -->
    <config-property>
      <config-property-name>traceLevel</config-property-name>
      <config-property-type>java.lang.String</config-property-type>
      <config-property-value>2000000</config-property-value>
    </config-property>
<!--
    <config-property>
      <config-property-name>xaAffinity</config-property-name>
      <config-property-type>java.lang.String</config-property-type>
      <config-property-value>true</config-property-value>
    </config-property>
-->
    <config-property>
      <config-property-name>dmconfig</config-property-name>
      <config-property-type>java.lang.String</config-property-type>
      <config-property-value>C:\test\JCA\inflow_tx/adapter/dmconfig.xml</config-property-value>
    </config-property>
    <config-property>
      <config-property-name>keyFileName</config-property-name>
      <config-property-type>java.lang.String</config-property-type>
      <config-property-value>C:\test\JCA\inflow_tx/adapter/foo.key</config-property-value>
    </config-property>
    <config-property>
      <config-property-name>debugAdapter</config-property-name>
      <config-property-type>java.lang.Boolean</config-property-type>
      <config-property-value>true</config-property-value>
    </config-property>
    <config-property>
      <config-property-name>debugJatmi</config-property-name>
      <config-property-type>java.lang.Boolean</config-property-type>
      <config-property-value>true</config-property-value>
    </config-property>
    <config-property>
      <config-property-name>debugConfig</config-property-name>
      <config-property-type>java.lang.Boolean</config-property-type>
      <config-property-value>true</config-property-value>
    </config-property>
    <config-property>
      <config-property-name>debugSession</config-property-name>
      <config-property-type>java.lang.Boolean</config-property-type>
      <config-property-value>true</config-property-value>
    </config-property>
    <config-property>
      <config-property-name>debugXa</config-property-name>
      <config-property-type>java.lang.Boolean</config-property-type>
      <config-property-value>true</config-property-value>
    </config-property>
    <config-property>
      <config-property-name>debugPdu</config-property-name>
      <config-property-type>java.lang.Boolean</config-property-type>
      <config-property-value>true</config-property-value>
    </config-property>
    <config-property>
      <config-property-name>debugSec</config-property-name>
      <config-property-type>java.lang.Boolean</config-property-type>
      <config-property-value>true</config-property-value>
    </config-property>
<!--
-->
    <outbound-resourceadapter>
      <connection-definition>
        <managedconnectionfactory-class>com.oracle.tuxedo.adapter.spi.TuxedoManagedConnectionFactory</managedconnectionfactory-class>
        <!--
          The following is the list of properties that you can use to
          to configure connection pool or connection factory.
          User must either configure localAccessPointSpec or
          connectionFactoryName if transaction is used.
          These property described here is serving as template, user should not
          configure them here, instead user should configure them either through WebSphere console 
          or weblogic-ra.xml side file.
        -->
        <config-property>
          <description>factory-wise AUTOTRAN setting, default to false, overrides adapter-wise setting</description>
          <config-property-name>autoTran</config-property-name>
          <config-property-type>java.lang.Boolean</config-property-type>
        </config-property>
        <config-property>
          <description>factory-wise Failure Reply Exception setting, default to true, overrides adapter-wise setting</description>
          <config-property-name>throwFailureReplyException</config-property-name>
          <config-property-type>java.lang.Boolean</config-property-type>
        </config-property>
        <config-property>
          <description>factory-wise application managed transaction or AUTOTRAN time out, overrides adapter-wise setting</description>
          <config-property-name>appManagedLocalTxTimeout</config-property-name>
          <config-property-type>java.lang.Integer</config-property-type>
        </config-property>
        <config-property>
          <description>connection factory or pool name, this is required if XA or local application managed
                       transaction is required</description>
          <config-property-name>connectionFactoryName</config-property-name>
          <config-property-type>java.lang.String</config-property-type>
        </config-property>
        <config-property>
          <description>application password in either clear text or cipher text using com.oracle.tuxedo.tools.EncryptPassword tool</description>
          <config-property-name>applicationPassword</config-property-name>
          <config-property-type>java.lang.String</config-property-type>
        </config-property>
        <config-property>
          <description>local access point specification of the format //hostname:port/domainId=DOMAINID</description>
          <config-property-name>localAccessPointSpec</config-property-name>
          <config-property-type>java.lang.String</config-property-type>
        </config-property>
        <config-property>
          <description>factory-wise SSL to configure whether mutual authentication is required, default to false</description>
          <config-property-name>mutualAuthenticationRequired</config-property-name>
          <config-property-type>java.lang.Boolean</config-property-type>
        </config-property>
        <config-property>
          <description>factory-wise SSL for configuring identity key store file name, must be configured if SSL is desired</description>
          <config-property-name>identityKeyStoreFileName</config-property-name>
          <config-property-type>java.lang.String</config-property-type>
        </config-property>
        <config-property>
          <description>factory-wise SSL setting for private key alias used in the key store, must be configured if SSL is desired</description>
          <config-property-name>privateKeyAlias</config-property-name>
          <config-property-type>java.lang.String</config-property-type>
        </config-property>
        <config-property>
          <description>factory-wise trusted key store file name, must be configured if SSL is desired</description>
          <config-property-name>trustedKeyStoreFileName</config-property-name>
          <config-property-type>java.lang.String</config-property-type>
        </config-property>
        <config-property>
          <description>factory-wise password for identityKeyStore in clear text</description>
          <config-property-name>identityKeyStorePassPhrase</config-property-name>
          <config-property-type>java.lang.String</config-property-type>
        </config-property>
        <config-property>
          <description>factory-wise password for privateKeyAlias in clear text</description>
          <config-property-name>privateKeyAliasPassPhrase</config-property-name>
          <config-property-type>java.lang.String</config-property-type>
        </config-property>
        <config-property>
          <description>factory-wise password for trustedKeyStore in clear text</description>
          <config-property-name>trustedKeyStorePassPhrase</config-property-name>
          <config-property-type>java.lang.String</config-property-type>
        </config-property>
        <config-property>
          <description>factory-wise RemoteAccessPoint specification of the format //hostname:port/domainId=DOMAINID</description>
          <config-property-name>remoteAccessPointSpec</config-property-name>
          <config-property-type>java.lang.String</config-property-type>
        </config-property>
        <config-property>
          <description>factory-wise allow anonymous access to Tuxedo, default to false</description>
          <config-property-name>rapAllowAnonymous</config-property-name>
          <config-property-type>java.lang.Boolean</config-property-type>
        </config-property>
        <config-property>
          <description>factory-wise application key value for anonymous user, default to -1</description>
          <config-property-name>rapDefaultApplicationKey</config-property-name>
          <config-property-type>java.lang.Integer</config-property-type>
        </config-property>
        <config-property>
          <description>factory-wise application key fully qualified class name for AppKey generator</description>
          <config-property-name>rapApplicationKeyClass</config-property-name>
          <config-property-type>java.lang.String</config-property-type>
        </config-property>
        <config-property>
          <description>factory-wise custom application key parameter</description>
          <config-property-name>rapApplicationKeyClassParam</config-property-name>
          <config-property-type>java.lang.String</config-property-type>
        </config-property>
        <config-property>
          <description>factory-wise session profile block timeout value, default to 60000 milliseconds</description>
          <config-property-name>spBlockTime</config-property-name>
          <config-property-type>java.lang.Integer</config-property-type>
        </config-property>
        <config-property>
          <description>factory-wise whether allows interoperate with 6.5 Tuxedo Domain, default to false</description>
          <config-property-name>spInteroperate</config-property-name>
          <config-property-type>java.lang.Boolean</config-property-type>
        </config-property>
        <config-property>
          <description>factory-wise security setting, legal values: NONE, DM_PW, APP_PW</description>
          <config-property-name>spSecurity</config-property-name>
          <config-property-type>java.lang.String</config-property-type>
        </config-property>
        <config-property>
          <description>factory-wise credential propagation policy, either LOCAL or GLOBAL</description>
          <config-property-name>spCredentialPolicy</config-property-name>
          <config-property-type>java.lang.String</config-property-type>
        </config-property>
        <config-property>
          <description>factory-wise number of seconds that session waits between automatic connection establishment,
                       default to 60 seconds. A value of 0 disabled connection retry</description>
          <config-property-name>spRetryInterval</config-property-name>
          <config-property-type>java.lang.Long</config-property-type>
        </config-property>
        <config-property>
          <description>factory-wise maximum number of times adapter will try to establish a session connection to
                       remote Tuxedo access point. Default value is Long.MAX_VALUE.</description>
          <config-property-name>spMaxRetries</config-property-name>
          <config-property-type>java.lang.Long</config-property-type>
        </config-property>
        <config-property>
          <description>factory-wise compression threshold, default to Integer.MAX_VALUE</description>
          <config-property-name>spCompressionLimit</config-property-name>
          <config-property-type>java.lang.Integer</config-property-type>
        </config-property>
        <config-property>
          <description>factory-wise minimum encryption strength requirement, legal values are 0, 40, 56, 128, 256.
                       Default value is 0.</description>
          <config-property-name>spMinEncryptBits</config-property-name>
          <config-property-type>java.lang.String</config-property-type>
        </config-property>
        <config-property>
          <description>factory-wise maximum encryption strength requirement, legal values are 0, 40, 56, 128, 256.
                       Default value is 128.</description>
          <config-property-name>spMaxEncryptBits</config-property-name>
          <config-property-type>java.lang.String</config-property-type>
        </config-property>
        <config-property>
          <description>factory-wise the maximum idle time before sending application level keep alive.
                       It is measured in millisecond, and roundup to seconds. Default value is 0.</description>
          <config-property-name>spKeepAlive</config-property-name>
          <config-property-type>java.lang.Long</config-property-type>
        </config-property>
        <config-property>
          <description>factory-wise how long adapter will wait for acknowledgement before adapter decides the
                       connection already lost.  Measurement in millisecond, and its default value is 10 seconds.
                       A value of 0 will disable the wait, and thus will not close the connection</description>
          <config-property-name>spKeepAliveWait</config-property-name>
          <config-property-type>java.lang.Long</config-property-type>
        </config-property>
        <config-property>
          <description>factory-wise valid Tuxedo service names in a comma-separated list.  If not specified then
                       default import will be used and will grant all service request to remote Tuxedo domain</description>
          <config-property-name>impResourceName</config-property-name>
          <config-property-type>java.lang.String</config-property-type>
        </config-property>
        <config-property>
          <description>Exported resources.  Types of resource supported are</description>
          <config-property-name>exportSpec</config-property-name>
          <config-property-type>java.lang.String</config-property-type>
        </config-property>
        <connectionfactory-interface>javax.resource.cci.ConnectionFactory</connectionfactory-interface>
        <connectionfactory-impl-class>com.oracle.tuxedo.adapter.cci.TuxedoConnectionFactory</connectionfactory-impl-class>
        <connection-interface>javax.resource.cci.Connection</connection-interface>
        <connection-impl-class>com.oracle.tuxedo.adapter.cci.TuxedoJCAConnection</connection-impl-class>
      </connection-definition>
<!--
      <transaction-support>NoTransaction</transaction-support>
      <transaction-support>LocalTransaction</transaction-support>
-->
      <transaction-support>XATransaction</transaction-support>
      <authentication-mechanism>
        <authentication-mechanism-type>BasicPassword</authentication-mechanism-type>
        <credential-interface>javax.resource.spi.security.PasswordCredential</credential-interface>
      </authentication-mechanism>
      <reauthentication-support>false</reauthentication-support>
    </outbound-resourceadapter>
    <inbound-resourceadapter>
      <messageadapter>
        <messagelistener>
          <messagelistener-type>com.oracle.tuxedo.adapter.intf.TuxedoMDBService</messagelistener-type>
          <activationspec>
            <activationspec-class>com.oracle.tuxedo.adapter.spi.TuxedoActivationSpec</activationspec-class>
            <required-config-property>
              <config-property-name>source</config-property-name>
            </required-config-property>
          </activationspec>
        </messagelistener>
      </messageadapter>
    </inbound-resourceadapter>
  </resourceadapter>
</connector>

WebsphereへのTuxedo JCA Adapterのデプロイ

デプロイメント記述子を使用してリソース・アダプタをJARファイル化してリソース・アーカイブを作成した後、これをWebSphereアプリケーション・サーバーにデプロイできます。

WebSphere Integrated Solution Consoleにログインした後、左ウィンドウ・ペインから「リソース」を選択します。図2に示すように、「リソース・アダプタ」を選択します。「リソース・アダプタ」ウィンドウが表示されます。「参照」をクリックし、RARファイルを検索します。

図2 WebSphere Integrated Solution Console

WebSphere Integrated Solution Console

「次へ」をクリックすると、図3に示すように、「一般プロパティ」ページが表示されます。「説明」テキスト入力ボックスに適切な説明を入力します。

図3 「一般プロパティ」ページ

一般プロパティ

「OK」「保存」の順にクリックします。

アクティブ化仕様の構成

「リソース・アダプタ」 > Tuxedo JCA Adapterから、「Additional Properties」J2Cアクティブ化仕様を選択すると、図4で示すように「J2Cアクティブ化仕様」ページが表示されます。「新規」を選択し、アクティブ化仕様名とそのJNDI名を入力します(この例では、仕様名をEchoMDB、JNDI名をeis/echoとします)。このJNDI名は、EchoMDBというJNDI名を使用します。

図4 「J2Cアクティブ化仕様」ページ

「J2Cアクティブ化仕様」ページ

「OK」をクリックし、指定を完了します。

WebSphere Integrated Consoleを使用したMDBの構成

WebSphereアプリケーション・サーバーを起動し、Integrated Solution Consoleを使用してWebSphereにログインします。通常、コンソール・ポート番号は904X (「X」は任意の数字)です。

注意: logs/server1/SystemOut.logを検索できます。 TCPチャンネルTCP_3はリスニングしているという旨の「TCP Channel TCP_3 is listening.」を確認します。

WebSphereへのMDBのデプロイ

共有ライブラリの構成

コンソールの左ペインで「環境」を選択すると、サブメニュー付きメニュー・アイテムが展開されます。共有ライブラリを選択すると、共有ライブラリ画面が表示されます。

「新規」をクリックすると、構成画面が表示されます。「名前」に任意の名前を入力します。この例では、「名前」テキスト入力ボックスにEchoMDBEnvと入力します。「クラスパス」ウィンドウで、次の2つのJARファイルのフルパス名を入力します。

区切りには[Enter]キーを押し、「保存」をクリックします。

MDBのインストール

コンソールの左ペインで、「アプリケーション」新しいアプリケーションのインストールの順に選択します。「エンタープライズ・アプリケーション」メニューが表示されます。

新しいアプリケーションへのパスローカル・ファイル・システムを選択します。「参照」をクリックし、「EchoMDB.jar」ファイルを選択します。

アプリケーションのインストール方法で、すべてのインストール・オプションとパラメータの表示を選択します。「次へ」をクリックすると、図5で示すように「インストール・オプションの選択」ページが表示されます。エンタープライズBeanのデプロイを選択し、「次へ」をクリックします。

図5 「インストール・オプションの選択」ページ

「インストール・オプションの選択」ページ

「手順2: サーバーにモジュールをマッピングする」で、Echo MDBを使用するサーバーを選択します。EchoMDBにチェック・マークを入れ、「適用」をクリックします。「次へ」をクリックします。

図6 EchoMDBモジュールの選択

EchoMDBモジュールの選択

「手順3: メッセージドリブンBeanのリスナーをバインドする」で、図7で示すようにアクティブ化仕様を選択し、このMDBのJNDI名を入力します(この場合、eis/echoを入力します)。

図7 アクティブ化仕様

アクティブ化仕様

「次へ」をクリックすると、図8に示すように、「サマリー」ページが表示されます。「終了」をクリックします。アプリケーション・サーバーがMDBをコンパイルしてデプロイします。

図8 「サマリー」ページ

「サマリー」ページ

「保存」をクリックします。

MDBのアクティブ化

コンソールの左ペインで、「アプリケーション」を選択してから「エンタープライズ・アプリケーション」を選択します。EchoMDB.jarを選択し、「起動」をクリックします。Echo” EJBがアクティブ化されます。

 


Oracle Tuxedoアプリケーション・ドメイン

Oracle Tuxedo構成

リスト63に、この例で使用されるOracle Tuxedo UBBCONFIGファイルを示します。

リスト63 Oracle Tuxedo UBBCONFIGファイルの例
#
#Ubbconfig domain1
#
*RESOURCES
IPCKEY			51301
MASTER			site1
MAXACCESSERS	100
MAXSERVERS		25
MAXSERVICES		50
MODEL				SHM
LDBAL				N
BLOCKTIME 	1
SCANUNIT		5
SECURITY        NONE
*MACHINES
DEFAULT:
		APPDIR="C:\test\JCA\inflow_tx/tdom1"
		TUXCONFIG="C:\test\JCA\inflow_tx/tdom1/TUXCONFIG"
		TUXDIR="c:\tuxedo\tux11g"
"NEOCORTEX"	LMID=site1
		MAXWSCLIENTS=2
*GROUPS
GROUP3 LMID=site1 GRPNO=3	OPENINFO=NONE
GROUP2 LMID=site1 GRPNO=2	OPENINFO=NONE
GROUP1 LMID=site1 GRPNO=1  TMSNAME=TMS TMSCOUNT=3
#GROUP1 LMID=site1 GRPNO=1
*SERVERS
DEFAULT:
		CLOPT="-A" RESTART=Y MAXGEN=5
DMADM  		SRVGRP=GROUP2	SRVID=1
GWADM  		SRVGRP=GROUP3	SRVID=2
GWTDOMAIN	SRVGRP=GROUP3	SRVID=3
		ENVFILE="C:\test\JCA\inflow_tx/tdom1/gwt.env"
simpserv		SRVGRP=GROUP1	SRVID=20
*SERVICES
TOUPPER_STR

Oracle Tuxedo/Domainの構成

リスト64に、i/Domainの構成例を示します。

リスト64 Oracle Tuxedo/Domainの構成例
#
*DM_RESOURCES
#
VERSION=U22
#
#
*DM_LOCAL_DOMAINS
#
# NOTE: Remove DYNAMIC_RAP line if you are not running with Tuxedo 11.1.1.2.0
#
"TDOM1"    GWGRP=GROUP3
	TYPE=TDOMAIN
	DOMAINID="TDOM1_ID"
	BLOCKTIME=60
	SECURITY=NONE
   DMTLOGDEV="C:\test\JCA\inflow_tx/tdom1/DMTLOG"
   DYNAMIC_RAP="YES"
#
*DM_REMOTE_DOMAINS
#
#
JDOM 	TYPE=TDOMAIN
	DOMAINID="JDOM_ID"
#
#
*DM_TDOMAIN
#
TDOM1	NWADDR="//localhost:12478"
JDOM 	NWADDR="//localhost:10801"
#
#
*DM_LOCAL_SERVICES
#
#Exported
#
TOUPPER_STR
#
*DM_REMOTE_SERVICES
#
#Imported
#
ECHO

 


Oracle Tuxedoトランザクション用クライアント・ソース・コード

リスト65に、WebSphereアプリケーション・サーバーからインポートされたECHOサービスにアクセスするシンプルなOracle Tuxedoネイティブ・クライアントを示します。

リスト65 WebSphereアプリケーション・サーバーからインポートされたECHOサービス
#include <stdio.h>
#include “atmi.h”
main(int argc, char *argv[])
{
  char *sendbuf, *rcvbuf;
  long sendlen, rcvlen;
  int  ret;
  
  if (tpinit((TPINIT *)NULL) == -1) {
    (void)fprintf(stderr, “Tpinit failed\n”);
    exit(1);
  }
  sendlen = strlen(argv[1]);
  if ((sendbuf = (char *)tpalloc(“STRING”, NULL, sendlen + 1)) == NULL) {
      (void)fprintf(stderr, “Error allocating send buffer\n”);
      tpterm();
     exit(2);
  }
  if ((rcvbuf = (char *)tpalloc(“STRING”, NULL, sendlen + 1)) == NULL) {
      (void)fprintf(stderr, “Error allocating receive buffer\n”);
    tpfree(sendbuf);
      tpterm();
     exit(2);
  }
  (void)strcpy(sendbuf, argv[2]);
  tpbegin(45, 0);
  ret = tpcall(“ECHO”, (char *)sendbuf, 0, (char **)&rcvbuf, &rcvlen, (long)0);
  if (ret == -1) {
    tpabort(0);
    tpfree(sendbuf);
    tpfree(recvbuf);
    tpterm();
    exit(1);
  }
  userlog(“Return string: %s”, rcvbuf);
  tpcommit(0);
  tpfree(sendbuf);
  tpfree(rcvbuf);
  tpterm();
  return(0);
}

 


関連項目


  先頭に戻る       前  次