BEA ホーム | 製品 | デベロッパ・センタ | support | askBEA
 ドキュメントのダウンロード   サイト マップ   用語集 
検索

アダプタの開発

 前 次 目次 索引 PDFで表示  

サービス アダプタの開発

サービス アダプタは、クライアントから XML 要求ドキュメントを受け取ると、基本となる EIS で該当する関数を呼び出します。このサービス アダプタはメッセージのコンシューマで、応答を返す場合と返さない場合があります。サービス アダプタでは、次の 4 つの機能が実行されます。

この章の内容は以下のとおりです。

 


WebLogic Integration に限定されない J2EE 準拠アダプタ

この章で説明することは、主に WebLogic Integration で使用するアダプタの開発手順です。ADK により WebLogic Integration 環境以外でも使用可能なアダプタを開発することはできますが、その場合は、所定の修正を加えた手順に従ってください。手順については、WebLogic Integration に限定されないアダプタの作成を参照してください。

 


実行時環境におけるサービス アダプタ

図6-1 および 図6-2 は、実行時環境でサービス アダプタが使用される場合に実行されるプロセスを示しています。図6-1 では非同期サービス アダプタ、図6-2 では同期アダプタのプロセスを示しています。

図6-1 実行時環境における非同期サービス アダプタ


 


 

図6-2 実行時環境における同期サービス アダプタ


 


 

 


イベントの処理フロー

図6-3 は、サービス アダプタの開発手順の概要です。

図6-3 サービス アダプタ開発プロセスにおけるイベントのフロー


 


 

 


手順 1 :環境要件の調査

サービス アダプタの開発を開始する前に、サービス アダプタをサポートするために環境に必要なリソースを識別する必要があります。この手順では、開発環境における要件について詳しく説明します。必要なリソースの詳細なリストについては、アダプタ設定ワークシートを参照してください。

注意: トランザクションの境界設定の詳細については、トランザクション境界設定または次に示すサイトを参照してください。

http://java.sun.com/blueprints/guidelines/designing_enterprise_applications/transaction_management/platform/index.html

 


手順 2 : 開発環境のコンフィグレーション

この手順では、環境をコンフィグレーションする 4 つの手順(手順 2a から手順 2b まで)について説明します。

注意: この手順は、GenerateAdapterTemplate ユーティリティを実行することで簡単に行えます。詳細については、カスタム開発環境の作成を参照してください。

手順 2a : ディレクトリ構造の設定

WebLogic Integration のインストール時に作成されるディレクトリ構造は、アダプタを実行するためだけでなく、ADK を使用するためにも必要です。ADK 関連のファイルは、WLI_HOME/adapters/ ディレクトリ(WLI_HOME は、WebLogic Integration をインストールしたディレクトリ)に格納されています。インストール時に、WLI_HOME ディレクトリに必要なディレクトリおよびファイルが含まれているかを必ず確認してください。

次の表では、WLI_HOME のディレクトリ構造について説明します。

表6-1 ADK ディレクトリ構造

パス名

説明

アダプタ

ADK を含むディレクトリ。

adapters/src/war

.jsp ファイル、イメージなどが格納されるディレクトリ。このディレクトリ内のすべてのファイルは、アダプタの WAR ファイルに組み込む必要がある。

adapters/utils

JAR ファイルにタイムスタンプするファイルを含め、ビルド プロセスで使用するファイルを含むディレクトリ。

adapters/dbms

ADK を使用して構築された J2EE 準拠のサンプル アダプタが格納されるディレクトリ。

adapters/dbms/docs

サンプル アダプタのユーザ ガイド、リリース ノート、およびインストール ガイドが格納されるディレクトリ。

adapters/sample

独自のアダプタを開発する際に使用できるサンプル アダプタが格納されるディレクトリ。

adapters/sample/project

Apache Jakarta Ant ビルド ファイルのbuild.xml が格納されるディレクトリ。このファイルには、ソース コードのコンパイル、JAR ファイルと EAR ファイルの生成、および Javadoc 情報の生成に使用されるビルド情報が格納される。アダプタの構築に関する詳細は、手順 2c : ビルド プロセスの設定を参照。

adapters/sample/src

アダプタのあらゆるソース コードが格納されるディレクトリ。アダプタにソース コードを含めるかどうかは任意に選択する。

adapters/sample/src/
BEA_WLS_SAMPLE_ADK.properties

アダプタがインターナショナライゼーションおよびローカライゼーションで使用するメッセージが定義されているファイル。

adapters/sample/src/
BEA_WLS_ SAMPLE_ADK.xml

ロギング フレームワークに必要な基本的なコンフィグレーション ファイル。独自のアダプタ ロギング コンフィグレーション ファイルを開発するときにこのファイルを使用する。

adapters/sample/src/ eventrouter/WEB-INF/web.xml

イベント ルータ Web アプリケーション用のコンフィグレーション ファイル。

adapters/sample/src/rar/
META- INF/ra.xml

J2EE 準拠アダプタに関するコンフィグレーション情報が定義されているファイル。このファイルは、ADK の実行時フレームワークで必要なパラメータを確認するための参考ガイドとして使用する。

adapters/sample/src/rar/META- INF/weblogic-ra.xml

Weblogic Server J2EE エンジンに固有の J2EE 準拠アダプタに関するコンフィグレーション情報が定義されているファイル。このファイルは、使用するアダプタに応じて weblogic-ra.xml ファイルを設定する際の例として使用する。このファイルは Weblogic Server で必要となる。

adapters/sample/src/sample

アダプタのソース コードが格納されるディレクトリ。

adapters/sample/src/war

.jsp ファイル、.html ファイル、イメージなどが格納されるディレクトリ。このディレクトリ内のすべてのファイルは、アダプタの Web アプリケーション アーカイブ(.war)ファイルに組み込む必要がある。

adapters/sample/src/war/WEB- INF/web.xml

Web アプリケーション記述子

adapters/sample/src/war/WEB-INF/ weblogic.xml

Web アプリケーション用の WebLogic Server 固有の属性が定義されているファイル。

adapters/sample/src/ear/META-INF/application.xml

アダプタのアプリケーション ビューをコンフィグレーションするためのコネクタおよび Web アプリケーションが収められている J2EE アプリケーション。


 

ディレクトリ構造の変更

GenerateAdapterTemplate を使用して開発ツリーを複製すると、adapters/sample のすべてのディレクトリの内容が自動的に複製されて、新しい開発環境に合わせて更新されます。

変更は、ファイル WLI_HOME/adapters/ADAPTER/docs/api/index.html (ADAPTER は、新しい開発ディレクトリ名) に反映されます。また、新しいアダプタに応じて WebLogic Integration を設定する際に、このファイル内のコードをコピーして、そのアダプタの config.xml ファイルに貼り付けることもできます。

手順 2b : アダプタ論理名の割り当て

アダプタに論理名を割り当てます。通常、アダプタの論理名は、次のようにアンダースコアで区切られた 3 つの項目(ベンダ名、アダプタに接続される EIS のタイプおよび EIS のバージョン)で構成されます。

vendor_EIS-type_EIS-version

例 :

BEA_WLS_SAMPLE_ADK

アダプタ論理名の詳細については、アダプタ論理名を参照してください。

手順 2c : ビルド プロセスの設定

ADK では、Ant という Java 言語のみを使用して作成した Java のビルド ツールに基づくビルド プロセスが採用されています。Ant の詳細については、Ant ベースのビルド プロセスを参照してください。Ant の使用方法の詳細については、以下のサイトを参照してください。

http://jakarta.apache.org/ant/index.html

ADK に付属のサンプル アダプタ(WLI_HOME/adapters/sample/project に格納されている)には、build.xml というファイルが入っています。このファイルは、サンプル アダプタの Ant ビルド ファイルです。このファイルには、J2EE 準拠アダプタを構築するのに必要なタスクが収められています。GenerateAdapterTemplate ユーティリティを実行して、アダプタの開発ツリーを複製すると、使用するアダプタ専用の build.xml ファイルが作成されます。この自動ファイル生成により、サンプル build.xml ファイルをカスタマイズする手間が省け、かつコードの正確性が保証されます。GenerateAdapterTemplate ユーティリティの使用方法の詳細については、カスタム開発環境の作成を参照してください。

Manifest ファイル

GenerateAdapterTemplate によって作成されるファイルの中には、MANIFEST.MF という manifest ファイルがあります。このファイルには、このファイルを使用する各コンポーネントに対するクラスロード指示が定義されています。manifest ファイルは、ear/META-INF を除くすべての /META-INF ディレクトリに作成されます。

リスト6-1 は、サンプル アダプタに組み込まれている manifest ファイルの例を示しています。

コード リスト 6-1 Manifest ファイルの例

Manifest-Version: 1.0

Created-By:BEA Systems, Inc.

Class-Path: BEA_WLS_SAMPLE_ADK.jar adk.jar wlai-core.jar
wlai-client.jar

このファイルの最初の 2 行には、バージョン情報およびベンダ情報が含まれます。3 行目では、関連クラスパスまたはクラスロード指示が定義されます。Class-Path プロパティには、コンポーネントが必要とするリソースへの参照と共有JAR ファイルのリストが含まれます。(リストでは、ファイル名がスペースで区切られています。)JAR ファイルは、EAR ファイルの共有エリアに組み込む必要があります。(詳細については、エンタープライズ アーカイブ(EAR)ファイルを参照してください。)

JAR ツールでは、Class-Path: 行の長さの上限は 72 文字です。72 文字を超える行は次の行に回され、次に示すようにスペースで始まります。

Class-Path: .....72 文字のクラスパス
<スペース>クラスパスの続き

サンプルの ADK アダプタでは、以下の Ant コマンドによりすべての共有 JAR ファイルは、1 つの JAR ファイル(shared.jar)に統合されます。

