イ ン タ フ ェースですが、 こ れは次に説明し ます。
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
サービ ス アダプ タ の開発コー ド リ ス ト
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に よ り コー ド が簡素化 さ れます。
手順
4 : CCI
の実装アダプ タの開発
6-47
ADK 付属の XCCI ク ラス
アダプ タに対し XCCI を実装する ために、 ADK は以下の ク ラ スおよびイ ン タ フ ェース を提供し ます。
AbstractDocumentRecordInteraction
DocumentDefinitionRecord
DocumentInteractionSpecImpl
IProxiedMarker
IProxiedConnection
こ こ では、 それ らの ク ラ スおよびイ ン タ フ ェースについて説明し ます。
AbstractDocumentRecordInteraction
com.bea.adapter.cci.AbstractDocumentRecordInteraction こ の ク ラ スは、 ADK の抽象基本 Interaction、
com.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
6
サービ ス アダプ タ の開発こ の ク ラ ス を使用する と 、 アダプタ が 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 ス キーマおよび追加手順
4 : CCI
の実装アダプ タの開発
6-49
メ タデータ の生成を可能にする必要があ り ます。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 は使用でき ません。
独自のレ コー ド 形式で J2EE 準拠アダプ タ を開発し た場合
アダプ タの CCI レ イ ヤに独自のレ コー ド 形式を使用する外部のパーテ ィ の
J2EE
準拠アダプ タ を購入し た場合こ の よ う な タ イ プのアダプ タの実装を容易にする ため、 ADK では
com.bea.connector.IRecordTranslator イ ン タ フ ェース を提供し ています。
実行時に、 アプ リ ケーシ ョ ン統合エンジンは、 アダプ タの IRecordTranslator 実装を使用し て、 アダプタ のサービ ス を実行する 前に要求および応答レ コー ド を 変換し ます。
Application Integration エンジンでは、
com.bea.connector.DocumentRecordタ
イ プの javax.resource.cci.Recordし かサポー ト し ないので、 こ の独自形式 を要求および応答レ コー ド 用の ド キ ュ メ ン ト レ コー ド に変換する必要があ り ま す。 こ の場合、 アダプ タの CCI 対話レ イ ヤを書き直す必要はあ り ません。IRecordTranslatorイ ン タ フ ェース を実装する アダプ タ の EAR フ ァ イ ルに ク ラ ス を含め る こ と に よ り 、 アプ リ ケーシ ョ ン統合エンジ ンは要求および応答の各レ コー ド に対し て、 ト ラ ン ス レータ ク ラ スにあ る ト ラ ン ス レーシ ョ ン メ ソ ッ ド を 実行で き ます。
6
サービ ス アダプ タ の開発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