データ・ハンドラーのインスタンス化

データ・ハンドラーは、コネクターまたは Server Access Interface (Business Integration Express 統合ブローカーと通信するアクセス・クライアントの場合) が使用できるクラス・ライブラリーとしてインプリメントされます。DataHandler 基本クラスは抽象クラスです。したがって、データ・ハンドラーをインスタンス化するには、DataHandler サブクラスの 1 つをインスタンス化する必要があります。各データ・ハンドラーは、IBM 提供のデータ・ハンドラーでもカスタム・データ・ハンドラーでも、DataHandler 基本クラスのサブクラスです。 データ・ハンドラーをインスタンス化するメソッドは createHandler() です。

createHandler() メソッドは、データ・ハンドラー・メタオブジェクト の情報を使用して、インスタンス化の対象となるデータ・ハンドラーおよびこのデータ・ハンドラーを初期化する方法を調べます。

データ・ハンドラー・メタオブジェクトは、階層構造のビジネス・オブジェクトで、任意の数の子オブジェクトを組み込むことができます。 データ・ハンドラー構成情報は、次の階層に整列されています。

注:
データ・ハンドラーは、構成情報を保持するのにメタオブジェクトを使用する必要はありません。ただし、IBM から提供されたすべての データ・ハンドラーは、その構成情報に関してメタオブジェクトを使用することを想定して設計されています。

createHandler() メソッドは、次の手順でデータ・ハンドラーをインスタンス化します。

データ・ハンドラー・クラスの識別

作成されるデータ・ハンドラーについて、DataHandler 基本クラス・インプリメンテーションをインスタンス化する必要があります。データ・ハンドラーのインスタンス化メソッドは、createHandler() メソッドに引き数として渡される次の 2 つの値のうちの 1 つからこのデータ・ハンドラー・クラスの名前を派生させます。

クラス名の使用

データ・ハンドラーの呼び出し元からクラス名を引き数として渡されると、createHandler() はそのクラス名のデータ・ハンドラーをインスタンス化します。 また、指定されたクラスを次の場所から探します。

  1. CwDataHandler.jar ファイル
  2. CwXMLDataHandler.jar ファイル
  3. CustDataHandler.jar ファイル
  4. CLASSPATH 中の他の部分

呼び出し元でデータ・ハンドラーのクラス名のみ を指定した場合、createHandler() はデータ・ハンドラー・メタオブジェクトの検索も、これらのオブジェクトからの構成プロパティーの設定も行いません。したがって、この方法でインスタンス化されたデータ・ハンドラーはメタオブジェクトを必要としません。カスタム・データ・ハンドラーがメタオブジェクトを使用するかどうかの詳細については、データ・ハンドラー・メタオブジェクトの使用を参照してください。

MIME タイプの使用

データ・ハンドラーの呼び出し元がクラス名を引き数として渡さない 場合、createHandler() メソッドは MIME タイプの値を必要とします。呼び出し側のコンポーネント (コネクターまたはアクセス・クライアント) から MIME タイプを渡されると、createHandler() は、この MIME タイプに関連付けられている子データ・ハンドラー・メタオブジェクトを使用して、データ・ハンドラー・インスタンスのクラス名やそのほかの構成情報を派生させます。

注:
メタオブジェクトの詳細については、データ・ハンドラーの構成を参照してください。カスタム・データ・ハンドラーがメタオブジェクトを使用するかどうかの詳細については、データ・ハンドラー・メタオブジェクトの使用を参照してください。