コード リスト 6-2

<jar jarfile='${LIB_DIR}/shared.jar'>
<zipfileset src='${LIB_DIR}/${JAR_FILE}'>
<exclude name='META-INF/MANIFEST.MF'/>
</zipfileset>
<zipfileset src='${WLI_LIB_DIR}/adk.jar'>
<exclude name='META-INF/MANIFEST.MF'/>
</zipfileset>
<zipfileset src='${WLI_LIB_DIR}/wlai-core.jar'>
<exclude name='META-INF/MANIFEST.MF'/>
</zipfileset>
<zipfileset src='${WLI_LIB_DIR}/wlai-client.jar'>
<exclude name='META-INF/MANIFEST.MF'/>
</zipfileset>
</jar>
<jar jarfile='${LIB_DIR}/${EAR_FILE}'>
<fileset dir='${basedir}' includes='version_info.xml'/>
<fileset dir='${SRC_DIR}/ear' includes='META-INF/application.xml'/>
<fileset dir='${LIB_DIR}' includes='shared.jar,${RAR_FILE},${WAR_FILE},
${EVENTROUTER_WAR_FILE}'/>
</jar>

注意: ファイル名MANIFEST.MF は、WAR ファイルに組み込む場合にはすべて大文字で表記する必要があります。正しく表記されていない場合、UNIX システムでは認識されず、エラーが発生します。

build.xml のコンポーネント

build.xml がどのように機能するかを知るには、ファイルを開いてコンポーネントをレビューします。ここでは、主なファイル要素について説明します。build.xml の内容をレビューする際にこれらの説明を参照してください。

注意: 以下の例はサンプル アダプタからの引用で、複製バージョンのものではありません

  1. 最初の行では、ルート プロジェクト要素の名前属性が設定されます。
     <project name='BEA_WLS_SAMPLE_ADK' default='all' basedir='.'>

  2. 名前は、次のリスト例で示すように、アーカイブ ファイル(JAR、WAR および RAR ファイル)に関連付けられます。

コード リスト 6-3 アーカイブ ファイル名の設定

<property name='JAR_FILE' value='BEA_WLS_SAMPLE_ADK.jar'/>
<property name='RAR_FILE' value='BEA_WLS_SAMPLE_ADK.rar'/>
<property name='WAR_FILE' value='BEA_WLS_SAMPLE_ADK_Web.war'/>
<property name='EVENTROUTER_JAR_FILE'
value='BEA_WLS_SAMPLE_ADK_EventRouter.jar'/>
<property name='EVENTROUTER_WAR_FILE'
value='BEA_WLS_SAMPLE_ADK_EventRouter.war'/>
<property name='EAR_FILE' value='BEA_WLS_SAMPLE_ADK.ear'/>

  1. リスト6-4 に、ADK の標準プロパティを示します。

コード リスト 6-4 標準 ADK プロパティ

<property name='ADK' value='${WLI_LIB_DIR}/adk.jar'/>
<property name='ADK_WEB' value='${WLI_LIB_DIR}/adk-web.jar'/>
<property name='ADK_TEST' value='${WLI_LIB_DIR}/adk-test.jar'/>
<property name='ADK_EVENTGENERATOR' value='${WLI_LIB_DIR}/
adk-eventgenerator.jar'/>
<property name='BEA' value='${WLI_LIB_DIR}/bea.jar'/>
<property name='LOGTOOLKIT' value='${WLI_LIB_DIR}/
logtoolkit.jar'/>
<property name='WEBTOOLKIT' value='${WLI_LIB_DIR}/
webtoolkit.jar'/>
<property name='WLAI_CORE' value='${WLI_LIB_DIR}/
wlai-core.jar'/>
<property name='WLAI_CLIENT' value='${WLI_LIB_DIR}/
wlai-client.jar'/>
<property name='WLAI_COMMON' value='${WLI_LIB_DIR}/
wlai-common.jar'/>
<property name='WLAI_EVENTROUTER' value='${WLI_LIB_DIR}/
wlai-eventrouter.jar'/>
<property name='XMLTOOLKIT' value='${WLI_LIB_DIR}/
xmltoolkit.jar'/>
<property name='XCCI' value='${WLI_LIB_DIR}/xcci.jar'/>

