ODA の開始

ODA を始動すると、関連する ODA クラス (ODKAgentBase2 から拡張したクラス) が ODA ランタイムによってインスタンス化され、表 28 に示すクラス・メソッドが呼び出されます。


表 28. ODA の開始
初期化タスク ODKAgentBase2 メソッド 詳細情報の参照先
1. 構成プロパティーを取得します (開くデータ・ソースを記述する構成プロパティーも含めて)。 getAgentProperties() 構成プロパティーの取得
2. ODA メタデータを初期化し、ODA に関する情報 (特にそれがサポートするコンテンツ) をビジネス・オブジェクト・ウィザードが取得できるようにします。 getMetaData() ODA メタデータの初期化
3. データ・ソースへの接続を開くなどの必要な開始ステップを実行するために ODA を初期化します。 init() ODA 開始の初期化

以降のセクションでは、表 28 に示すステップをそれぞれ説明します。

構成プロパティーの取得

ODA の初期化を開始する際に、ビジネス・オブジェクト・ウィザードは ODA クラスの getAgentProperties() メソッドを呼び出します。

getAgentProperties() メソッドは、低レベルの ODA 基底クラス (ODKAgentBase) に含まれています。このクラスは、ODA 基底クラスの ODKAgentBase2 からユーザーの ODA クラスへと順に継承されます。

重要:
ODA クラスを実装する際は、getAgentProperties() メソッドを実装する 必要があります

getAgentProperties() メソッドは、次のタスクを実行します。

ODKUtility オブジェクトへのハンドルの取得

getAgentProperties() は、ビジネス・オブジェクト・ウィザードが最初に 呼び出す ODA メソッドであるため、ODKUtility オブジェクトをインスタンス化するのに適した場所となります。ODKUtility オブジェクトは、ODA コードに対して次のものへのアクセスを提供します。

ODKUtility オブジェクトへのアクセスを取得するには、getODKUtility() メソッドを使用します。

このメソッドは ODKUtility クラス内に定義されており、ODKUtility オブジェクトへのハンドルを戻します。

odkUtil = ODKUtility.getODKUtility()
 

ODKUtility オブジェクトへのハンドルを ODA クラス全体に対してグローバルであると宣言すると、このクラス内のすべての メソッドが、ユーティリティー・メソッドにアクセスできるようになります。

注:
ODKUtility オブジェクトをその getAgentProperties() メソッドでインスタンス化する代わりに、サンプル Roman Army ODA は m_utility という名前のメンバー変数を ODA クラス内に用意し、それを次のように初期化します。
final ODKUtility m_utility = ODKUtility.getODKUtility();
 

構成プロパティー配列の初期化

ODA 構成プロパティーの取得で説明したように、ビジネス・オブジェクト・ウィザードは getAgentProperties() が戻す構成プロパティー配列を使用して、「エージェントの構成」ダイアログ・ボックス (ステップ 2) を初期化します。

このダイアログ・ボックスでは ODA 構成プロパティーがすべて表示され、ユーザーは値を入力または変更することができます。構成プロパティー配列は、AgentProperty オブジェクトの配列です。AgentProperty クラスは、構成プロパティーが次の機能を持つためのサポートを提供します。

注:
詳しくは、エージェント・プロパティーの使用を参照してください。

getAgentProperties() の目的は、ODA 構成プロパティーを記述する AgentProperty オブジェクトの配列をビジネス・オブジェクト・ウィザードに送ることです。

getAgentProperties() で構成プロパティー配列を初期化するには、次のステップを実行します。

  1. 構成プロパティーの AgentProperty オブジェクトをインスタンス化し、該当する適切なプロパティー情報でそれを初期化します。

    getAgentProperties() メソッドの実装では、ビジネス・オブジェクト・ウィザードがユーザーに対して表示する各構成プロパティーごとに、エージェント・プロパティー・オブジェクトをインスタンス化する必要があります。エージェント・プロパティー・オブジェクトをインスタンス化するときは、そのメンバー変数 (表 49 を参照) の一部またはすべてを初期化します。

  2. 初期化した AgentProperty オブジェクトを構成プロパティー配列に保管します。
  3. 初期化した構成プロパティー配列を getAgentProperties() メソッドから戻します。

図 55 は、getAgentProperties() メソッド (サンプル Roman Army ODA の ArmyAgent2 クラスで定義) の実装を示しています。

図 55. 構成プロパティー配列の初期化

