コネクターは、メタオブジェクト・エントリーを使用して、メッセージに関連付けるビジネス・オブジェクトを決定します。メッセージの処理に使用されるビジネス・オブジェクトのタイプと動詞は、WebSphere MQ メッセージのヘッダーに含まれる FORMAT フィールドによって決定されます。ビジネス・オブジェクト名と動詞を格納するメタオブジェクト属性を構成し、WebSphere MQ メッセージ・ヘッダーの FORMAT フィールドのテキストに関連付けます。メタオブジェクト属性には、メッセージ処理のガイドラインも含まれます。
入力キューからメッセージが検索されると、コネクターは、FORMAT テキスト・フィールドに関連付けられているビジネス・オブジェクト名を調べます。次に、ビジネス・オブジェクト名と共に、メッセージがデータ・ハンドラーに渡されます。ビジネス・オブジェクトにメッセージの内容が正常に取り込まれると、コネクターはそのビジネス・オブジェクトがサブスクライブされているかどうかをチェックしてから、gotApplEvents() メソッドを使用して統合ブローカーにデリバリーします。
コネクターは、2 種類のメタオブジェクトを認識し、読み取ることができます。
動的な子メタオブジェクトの属性値は、静的なメタオブジェクトの属性値と重複し、それらをオーバーライドします。
ご自分の実装にはどちらのメタオブジェクトが最適であるかを判断する際には、以下のことを考慮してください。
表 11 に、メタオブジェクトでサポートされるプロパティーをすべて含むリストを示します。メタオブジェクトを実装するときには、これらのプロパティーの説明を参照してください。メタオブジェクトには、表 11 に示すプロパティーが 1 つ以上含まれていなければなりません。
一部のプロパティーは、静的メタオブジェクトと動的メタオブジェクトのいずれかでしか使用できません。また、メッセージ・ヘッダーからの読み取りやメッセージ・ヘッダーへの書き込みが不可能なプロパティーもあります。特定のプロパティーについて、コネクターでどのように解釈および使用されるかを判断するには、概要のイベント処理と要求処理に関する適切なセクションを参照してください。
プロパティー名 | 静的メタオブジェクトで定義可能か | 動的メタオブジェクトで定義可能か | 説明 |
---|---|---|---|
CollaborationName | はい | いいえ | CollaborationName は、ビジネス・オブジェクトと動詞の組み合わせに対する属性のアプリケーション固有のテキスト内で指定される必要があります。例えば、ユーザーが動詞 Create 付きのビジネス・オブジェクト Customer の同期イベントを処理しようとしている場合、静的メタデータ・オブジェクトは Customer_Create という名前の属性を含んでいる必要があります。
Customer_Create 属性は、名前と値のペアを含むアプリケーション固有のテキストを含んでいる必要があります。例えば、CollaborationName=MyCustomerProcessingCollab です。構文の詳細については、静的メタオブジェクトの作成の概要のセクションを参照してください。 この条件が満たされていない場合は、コネクターが Customer ビジネス・オブジェクトに関する要求を同期的に処理しようとするとランタイム・エラーが発生します。 注:
このプロパティーは、同期要求にのみ利用可能です。 |
DataHandlerConfigMO |
はい | はい | 構成情報を提供するために、データ・ハンドラーに渡されるメタオブジェクト。静的なメタオブジェクトに指定された場合、この値は DataHandlerConfigMO コネクター・プロパティーに指定された値をオーバーライドします。このメタオブジェクト・プロパティーは、さまざまなタイプのビジネス・オブジェクトを処理するために複数の異なるデータ・ハンドラーが必要な場合に使用します。データ形式が実際のビジネス・データに依存する可能性がある場合は、要求処理には動的な子メタオブジェクトを使用します。指定するビジネス・オブジェクトは、コネクター・エージェントでサポートされるものでなければなりません。付録B. Connector Configuratorの説明を参照してください。 |
DataHandlerMimeType |
はい | はい | 使用すると、特定の MIME タイプに基づいたデータ・ハンドラーを要求できます。メタオブジェクトに指定されている場合、この値は DataHandlerMimeType コネクター・プロパティーに指定されている値をオーバーライドします。このメタオブジェクト・プロパティーは、さまざまなタイプのビジネス・オブジェクトを処理するために複数の異なるデータ・ハンドラーが必要な場合に使用します。データ形式が実際のビジネス・データに依存する可能性がある場合は、要求処理には動的な子メタオブジェクトを使用します。DataHandlerConfigMO に指定されたビジネス・オブジェクトは、このプロパティーの値に対応する属性を含める必要があります。付録B. Connector Configuratorの説明を参照してください。 |
DataHandlerClassName |
はい | はい | 付録B. Connector Configuratorの説明を参照してください。 |
InputFormat |
はい | はい | 特定のビジネス・オブジェクトに関連付けるインバウンド (イベント) メッセージのフォーマットまたはタイプです。この値は、メッセージ内容の識別に役立つものであり、メッセージを生成するアプリケーションによって決まります。検索されたメッセージがこのフォーマットである場合、そのメッセージは (可能であれば) 特定のビジネス・オブジェクトに変換されます。ビジネス・オブジェクトにこのフォーマットが指定されていない場合、コネクターは特定のビジネス・オブジェクトのサブスクリプション・デリバリーを処理しません。このプロパティーを設定するときは、デフォルトのメタオブジェクト変換プロパティーを使用しないでください。デフォルトのメタオブジェクト変換プロパティーの値は、着信メッセージをビジネス・オブジェクトに一致させるために使用されます。 コネクターがメッセージのフォーマットを定義していると見なすフィールドは、コネクター固有のプロパティー MessageFormatProperty を使用してユーザーが定義できます。 |
OutputFormat |
はい | はい | アウトバウンド・メッセージに取り込まれるフォーマットです。OutputFormat の名前の長さは、16 文字を超えてはなりません。超えた場合、WebSphere MQ がエラーを生成する場合があります。OutputFormat が指定されていない場合、使用可能であれば入力フォーマットが使用されます。 |
InputQueue | はい | はい | コネクターが、新しいメッセージを検出するためにポーリングする
入力キュー。このプロパティーは、着信メッセージとビジネス・オブジェクトを一致させる目的でのみ使用されます。このプロパティーを設定するときは、デフォルトの変換プロパティーを使用しないでください。デフォルトの変換プロパティーの値は、着信メッセージをビジネス・オブジェクトに一致させるために使用されます。
注:
コネクター固有のプロパティーにある InputQueue プロパティーは、アダプターがポーリングするキューを定義します。これは、アダプターがポーリングするキューを決定するのに使用する唯一のプロパティーです。静的 MO では、InputQueue プロパティーおよび InputFormat プロパティーは、アダプターが指定されたメッセージを特定のビジネス・オブジェクトにマップする条件として使用できます。この機能を実装するには、コネクター固有のプロパティーを使用して複数の入力宛先を構成し、さらに、必要に応じて、着信メッセージの入力フォーマットを基に各入力宛先に別個のデータ・ハンドラーをマップします。詳細については、データ・ハンドラーの入力キューへのマッピングの概要を参照してください。 |
OutputQueue |
はい | はい | 特定のビジネス・オブジェクトから派生したメッセージが送信されるキューです。 |
ResponseTimeout |
はい | はい | 同期要求処理で応答を待機するときにタイムアウトとするまでの待機時間を、ミリ秒単位で示します。このプロパティーが未定義のままか、またはゼロよりも小さい値に設定されている場合、コネクターは応答を待機せず、SUCCESS を即時に戻します。 |
TimeoutFatal |
はい | はい | 同期要求処理で、応答の受信がないためコネクターからエラー・メッセージを戻す動作が起動されるときに使用されます。このプロパティーの値が True の場合、コネクターは、ResponseTimeout に指定されている時間内に応答の受信がなければ、APPRESPONSETIMEOUT をブローカーに戻します。このプロパティーが未定義の場合、または False に設定されている場合、コネクターは応答タイムアウトが発生すると要求を失敗させます。ただし、終了させることはありません。デフォルト値は False です。 |
DataEncoding | はい | はい |
DataEncoding は、メッセージの読み取りおよび書き込みに使用されるエンコードです。このプロパティーが静的メタオブジェクトで指定されていない場合、コネクターは特定のエンコードを使用せずにメッセージを読み取ろうとします。動的子メタオブジェクトで定義された DataEncoding は、静的メタオブジェクトで定義された値をオーバーライドします。可能な値は、text、binary、または object です。デフォルト値は Text です。この属性の値のフォーマットは、messageType[:enc] です。すなわち、Text:ISO8859_1、Text:UnicodeLittle、Text、Binary、または Object のようになります。このプロパティーは内部的に InputFormat プロパティーに関連します。InputFormat ごとに 1 つの DataEncoding のみを指定します。 |
以下に示すのは、JMS メッセージ・ヘッダーのみにマップされるフィールドです。具体的な説明や値の解釈などの詳細情報については、JMS API の仕様を参照してください。フィールドによっては、JMS プロバイダー間で解釈が異なることがあります。ご使用の JMS プロバイダーの資料を参照して、解釈の違いがないかどうかを確認してください。 | |||
ReplyToQueue | はい | 要求に対する応答メッセージの送信先となるキューです。 | |
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 MQ アダプター構成のメタオブジェクトは、さまざまなビジネス・オブジェクト用に定義された変換プロパティーのリストで構成されます。静的メタオブジェクトのサンプルを参照するには、Business Object Designer を起動し、アダプターに付属しているサンプル connectors¥WebSpereMQ¥samples¥LegacyContact¥WebSpereMQ_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 |
静的メタオブジェクトにアプリケーション固有情報として指定できるプロパティーは、表 11 に記載されています。
静的メタオブジェクトを実装するには、以下の手順を実行します。
静的メタオブジェクトのアプリケーション固有情報で InputQueue プロパティー を使用することにより、データ・ハンドラーと入力キューを関連付ける ことができます。 この機能は、異なる書式や変換要件を持つ複数の取引先と 取り引きする場合に役立ちます。
データ・ハンドラーを InputQueue にマップするには、以下の手順を実行します。
例えば、次に示す静的メタオブジェクトの属性は、データ・ハンドラーと、CompReceipts という名前の InputQueue を関連付けています。
[Attribute]
Name = Cust_Create
Type = String
Cardinality = 1
MaxLength = 1
IsKey = false
IsForeignKey = false
IsRequired = false
AppSpecificInfo = InputQueue=queue://queue.manager/CompReceipts;
DataHandlerClassName=com.crossworlds.DataHandlers.WBIMB.
disposition_notification;DataHandlerMimeType=message/
disposition_notification
IsRequiredServerBound = false
[End]
静的メタオブジェクトを使用して必要なメタデータを指定することが困難または実行不可能な場合には、実行時に、ビジネス・オブジェクト・インスタンスごとにデリバリーされるメタデータをコネクターで受信することもできます。
動的メタオブジェクトを使用すると、要求処理では、コネクターがビジネス・オブジェクトの処理に使用するメタデータを要求ごとに変更できるようになります。また、イベント処理では、イベント・メッセージに関する情報の検索が可能になります。
コネクターは、コネクターに渡されるトップレベルのビジネス・オブジェクトに子として追加された動的メタオブジェクトから、変換プロパティーを認識して読み取ります。この動的な子メタオブジェクトの属性値は、コネクターの構成に使用される静的なメタオブジェクトに指定可能であった変換プロパティーと重複します。
動的な子メタオブジェクトのプロパティーは静的なメタオブジェクトから検出されるプロパティーをオーバーライドするため、動的な子メタオブジェクトを指定する場合は、静的なメタオブジェクトを指定するコネクター・プロパティーを組み込む必要はありません。したがって、動的な子メタオブジェクトは、静的なメタオブジェクトとは無関係に使用することができ、その逆もまた同様です。
動的メタオブジェクトにアプリケーション固有情報として指定できるプロパティーは、表 11 に記載されています。
以下の属性は JMS および WebSphere MQ ヘッダー・プロパティーを反映しており、動的メタオブジェクトで認識されます。
ヘッダー属性名 | モード | 対応する JMS ヘッダー |
---|---|---|
CorrelationID |
読み取り/書き込み | JMSCorrelationID |
ReplyToQueue |
読み取り/書き込み | JMSReplyTo |
DeliveryMode |
読み取り/書き込み | JMSDeliveryMode |
Priority |
読み取り/書き込み | JMSPriority |
Destination |
読み取り | JMSDestination |
Expiration |
読み取り | JMSExpiration |
MessageID |
読み取り | JMSMessageID |
Redelivered |
読み取り | JMSRedelivered |
TimeStamp |
読み取り | JMSTimeStamp |
Type |
読み取り | JMSType |
UserID |
読み取り | JMSXUserID |
AppID |
読み取り | JMSXAppID |
DeliveryCount |
読み取り | JMSXDeliveryCount |
GroupID |
読み取り | JMSXGroupID |
GroupSeq |
読み取り | JMSXGroupSeq |
JMSProperties |
読み取り/書き込み |
読み取り専用属性は、イベント通知中にメッセージ・ヘッダーから読み取られ、動的メタオブジェクトに書き込まれます。これらのプロパティーは、要求処理中に応答メッセージが発行されたときに 動的メタオブジェクトも設定します。読み取り/書き込み属性は、要求処理中に作成されるメッセージ・ヘッダーで設定されます。イベント通知中は、読み取り/書き込み属性はメッセージ・ヘッダーから読み取られ、動的メタオブジェクトを設定します。
動的メタオブジェクトは、各属性がそれぞれ 1 つのメタデータ・プロパティーと値を meta-object property name =meta-object property value の形式で表す構造になっています。
ポーリング中に検索されたメッセージについてさらに詳しい情報をコラボレーションに提供するため、コネクターは、作成されたビジネス・オブジェクトに動的なメタオブジェクトが定義済みである場合、その特定の属性に値を取り込みます。
表 16 に、動的子メタオブジェクトがポーリングのためにどのように構成されるかを示します。
プロパティー名 | サンプル値 |
---|---|
InputFormat | CUST_IN |
InputQueue | MYInputQueue |
OutputFormat | CxIgnore |
OutputQueue | CxIgnore |
ResponseTimeout | CxIgnore |
TimeoutFatal | CxIgnore |
表 16 に示すように、動的子メタオブジェクトに、追加属性 Input_Format および InputQueue を定義することができます。Input_Format には検索されたメッセージのフォーマットが取り込まれ、InputQueue 属性には特定のメッセージが検索されたキューの名前が含まれます。これらのプロパティーが子メタオブジェクトで定義されていない場合は、これらのプロパティーは取り込まれません。
シナリオ例:
動的メタオブジェクトに属性を追加すると、メッセージ・トランスポートの詳細情報を取得したり メッセージ・トランスポートを詳細に制御したりすることができます。このセクションでは、これらの属性、お よび属性がイベント通知と要求処理に及ぼす影響について説明します。
動的メタオブジェクトの他の属性と異なり、JMSProperties は単一カーディナリティー子オブジェクトを 定義する必要があります。この子オブジェクトの各属性は、以下のように JMS メッセージ・ヘッダーの可変部分で読み取り/書き込みを行う 単一プロパティーを定義する必要があります。
表 17 に、JMSProperties オブジェクトの属性に対して定義する必要があるアプリケーション固有情報プロパティーを示します。
属性 | 指定可能な値 | ASI | コメント |
---|---|---|---|
名前 | 任意の有効な 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 つの例として、図 3 に、動的メタオブジェクトに含まれる属性 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コネクターは、上の定義にあてはまる要求を受信すると、その要求 (Customer オブジェクト) をフォーマットが CUST のメッセージに変換し、キュー QueueA にそのメッセージを入れます。