データ・ハンドラーは、コネクターまたは Server Access Interface (Business Integration Express 統合ブローカーと通信するアクセス・クライアントの場合) が使用できるクラス・ライブラリーとしてインプリメントされます。DataHandler 基本クラスは抽象クラスです。したがって、データ・ハンドラーをインスタンス化するには、DataHandler サブクラスの 1 つをインスタンス化する必要があります。各データ・ハンドラーは、IBM 提供のデータ・ハンドラーでもカスタム・データ・ハンドラーでも、DataHandler 基本クラスのサブクラスです。 データ・ハンドラーをインスタンス化するメソッドは createHandler() です。
createHandler() メソッドは、データ・ハンドラー・メタオブジェクト の情報を使用して、インスタンス化の対象となるデータ・ハンドラーおよびこのデータ・ハンドラーを初期化する方法を調べます。
データ・ハンドラー・メタオブジェクトは、階層構造のビジネス・オブジェクトで、任意の数の子オブジェクトを組み込むことができます。 データ・ハンドラー構成情報は、次の階層に整列されています。
トップレベルの各属性は、データ・ハンドラー・インスタンスの子メタオブジェクトを参照するカーディナリティー 1 属性です。各属性は 1 種類の MIME タイプを表しており、その属性タイプは、この MIME タイプを操作できるデータ・ハンドラーの子メタオブジェクトを示しています。
各属性は構成プロパティーを表しており、そのデフォルト値やタイプなどの情報を提供しています。
createHandler() メソッドは、次の手順でデータ・ハンドラーをインスタンス化します。
作成されるデータ・ハンドラーについて、DataHandler 基本クラス・インプリメンテーションをインスタンス化する必要があります。データ・ハンドラーのインスタンス化メソッドは、createHandler() メソッドに引き数として渡される次の 2 つの値のうちの 1 つからこのデータ・ハンドラー・クラスの名前を派生させます。
データ・ハンドラーの呼び出し元からクラス名を引き数として渡されると、createHandler() はそのクラス名のデータ・ハンドラーをインスタンス化します。 また、指定されたクラスを次の場所から探します。
呼び出し元でデータ・ハンドラーのクラス名のみ を指定した場合、createHandler() はデータ・ハンドラー・メタオブジェクトの検索も、これらのオブジェクトからの構成プロパティーの設定も行いません。したがって、この方法でインスタンス化されたデータ・ハンドラーはメタオブジェクトを必要としません。カスタム・データ・ハンドラーがメタオブジェクトを使用するかどうかの詳細については、データ・ハンドラー・メタオブジェクトの使用を参照してください。
データ・ハンドラーの呼び出し元がクラス名を引き数として渡さない 場合、createHandler() メソッドは MIME タイプの値を必要とします。呼び出し側のコンポーネント (コネクターまたはアクセス・クライアント) から MIME タイプを渡されると、createHandler() は、この MIME タイプに関連付けられている子データ・ハンドラー・メタオブジェクトを使用して、データ・ハンドラー・インスタンスのクラス名やそのほかの構成情報を派生させます。
指定された MIME タイプからクラス名を派生させるために、createHandler() メソッドは次の手順を実行します。
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 というストリングに変換します。
MIMETypeString _BOPrefix
この名前の属性が存在しない場合、createHandler() は、MIME タイプのみ が一致する属性を検索します。例えば、呼び出し元から MIME タイプ edi が渡され、ビジネス・オブジェクト・プレフィックスが x12 の場合、createHandler() はトップレベルのメタオブジェクトから「edi_x12」という名前の属性を探します。この名前の属性が存在しない場合、createHandler() は「edi」という名前の属性を探します。
com.crossworlds.DataHandlers
例えば、MIME タイプ・ストリングが text_html の場合、作成されたストリングは次のようになります。
com.crossworlds.DataHandlers.text.html
呼び出し側でクラス名と MIME タイプの両方 を指定すると、createHandler() は次のアクションを行います。
つまり、呼び出し側でクラス名を指定すると、このクラス名により子メタオブジェクトの ClassName 属性で指定されたクラス名がオーバーライド されます。
IBM から提供されているすべてのデータ・ハンドラー (表 3 および表 4) は、その構成情報に関してメタオブジェクトを使用することを想定して設計されています。
データ・ハンドラー・メタオブジェクトは、次のような性質を持つ階層ビジネス・オブジェクトです。
IBM 提供のデータ・ハンドラーでは、その子データ・ハンドラー・メタオブジェクトに関連付けられている構成情報を使用して、データ・ハンドラーのプロパティーを初期化します。したがって、IBM は提供する各データ・ハンドラーに関する子メタオブジェクトを提供しています (表 8 を参照)。
createHandler() メソッドはデータ・ハンドラーをインスタンス化した後、特殊な protected メソッド (setupOptions()) を呼び出して、該当する子データ・ハンドラー・メタオブジェクト内の値を使用してデータ・ハンドラーの構成を初期化します。
メタオブジェクトの詳細については、データ・ハンドラーの構成を参照してください。
createHandler() メソッドは、3 番目の引き数としてオプションのビジネス・オブジェクト・プレフィックスを受け取ることができます。この引き数を使用して MIME タイプ名を判別します (MIME タイプの使用を参照)。createHandler() はデータ・ハンドラーをインスタンス化してその構成プロパティーを設定した後、最後のタスクとしてデータ・ハンドラーの BOPrefix 構成オプション (存在する場合) にこの 3 番目の引き数の値を設定します。
データ・ハンドラーは、作成するどのビジネス・オブジェクト名にもこのプレフィックスを先頭に付加できます (ストリングからビジネス・オブジェクトへの変換時)。プレフィックスとビジネス・オブジェクト名の間に下線 (_) を設定します。例えば、コネクターが次の createHandler() 呼び出しで、XML データ・ハンドラーを起動する場合は、次のとおりです。
createHandler(null, "text/xml", "UserApp");
createHandler() メソッドは XML データ・ハンドラーをインスタンス化して、その BOPrefix 属性に「UserApp」を設定します。XML データ・ハンドラーが Customer ビジネス・オブジェクトを作成すると、このビジネス・オブジェクトは次のようになります。