public AgentProperties[] getAgentProperties()
    throws com.crossworlds.ODK.ODKException
 {
    AgentProperty general = new AgentProperty("Army general",
       AgentProperty.TYPE_STRING, true, false, false,
       "A general is a soldier at least 45 years old", true,
       ODKConstant.SINGLE_CARD, m_generals.toArray(), null);
 
   AgentProperty recAdop = new AgentProperty("Allow adoption",
       AgentProperty.TYPE_BOOLEAN, true, false, false,
       "Select ¥"yes¥" if adopted children can be business objects", true,
       ODKConstant.SINGLE_CARD, new Object[]{"true", "false"}, null);
 
   AgentProperty minAge = new AgentProperty("Minimum age for drafting",
       AgentProperty.TYPE_INTEGER, true, false, false,
       "Drafted soldiers will be generable nodes", false,
       ODKConstant.SINGLE_CARD, null, new Object[] {"15"});
 
   AgentProperty maxAge = new AgentProperty("Maximum age for drafting",
       AgentProperty.TYPE_INTEGER, true, false, false,
       "Drafted soldiers will be generable nodes", false,
       ODKConstant.SINGLE_CARD, null, new Object[] {"55"});
 
   AgentProperty minAdo = new AgentProperty("Minimum age for adopting",
       AgentProperty.TYPE_INTEGER, true, false, true,
       "Drafted soldiers will be generable nodes", false,
       ODKConstant.SINGLE_CARD, null, new Object[] {"" + m_minAdoptionAge});
 
   AgentProperty[] props = new AgentProperty[]
       {general, minAge, maxAge, recAdop, minAdo});
 
return props;
 }
 

図 55 では、サンプル Roman Army ODA の ODA 構成プロパティーが 5 つ初期化されています。実際に定義するプロパティーは、ODA がアクセスするデータ・ソースによって異なります。

構成プロパティーの値を指定すると、ビジネス・オブジェクト・ウィザードはそれらのプロパティーを ODA ランタイム・メモリー内に保管します。 ODA は、ODKUtility クラス内の getAgentProperty() などのメソッドを通じて、これらのプロパティーにアクセスします。詳しくは、ODA 構成プロパティーの取得を参照してください。

ODA メタデータの初期化

ビジネス・オブジェクト・ウィザードは、ODA の getAgentProperties() メソッドを呼び出した後に getMetaData() メソッドを呼び出し、ODA メタデータを初期化します。

getMetaData() メソッドは ODA 基底クラス (ODKAgentBase2) に定義されており、ユーザーの ODA クラスによって継承されます。

このメソッドは、ODA のメタデータを含む AgentMetaData オブジェクトを、サポートされる生成済みコンテンツとともに戻します。

重要:
getMetaData() メソッドは、抽象メソッドです。 ODA クラスを実際する際は、getMetaData() メソッドを実装する必要があります

ODA のメタデータを取得する必要がある場合、AgentMetaData オブジェクトは、表 29 の情報を ODA ランタイムに提供します。

表 29. AgentMetaData オブジェクトのコンテンツ
メンバー変数 説明

 agentVersion
 

ODA のバージョン

searchableNodessearchPatternDesc

ODA の検索パターンを指定するための情報。この検索パターンを指定すると、表示されるデータ・ソースのツリー・ノードの数を削減できます。


 supportedContent
 

ODA でサポート可能な生成済みコンテンツの説明

ODA メタデータを初期化するには getMetaData() メソッドを実装する必要がありますが、そのためには次のステップを実行する必要があります。

図 56 は、getMetaData() メソッド (サンプル Roman Army ODA の ArmyAgent2 クラスで定義) の実装を示しています。

図 56. ODA メタデータの初期化

public AgentMetaData getMetaData(){
    odkUtil.trace(TRACELEVEL1, XRD_TRACE, "Entering getMetaData()...");
    AgentMetaData amdObj = new AgentMetaData(this, "Sample ODA v1.0.0");
 
   //Initialize search-pattern feature for tree nodes
    amd.searchableNodes = true;
    amd.searchPatternDesc = "Enter the first letter to search by. For example, " +
       "¥"A¥", ¥"k¥", "¥Z¥". Only names that start with this letter will be " +
       "returned."
 
   return amd;
 }
 

図 56getMetaData() メソッドは、(IGeneratesBoDefs インターフェースを実装する) ArmyAgent3 クラスによって継承されます。そのため、このコード・フラグメントの AgentMetaData() コンストラクターの呼び出しにより、ODA のコンテンツ・タイプおよびそれに関連するコンテンツ・プロトコルが初期化されます。 ArmyAgent3 内で getMetaData() が開始されると、ODA のコンテンツ・タイプが ContentType.BusinessObject に初期化され、そのコンテンツ・プロトコルが「要求時」に初期化されます。詳しくは、ODA で生成されるコンテンツの決定を参照してください。

この getMetaData() メソッドは、searchableNodes メンバー変数と searchPatternDesc メンバー変数を初期化することにより、検索パターン機能のサポートも提供します。searchPatternDesc 変数には「検索パターンの入力」ダイアログ・ボックスに表示されるテキストが含まれています (図 46 を参照)。