指定された MIME タイプからクラス名を派生させるために、createHandler() メソッドは次の手順を実行します。

  1. MIME タイプを MIME タイプ・ストリングに変換します。

    createHandler() メソッドは、トップレベルのデータ・ハンドラー・メタオブジェクトを検索すると、ハイフン (-)、ピリオド (.)、スラッシュ (/) などすべての非英数字を下線 (_) に変換します。例えば、MIME タイプが text/html の場合、createHandler() はこの MIME タイプを解析して、text_html というストリングにします。

    createHandler() メソッドは、ピリオドが含まれる MIME タイプ名も検索できるように、この非英数字の変換を段階的に実行します。ただし、Business Object Designer Express では、属性名にピリオド文字を使用できません。したがって、IBM では MIME タイプ名の中にピリオド文字を使用しない ことをお勧めします。

    固有な MIME タイプ/サブタイプの組み合わせを作成して、特定の MIME タイプの変形を指定することができます。 MIME タイプ名では、MIME タイプとサブタイプを非英数字 (ハイフン (-) や下線 (_) など) で分離します。ただし、createHandler() は任意の非英数字を下線に置き換えるため、MIME タイプとサブタイプの分離には、下線のみを使用することをお勧めします。MIME タイプが text/xml-sgml の場合、このメソッドは、この MIME タイプを text_xml_sgml というストリングに変換します。

  2. DataHandler 基本クラスの内の静的プロパティーからトップレベルのデータ・ハンドラー・メタオブジェクトの名前を取得します。 このトップレベルのメタオブジェクトで、createHandler() は変換するデータの MIME タイプ・ストリングに一致する属性を検索します。
  3. createHandler() がトップレベルのメタオブジェクト内で一致する MIME タイプ・ストリングを見つけると、createHandler() は次の手順を実行します。
    1. 呼び出し元でビジネス・オブジェクト・プレフィックスの値 (オプションの 3 番目の引き数) を createHandler() に指定すると、この値が MIME サブタイプの値として解釈されて MIME タイプに付加され、次の形式の MIME タイプ・ストリングが作成されます。
      MIMETypeString _BOPrefix
       

      この名前の属性が存在しない場合、createHandler() は、MIME タイプのみ が一致する属性を検索します。例えば、呼び出し元から MIME タイプ edi が渡され、ビジネス・オブジェクト・プレフィックスが x12 の場合、createHandler() はトップレベルのメタオブジェクトから「edi_x12」という名前の属性を探します。この名前の属性が存在しない場合、createHandler() は「edi」という名前の属性を探します。

    2. 使用するデータ・ハンドラー・インスタンスの構成プロパティー (例えば、データ・ハンドラーの区切り文字に使用する文字を識別する可能性のある構成プロパティー) が格納された関連する子データ・ハンドラー・メタオブジェクトを取得します。
    3. 子メタオブジェクトから ClassName 属性の値を検索します。
      • ClassName 属性に値が格納されている場合、createHandler() はこのクラス名のデータ・ハンドラーをインスタンス化します。データ・ハンドラーのインプリメンテーション・プロセスの一部として、関連する子データ・ハンドラー・メタオブジェクトが作成されます。この時点で、データ・ハンドラーをインプリメントする開発者が、子メタオブジェクトの ClassName 属性にクラス名を追加できます。この ClassName 値は、4a で説明するように、クラス名がデフォルトのクラス名と異なる場合に必要です。
      • この ClassName 属性に、値が格納されていない 場合、createHandler() は、4a で説明するように、インスタンス化するデータ・ハンドラーのクラス名を作成します。
  4. createHandler() メソッドがトップレベルのメタオブジェクト内で一致する MIME タイプ・ストリングを検出できなかった 場合は、次のようにして、インスタンス化するデータ・ハンドラーのクラス名を作成します。
    1. 基本データ・ハンドラー・パッケージに MIME タイプ・ストリングを付加します。
      com.crossworlds.DataHandlers
       

      例えば、MIME タイプ・ストリングが text_html の場合、作成されたストリングは次のようになります。

      com.crossworlds.DataHandlers.text.html
       
    2. メソッドが CLASSPATH 上で生成されたクラス名を見つけることができた場合、このクラスをインスタンス化します。次の場所から、このクラスを探します。
      • CwDataHandler.jar ファイル
      • CustDataHandler.jar ファイル

クラス名と MIME タイプの使用

呼び出し側でクラス名と MIME タイプの両方 を指定すると、createHandler() は次のアクションを行います。

つまり、呼び出し側でクラス名を指定すると、このクラス名により子メタオブジェクトの ClassName 属性で指定されたクラス名がオーバーライド されます。

データ・ハンドラー構成プロパティーの設定

IBM から提供されているすべてのデータ・ハンドラー (表 3 および表 4) は、その構成情報に関してメタオブジェクトを使用することを想定して設計されています。

データ・ハンドラー・メタオブジェクトは、次のような性質を持つ階層ビジネス・オブジェクトです。

IBM 提供のデータ・ハンドラーでは、その子データ・ハンドラー・メタオブジェクトに関連付けられている構成情報を使用して、データ・ハンドラーのプロパティーを初期化します。したがって、IBM は提供する各データ・ハンドラーに関する子メタオブジェクトを提供しています (表 8 を参照)。

注:
データ・ハンドラー・メタオブジェクトの詳細については、データ・ハンドラーの構成を参照してください。

createHandler() メソッドはデータ・ハンドラーをインスタンス化した後、特殊な protected メソッド (setupOptions()) を呼び出して、該当する子データ・ハンドラー・メタオブジェクト内の値を使用してデータ・ハンドラーの構成を初期化します。

注:
カスタム・データ・ハンドラーは、構成を初期化するのにメタオブジェクトを使用する必要はありません。データ・ハンドラーに関連する子メタオブジェクトがある場合、createHandler() メソッドはデータ・ハンドラーに関して setupOptions() を呼び出しません。詳細については、その他のビジネス・オブジェクトのセットアップを参照してください。

メタオブジェクトの詳細については、データ・ハンドラーの構成を参照してください。

ビジネス・オブジェクト・プレフィックスの設定

createHandler() メソッドは、3 番目の引き数としてオプションのビジネス・オブジェクト・プレフィックスを受け取ることができます。この引き数を使用して MIME タイプ名を判別します (MIME タイプの使用を参照)。createHandler() はデータ・ハンドラーをインスタンス化してその構成プロパティーを設定した後、最後のタスクとしてデータ・ハンドラーの BOPrefix 構成オプション (存在する場合) にこの 3 番目の引き数の値を設定します。

注:
BOPrefix 構成オプションを使用するすべてのデータ・ハンドラー (XML データ・ハンドラーなど) は、このプレフィックスをビジネス・オブジェクト名の先頭に付加します。

データ・ハンドラーは、作成するどのビジネス・オブジェクト名にもこのプレフィックスを先頭に付加できます (ストリングからビジネス・オブジェクトへの変換時)。プレフィックスとビジネス・オブジェクト名の間に下線 (_) を設定します。例えば、コネクターが次の createHandler() 呼び出しで、XML データ・ハンドラーを起動する場合は、次のとおりです。

createHandler(null, "text/xml", "UserApp");
 

createHandler() メソッドは XML データ・ハンドラーをインスタンス化して、その BOPrefix 属性に「UserApp」を設定します。XML データ・ハンドラーが Customer ビジネス・オブジェクトを作成すると、このビジネス・オブジェクトは次のようになります。

作成されるビジネス・オブジェクト名は、「UserApp_Customer」です。

Copyright IBM Corp. 2004