このトピックでは、メタオブジェクトの作成の概要と手順を示します。
コネクターは、メタオブジェクト・エントリーを使用して、メッセージに関連付けるビジネス・オブジェクトを決定します。メッセージの処理に使用されるビジネス・オブジェクトのタイプと動詞は、WebSphere MQ メッセージのヘッダーに含まれる FORMAT フィールドによって決定されます。ビジネス・オブジェクト名と動詞を格納するメタオブジェクト属性を構成し、WebSphere MQ メッセージ・ヘッダーの FORMAT フィールドのテキストに関連付けます。メタオブジェクト属性には、メッセージ処理のガイドラインも含まれます。
入力キューからメッセージが検索されると、コネクターは、FORMAT テキスト・フィールドに関連付けられているビジネス・オブジェクト名を調べます。次に、ビジネス・オブジェクト名とともに、メッセージがデータ・ハンドラーに渡されます。ビジネス・オブジェクトにメッセージの内容が正常に取り込まれると、コネクターはそのビジネス・オブジェクトがサブスクライブされているかどうかをチェックしてから、gotApplEvents() メソッドを使用して統合ブローカーにデリバリーします。
WebSphere Business Integration Message Broker 対応コネクターは、次の 2 種類のメタオブジェクトを認識および読み取りできます。
動的子メタオブジェクトの属性値は、静的メタオブジェクトの属性値を複写およびオーバーライドします。
ご自分の実装にはどちらのメタオブジェクトが最適であるかを判断する際には、以下のことを考慮してください。
表 13 に、メタオブジェクトでサポートされるプロパティーをすべて含むリストを示します。メタオブジェクトを実装するときには、これらのプロパティーの説明を参照してください。メタオブジェクトには、表 13 に示すプロパティーが 1 つ以上含まれていなければなりません。
一部のプロパティーは、静的メタオブジェクトと動的メタオブジェクトのいずれかでしか使用できません。また、メッセージ・ヘッダーからの読み取りやメッセージ・ヘッダーへの書き込みが不可能なプロパティーもあります。特定のプロパティーについて、コネクターでどのように解釈および使用されるかを判断するには、概要のイベント処理と要求処理に関する適切なセクションを参照してください。
プロパティー名 | 静的メタオブジェクトで定義可能か | 動的メタオブジェクトで定義可能か | 説明 |
---|---|---|---|
DataHandlerConfigMO |
はい | はい | 構成情報を提供するためにデータ・ハンドラーに渡されるメタオブジェクトです。静的メタオブジェクトに指定されている場合、この値は DataHandlerConfigMO コネクター・プロパティーに指定されている値をオーバーライドします。このメタオブジェクト・プロパティーは、さまざまなタイプのビジネス・オブジェクトを処理するために複数の異なるデータ・ハンドラーが必要な場合に使用します。データ・フォーマットが実際のビジネス・データに依存する可能性がある場合は、要求処理に動的子メタオブジェクトを使用してください。指定するビジネス・オブジェクトは、コネクター・エージェントでサポートされるものでなければなりません。付録B. このアダプターのコネクター固有のプロパティーの説明を参照してください。 |
DataHandlerMimeType |
はい | はい | 使用すると、特定の MIME タイプに基づいたデータ・ハンドラーを要求できます。メタオブジェクトに指定されている場合、この値は DataHandlerMimeType コネクター・プロパティーに指定されている値をオーバーライドします。このメタオブジェクト・プロパティーは、さまざまなタイプのビジネス・オブジェクトを処理するために複数の異なるデータ・ハンドラーが必要な場合に使用します。データ・フォーマットが実際のビジネス・データに依存する可能性がある場合は、要求処理に動的子メタオブジェクトを使用してください。DataHandlerConfigMO に指定されているビジネス・オブジェクトに、このプロパティーの値に対応する属性が含まれていることが必要です。付録B. このアダプターのコネクター固有のプロパティーの説明を参照してください。 |
DataHandlerClassName |
はい | はい | 付録B. このアダプターのコネクター固有のプロパティーの説明を参照してください。 |
InputFormat |
はい | はい | 特定のビジネス・オブジェクトに関連付けるインバウンド (イベント) メッセージのフォーマットまたはタイプです。この値は、メッセージ内容の識別に役立つものであり、メッセージを生成するアプリケーションによって決まります。検索されたメッセージがこのフォーマットである場合、そのメッセージは (可能であれば) 特定のビジネス・オブジェクトに変換されます。ビジネス・オブジェクトにこのフォーマットが指定されていない場合、コネクターは特定のビジネス・オブジェクトのサブスクリプション・デリバリーを処理しません。このプロパティーを設定するときは、デフォルトのメタオブジェクト変換プロパティーを使用しないでください。デフォルトのメタオブジェクト変換プロパティーの値は、着信メッセージをビジネス・オブジェクトに一致させるために使用されます。コネクターがメッセージのフォーマットを定義していると見なすフィールドは、コネクター固有のプロパティー MessageFormatProperty を使用してユーザーが定義できます。 |
OutputFormat |
はい | はい | アウトバウンド・メッセージに取り込まれるフォーマットです。OutputFormat が指定されていない場合は、入力フォーマットが (利用可能であれば) 使用されます。 |
InputQueue | はい | はい | 新規メッセージを検出するためにコネクターがポーリングする入力キュー
です。このプロパティーは、着信メッセージとビジネス・オブジェクトを一致させる目的でのみ使用されます。このプロパティーを設定するときは、デフォルトの変換プロパティーを使用しないでください。デフォルトの変換プロパティーの値は、着信メッセージをビジネス・オブジェクトに一致させるために使用されます。
注:
コネクター固有のプロパティーにある InputQueue プロパティーは、アダプターがポーリングするキューを定義します。これは、アダプターがポーリングするキューを決定するのに使用する唯一のプロパティーです。静的 MO では、InputQueue プロパティーおよび InputFormat プロパティーは、アダプターが指定されたメッセージを特定のビジネス・オブジェクトにマップする条件として使用できます。この機能を実装するには、コネクター固有のプロパティーを使用して複数の入力宛先を構成し、さらに、必要に応じて、着信メッセージの入力フォーマットを基に各入力宛先に別個のデータ・ハンドラーをマップします。詳細については、データ・ハンドラーの入力キューへのマッピングの概要を参照してください。 |
OutputQueue |
はい | はい | 特定のビジネス・オブジェクトから派生したメッセージが送信されるキューです。 |
ResponseTimeout |
はい | はい | 同期要求処理で応答を待機するときにタイムアウトとするまでの待機時間を、ミリ秒単位で示します。このプロパティーが未定義のままか、またはゼロよりも小さい値に設定されている場合、コネクターは応答を待機せず、SUCCESS を即時に戻します。 |
TimeoutFatal |
はい | はい | 同期要求処理で、応答の受信がないためコネクターからエラー・メッセージを戻す動作が開始されるときに使用されます。このプロパティーの値が True の場合、コネクターは、ResponseTimeout に指定されている時間内に応答の受信がなければ、APPRESPONSETIMEOUT をブローカーに戻します。このプロパティーが未定義の場合、または False に設定されている場合、コネクターは応答タイムアウトが発生すると要求を失敗させます。ただし、終了させることはありません。デフォルト値は False です。 |
DataEncoding | はい | はい | メッセージのタイプと、アダプターがビジネス・オブジェクト conversions.Possible の値 (text、binary、または object) に対して使用するエンコードを指定します。デフォルト = text。この属性の値のフォーマットは、messageType[:enc] です。例えば、Text:ISO8859_1、Text:UnicodeLittle、Text、Binary、または Object のようになります。このプロパティーは内部的に InputFormat プロパティーに関連します。InputFormat ごとに 1 つの DataEncoding のみを指定します。 |
以下に示すのは、JMS メッセージ・ヘッダーのみにマップされるフィールドです。具体的な説明や値の解釈などの詳細情報については、JMS API の仕様を参照してください。フィールドによっては、JMS プロバイダー間で解釈が異なることがあります。ご使用の JMS プロバイダーの資料を参照して、解釈の違いがないかどうかを確認してください。 | |||
ReplyToDestination | はい | 要求に対する応答メッセージの送信先となる宛先です。 | |
Type | はい | メッセージのタイプです。通常はユーザーが定義できます (JMS プロバイダーによって異なります)。 | |
MessageID | はい | メッセージの固有 ID です (特定の JMS プロバイダーでのみ有効)。 | |
CorrelationID | はい | はい | 応答メッセージで、その応答の開始理由にあたる要求メッセージの ID を示すために使用されます。 |
Delivery Mode | はい | はい | メッセージを MOM システム内で永続化するかどうかを指定します。許容値は次のとおりです。
1 = 非永続 2 = 永続 その他の値も使用できる場合があります (JMS プロバイダーによって異なります)。 |
Priority | はい | メッセージの優先順位を数値で表現したものです。許容値は 0 から 9 です (数値が大きいほど優先順位が高まります)。 | |
Destination | はい | MOM システム内でのメッセージの現在の位置 (除去済みの場合は除去直前の位置) です。 | |
Expiration | はい | メッセージの存続時間です。 | |
Redelivered | はい | 以前に JMS プロバイダーからクライアントに対してメッセージのデリバリーが試行されたが、受取の確認がなかった可能性が高いことを示すものです。 | |
Timestamp | はい | メッセージが JMS プロバイダーに渡された時刻です。 | |
UserID | はい | メッセージを送信したユーザーの ID です。 | |
AppID | はい | メッセージを送信したアプリケーションの ID です。 | |
DeliveryCount | はい | デリバリーを試行した回数です。 | |
GroupID | はい | メッセージ・グループの ID です。 | |
GroupSeq | はい | GroupID に指定されたメッセージ・グループにおける順位です。 | |
JMSProperties | はい | JMS プロパティーを参照してください。 |
メタオブジェクト・プロパティー DataEncoding を使用して、メッセージ・タイプを変更することができます。このプロパティーは、text、binary、または object の 3 つの値のいずれかを受け入れます。
デフォルトでは、アダプターは、すべてのメッセージがタイプ text であると想定します。バイナリー・メッセージを受信すると、アダプターは Java 仮想マシン (JVM) のデフォルト・エンコードを使用して バイナリー・コンテンツをテキストに変換してから、構成されたデータ・ハンドラーにコンテンツを渡します。メタオブジェクトの DataEncoding プロパティーで binary または object メッセージ・タイプを明示的に指定すると、この振る舞いは変わります。
WebSphere Business Integration Message Broker の構成メタオブジェクトは、さまざまなビジネス・オブジェクトに定義される変換プロパティーのリストで構成されます。静的メタオブジェクトのサンプルを参照するには、Business Object Designer を起動し、アダプターに付属しているサンプル connectors¥WebSphereBIMessageBroker¥samples¥LegacyItem¥ Sample_WBIMB_MO_Config.xsd を開きます。
コネクターがサポートする静的メタオブジェクトは、常に 1 つだけです。静的メタオブジェクトを実装するには、そのメタオブジェクトの名前を、コネクター・プロパティー ConfigurationMetaObject に指定します。
静的メタオブジェクトは、各属性が、それぞれ 1 つのビジネス・オブジェクトと動詞の組み合わせを、そのオブジェクトの処理に関連するメタデータのすべてとともに示す構造になっています。各属性の名前は、Customer_Create のように、ビジネス・オブジェクト・タイプと動詞の間を下線で区切った名前にする必要があります。属性のアプリケーション固有情報には、このオブジェクトと動詞の固有の組み合わせに対して指定するメタデータ・プロパティーを表す名前と値のペアを、セミコロンで区切って 1 つ以上含める必要があります。
属性名 | アプリケーション固有のテキスト |
---|---|
<business object type>_<verb> |
property=value;property=value;... |
<business object type>_<verb> |
property=value;property=value;... |
例えば、次のようなメタオブジェクトがあるとします。
属性名 | アプリケーション固有の情報 |
---|---|
Customer_Create |
OutputFormat=CUST;OutputDestination=QueueA |
Customer_Update |
OutputFormat=CUST;OutputDestination=QueueB |
Order_Create |
OutputFormat=ORDER;OutputDestination=QueueC |
このサンプルのメタオブジェクトは、タイプが Customer で動詞が Create の要求ビジネス・オブジェクトを受信したときは、そのオブジェクトをフォーマットが CUST のメッセージに変換して宛先 QueueA に入れる必要があることを、コネクターに対して通知します。Customer タイプのオブジェクトの動詞が Update である場合、変換後のメッセージは QueueB に入れられます。オブジェクトのタイプが Order で動詞が Create である場合には、コネクターはそのオブジェクトをフォーマットが ORDER のメッセージに変換し、QueueC にデリバリーします。それ以外のビジネス・オブジェクトがコネクターに渡された場合には、サブスクライブされていないものとして処理されます。
また、Default 属性を 1 つ指定して、アプリケーション固有情報 (ASI) のプロパティーを 1 つ以上割り当てることもできます。このデフォルト属性のプロパティーと、オブジェクトと動詞の組み合わせごとの属性のプロパティーが結合されて、メタオブジェクトの属性の最終的なプロパティーになります。オブジェクトと動詞の組み合わせに関係なく汎用的に適用するプロパティーが 1 つ以上ある場合には、このデフォルト属性を使用すると便利です。次の例の場合、コネクターは、オブジェクトと動詞の組み合わせ Customer_Create と Order_Create については、それぞれに個別に指定されているメタオブジェクト・プロパティーに加えて OutputDestination=QueueA が指定されていると見なします。
属性名 | アプリケーション固有の情報 |
---|---|
Default |
OutputDestination=QueueA |
Customer_Update |
OutputFormat=CUST |
Order_Create |
OutputFormat=ORDER |
静的メタオブジェクトにアプリケーション固有情報として指定できるプロパティーは、表 13 に記載されています。
静的メタオブジェクトを実装するには、以下の手順を実行します。
connectors¥WebSphereBIMessageBroker¥samples¥LegacyItem¥Sample_WBIMB_MO_Config.xsdを開きます。
静的メタオブジェクトのアプリケーション固有情報内の InputQueue プロ パティーを使用して、データ・ハンドラーを入力キューに関連付ける ことができます。この機能は、フォーマットや型変換の要件が異なる複数の取引 先との取引を行なう際に役立ちます。
データ・ハンドラーを InputQueue にマップするには、以下の手順を実行します。
例えば、次に示す静的メタオブジェクト内の属性は、データ・ハンドラーを CompReceipts という名前の InputQueue に関連付け ます。
[Attribute] Name = Cust_Create Type = String Cardinality = 1 MaxLength = 1 IsKey = false IsForeignKey = false IsRequired = false AppSpecificInfo = InputQueue=//queue.manager/CompReceipts;DataHandlerClassName= com.crossworlds.DataHandlers.WBIMB.disposition_notification;DataHandlerMime Type= message/ disposition_notification IsRequiredServerBound = false [End]
静的メタオブジェクトを使用して必要なメタデータを指定することが困難または実行不可能な場合には、実行時に、ビジネス・オブジェクト・インスタンスごとにデリバリーされるメタデータをコネクターで受信することもできます。
動的メタオブジェクトを使用すると、要求処理では、コネクターがビジネス・オブジェクトの処理に使用するメタデータを要求ごとに変更できるようになります。また、イベント処理では、イベント・メッセージに関する情報の検索が可能になります。
コネクターは、コネクターに渡されるトップレベルのビジネス・オブジェクトに子として追加された動的メタオブジェクトから、変換プロパティーを認識して読み取ります。動的子メタオブジェクトの属性値は、コネクターの構成に使用される静的メタオブジェクトによって指定できる変換プロパティーを複写します。
動的子メタオブジェクト・プロパティーは静的メタオブジェクト・プロパティーの値をオーバーライドするため、動的子メタオブジェクトを指定する場合は、静的メタオブジェクトを指定するコネクター・プロパティーを含める必要はありません。したがって、動的子メタオブジェクトは静的メタオブジェクトから独立して使用でき、また、静的メタオブジェクトは動的子メタオブジェクトから独立して使用できます。
動的メタオブジェクトにアプリケーション固有情報として指定できるプロパティーは、表 13 に記載されています。
以下の属性は JMS および WebSphere MQ ヘッダー・プロパティーを反映しており、動的メタオブジェクトで認識されます。
読み取り専用属性は、イベント通知中にメッセージ・ヘッダーから読み取られ、動的メタオブジェクトに書き込まれます。 これらのプロパティーは、要求処理中に応答メッセージが発行されたときに 動的メタオブジェクトも設定します。読み取り/書き込み属性は、要求処理中に作成されるメッセージ・ヘッダーで設定されます。イベント通知中は、読み取り/書き込み属性はメッセージ・ヘッダーから読み取られ、動的メタオブジェクトを設定します。
動的メタオブジェクトは、各属性がそれぞれ 1 つのメタデータ・プロパティーと値を meta-object property name =meta-object property value の形式で表す構造になっています。
ポーリング時に検索されたメッセージに関してより多くの情報を持つコラボレーションを提供するために、コネクターは動的メタオブジェクトの特定の属性を (作成されるビジネス・オブジェクトにすでに定義されていれば) 取り込みます。
表 18 に、動的子メタオブジェクトがポーリングのためにどのように構成されるかを示します。
プロパティー名 | サンプル値 |
---|---|
InputFormat | CUST_IN |
InputQueue | MYInputQueue |
OutputFormat | CxIgnore |
OutputQueue | CxIgnore |
ResponseTimeout | CxIgnore |
TimeoutFatal | CxIgnore |
表 18 に示すように、動的子メタオブジェクトに、追加属性 InputFormat および InputQueue を定義することができます。InputFormat には検索されたメッセージのフォーマットが取り込まれ、InputQueue 属性には特定のメッセージが検索されたキューの名前が含まれます。これらのプロパティーが子メタオブジェクトで定義されていない場合は、これらのプロパティーは取り込まれません。
シナリオの例:
動的メタオブジェクトに属性を追加すると、メッセージ・トランスポートに関す る詳細情報を取得したり、メッセージ・トランスポートの管理を強化したりできます。このセクションでは、これらの属性、お よび属性がイベント通知と要求処理に及ぼす影響について説明します。
動的メタオブジェクトの他の属性とは異なり、JMSProperties には単一カーディナリティーの子オブジェクトを定義しなければなりません。この子オブジェクトの各属性には、JMS メッセージ・ヘッダーの可変部分を読み取り元/書き込み先とするプロパティーを、以下の規則に従って 1 つずつ定義する必要があります。
次の表に、JMSProperties オブジェクトの各属性に定義する必要があるアプリケーション固有情報のプロパティーを示します。
属性 | 指定可能な値 | ASI | コメント |
---|---|---|---|
Name | 任意の有効な JMS プロパティー名 (有効とは、プロパティーの型と ASI で定義した型が矛盾しないこと) | name=<JMS プロパティー名>;type=<JMS プロパティーの型> | 一部のベンダーは、特定のプロパティーを機能拡張のために予約しています。一般に、ユーザーは、そのようなベンダー固有の機能を使用する場合を除いて、JMS で始まる名前のカスタム・プロパティーを定義してはいけません。 |
Type | String | type=<コメントを参照> | JMS プロパティーの型です。JMS API には、JMS メッセージ内の値を設定するためのメソッドがいくつか用意されています (setIntProperty 、setLongProperty、setStringProperty など)。ここで指定する JMS プロパティーの型は、メッセージ内のそのプロパティーの値を設定するときにこれらのメソッドのうちのどれを使用すればよいかを示します。 |
次の例では、Customer オブジェクトに JMSProperties 子オブジェクトを定義して、メッセージ・ヘッダーのユーザー定義フィールドにアクセスできるようにしています。
Customer (ASI = cw_mo_conn=MetaData) |-- Id |-- FirstName |-- LastName |-- ContactInfo |-- MetaData |-- OutputFormat = CUST |-- OutputDestination = QueueA |-- JMSProperties |-- RoutingCode = 123 (ASI= name=RoutingCode;type=Int) |-- Dept = FD (ASI= name=RoutingDept;type=String)
もう 1 つの例として、図 4 に、動的メタオブジェクトに含まれる属性 JMSProperties と、JMS メッセージ・ヘッダーの 4 つのプロパティー (ID、GID、RESPONSE、および RESPONSE_PERSIST) の定義を示します。これらの属性のアプリケーション固有情報には、名前と型がそれぞれ定義されています。例えば、属性 ID は、型が String の JMS プロパティー ID にマップされます。
動的メタオブジェクトを実装するには、以下の手順を実行します。
Customer (ASI = cw_mo_conn=MetaData) |-- Id |-- FirstName |-- LastName |-- ContactInfo |-- MetaData |-- OutputFormat = CUST |-- OutputDestination = QueueA