ODA 開始の初期化

ビジネス・オブジェクト・ウィザードは、ODA の getMetaData() メソッドを呼び出した後に init() メソッドを呼び出し、ODA 開始の初期化を始めます。

init() メソッドは、低レベルの ODA 基底クラス (ODKAgentBase) に含まれています。このクラスは、ODA 基底クラスの ODKAgentBase2 からユーザーの ODA クラスへと順に継承されます。

このメソッドは、ODA の初期化ステップを実行します。

重要:
init() メソッドは、抽象メソッドです。ODA クラスを実装する際は、init() メソッドを実装する 必要があります

init() メソッドの主要なタスクを次に示します。

ODA 構成プロパティーの取得

init() メソッドは、ODA の初期化を完了するために必要な、ユーザーが初期化した各構成プロパティーを取得できます。ODA は、構成プロパティーを getAgentProperties() メソッドで初期化します。ユーザーは必要に応じて、ビジネス・オブジェクト・ウィザードの「エージェントの構成」ダイアログ・ボックスでこれらのプロパティーを更新できます。構成プロパティーが更新されると、ビジネス・オブジェクト・ウィザードはそれを ODA ランタイム・メモリーに書き込みます。

ODK API は、ODA 構成プロパティーの値を ODA ランタイム・メモリーから取得するためのメソッドを提供します (表 30 を参照)。

表 30. ODA 構成プロパティーの値を取得するためのメソッド
ODK ライブラリー・メソッド 説明
getAgentProperty()
指定した ODA 構成プロパティーの値を取得します。
getAllAgentProperties()
すべて の ODA 構成プロパティーを Java Hashtable オブジェクトとして取得します。

表 30 のメソッドはすべて、ODKUtility クラス内で定義されています。したがって、構成プロパティーにアクセスする前に、このクラスの singleton オブジェクトへのハンドルを取得する必要があります。詳しくは、ODKUtility オブジェクトへのハンドルの取得を参照してください。

図 57 は、init() メソッド (サンプル Roman Army ODA の ArmyAgent3 クラスで定義) の実装を示しています。

図 57. ODA の初期化

public void init() throws com.crossworlds.ODK.ODKException
 {
    Hashtable h = m_utility.getAllAgentProperties();
 
// Obtain values of ODA configuration properties
    AgentProperty property = (AgentProperty) h.get("Army general");
    m_general = property.allValues[0].toString();
 
   property = (AgentProperty) h.get("Minimum age for drafting");
    m_minAge = Integer.parseInt(property.allValues[0].toString());
 
   property = (AgentProperty) h.get("Maximum age for drafting");
    m_maxAge = Integer.parseInt(property.allValues[0].toString());
 
   property = (AgentProperty) h.get("Allow adoption");
    m_allowAdoption = new Boolean(
       property.allValues[0].toString()).booleanValue();
 
// Clear the generated-content structure
    m_generatedBOs.clear();
 }
 

図 57init() メソッドは、次のものを使用して構成プロパティーの値を取得しています。

この init() メソッドに含まれている構成プロパティーはすべて、単一カーディナリティー・プロパティーです。したがって、allValues メンバー変数に含まれる値は 1 つのみです。複数カーディナリティー・プロパティーの使用例については、ビジネス・プロパティー配列の作成を参照してください。この init() メソッドは、ODA の生成済みコンテンツ構造体 (m_generatedBOs と呼ばれるベクトル) も初期化します。

このベクトルは、生成済みのビジネス・オブジェクト定義を保持します。

接続の確立

通常 init() 初期化メソッドの主要なタスクは、データ・ソースへの接続を確立することです。 ODA はデータ・ソースを検索し、ビジネス・オブジェクト定義への変換が可能なオブジェクトを「検出」します。接続を確立するために、init() メソッドは次のタスクを実行することができます。

init() メソッドが正常に実行されるのは、ODA が正常に接続を開き、さらに ODA がデータ・ソース内のデータを処理する準備を整えた場合です。ODA が接続を開くことができない 場合、init() メソッドは、失敗の原因を示すために ODKException 例外をスローする必要があります。

ODA バージョンの確認

getVersion() メソッドは、ODA ランタイムのバージョンを戻します。

このメソッドは、低レベルの ODA 基底クラス (ODKAgentBase) に含まれています。このクラスは、ODA 基底クラスの ODKAgentBase2 からユーザーの ODA クラスへと順に継承されます。

これは、次の 2 つの状況で呼び出されます。

注:
getVersion() メソッドは、ODA のバージョンではなく、ODA ランタイムのバージョンを戻します (ODA のバージョンは ODA のメタデータの一部として保管されています)。

Copyright IBM Corp. 2004