• 検索結果がありません。

IDocument

ドキュメント内 devadapt.book (ページ 115-120)

イ ン タ フ ェースですが、 こ れは次に説明し ます。

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

ドキュメント内 devadapt.book (ページ 115-120)