これらのプロパティを変更する必要はありませんが、この後に、アダプタで必要な他の JAR ファイルやクラスを追加できます。

  • クラスパスは、次のリストに示すように、コンパイルのためにセットアップされます。
  • コード リスト 6-5 クラスパスの設定

      <path id='CLASSPATH'>
    <pathelement location='${SRC_DIR}'/>
    <pathelement path='${ADK}:${ADK_EVENTGENERATOR}:
    ${ADK_WEB}:${ADK_TEST}:${WEBTOOLKIT}:${WLAI_CORE}:
    ${WLAI_EVENTROUTER}:${WLAI_CLIENT}'/>
    <pathelement path='${WEBLOGIC_JAR}:${env.BEA_HOME}'/>
    <pathelement path='${JUNIT}:${HTTPUNIT}:${TIDY}'/>
    </path>

    この情報の後に、任意で次の 3 つのファイルの組み合わせのいずれかを呼び出すことができます。

    コード リスト 6-6 すべてのバイナリおよびアーカイブを呼び出すサンプル

    <!-- このターゲットにより、アダプタのすべてのバイナリおよび
    アーカイブが作成される -->
    <target name='all' depends='ear'/>

    コード リスト 6-7 サンプル version_info ファイル

    <!-- このターゲットにより、version_info ファイルがアーカイブに
    組み込まれる -->
    <target name='version_info'>
    <java classname='GenerateVersionInfo'>
    <arg line='-d${basedir}'/>
    <classpath>
    <pathelement path='${WLI_HOME}/adapters/utils:
    ${WEBLOGIC_JAR}'/>
    </classpath>
    </java>
    </target>

    1. このアダプタに対する JAR ファイルの内容が指定されます。アダプタの実行時関係の要素はメインの JAR ファイルに含まれますが、設計時 GUI サポート クラスのような追加クラスは、以下のリストに示すように WAR ファイルまたは他の JAR ファイルに含まれます。

    コード リスト 6-8 JAR ファイルに値を設定するためのサンプル コード

    <target name='jar' depends='packages,version_info'>
    <delete file='${LIB_DIR}/${JAR_FILE}'/>
    <mkdir dir='${LIB_DIR}'/>
    <jar jarfile='${LIB_DIR}/${JAR_FILE}'>

    1. アダプタのソース ディレクトリからの includes リストが指定されます。ここで説明するサンプル アダプタでは、sample/cci および sample/spi パッケージ内のクラスがすべて含まれ、さらにロギング コンフィグレーション ファイルとメッセージ バンドルが含まれます。

    コード リスト 6-9 Includes リストを組み込むサンプル コード

    <fileset dir='${SRC_DIR}'
    includes='sample/cci/*.class,sample/spi/*.class,
    sample/eis/*. class,*.xml,*.properties'/>

    1. 以下のリストに示すように、JAR ファイルに関するバージョン情報を示します。

    コード リスト 6-10 JAR ファイルのバージョン情報の設定

    <!-- JAR ファイルのバージョン情報を組み込む -->
    <fileset dir='${basedir}'
    includes='version_info.xml'/>
    </jar>

    1. J2EE アダプタ アーカイブ(RAR)ファイルが生成されます。このファイルには、アダプタに必要なすべてのクラスおよび JAR ファイルが含まれます。このファイルは、アダプタが依存する J2EE 準拠アプリケーション サーバにデプロイできます。この例には、以下のターゲットがあります。

      以下のリストに、サンプル アダプタに対し RAR ファイルがどのように作成されるかを示します。

    コード リスト 6-11 接続アーキテクチャ RAR ファイルを作成するサンプル コード

    <target name='rar' depends='jar'>
    <delete file='${LIB_DIR}/${RAR_FILE}'/>
    <mkdir dir='${LIB_DIR}'/>
    <jar jarfile='${LIB_DIR}/${RAR_FILE}'
    manifest='${SRC_DIR}/rar/META-INF/MANIFEST.MF'>
    <fileset dir='${SRC_DIR}/rar'includes='META-INF/ra.xml,
    META-INF/weblogic-ra.xml' excludes=
    'META-INF/MANIFEST.MF'/>
    </jar>
    </target>

    1. J2EE Web アプリケーション アーカイブ(WAR)ファイルが生成されます。このファイルには、既存の環境をクリーンアップするコードも含まれています。

    コード リスト 6-12 WAR ファイル生成のためのサンプル コード

    <target name='war' depends='jar'>
    <!-- 既存の環境をクリーンアップする -->
        <delete file='${LIB_DIR}/${WAR_FILE}'/>
    <copy file='${WLI_HOME}/adapters/src/war/WEB-INF/taglibs/
    adk.tld' todir='${SRC_DIR}/war/WEB-INF/taglibs'/>
    <java classname='weblogic.jspc' fork='yes'>
    <arg line='-d ${SRC_DIR}/war -webapp ${SRC_DIR}/
    war -compileAll -depend'/>
    <classpath refid='CLASSPATH'/>
    </java>
    <!-- 最初のアダプタは共通 ADK JSP をコンパイルする必要がある -->
        <java classname='weblogic.jspc' fork='yes'>
    <arg line='-d ${WLI_HOME}/adapters/src/war -webapp
    ${WLI_HOME}/adapters/src/war -compileAll
    -depend'/>
    <classpath refid='CLASSPATH'/>
    </java>
    <war warfile='${LIB_DIR}/${WAR_FILE}' 
    webxml='${SRC_DIR}/war/WEB-INF/web.xml'
    manifest='${SRC_DIR}/war/META-INF/MANIFEST.MF'>
    <!--
    重要! Exclude the WEB-INF/web.xml file from
    the WAR as it already gets included via the webxml attribute above
    -->
           <fileset dir="${SRC_DIR}/war" >
    <patternset >
    <include name="WEB-INF/weblogic.xml"/>
    <include name="**/*.html"/>
    <include name="**/*.gif"/>
    </patternset>
    </fileset>
    <!--
    重要! ADK 設計時フレームワークをアダプタの設計時
    Web アプリケーションに含める
    -->
           <fileset dir="${WLI_HOME}/adapters/src/war" >
    <patternset >
    <include name="**/*.css"/>
    <include name="**/*.html"/>
    <include name="**/*.gif"/>
    <include name="**/*.js"/>
    </patternset>
    </fileset>
    <!-- 設計時 UI をサポートするアダプタのクラスを
    含める -->
           <classes dir='${SRC_DIR}' includes='sample/web/*.class'/>
    <classes dir='${SRC_DIR}/war'includes='**/*.class'/>
    <classes dir='${WLI_HOME}/adapters/src/war' includes=
    '**/*.class'/>
    <!--
    アプリケーションで必要とされ、EAR に共有されないすべての JAR
    ファイルを、WAR ファイルの WEB-INF/lib ディレクトリ下に
    組み込む
    -->

    1. Web アプリケーションで必要とされるすべての JAR ファイルは、build.xml ファイルの <lib> コンポーネント内に組み込まれています。

    コード リスト 6-13 Web アプリケーションが必要とする JAR ファイルを組み込むサンプル コード

    <lib dir='${WLI_LIB_DIR}' includes='adk-web.jar,
    webtoolkit.jar,wlai-client.jar'/>

    1. EAR ファイルが組み込まれます。

    コード リスト 6-14 EAR ファイルの組込み

    <target name='ear' depends='rar,eventrouter_jar,war'>
        <delete file='${LIB_DIR}/${EAR_FILE}'/>
        <!-- jar ファイルを組み込むのではなく、
    jar ファイルを共有するイベント ルータを組み込む-->
        <delete file='${LIB_DIR}/${EVENTROUTER_WAR_FILE}'/>
    <delete dir='${SRC_DIR}/eventrouter/WEB-INF/lib'/>
         <war warfile='${LIB_DIR}/${EVENTROUTER_WAR_FILE}
    'webxml='${SRC_DIR}/eventrouter/WEB-INF/web.xml
    'manifest='${SRC_DIR}/eventrouter/META-INF/
    MANIFEST.MF'>
           <fileset dir='${basedir}' includes='version_info.xml'/>
    <fileset dir="${SRC_DIR}/eventrouter" >
    <patternset>
    <exclude name="WEB-INF/web.xml"/>
    <exclude name="META-INF/*.mf"/>
    </patternset>
    </fileset>
          <lib dir='${LIB_DIR}' includes='${EVENTROUTER_JAR_ 
    FILE}'/>
    <lib dir='${WLI_LIB_DIR}'includes=
    'adk-eventgenerator.jar,wlai-eventrouter.jar'/>
    </war>
         <jar jarfile='${LIB_DIR}/${EAR_FILE}'>
    <fileset dir='${basedir}' includes='version_info.xml'/>
    <fileset dir='${SRC_DIR}/ear' includes=
    'application.xml'/>
    <fileset dir='${LIB_DIR}'includes='${JAR_FILE},
    ${RAR_FILE}, ${WAR_FILE},${EVENTROUTER_WAR_FILE}'/>
    <fileset dir='${WLI_LIB_DIR}'includes='adk.jar,
    wlai-core.jar,wlai-client.jar'/>
    </jar>
         <delete file='${LIB_DIR}/${EVENTROUTER_WAR_FILE}'/>
    <delete file='${LIB_DIR}/${EVENTROUTER_JAR_FILE}'/>
    <delete file='${LIB_DIR}/${WAR_FILE}'/>
    <delete file='${LIB_DIR}/${RAR_FILE}'/>
    <delete file='${LIB_DIR}/${JAR_FILE}'/>
    </target>

    EAR デプロイメント固有のイベント ルータは自身でデプロイすることはできないため、以下のリストで示すように、EAR ターゲット内から呼び出されます。

    コード リスト 6-15 EAR 固有の EventRouter を組み込むサンプル コード

        <delete file='${LIB_DIR}/${EVENTROUTER_WAR_FILE}'/>
    <delete dir='${SRC_DIR}/eventrouter/WEB-INF/lib'/>
        <war warfile='${LIB_DIR}/${EVENTROUTER_WAR_FILE}
    'webxml='${SRC_DIR}/eventrouter/WEB-INF/web.xml
    'manifest='${SRC_DIR}/eventrouter/META-INF/
    MANIFEST.MF'>
           <fileset dir='${basedir}' includes='version_info.xml'/>
    <fileset dir="${SRC_DIR}/eventrouter" >
    <patternset >
    <exclude name="WEB-INF/web.xml"/>
    <exclude name="META-INF/*.mf"/>
    </patternset>
    </fileset>
           <lib dir='${LIB_DIR}' includes='${EVENTROUTER_
    JAR_FILE}'/>
    <libdir='${WLI_LIB_DIR}'
    includes='adk-eventgenerator.jar,
    wlai-eventrouter.jar'/>
        </war>

    上記リストの EAR ターゲット内に、以下のリストに示すように、すべての共通または共有 JAR ファイルもあります。

    コード リスト 6-16 共通または共有 JAR ファイルの組み込みを示すサンプル コード

    <jar jarfile='${LIB_DIR}/${EAR_FILE}'>
        <fileset dir='${basedir}' includes='version_info.xml'/>
    <fileset dir='${SRC_DIR}/ear' includes='application.xml'/>
    <fileset dir='${LIB_DIR}'includes='${JAR_FILE},${RAR_FILE},
    ${WAR_FILE},${EVENTROUTER_WAR_FILE}'/>
    <fileset dir='${WLI_LIB_DIR}'includes='adk.jar,
    wlai-core.jar,wlai-client.jar'/>
    </jar>

    1. このプロジェクトのすべての Java ソース ファイルがコンパイルされます。

    コード リスト 6-17 Java ソースのコンパイル用サンプル コード

    <target name='packages'>
    <echo message='Building ${ant.project.name}...'/>
    <javac srcdir='${SRC_DIR}'
    excludes='war/jsp_servlet/**'
    deprecation='true' debug='true'>
    <classpath refid='CLASSPATH'/>
    </javac>
    </target>

    1. 以下のリストに示すように、EventRouter JAR ファイルを構築します。

    コード リスト 6-18 EventRouter JAR ファイル構築用サンプル コード

    <target name='eventrouter_jar' depends='packages,version_info'>
    <delete file='${LIB_DIR}/${EVENTROUTER_JAR_FILE}'/>
    <jar jarfile='${LIB_DIR}/${EVENTROUTER_JAR_FILE}'>
    <fileset dir='${SRC_DIR}'
    includes='sample/event/*.class'/>
    <fileset dir='${basedir}'
    includes='version_info.xml'/>
    </jar>
    </target>

    1. 以下のリストに示すように、J2EE WAR ファイルおよびスタンドアロン デプロイメントに使用されるイベント ルータを生成します。

    コード リスト 6-19 スタンドアロン デプロイメント用の EventRouter ターゲットを生成するサンプル コード

    <target name='eventrouter_war' depends='jar,eventrouter_jar'>
    <delete file='${LIB_DIR}/${EVENTROUTER_WAR_FILE}'/>
    <delete dir='${SRC_DIR}/eventrouter/WEB-INF/lib'/>
    <war warfile='${LIB_DIR}/${EVENTROUTER_WAR_FILE}'webxml=
    '${SRC_DIR}/eventrouter/WEB-INF/web.xml'>
    <fileset dir='${basedir}' includes='version_info.xml'/>
    <fileset dir='${SRC_DIR}/eventrouter' excludes=
    'WEB-INF/web.xml'/>
    <lib dir='${LIB_DIR}' includes='${JAR_FILE},
    ${EVENTROUTER_JAR_FILE}'/>
    <lib dir='${WLI_LIB_DIR}'includes='adk.jar,
    adk-eventgenerator.jar,wlai-core.jar,
    wlai-eventrouter.jar,wlai-client.jar''/>
    </war>
    </target>

    1. Javadoc が生成されます。

    コード リスト 6-20 Javadoc を生成するサンプル コード

    <target name='apidoc'>
    <mkdir dir='${DOC_DIR}'/>
    <javadoc sourcepath='${SRC_DIR}'
    destdir='${DOC_DIR}'
    packagenames='sample.*'
    author='true'
    version='true'
    use='true'
    overview='${SRC_DIR}/overview.html'
    windowtitle='WebLogic BEA_WLS_SAMPLE_ADK Adapter
    API Documentation'
    doctitle='WebLogic BEA_WLS_SAMPLE_ADK Adapter
    API Documentation'
    header='WebLogic BEA_WLS_SAMPLE_ADK Adapter'
    bottom='Built using the WebLogic Adapter
    Development Kit (ADK)'>
    <classpath refid='CLASSPATH'/>
    </javadoc>
    </target>

    1. 対応するオブジェクトにより作成されたファイルをクリーンアップするターゲットを示します。

    コード リスト 6-21 クリーンアップ コードを組み込むサンプル コード

    <target name='clean' depends='clean_release'/>
    <target name='clean_release' depends='clean_all,clean_apidoc'/>
    <target name='clean_all'depends='clean_ear,clean_rar,clean_war,
    clean_eventrouter_war,clean_test'/>
    <target name='clean_test'>
    <delete file='${basedir}/BEA_WLS_SAMPLE_ADK.log'/>
    <delete file='${basedir}/mcf.ser'/>
    </target>
    <target name='clean_ear' depends='clean_jar'>
    <delete file='${LIB_DIR}/${EAR_FILE}'/>
    </target>
    <target name='clean_rar' depends='clean_jar'>
    <delete file='${LIB_DIR}/${RAR_FILE}'/>
    </target>
    <target name='clean_war' depends='clean_jar'>
    <delete file='${LIB_DIR}/${WAR_FILE}'/>
    <delete dir='${SRC_DIR}/war/jsp_servlet'/>
    </target>
    <target name='clean_jar' depends='clean_packages,clean_version_
    info'>
    <delete file='${LIB_DIR}/${JAR_FILE}'/>
    </target>
    <target name='clean_eventrouter_jar'>
    <delete file='${LIB_DIR}/${EVENTROUTER_JAR_FILE}'/>
    </target>
    <target name='clean_eventrouter_war' depends='clean_
    eventrouter_jar'>
    <delete file='${LIB_DIR}/${EVENTROUTER_WAR_FILE}'/>
    </target>
    <target name='clean_version_info'>
    <delete file='${basedir}/version_info.xml'/>
    </target>
    <target name='clean_packages'>
    <delete>
    <fileset dir='${SRC_DIR}' includes='**/*.class'/>
    </delete>
    </target>
    <target name='clean_apidoc'>
    <delete dir='${DOC_DIR}'/>
    </target>
    </project>

    手順 2d : メッセージ バンドルの作成

    エンド ユーザ向けのメッセージは、メッセージ バンドルに入れます。2 つ以上の言語でメッセージを生成できる「key=value」の組み合わせを含む .properties テキスト ファイル。実行時にロケールおよび地域言語が指定されると、メッセージの内容が該当する「key=value」の組み合わせに基づいて解釈され、メッセージがユーザのロケールに従って適切な言語で提示されます。

    メッセージ バンドルの作成方法については、次に示すサイトにある JavaSoft チュートリアルを参照してください。

    http://java.sun.com/docs/books/tutorial/i18n/index.html

     


    手順 3 : SPI の実装

    サービス プロバイダ インタフェース(SPI)には、EIS への接続、管理、トランザクションの環境設定、およびサービス呼び出しのフレームワークが用意されているオブジェクトが入っています。J2EE 準拠アダプタには、javax.resource.spi パッケージにあるこれらのインタフェースの実装が必要です。

    この節では、SPI の実装に使用できるインタフェースについて説明します。SPI の実装作業には、最低 3 つのインタフェースが必要です(基本的な SPI の実装を参照してください)。ここでは、それぞれのインタフェースを詳しく説明し、さらに、ADK に含まれているサンプル アダプタによるそれらのインタフェース拡張方法を説明します。

    まず、3 つのインタフェースについて説明します。次に、追加インタフェースについて詳しく説明し、さらにそれらを使用する理由や、アダプタで使用した場合の利点についても説明します。

    基本的な SPI の実装

    アダプタに SPI を実装するには、最低でも、次の 3 つのインタフェースの拡張が必要です。

    3 つのインタフェースは、ここで示す順番で実装するのが理想的です。

    この 3 つのインタフェースのほか、使用するアダプタの要求に合わせて、この節で説明されたほかのインタフェースを任意に実装できます。

    ManagedConnectionFactory

    javax.resource.spi.ManagedConnectionFactory

    ManagedConnectionFactory インタフェースは、ManagedConnection と EIS 固有の接続ファクトリ インスタンス両方のファクトリです。このインタフェースは、ManagedConnection インスタンスをマッチングしたり、作成したりするメソッドによって接続プールをサポートします。

    トランザクション境界設定

    ManagedConnectionFactory に不可欠なコンポーネントは、トランザクションの境界設定です。1 つのトランザクションにインクルードされるプログラム文を決定します。J2EE では、アプリケーション サーバとアダプタ(およびそのベースのリソース マネージャ)との間のトランザクション管理規約を定義します。トランザクション管理規約は、2 つの部分から構成されます。規約は、使用するトランザクションの種類によって異なります。トランザクションには、2 つの種類があります。

    XA 準拠トランザクション

    javax.transaction.xa.XAResource ベース規約は、分散トランザクション処理環境(DTP)におけるトランザクション マネージャとリソース マネージャ間の取り決めです。JDBC ドライバまたは JMS プロバイダは、グローバル トランザクションと、データベースまたはメッセージ サービス接続との間の関連付けをサポートするために、このインタフェースを実装します。

    XAResource インタフェースは、トランザクションが外部トランザクション マネージャで管理されている環境内のアプリケーション プログラムでの使用を目的としたトランザクション リソースならばどのようなものでもサポート可能です。

    そのようなリソースの例として、アプリケーションが複数のデータベース接続を経由してデータにアクセスするようなデータベース管理システムが挙げられます。それぞれのデータベース接続は、トランザクション リソースとして、トランザクション マネージャに登録されます。トランザクション マネージャは、グローバル トランザクションに関連する各接続に対して、XAResource を取得します。トランザクション マネージャは、start() メソッドを使用して、グローバル トランザクションとリソースを関連付け、end() メソッドによってトランザクションとリソースの関連付けを解除します。リソース マネージャは、グローバル トランザクションを、start() メソッド呼び出しと end() メソッド呼び出しの間にそのデータに対して行われたすべての作業に関連付けます。

    トランザクションのコミット時、リソース マネージャは、トランザクションを 2 フェーズ コミット プロトコルに従って準備、コミット、またはロールバックするようにトランザクション マネージャから指示されます。

    ローカル トランザクション

    ローカル トランザクション管理規約は、アダプタが、そのリソース マネージャで実行されるローカル トランザクションをサポートするために、javax.resource.spi.LocalTransaction インタフェースを実装する場合の規約です。この規約によって、アプリケーションサーバがトランザクション管理のインフラストラクチャと実行時環境を整えられます。アプリケーション コンポーネントはこのトランザクション インフラストラクチャを利用して、コンポーネントレベルのトランザクション モデルをサポートします。

    トランザクションの境界設定の詳細については、以下の URL を参照してください。

    http://java.sun.com/blueprints/guidelines/
    designing_enterprise_applications/transaction_management/
    platform/index.html

    ADK 実装

    ADK では、アダプタに対して AbstractManagedConnectionFactory という抽象ファンデーションを提供しています。このファンデーションには、以下の機能があります。

    以下の主要メソッドに対し、独自の実装が必要です。

    以下の節では、それらのメソッドについて説明します。

    createConnectionFactory()

    createConnectionFactory() は、アダプタに対するアプリケーションレベルの接続ハンドル用のファクトリです。すなわち、アダプタのクライアントは、このメソッドにより返されたオブジェクトを使用して EIS に対する接続ハンドルを取得します。

    アダプタが CCI インタフェースをサポートする場合、com.bea.adapter.cci.ConnectionFactoryImpl のインスタンス、または拡張されたクラスを返すことをお勧めします。このメソッドを正しく実装するポイントは、ConnectionManager、LogContext、および ResourceAdapterMetaData をクライアント API に伝播することです。

    コード リスト 6-22 createConnectionFactory() の例

    protected Object
    createConnectionFactory(ConnectionManager connectionManager,
    String strAdapterName,
    String strAdapterDescription,
    String strAdapterVersion,
    String strVendorName)
    throws ResourceException

    createManagedConnection()

    createManagedConnection() は、アダプタに対する ManagedConnection インスタンスの作成に使用します。以下のリストに、このメソッドの例を示します。

    コード リスト 6-23 createManagedConnection() の例

    public ManagedConnection
    createManagedConnection(Subject subject, ConnectionRequestInfo
    info)
    throws ResourceException

    ManagedConnection インスタンスは、EIS との通信に必要な高コスト リソースをカプセル化します。このメソッドは、ConnectionManager がクライアントの要求を満たすために新しい ManagedConnection が必要と判断した場合に、ConnectionManager によって呼び出されます。アダプタの一般的な設計パターンでは、このメソッドで EIS との通信に必要なリソースを開き、それからそのリソースを新しい ManagedConnection インスタンスに渡すようにします。

    checkState()

    checkState() メソッドは、AbstractManagedConnectionFactory がファクトリ関係のタスクを実行する前に呼び出します。このメソッドを使用して、初期化の必要があるすべてのメンバーが正しく初期化されていることを確認しないと、ManagedConnectionFactory では分担された SPI タスクを実行できません。

    このメソッドの実装は次のとおりです。

    protected boolean checkState()

    equals()

    equals() メソッドは、オブジェクト引数が等しいかどうかをテストします。このメソッドは、ConnectionManager が接続プールの管理に使用しますので、必ず正しく実装してください。等価性比較において、このメソッドは重要なメンバーをすべて組み込む必要があります。

    このメソッドの実装は次のとおりです。

    public boolean equals(Object obj)

    hashCode()

    hashCode() メソッドは、ファクトリで使用するハッシュ コードを提供します。また、ConnectionManager による接続プールの管理にも使用されます。したがって、このメソッドは、オブジェクトのユニーク性を決定するプロパティに基づいて hashCode を生成します。

    このメソッドの実装は次のとおりです。

    public int hashCode()

    matchManagedConnections()

    ManagedConnectionFactory は matchManagedConnections() メソッドの実装が必要です。AbstractManagedConnectionFactory は、AbstractManagedConnection の compareCredentials() メソッドに依存する matchManagedConnections() メソッドを実装します。

    管理対象接続にロジックを適合させるためには、AbstractManagedConnection クラスが提供する compareCredentials() メソッドをオーバーライドします。このメソッドは、ManagedConnectionFactory が ConnectionManager に対する接続要求と接続とをマッチングする場合に呼び出されます。

    現行では、AbstractManagedConnectionFactory の実装は、指定された Subject/ConnectionRequestInfo パラメータから PasswordCredential を抽出します。どちらのパラメータもヌルであれば、このインスタンスに対する ManagedConnectionFactory は適切なので、このメソッドは true を返します。この実装を、以下のリストに示します。

    コード リスト 6-24 compareCredentials() の実装

    public boolean compareCredentials(Subject subject,
    ConnectionRequestInfo info)
    throws ResourceException
    {
    ILogger logger = getLogger();

    次に、ADK の ManagedConnectionFactory を使用して、JAAS Subject または SPI ConnectionRequestInfo から、PasswordCredential を抽出する必要があります。以下のリストに例を示します。

    コード リスト 6-25 PasswordCredential の抽出

    PasswordCredential pc = getFactory().
    getPasswordCredential(subject, info);
    if (pc == null)
    {
    logger.debug(this.toString() + ": compareCredentials

    上記のリストでは、JAAS Subject および ConnectionRequestInfo がヌルで、一致しています。このメソッドは、このインスタンスのファクトリの適切性が確立されるまでは、呼び出されません。呼び出しの結果、Subject と ConnectionRequestInfo が両方ともヌルの場合、デフォルトにより資格一致となります。この接続の ping 結果により、比較結果の出力が決まります。以下のリストに、プログラムによる接続の ping を行う方法を示します。

    コード リスト 6-26 接続の ping

    return ping();
    }
    boolean bUserNameMatch = true;
    String strPcUserName = pc.getUserName();
    if (m_strUserName != null)
    {

    logger.debug(this.toString() + ": compareCredentials >>> comparing
    my username ["+m_strUserName+"] with client username
    ["+strPcUserName+"]");

    次に、Subject または ConnectionRequestInfo で指定されたユーザがこちらのユーザと同じかどうか確認する必要があります。このアダプタでは、再認証をサポートしていないので、この 2 つのユーザ名が一致しない場合、このインスタンスは要求を満たすことができなくなります。以下のコードが要求を満たしています。

    bUserNameMatch = m_strUserName.equals(strPcUserName);

    ユーザ名が一致すると、これが継続して良好かどうかを判別するため、接続の ping が行われます。名前が一致しない場合、ping する理由はありません。

    接続を ping するには、以下のコードを使用します。

    return bUserNameMatch ? ping() : false;

    実装に関する説明

    管理対象シナリオの場合、アプリケーション サーバは、アダプタの ManagedConnectionFactory に対して matchManagedConnections() メソッドを呼び出します。この指定では、接続要求を満たすためにアプリケーション サーバがどの ManagedConnectionFactory を使用するか、その決定については指示していません。ADK の AbstractManagedConnectionFactory は、matchManagedConnections() を実装します。

    この実装を行う最初の手順は、「これ」(すなわち、ConnectionManager が matchManagedConnections を呼び出した ManagedConnectionFactory インスタンス)とアプリケーション サーバによって提供されたセット内の各 ManagedConnection に対する ManagedConnectionFactory との比較です。同一の ManagedConnectionFactory を持つセット内の各 ManagedConnection に対しては、実装により compareCredentials() メソッドが呼び出されます。このメソッドにより、各 ManagedConnection オブジェクトは要求を満たすことができるかどうかを判別できます。

    ConnectionManager によって、matchManagedConnections() が呼び出され(リスト6-27 を参照してください)、管理しているプール内で有効な接続が検索されます。このメソッドでヌルが返された場合、ConnectionManager は、createManagedConnection() を呼び出し、EIS に新しい接続を割り当てます。

    コード リスト 6-27 matchManagedConnections() メソッドの実装

    public ManagedConnection
    matchManagedConnections(Set connectionSet,
    Subject subject,
    ConnectionRequestInfo info)
    throws ResourceException

    このクラスでは、接続のマッチングに次の方法を使用しています。

    1. セット内の各オブジェクトに対して、一致が検出されるまで connectionSet を繰り返します。次に、オブジェクト が AbstractManagedConnection クラスかどうかが判別されます。

    2. AbstractManagedConnection であった場合、この接続が、セットの AbstractManagedConnection に対する ManagedConnectionFactory と比較されます。

    3. 2 つのファクトリが同じ場合、compareCredentials() メソッドが AbstractManagedConnection に対して呼び出されます。

    4. compareCredentials() メソッドが true を返すと、インスタンスが返されます。

    開発時に必要な AbstractManagedConnectionFactory プロパティ

    AbstractManagedConnectionFactory の基本実装を使用するには、デプロイメント時に次の表のプロパティを指定する必要があります。

    表6-2 AbstractManagedConnectionFactory プロパティ

    プロパティ名

    プロパティの種類

    可能な値

    説明

    デフォルト値

    LogLevel

    java.lang.
    String

    ERROR、WARN、INFO、DEBUG

    冗長性レベルのログ

    WARN

    LanguageCode

    java.lang.
    String

    有効な ISO 言語コードについては、http://www.ics.uci.edu/pub/ietf/http/related/iso639.txtを参照。

    ログ メッセージに対して適切なロケールを指定する。

    en

    CountryCode

    java.lang.
    String

    有効な ISO 国コードについては、http://www.chemie. fu-berlin.de/ diverse/doc/ISO_3166.html を参照。

    ログ メッセージに対して適切なロケールを指定する。

    US

    MessageBundleBase

    java.lang.
    String

    有効な任意の Java クラス名またはファイル名

    ログ メッセージに対してメッセージ バンドルを指定する。

    なし、必須

    LogConfigFile

    java.lang.
    String

    有効な任意のファイル名

    LOG4J システムのコンフィグレーション

    なし、必須

    RootLogContext

    java.lang.
    String

    有効な任意の Java 文字列

    この接続ファクトリのログ メッセージを分類する。

    なし、必須

    AdditionalLog Context

    java.lang.
    String

    有効な任意の Java 文字列

    このファクトリのメッセージを一意に識別する追加情報を付加する。

    なし、省略可能


     

    ADK における他の主要 ManagedConnectionFactory 機能

    ADK のサンプル アダプタは、sample.spi.ManagedConnectionFactoryImpl と呼ばれる、AbstractManagedConnectionFactory を拡張するクラスを提供します。このクラスは、ADK の基本クラスを拡張する方法例として使用してください。

    ManagedConnectionFactory と呼ばれる、サンプル アダプタの実装コードの完全リストについては、次を参照してください。

    WLI_HOME/adapters/sample/src/sample/spi/
    ManagedConnectionFactoryImpl.java

    ManagedConnection

    javax.resource.spi.ManagedConnection

    ManagedConnection オブジェクトは、EIS に対する接続設定に必要なすべての高コスト リソースをカプセル化します。ManagedConnection インスタンスは、基本となる EIS に対する物理的な接続を表します。ManagedConnection オブジェクトは、アプリケーション サーバによって管理対象環境にプールされます。

    ADK 実装

    ADK では ManagedConnection の抽象実装を提供しています。この基本クラスは、接続イベント リスナおよび複数アプリケーションレベルの接続ハンドルを ManagedConnection インスタンスごとに管理するロジックを提供します。

    ManagedConnection インタフェースを実装する場合、基本となる EIS が提供するトランザクション境界設定サポートを決める必要があります。トランザクション境界設定の詳細については、トランザクション境界設定を参照してください。

    ADK では、AbstractManagedConnection という、以下の機能を持つ javax.resource.spi.ManagedConnection インタフェースの抽象実装を提供しています。

    ADK に付属しているサンプル アダプタには、AbstractManagedConnection を拡張する ManagedConnectionImpl が入っています。サンプル アダプタの ManagedConnection 実装コードの完全リストについては、次を参照してください。

    WLI_HOME/adapters/sample/src/sample/spi/
    ManagedConnectionFactoryImpl.java

    ManagedConnectionMetaData

    javax.resource.spi.ManagedConnectionMetaData

    ManagedConnectionMetaData インタフェースは、ManagedConnection インスタンスに関連付けられている基本となる EIS インスタンスに関する情報を提供します。アプリケーションサーバでは、この情報に基づいて、接続対象の EIS インスタンスに関する実行時情報が取得されます。

    ADK 実装

    ADK では、AbstractManagedConnectionMetaData という、以下の機能を持つ javax.resource.spi.ManagedConnectionMetaData および javax.resource.cci.ConnectionMetaData インタフェースの抽象実装を提供しています。

    ADK に付属しているサンプル アダプタには、AbstractManagedConnectionMetaData を拡張する ConnectionMetaDataImpl が入っています。アダプタの詳細なコード リストについては、次を参照してください。

    WLI_HOME/adapters/sample/src/sample/spi/ConnectionMetaDataImpl.java

    ConnectionEventListener

    javax.resource.spi.ConnectionEventListener

    ConnectionEventListener インタフェースは、アプリケーション サーバが ManagedConnection インスタンスからの通知を受信できるようにするイベント コールバック メカニズムを提供します。

    ADK 実装

    ADK では、ConnectionEventListener の 2 つの具象実装を提供しています。

    たいていの場合は、ADK で提供するこの 2 つの実装で十分なので、このインタフェースの独自の実装を用意する必要はありません。

    ConnectionManager

    javax.resource.spi.ConnectionManager

    ConnectionManager インタフェースは、アダプタが接続要求をアプリケーション サーバに渡すのに使用できるフックを提供します。

    ADK 実装

    ADK では、このインタフェースの具象実装を提供しています。これは、com.bea.adapter.spi.NonManagedConnectionManager と呼ばれます。この実装は、非管理対象環境で実行中のアダプタに基本接続マネージャを提供します。管理対象環境では、このインタフェースはアプリケーション サーバによって提供されます。ほとんどの場合に、ADK が用意する実装を使用できます。

    NonManagedConnectionManager は、javax.resource.spi.ConnectionManager インタフェースの具象実装で、アダプタが非管理シナリオにおいて ConnectionManager の役割を果たしますが、接続プールなどの高品質なサービスは提供しません。

    ConnectionRequestInfo

    javax.resource.spi.ConnectionRequestInfo

    ConnectionRequestInfo インタフェースは、アダプタが独自の要求に固有なデータ構造を接続要求フローに渡せるようにします。アダプタは、空のインタフェースを拡張して、接続要求に対する独自のデータ構造をサポートします。

    ADK 実装

    ADK は、javax.resource.spi.ConnectionRequestInfo インタフェースの具象実装を提供します。このインタフェースは、ConnectionRequestInfoMap と呼ばれます。これは、ユーザ名やパスワードなど、接続が確立された場合に要求される情報への java.util.Map インタフェースを提供します。

    LocalTransaction

    javax.resource.spi.LocalTransaction

    LocalTransaction インタフェースは、EIS リソース マネージャの内部で管理されているトランザクションのサポートを提供し、外部トランザクション マネージャを必要としません。

    ADK 実装

    ADK では、AbstractLocalTransaction という、このインタフェースの抽象実装を提供しており、EIS 固有の事項を中心に LocalTransaction の実装作業を行うことができます。特に、次のような作業を行います。

     


    手順 4 : CCI の実装

    クライアント インタフェースにより、J2EE 準拠アプリケーションは、バックエンド システムにアクセスできます。クライアント インタフェースは、クライアント アプリケーションとバックエンド システム間のデータ フローを管理しますが、コンテナまたはアプリケーション サーバとアダプタとのやり取りに関する可視性はありません。クライアント インタフェースは、EIS との対話における要求および応答の両レコードのフォーマットを指定します。

    まず、アダプタが J2EE 準拠 Common Client Interface (CCI) をサポートする必要があるかどうかを判断しなければなりません。現行の J2EE 仕様では必須要件にはなっていませんが、これから先のバージョンでは必須要件になることが予想されます。したがって、ADK では、アダプタの CCI インタフェースの実装を支援することに重点を置いています。

    この節の構成

    この節(手順 4 : CCI の実装)では、CCI の実装に使用できるインタフェースについて説明します。CCI の実装作業には、最低でも 2 つのインタフェースが必要です(基本的な CCI の実装を参照)。ここでは、それぞれのインタフェースを詳しく説明し、さらに、ADK に含まれているサンプル アダプタによるそれらのインタフェース拡張方法を説明します。

    この 2 つの必須インタフェースの説明に続いて、その他のインタフェースの詳細やこれらのインタフェースを使用する理由や利点についても説明しています。

    基本的な CCI の実装

    アダプタに CCI を実装するには、最低でも、次の 2 つのインタフェースを拡張する必要があります。

    これらのインタフェースは、できればここで示す順序で実装してください。

    また、アダプタに必要な以下のインタフェースはいずれも実装可能です。

    Connection

    javax.resource.cci.Connection

    Connection は、クライアントが基盤となる物理接続にアクセスするときに使用する、アプリケーションレベルのハンドルを表します。Connection インスタンスに関連付けられた実際の物理接続は、ManagedConnection インスタンスによって表されます。

    クライアントは、ConnectionFactory インスタンスで getConnection() メソッドを使用することにより、Connection インスタンスを取得します。Connection は、ゼロ個以上の Interaction インスタンスと関連付けることができます。

    ADK 実装

    ADK では、AbstractConnection という、このインタフェースの抽象実装を提供しています。この実装には以下の機能があります。

    このクラスは、次のメソッドを実装して拡張する必要があります。

    public Interaction createInteraction()
    throws ResourceException

    このメソッドは、この接続に関連付けられた対話を作成します。この対話により、アプリケーションが EIS 関数を実行できるようになります。このメソッドの戻り値および例外は、以下のとおりです。

    Interaction

    javax.resource.cci.Interaction

    javax.resource.cci.Interaction は、コンポーネントが EIS 関数を実行できるようにします。Interaction インスタンスは、EIS インスタンスとの対話を、以下のメソッドによってサポートします。

    Interaction インスタンスは、接続から作成され、InteractionConnection インスタンスとの関連付けの保守に必要です。close() メソッドは、対話に必要なアダプタが保守するすべてのリソースを解放します。Interaction インスタンスをクローズしても、関連付けられた Connection インスタンスはクローズをトリガしません。

    ADK 実装

    ADK では、AbstractInteraction という、このインタフェースの実装を提供しています。この実装には以下の利点があります。

    このインタフェースには、execute() を実装する AbstractInteraction の具象拡張を提供する必要があります。execute() には 2 つのバージョンがあります。これらについては、次に説明します。

    execute() バージョン 1

    リスト6-28 で宣言されている execute() メソッドは、InteractionSpec で表された対話を示しています。

    コード リスト 6-28 execute() バージョン 1 のコード例

    public boolean execute(InteractionSpec ispec,
    Record input,
    Record output)
    throws ResourceException

    この形の呼び出しでは、execute() は入力レコードを取り込んで、出力レコードを更新します。以下を返します。

    以下の表に、execute() バージョン 1 のパラメータを示します。

    表6-3 execute() バージョン 1 のパラメータ

    パラメータ

    説明

    ispec

    対象 EIS データまたは関数モジュールを表す InteractionSpec

    入力

    入力 Record

    出力

    出力 Record


     

    execute() バージョン 2

    リスト6-29 で宣言されている execute() メソッドでも、InteractionSpec で表された Interaction が実行されます。

    コード リスト 6-29 execute() バージョン 2 のコード例

    public Record execute(InteractionSpec ispec,
    Record input)
    throws ResourceException

    この形式の呼び出しでは、execute() は入力 Record を取り込み、Interaction の実行が正常に完了した場合、出力 Record を返します。

    このメソッドの戻り値および例外は、以下のとおりです。

    例外が発生した場合、このメソッドによって Connection に通知され、Connection によって自己のクローズなどの適切な処置が行われます。

    以下の表に、execute() バージョン 2 のパラメータを示します。

    表6-4 execute() バージョン 2 のパラメータ

    パラメータ

    説明

    ispec

    対象 EIS データまたは関数モジュールを表す InteractionSpec

    入力

    入力 Record


     

    XCCI を使用した CCI の実装

    XCCI(XML-CCI)は、データ表示に XML ベースのレコード形式を使用する Client Connector Interface の固有言語です。これらのフォーマットは、フレームワークおよびツールによってサポートされています。XML-CCI は、通常、XCCI という略称で呼ばれます。

    XCCI には、Services および DocumentRecords という 2 つの主要コンポーネントがあります。

    サービス

    サービスは、EIS で使用可能な機能を表し、次の 4 つのコンポーネントで構成されます。

    サービスが要求または応答データを必要としないことを示すには、DesignTimeRequestHandler の要求または応答に対し、空またはヌルの IDocumentDefinition を作成します。また、空またはヌルの IDocumentDescriptor インスタンスを持つサービスに対し、IServiceDescriptor の要求または応答に IDocumentDescriptor を設定します。静的 DocumentFactory.createNullDocumentDefinition() メソッドを使用して空またはヌルの IDocumentDefinition インスタンスを作成し、静的 DescriptorFactory.createNullDocumentDescriptor() メソッドを使用して空またはヌルの IDocumentDescriptor インスタンスを作成します。

    空またはヌルのドキュメント定義または記述子を生成された IServiceDescriptor、あるいは設計時にアダプタにより生成された IApplicationViewDescriptor で使用する場合、これらのサービスに対するヌル要求または応答ドキュメントを実行時に処理する必要があります。つまり、空またはヌルのドキュメント記述子を使用するアダプタは、実行時に要求または応答ドキュメントが非ヌルであるとは想定しないからです。

    アプリケーション ビューの実行時エンジンにより、要求または応答を必要とするサービスが非ヌルの要求または応答ドキュメントを受け取り、要求や応答を必要としないサービスがヌルの要求や応答ドキュメントを受け取ることができます。

    DocumentRecord

    com.bea.connector.DocumentRecord

    実行時に、XCCI レイヤは DocumentRecord オブジェクトをサービスに対する入力と想定し、DocumentRecord オブジェクトをサービスからの出力として返します。DocumentRecord は、javax.resource.cci.Record および com.bea.document.IDocument インタフェースを実装しています。Record インタフェースの説明については、Recordを参照してください。

    IDocument は、アダプタ内の CCI レイヤからの XML 入力および出力を促進するインタフェースですが、これは次に説明します。

    IDocument

    com.bea.document.IDocument

    IDocument は、W3C Document Object Model (DOM) を取り巻く高次元のラッパです。IDocument インタフェースの最も重要な付加価値は、XML ドキュメントの要素に Xpath インタフェースを提供する点です。すなわち、IDocument オブジェクトは、XPath 文字列を使用してクエリおよび更新が可能です。たとえば、リスト6-30 に示す XML ドキュメントは、「Bob」という名前の人物に関する詳細を記録するために XML をどのように使用するかを示しています。

    コード リスト 6-30 XML の例

    <Person name="Bob">
    <Home squareFeet="2000"/>
    <Family>
    <Child name="Jimmy">
    <Stats sex="male" hair="brown" eyes="blue"/>
    </Child>
    <Child name="Susie">
    <Stats sex="female" hair="blonde" eyes="brown"/>
    </Child>
    </Family>
    </Person>

    IDocument を使用し、リスト6-31 に示されている XPath コードで「Jimmy」の髪の色を検索できます。

    コード リスト 6-31 IDocument Data を検索するサンプル コード

    System.out.println("Jimmy's hair color: " +
    person.getStringFrom("//Person[@name=¥"Bob¥"]/Family/Child
    [@name=¥"Jimmy¥"]/Stats/@hair");

    一方、DOM を使用する場合、リスト6-32 に示すコードを使用してクエリを発行する必要があります。

    コード リスト 6-32 DOM Data を検索するサンプル コード

    String strJimmysHairColor = null;
    org.w3c.dom.Element root = doc.getDocumentElement();
    if (root.getTagName().equals("Person") &&
    root.getAttribute("name").equals("Bob") {
    org.w3c.dom.NodeList list = root.
    getElementsByTagName("Family");
    if (list.getLength() > 0) {
    org.w3c.dom.Element family = (org.w3c.dom.
    Element)list.item(0);
        org.w3c.dom.NodeList childList = family.getElementsByTagName("Child");
    for (int i=0; i < childList.getLength(); i++) {
    org.w3c.dom.Element child = childList.item(i);
    if (child.getAttribute("name").equals("Jimmy")) {
    org.w3c.dom.NodeList statsList =
    child.getElementsByTagName("Stats");
    if (statsList.getLength() > 0) {
    org.w3c.dom.Element stats = statsList.item(0);
    strJimmysHairColor = stats.getAttribute("hair");
            }
    }
    }
    }
    }

    IDocument によりコードが簡素化されます。

    ADK 付属の XCCI クラス

    アダプタに対し XCCI を実装するために、ADK は以下のクラスおよびインタフェースを提供します。

    ここでは、それらのクラスおよびインタフェースについて説明します。

    AbstractDocumentRecordInteraction

    com.bea.adapter.cci.AbstractDocumentRecordInteraction

    このクラスは、ADK の抽象基本 Interactioncom.bea.adapter.cci.AbstractInteraction を拡張します。このクラスの目的は、DocumentRecord の操作に便利なメソッドを提供し、実装時のエラー処理の量を減らすことです。このクラスは以下の宣言をします。

    protected abstract boolean execute(
    InteractionSpec ixSpec,
    DocumentRecord inputDoc,
    DocumentRecord outputDoc
    ) throws ResourceException

    および

    protected abstract DocumentRecord execute(
    InteractionSpec ixSpec,
    DocumentRecord inputDoc
    ) throws ResourceException

    これらのメソッドは、出力レコードが DocumentRecord オブジェクトであることが確認されてから、具象実装で呼び出されます。

    DocumentDefinitionRecord

    com.bea.adapter.cci.DocumentDefinitionRecord

    このクラスを使用すると、アダプタが DocumentRecordInteraction 実装から IDocumentDefinition を返すことができるようになります。このクラスは、サービスに対する要求と応答ドキュメント定義の少なくとも一方を作成する設計時要求を満たすのに便利です。

    DocumentInteractionSpecImpl

    com.bea.adapter.cci.DocumentInteractionSpecImpl

    このクラスを使用すると、特定のサービスに対する要求ドキュメント定義および応答ドキュメント定義を、実行時に実行メソッドに対して提供された InteractionSpec に保存できます。この機能は、アダプタの Interaction が実行時にサービスの XML スキーマにアクセスする必要がある場合に便利です。

    IProxiedMarker および IProxiedConnection インタフェース

    com.bea.connector.IProxiedConnection
    com.bea.connector.IProxiedMarker

    IProxiedMarker インタフェースは、com.bea.adapter.cci.ConnectionFactoryImpl クラスによって実装されます。このマーカは、関連付けられた接続がプロキシ オブジェクトであるかどうかを判別するために使用されます。IProxiedConnection インタフェースは、com.bea.adapter.cci.AbstractConnection クラスによって実装され、プロキシに関連付けられた実際の接続を返すために使用されます。IProxiedConnection インタフェースには、getAdapterConnection() という 1 つのメソッドがあります。getAdapterConnection メソッドは、ポインタを返す AbstractConnection クラスで定義されています。IProxedConnection インタフェースが必要になるのは、プロキシが実装するインタフェースのみ返すことができるからです。プロキシは、派生ツリーのクラス オブジェクトを区別できません。

    XCCI の設計パターン

    XCCI による方法を使用した場合に使用される一般的な設計パターンは、Interaction 実装でのサービスの定義をサポートすることです。このデザイン パターンを使用する場合、アダプタの javax.resource.cci.Interaction 実装により、クライアント プログラムは、WebLogic Integration サービスを定義するために、基本にある EIS からメタデータを検索できます。その結果、具体的には、この対話によって、サービスに対する要求と応答 XML スキーマおよび追加メタデータの生成を可能にする必要があります。Interaction により、クライアント プログラムは EIS の提供する関数のカタログを参照できます。この方法により、アダプタのシン クライアント アーキテクチャが促進されます。

    ADK では、この設計パターンの実装を支援する com.bea.adapter.cci.DesignTimeInteraction- SpecImpl クラスを提供しています。sample.cci.InteractionImpl クラスは、DesignTimeInteractionSpecImpl クラスを使用してこの設計パターンの実装方法を示します。

    非 XML J2EE 準拠アダプタの使用

    ADK では、WebLogic Integration で非 XML アダプタを使用するためのプラグイン メカニズムを提供しています。あらかじめ構築されたアダプタのすべてが、その javax.resource.cci.Record データ型に XML を使用するわけではありません。たとえば、次のような場合、XML は使用できません。

    このようなタイプのアダプタの実装を容易にするため、ADK では com.bea.connector.IRecordTranslator インタフェースを提供しています。実行時に、アプリケーション統合エンジンは、アダプタの IRecordTranslator 実装を使用して、アダプタのサービスを実行する前に要求および応答レコードを変換します。

    Application Integration エンジンでは、com.bea.connector.DocumentRecord タイプの javax.resource.cci.Record しかサポートしないので、この独自形式を要求および応答レコード用のドキュメント レコードに変換する必要があります。この場合、アダプタの CCI 対話レイヤを書き直す必要はありません。IRecordTranslator インタフェースを実装するアダプタの EAR ファイルにクラスを含めることにより、アプリケーション統合エンジンは要求および応答の各レコードに対して、トランスレータ クラスにあるトランスレーション メソッドを実行できます。

    InteractionSpec 実装クラスと IRecordTranslator 実相クラスの間には、1 対 1 の相関関係があります。複数の種類の InteractionSpec 実装を持つアダプタは、それぞれに対して IRecordTranslator 実装クラスを必要とします。プラグイン アーキテクチャは、アダプタの InteractionSpec の完全クラス名およびフレーズ RecordTranslator を使用してトランスレータ クラスを名前でロードします。たとえば、アダプタの InteractionSpec クラスの名前が com.bea.adapter.dbms.cci.InteractionSpecImpl である場合、エンジンは com.bea.adapter.dbms.cci.InteractionSpecImplRecordTranslator クラスをロードします(後者のクラスが有効の場合)。

    実装する必要のあるメソッドの詳細については、以下のディレクトリの com.bea.connector.IRecordTranslator の Javadoc を参照してください。

    WLI_HOME/docs/apidocs/com/bea/connector/IRecordTranslator.html

    ConnectionFactory

    javax.resource.cci.ConnectionFactory

    ConnectionFactory は、EIS インスタンスへの接続を取得するためのインタフェースを提供します。ConnectionFactory インタフェースの実装は、アダプタによって必ず提供されます。

    アプリケーションは、JNDI ネームスペースから ConnectionFactory インスタンスをルックアップし、これを使用して EIS 接続を取得します。

    JNDI 登録をサポートするために、java.io.Serializable および javax.resource.Referenceableinterfaces を実装する必要があります。このためには、ConnectionFactory の実装クラスが必要となります。

    ADK 実装

    ADK では、ConnectionFactoryImpl という javax.resource.cci.ConnectionFactory インタフェースの具象実装を提供します。このインタフェースには以下の機能があります。

    このクラスは通常、拡張せずにそのまま使用できます。

    ConnectionMetaData

    javax.resource.cci.ConnectionMetaData

    ConnectionMetaData は、Connection インスタンスによって接続された EIS インスタンスに関する情報を提供します。コンポーネントは、Connection.getMetaData メソッドを呼び出して ConnectionMetaData インスタンスを取得します。

    ADK 実装

    デフォルトで、ADK は、com.bea.adapter.spi.AbstractConnectionMetaData クラスを通じてこのクラスの実装を提供します。この抽象クラスを拡張して、その 4 つの抽象メソッドを使用するアダプタに実装する必要があります。

    ConnectionSpec

    javax.resource.cci.ConnectionSpec

    ConnectionSpec は、アプリケーション コンポーネントが接続要求固有のプロパティを ConnectionFactory.getConnection() メソッドに渡すときに使用されます。

    この ConnectionSpec インタフェースを JavaBean として実装し、ツールをサポートできるようにすることをお勧めします。ConnectionSpec 実装クラスのプロパティは、ゲッター メソッドおよびセッター メソッドのパターンによって定義します。

    CCI 仕様により、ConnectionSpec の標準プロパティのセットが定義されます。プロパティの定義は、派生インタフェースまたは空の ConnectionSpec インタフェースの実装クラスに対して行われます。さらに、アダプタでは基本となる EIS に固有の追加プロパティを定義できます。

    ADK 実装

    ConnectionSpec 実装は、JavaBean でなければならないので、ADK ではこのクラスに対しては実装を提供していません。

    InteractionSpec

    javax.resource.cci.InteractionSpec

    InteractionSpec は、EIS インスタンスとの対話を行うのに必要なプロパティを格納しています。特に、これは基本となる EIS の指定関数を対話で実行するときに使用されます。

    CCI 仕様により、InteractionSpec の標準プロパティのセットが定義されます。標準プロパティを基本の EIS に適用しない場合、標準プロパティのサポートのために InteractionSpec を実装する必要はありません。

    InteractionSpec 実装クラスは、サポートされる各プロパティに対してゲッター メソッドおよびセッター メソッドを提供する必要があります。このゲッター メソッドおよびセッター メソッド規約は、JavaBean 設計パターンに基づいている必要があります。

    InteractionSpec インタフェースは、ツールをサポートするためには、JavaBean として実装する必要があります。InteractionSpec インタフェースの実装クラスは、java.io.Serializable インタフェースを実装する必要があります。

    InteractionSpec には、Record にはないが、どの EIS 関数を呼び出すかを判断するときに役立つ情報が入っています。

    次の表では、標準プロパティについて説明します。

    表6-5 標準 InteractionSpec プロパティ

    プロパティ

    説明

    FunctionName

    EIS 関数の名前

    InteractionVerb

    EIS インスタンスとの対話モードで、SYNC_SENDSYNC_SEND_RECEIVE、または SYNC_RECEIVE がある。

    ExecutionTimeout

    Interaction が、EIS で指定関数を実行するのを待つ時間(ミリ秒)


     

    以下の標準プロパティは、対話インスタンスの ResultSet 要件に関する判断材料として使用されます。

    CCI 実装では、InteractionSpec インタフェースに記述されたプロパティ以外の追加プロパティを指定できます。

    注意: 追加プロパティのフォーマットおよびタイプは、EIS に固有のもので、CCI 仕様のスコープ外です。

    ADK 実装

    ADK には、InteractionSpecImpl という、javax.resource.cci.InteractionSpec の具象実装が入っています。このインタフェースは、表 6-5 で説明されている標準対話プロパティにゲッター メソッドおよびセッター メソッドを使用することによって拡張できる、基本実装を提供します。

    LocalTransaction

    javax.resource.cci.LocalTransaction

    LocalTransaction インタフェースは、アプリケーションレベルのローカル トランザクション境界設定に使用されます。これは、リソース マネージャのローカル トランザクションに対するトランザクション境界設定インタフェースです。システム規約レベルの LocalTransaction インタフェース(javax.resource.spi package で定義されている)は、コンテナのローカル トランザクション管理に使用されます。

    ローカル トランザクションは、リソース マネージャの内部で管理されます。ローカル トランザクションの調整には、外部トランザクション マネージャは関与しません。

    CCI 実装は、LocalTransaction インタフェースを実装できます(必須ではありません)。LocalTransaction インタフェースが CCI 実装でサポートされている場合、Connection.getLocalTransaction() メソッドは、LocalTransaction インスタンスを返すことになります。すると、コンポーネントは、返された LocalTransaction を使用して、基本の EIS インスタンスに対して、(Connection インスタンスに関連付けられた)リソース マネージャのローカル トランザクションの境界設定を行うことができます。

    com.bea.adapter.spi.AbstractLocalTransaction クラスでもこのインタフェースを実装します。

    ローカル トランザクションの詳細については、トランザクション境界設定を参照してください。

    Record

    javax.resource.cci.Record

    javax.resource.cci.Record インタフェースは、Interaction で定義される execute() メソッドからの入力またはメソッドへの出力表現に使用する基本インタフェースです。execute() メソッドの詳細については、execute() バージョン 1およびexecute() バージョン 2を参照してください。

    MappedRecord または IndexedRecord には、追加の Record を入れることができます。これは、MappedRecord および IndexedRecord を使用して任意の深さの階層構造を作成できることを示しています。MappedRecord または IndexedRecord で表される階層構造のリーフ要素としては、基本 Java タイプが使用されます。

    Record インタフェースは、以下の表に示されている表現の 1 つになるように拡張できます。

    表6-6 Record インタフェースの表現

    表現

    説明

    MappedRecord

    キーと値がペアになったレコードの集まり。このインタフェースは、java.util.Map に基づいている。

    IndexedRecord

    順序付き、インデックス付きのレコードの集まり。このインタフェースは、java.util.List に基づいている。

    EIS 抽象の JavaBean ベース表現

    例として ERP システムの発注書作成のために生成されるカスタム レコードがある。

    javax.resource.cci. ResultSet

    このインタフェースは、java.sql.ResultSetjavax.resource.cci.Record の両方を拡張する。ResultSet は、表データで示される。


     

    アダプタが CCI インタフェースを実装する場合、次に考慮する事項はサービスに対しどのレコード形式を使用するかです。各サービスに対し、要求レコード(サービスへの入力を提供する)および応答レコード(EIS 応答を提供する)の形式を指定する必要があります。

    ADK 実装

    ADK では、CCI レイヤで XML ベースのレコード形式を実装する支援に重点を置いています。この目的のため、ADK では DocumentRecord クラスを提供しています。さらに、BEA のスキーマ ツールキットを使用すれば、サービスに対する要求および応答ドキュメントを記述するスキーマを開発できます。

    ADK では、レコード名とレコード記述に対するゲッター メソッドおよびセッター メソッドを提供する javax.resource.cci.Record インタフェースの具象実装、RecordImpl を用意しています。

    アダプタ プロバイダが XML ベースのレコード形式を使用する(使用を強く推奨します)場合、ADK では com.bea.adapter.cci.Abstract DocumentRecordInteraction クラスも用意しています。このクラスによって、クライアントが DocumentRecord オブジェクトを渡すことができます。さらに、このクラスは DocumentRecord の内容へのアクセスに便利なメソッドを提供しています。

    ResourceAdapterMetaData

    javax.resource.cci.ResourceAdapterMetaData

    インタフェース javax.resource.cci.ResourceAdapterMetaData は、アダプタ実装の機能に関する情報を提供します。CCI クライアントは、ConnectionFactory.getMetaData を使用してアダプタのメタデータ情報を取得します。getMetaData() メソッドは、EIS インスタンスに対するアクティブな接続を必要としません。ResourceAdapterMetaData インタフェースは、アダプタ実装に固有な情報を追加して提供するように拡張できます。

    注意: このインタフェースは、アダプタを通じて接続されている EIS インスタンスに関する情報は提供しません。

    ADK 実装

    ADK では、アダプタ メタデータをカプセル化し、すべてのプロパティに対してゲッターおよびセッターを提供するインタフェース、ResourceAdapterMetaDataImpl を用意しています。

     


    手順 5 : アダプタのテスト

    アダプタのテストを行うため、ADK では、com.bea.adapter.test.TestHarness、ユニット テスト用のオープンソース ツール JUnit を強化するテスト支援機能を提供しています。com.bea.adapter.test.TestHarness は、以下の処理を行います。

    JUnit に関する詳細については、次のサイトを参照してください。

    http://www.junit.org

    テスト支援機能の使用方法

    ADK テスト支援機能を使用する手順は次のとおりです。

    1. junit.framework.TestCase を拡張するクラスを作成します。このクラスは、新しい junit.framework.TestSuite を返す、suite という名前の静的メソッドを提供する必要があります。

    2. テスト メソッドを実装します。各メソッドの名前は、test から始まります。

    3. プロジェクト ディレクトリで、test.properties を作成または変更します。(サンプル アダプタを複製した場合、アダプタにはすでに project ディレクトリに基本 test.properties があります。)このプロパティ ファイルには、テスト ケースに必要な任意のコンフィグレーション プロパティが入ります。

    4. Ant を使ってテストを呼び出します。Ant build.xml ファイルには、アダプタのプロパティ ファイルを持つ com.bea.adapter.test.TestHarness クラスを呼び出すテスト ターゲットが必要です。たとえば、サンプル アダプタでは、リスト6-33 に示されている Ant ターゲットを使用しています。

    コード リスト 6-33 サンプル アダプタによる Ant ターゲットの指定

    <target name='test' depends='packages'>
    <java classname='com.bea.adapter.test.TestHarness'>
    <arg value='-DCONFIG_FILE=test.properties'/<classpath
    refid='CLASSPATH'/>
    </java>

    このターゲットは、メイン クラス com.bea.adapter.test.TestHarness を使用して JVM を呼び出します。このクラスは、サンプル アダプタに対して確立されたクラスパスを使用し、以下のコマンドライン引数を渡します。

    -DCONFIG_FILE=test.properties

    ADK が提供するテスト ケースの拡張

    サンプル アダプタには、次の 2 つの TestCase 拡張が付属しています。

    sample.spi.NonManagedScenarioTestCase

    NonManagedScenarioTestCase を使用すると、非管理対象シナリオの SPI および CCI クラスをテストできます。具体的には、次の 4 つについてテストします。

    sample.event.OfflineEventGeneratorTestCase

    sample.event.OfflineEventGeneratorTestCase を使用すると、Weblogic Server 外のイベント ジェネレータの内部機能をテストできます。具体的には、イベント ジェネレータの以下の内容をテストします。

    sample.client.ApplicationViewClient

    sample.client.ApplicationViewClient は、追加のアダプタ テスト手段を提供します。このクラスは、サービスを呼び出し、アプリケーション ビューのイベントをリスンする方法を示す Java プログラムです。Ant build.xml ファイルは、クライアント ターゲットを提供し、ApplicationViewClient プログラムを使用できるようにします。ant client を実行する場合のデフォルト コンフィグレーションは、プログラムの使用方法を表示することです。クライアント プログラムに対する入力パラメータは、build.xml ファイルを編集し、変更します。

    sample.client.ApplicationViewClient.java の例を確認するには、WLI_HOME/adapters/ sample/src/sample/client を参照してください。

    注意: sample.client.ApplicationViewClient は、テスト支援機能に組み込まれていません。

     


    手順 6 : アダプタのデプロイ

    SPI および CCIインタフェースを実装し、アダプタをテストしたときに、手動または WebLogic Server Administration Console からアダプタを WebLogic Integration 環境にデプロイできます。詳細は、アダプタのデプロイを参照してください。

     

    ページの先頭 前 次