コネクターは、COM コンポーネントで使用するビジネス・オブジェクトを処理します。このセクションでは、COM コネクターで処理されるビジネス・オブジェクトの構造に関連した主要概念について説明します。
ODA は、タイプ・ライブラリー・ファイル (.tlb、.dll、.olb、.ole、または .exe) に定義されている COM コンポーネントに含まれる属性ごとに、対応するビジネス・オブジェクト属性を生成します。タイプ・ライブラリー・ファイルにはインターフェースが含まれており、各インターフェースにはメソッドとプロパティーが存在します。タイプ・ライブラリー・ファイルは、ODA でプロキシー・オブジェクト定義がコンパイルされる際に使用されます。
COM クラス内の属性が単純属性ではなくコンポーネントである場合、BO 属性は、COM オブジェクト内の該当のコンポーネントと定義が一致する子オブジェクトにマップされます。
ビジネス・オブジェクトには、フラットなものと階層構造のものがあります。フラットなビジネス・オブジェクトには、単純属性、つまり、ストリングなどの単一値を表し、子ビジネス・オブジェクトを参照しない属性のみが 含まれます。階層ビジネス・オブジェクトは単純属性、および属性値を 含む子ビジネス・オブジェクトまたは子ビジネス・オブジェクトの配列を含みます。
カーディナリティー 1 コンテナー・オブジェクトまたは単一カーディナリティー関係は、親ビジネス・オブジェクトの属性に単一の子ビジネス・オブジェクトが含まれる場合に発生します。この場合、子ビジネス・オブジェクトは、レコードを 1 つのみ含むコレクションになります。属性タイプは、子ビジネス・オブジェクトになります。
カーディナリティー n コンテナー・オブジェクトまたは複数カーディナリティー関係は、親ビジネス・オブジェクトの属性が子ビジネス・オブジェクトの配列を含む場合に発生します。この場合、子ビジネス・オブジェクトは、複数のレコードを含むコレクションになります。属性タイプは、子ビジネス・オブジェクトの配列の属性タイプと同じになります。
ビジネス・オブジェクト内には、COM タイプ・ライブラリー・ファイルに定義されているメソッドごとに属性が作成されます。属性タイプは、メソッド・パラメーターを表す属性を含む子 BO です。子 BO の属性は、COM メソッドのパラメーターと同じ順序で表示されます。また、子 BO には Return_Value 属性もあります。この属性は、引数のリストの末尾に現れ、COM メソッド呼び出しの結果を示します。これらの子 BO の属性は、メソッドのパラメーターや戻り値のタイプに応じて、単純タイプまたはオブジェクト・タイプ (複合タイプ) になります。戻り値が現れる場所は、常に引数のリストの末尾になります。
COM ID 名で使用される非英数字文字は下線 (_) のみです。非英数字文字は、対応するビジネス・オブジェクトで下線に解決されます。ただし、WebSphere Business Integration Server Express 形式では COM ID 名の先頭に下線を使用できないため、先頭に下線がある場合は、ODA により下線が文字列 BBB_ に解決されます。
アプリケーション固有の情報を使用して、ビジネス・オブジェクトの処理方法に関するアプリケーション固有の指示をコネクターに提供します。ビジネス・オブジェクト定義を拡張または変更する場合には、定義内のアプリケーション固有の情報と、コネクターが予期する構文とを必ず一致 させる必要があります。
アプリケーション固有の情報は、名前と値のペアとして表され、個別のビジネス・オブジェクト属性や動詞に対して指定できるだけでなく、ビジネス・オブジェクト全体に対しても指定することができます。
オブジェクト・レベルの ASI では、ビジネス・オブジェクトの性質 およびビジネス・オブジェクトに含まれるオブジェクトについての基本情報を提供します。表 4 に、プロキシー・オブジェクトを表すビジネス・オブジェクトのビジネス・オブジェクト・レベルの ASI を示します。
オブジェクト・レベル ASI | 説明 |
---|---|
proxy_class= <nameOfProxyClass> | ビジネス・オブジェクトが表すプロキシー・クラスの名前。この ASI を使用して、プロキシー・クラスをビジネス・オブジェクトにマップします。この値は、有効な Java パッケージ表記 (java.lang.Vector など) を使用して指定する必要があります。 |
auto_load_or_write=true | ビジネス・オブジェクトが、引数と戻り値の両方に使用されるレコード構造を表すことを示しています。この ASI は、アダプターに対し、まずプロキシー・オブジェクトへの書き込み (WriteToProxy) を行ってから子オブジェクト内の引数に対応する引数を使用して関数呼び出しを行い、その後関数呼び出しから値が戻されたらプロキシー・オブジェクトからの読み取り (LoadFromProxy) を実行するように指示します。 |
どのビジネス・オブジェクトも、動詞を含んでいます。この動詞を使用して、受信アプリケーションがビジネス・オブジェクト内のデータを処理する方法を記述します。
動詞 ASI には、一連の属性名が含まれています。各属性名は、汎用ビジネス・オブジェクト・ハンドラーによる呼び出しの対象となるメソッドが含まれます。呼び出し対象のメソッドは、ビジネス・オブジェクトかその親のいずれかに属するものです。通常は前者であり、この場合は、呼び出し対象のメソッドを、オブジェクトの動詞 ASI 内にそのまま指定します。例えば、コンポーネントにメソッド IncrementCounter が含まれている場合、このメソッドを呼び出すには、対応するビジネス・オブジェクトの動詞 ASI にこのメソッドをそのまま指定します。
呼び出し対象のメソッドが ビジネス・オブジェクト階層の親に属する場合は、PARENT タグの付いたメソッド名をプレフィックス交換することにより、親を参照することができます。
例えば、図 4 は、ContactDetails が Contact の子オブジェクトであり、Contact は PSRCustomerAccount の子であるというビジネス・オブジェクト階層を示しています。
PSRCustomerAccount に属するメソッドを ContactDetails ビジネス・オブジェクトで呼び出す場合、ContactDetails の動詞 ASI は、次のようなビジネス・オブジェクト階層を示します。
PARENT.PARENT.<methodName>
メソッドが、Contact ビジネス・オブジェクトに属する場合は、ContactDetails の動詞 ASI を次のように設定します。
PARENT.<methodName>
呼び出しが可能なのは、階層内の親オブジェクトに属するメソッドのみです。また、親ビジネス・オブジェクトから子のメソッドを呼び出すことはできません。
コネクター開発者が、動詞に割り当てられる COM 操作を決定します。サポートされる動詞は、以下のとおりです。
以下のキーワードは、属性名の動詞 ASI シーケンスに使用します。
キーワード | 説明 |
---|---|
LoadFromProxy= <attributeName> | 指定されたプロキシー・オブジェクト属性の getter メソッドを呼び出して、プロキシー・オブジェクトからビジネス・オブジェクトに属性をロードします。 |
WriteToProxy = <attributeName> | 指定されたプロキシー・オブジェクト属性の setter メソッドを呼び出して、ビジネス・オブジェクトの属性値を、そのビジネス・オブジェクトに対応するプロキシー・オブジェクトに書き込みます。 |
LoadFromProxy (属性名なし) | プロキシー・オブジェクトから現在の BO にロードされる非メソッド属性の getter メソッドをすべて呼び出します。 |
WriteToProxy (属性名なし) | 現在の BO からプロキシー・オブジェクトに書き込まれる非メソッド属性の setter メソッドをすべて呼び出します。 |
CBOH=<custom BO handler className> | カスタム BO ハンドラーのクラス名。この場合、汎用 BO ハンドラーは使用しません。カスタム BO ハンドラーについて 詳しくは、カスタム・ビジネス・オブジェクト・ハンドラーを参照してください。 |
どのオブジェクトでも、サポートされる 4 つの動詞 (Create、Retrieve、Delete、および Update) を指定することができ、各動詞のアクションとして n + 2 個のメソッドを割り当てることができます (n は、対応する COM コンポーネントに含まれるメソッドの数です)。2 個の追加のメソッドは、表 5 に定義されている、コネクターでサポートされるメソッド (LoadFromProxy および WriteToProxy) です。
ビジネス・オブジェクトの属性レベルの ASI は、子ビジネス・オブジェクトを含む複合属性である場合も、単純属性である場合もあります。複合属性である場合、含まれている子がオブジェクトのプロパティーとメソッドのどちらであるかによって ASI は異なります。元の COM タイプ・ライブラリーに含まれる各属性タイプが、ODA によって生成されたビジネス・オブジェクトにどのようにマップされるのかについては、表 9 に示します。
表 6 に、単純属性の ASI を示します。単純属性は、必ず、子以外の値 (ブール値、ストリング値、整数値など) になります。
属性 | 説明 |
---|---|
Name | ビジネス・オブジェクトのフィールド名です。 |
Type | ビジネス・オブジェクトのフィールド・タイプです。Java プロキシーとビジネス・オブジェクト属性の型への COM コンポーネントの型のマッピングについては、表 9 を参照してください。 |
MaxLength | 使用しません。 |
IsKey | 各ビジネス・オブジェクトは、少なくとも 1 つはキー属性を持つ必要があります。キー属性は、属性のキー・プロパティーの設定を true にして指定します。この属性を使用するのは、コネクターではなく Business Object Designer Express であることに注意してください。 |
IsForeignKey | 呼び出しごとのオブジェクト・プールにオブジェクトを保管する必要があるかどうかを、コネクターが確認しなければならないことを示します (ステップ 7 を参照してください)。 |
IsRequired | 使用しません。 |
AppSpecInfo |
元の Java タイプを保持します。この属性は次のように フォーマット設定します。 property=<propertyName>, type=<typeName> property は、COM オブジェクトのプロパティーの 名前です。この名前と値のペアは、オリジナルの COM オブジェ クトのプロパティー名の取得に使用されます。 表 9 を参照してください。 type は、単純属性の Java タイプです。 Java プロキシーとビジネス・オブジェクト属性の型への COM コンポーネントの型のマッピングの詳細については、 表 9 を参照してください。 この属性は、ビジネス・オブジェクトである場合には proxy に 設定する必要があります。単純属性の場合のように、属性が ビジネス・オブジェクトにマップされておらず、属性の値を基に 参照を行うことがない場合には、type=PlaceholderOnly と 指定することができます。これにより、BO ハンドラーに対して、 その属性を基に参照を行わないように、またその属性に値を 取り込まないように、指示したことになります。このとき、 その属性が外部キーに設定されている (IsForeignKey が チェックされている) 場合や、use_attribute_value が 互換性のある値に設定されている場合には、その属性を引き続き マルチ呼び出しフローの一部として使用できます。 |
DefaultValue | 使用しません。 |
表 7 に、メソッド以外を表す子オブジェクトが含まれる複合属性の ASI を示します。
属性 | 説明 |
---|---|
type | 含まれているオブジェクトの型です。型がビジネス・オブジェクトである場合には、proxy に設定します。 |
ContainedObjectVersion | 使用しません。 |
Relationship | 子がコンテナー属性であることを示します。Containment に設定します。 |
IsKey | 使用しません。 |
IsForeignKey | 使用しません。 |
Is Required | 使用しません。 |
AppSpecificInfo |
元の COM アプリケーション・フィールド名を保持します。この 属性は次のようにフォーマット設定します。 property=propertyName, use_attribute_value=<(optional)BOName.AttributeName>, type=<typeName> property は、COM オブジェクトのプロパティーの 名前です。この名前と値のペアは、元の COM オブジェクトの プロパティー名の取得に使用されます。属性に含まれているのがメソッドの引数である場合には、property に 値を設定しないでください。これは、そのような引数は、 名前を持たない、いずれかの標準的な型の引数に過ぎないからです。 use_attribute_value は、BOName.AttributeName. の フォーマットで表したビジネス・オブジェクト名です。 この ASI を設定すると、アダプターは、呼び出しごとのオブジェクト・ プールから属性にアクセスします。この値は、ビジネス・オブジェクトの 作成時に ODA で設定するのではなく、Business Object Designer Express を使用して設定します。 type は、プロパティーの Java タイプです。 属性が単純属性ではない場合、つまりビジネス・オブジェクトを 含んでいる場合には、proxy に設定する必要があります (対応する COM の型は IDispatch* です)。COM、Java、 およびビジネス・オブジェクトの間での型のマッピングについては、 表 9 を参照してください。 |
Cardinality | 1 を設定します。 |
表 8 に、メソッドを表す子オブジェクトが含まれる複合属性の ASI を示します。
属性 | 説明 |
---|---|
Name | ビジネス・オブジェクトのフィールド名です。 |
type | ビジネス・オブジェクトです。 |
Relationship | 子オブジェクトであることを示す Containment に設定します。 |
IsKey | 属性名が UniqueName である場合は true に設定し、それ以外の場合は false に設定します。 |
IsForeignKey | false を設定します。 |
Is Required | false を設定します。 |
AppSpecificInfo |
外部 COM サーバーに対して行われるメソッド呼び出しの名前を表す、元の COM
アプリケーションのフィールド名を指定します。この属性のフォーマットは 次のとおりです。 method_name=<nameOfMethod> |
Cardinality | 1 を設定します。 |
メソッドには引数と戻り値があることに注意してください。引数と戻り値は、子オブジェクトを含む複合値の場合もあれば、単純値の場合もあります。