WebSphere MQ 対応コネクターは、次の 2 種類のメタオブジェクトを認識および読み取りできます。
動的な子メタオブジェクトの属性値は、静的なメタオブジェクトの属性値と重複し、それらをオーバーライドします。
WebSphere MQ の静的メタオブジェクトは、さまざまなビジネス・オブジェクトに定義される変換プロパティーのリストで構成されます。ビジネス・オブジェクトの変換プロパティーを定義するには、最初にストリング属性を作成し、次に構文 busObj_verb を使用してそれに名前を付けます。例えば、動詞 Create を含む Customer オブジェクトの変換プロパティーを定義するには、Customer_Create という名前の属性を作成します。属性のアプリケーション固有のテキストで、実際の変換プロパティーを指定します。
以下の表で、メタオブジェクトのプロパティーを説明します。
プロパティー名 | 説明 |
---|---|
CorrelationID | このプロパティーは要求処理中のアダプター動作にのみ影響を与えます。このプロパティーの処理方法は、動的メタオブジェクト内の CorrelationID プロパティーと同じです。詳しくは、非同期要求処理 を参照してください。 |
CollaborationName | CollaborationName は、ビジネス・オブジェクトと動詞の組み合わせに対する属性のアプリケーション固有のテキスト内で指定される必要があります。例えば、ユーザーが動詞 Create 付きのビジネス・オブジェクト Customer の同期要求を処理しようとしている場合、静的メタデータ・オブジェクトは Customer_Create という名前の属性を含んでいる必要があります。
Customer_Create 属性は、名前と値のペアを含むアプリケーション固有のテキストを含んでいる必要があります。例えば、CollaborationName=MyCustomerProcessingCollab です。構文の詳細については、アプリケーション固有の情報のセクションを参照してください。
この条件が満たされていない場合は、コネクターが Customer ビジネス・オブジェクトに関する要求を同期的に処理しようとするとランタイム・エラーが発生します。
|
DataEncoding |
DataEncoding は、メッセージの読み取りおよび書き込みに使用されるエンコードです。このプロパティーが静的メタオブジェクトで指定されていない場合、コネクターは特定のエンコードを使用せずにメッセージを読み取ろうとします。動的子メタオブジェクトで定義された DataEncoding は、静的メタオブジェクトで定義された値をオーバーライドします。デフォルト値は Text です。この属性の値のフォーマットは、messageType[:enc] です。例えば、Text:ISO8859_1、Text:UnicodeLittle、Text、または Binary のようになります。このプロパティーは内部的に InputFormat プロパティーに関連します。InputFormat ごとに 1 つの DataEncoding のみを指定します。 |
DataHandlerConfigMO | 構成情報を提供するために、データ・ハンドラーに渡されるメタオブジェクト。静的なメタオブジェクトに指定された場合、この値は DataHandlerConfigMO コネクター・プロパティーに指定された値をオーバーライドします。さまざまなビジネス・オブジェクト・タイプを処理するために各種のデータ・ハンドラーが必要な場合は、この静的なメタオブジェクトのプロパティーを使用します。動的な子メタオブジェクトに指定された場合、このプロパティーはコネクター・プロパティーと静的なメタオブジェクトのプロパティーをオーバーライドします。データ形式が実際のビジネス・データに依存する可能性がある場合は、要求処理には動的な子メタオブジェクトを使用します。指定されるビジネス・オブジェクトは、コネクターによってサポートされている必要があります。 |
DataHandlerMimeType | 使用すると、特定の MIME タイプに基づいたデータ・ハンドラーを要求できます。静的なメタオブジェクトに指定された場合、この値は DataHandlerMimeType コネクター・プロパティーに指定された値をオーバーライドします。さまざまなビジネス・オブジェクト・タイプを処理するために各種のデータ・ハンドラーが必要な場合は、この静的なメタオブジェクトのプロパティーを使用します。動的な子メタオブジェクトに指定された場合、このプロパティーはコネクター・プロパティーと静的なメタオブジェクトのプロパティーをオーバーライドします。データ形式が実際のビジネス・データに依存する可能性がある場合は、要求処理には動的な子メタオブジェクトを使用します。DataHandlerConfigMO に指定されたビジネス・オブジェクトは、このプロパティーの値に対応する属性を含める必要があります。 |
DoNotReportBusObj | オプションとして、ユーザーは DoNotReportBusObj プロパティーを含めることができます。このプロパティーを true に設定することにより、発行されるすべての PAN レポート・メッセージのメッセージ本体がブランクになります。このオプションは、要求発行者がビジネス・オブジェクトが正常に処理されたことの確認は必要としますが、ビジネス・オブジェクトの変更に関する通知は必要としない場合にお勧めします。このプロパティーは NAN レポートには影響しません。
静的メタオブジェクトにこのプロパティーがない場合、コネクターはこのプロパティーをデフォルトの false に設定し、メッセージ・レポートにビジネス・オブジェクトを取り込みます。
|
InputFormat |
InputFormat は、特定のビジネス・オブジェクトと関連付けるメッセージ・フォーマットです。検索されたメッセージがこのフォーマットである場合、メッセージは可能であれば特定のビジネス・オブジェクトに変換されます。このプロパティーは内部的に DataEncoding プロパティーに関連します。InputFormat ごとに 1 つの DataEncoding のみを指定します。このプロパティーを設定するときは、デフォルトの変換プロパティーを使用しないでください。デフォルトの変換プロパティーの値は、着信メッセージをビジネス・オブジェクトに一致させるために使用されます。 |
OutputFormat | OutputFormat は、指定されたビジネス・オブジェクトから作成されたメッセージで設定されます。OutputFormat が指定されていない場合、使用可能であれば入力フォーマットが使用されます。動的な子メタオブジェクトに定義された OutputFormat は、静的なメタオブジェクトに定義された値をオーバーライドします。 |
InputQueue | コネクターが、新しいメッセージを検出するためにポーリングする入力キュー。
|
OutputQueue | OutputQueue は、特定のビジネス・オブジェクトから派生したメッセージが配信される出力キューです。動的な子メタオブジェクトに定義された OutputQueue は、静的なメタオブジェクトに定義された値をオーバーライドします。 |
ResponseTimeout | 応答を待機した状態で、タイムアウトになるまでの時間をミリ秒で表します。このプロパティーが未定義のままか、またはゼロよりも小さい値に設定されている場合、コネクターは応答を待機せず、SUCCESS を即時に戻します。動的な子メタオブジェクトに定義された ResponseTimeout は、静的なメタオブジェクトに定義された値をオーバーライドします。 |
TimeoutFatal | このプロパティーが定義されていて値が True の場合、ResponseTimeout で指定された時間内に応答がないと、コネクターは APP_RESPONSE_TIMEOUT を戻します。応答メッセージを待機しているその他のすべてのスレッドは、InterChange Server Express に APP_RESPONSE_TIMEOUT を即時に戻します。これにより、InterChange Server Express はコネクターを終了します。動的な子メタオブジェクトに定義された TimeoutFatal は、静的なメタオブジェクトに定義された値をオーバーライドします。 |
さらに、Default という名前の予約済みプロパティーもメタオブジェクト内で定義できます。このプロパティーが存在する場合は、このアプリケーション固有情報によってすべてのビジネス・オブジェクト変換プロパティーのデフォルト値が指定されます。
以下に、サンプル・メタオブジェクトを示します。
プロパティー名 | アプリケーション固有のテキスト |
---|---|
デフォルト | DataEncoding=Text:UnicodeLittle;
OutputFormat=CUST_OUT;
OutputQueue=QueueA;ResponseTimeout=10000;
TimeoutFatal=False |
アプリケーション固有の情報は、名前と値のペアで構成され、それらはセミコロンで区切られています。以下に例を示します。
InputFormat=CUST_IN;OutputFormat=CUST_OUT
静的メタオブジェクトのアプリケーション固有情報で 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.MQ.disposition_notification; DataHandlerMimeType=message/ disposition_notification IsRequiredServerBound = false [End]
コネクターは通常、メッセージ検索時に入力フォーマットを特定のビジネス・オブジェクトと動詞の組み合わせと付き合わせます。次に、コネクターはそのビジネス・オブジェクト名とメッセージの内容をデータ・ハンドラーに渡します。これにより、データ・ハンドラーは、メッセージの内容がユーザーの要求するビジネス・オブジェクトと対応しているかどうかを確認できます。
ただし、2 つ以上のビジネス・オブジェクトに同一の入力フォーマットが定義されている場合は、コネクターはデータ・ハンドラーにデータを渡す前にそのデータが表すビジネス・オブジェクトを判別することはできません。このような場合、コネクターはメッセージ内容のみをデータ・ハンドラーに渡してから、生成されるビジネス・オブジェクトに基づいた変換プロパティーを検索します。したがって、データ・ハンドラーはメッセージ内容のみに基づいてビジネス・オブジェクトを判別する必要があります。
生成されるビジネス・オブジェクトの動詞が設定されていない場合、コネクターはなんらかの動詞を含む同じビジネス・オブジェクトに定義されている変換プロパティーを検索します。変換プロパティーのセットが 1 つだけ検出された場合、コネクターは特定の動詞を割り当てます。複数の変換プロパティーが検出された場合、コネクターは動詞を区別できないため、メッセージは失敗します。
以下に示す静的メタオブジェクトは、動詞 Create、Update、Delete、および Retrieve を使用する Customer ビジネス・オブジェクトを変換するコネクターを構成します。属性 Default はメタオブジェクトで定義されます。コネクターは以下の属性を持つ変換プロパティーを使用します。
OutputQueue=CustomerQueue1;ResponseTimeout=5000;TimeoutFatal=true
この属性は、その他すべての変換プロパティーのデフォルト値として使用されます。したがって、ある属性によって別の指定をされたり動的な子メタオブジェクト値によってオーバーライドされる場合を除いて、コネクターはすべてのビジネス・オブジェクトをキュー CustomerQueue1 に発行し、その後応答メッセージを待機します。5000 ミリ秒内に応答が到着しない場合、コネクター はすぐに終了します。
属性 Customer_Create は、フォーマットが NEW であるすべてのメッセージを動詞 Create 付きの Customer ビジネス・オブジェクトに変換する必要があることをコネクターに示します。出力フォーマットは定義されていないため、コネクターは入力用に定義されたフォーマット (この場合は NEW) を使用して、このオブジェクトと動詞の組み合わせを表すメッセージを送信します。
入力フォーマット MODIFY は多重定義されています。この入力フォーマットは、動詞 Update 付きのビジネス・オブジェクト Customer と動詞 Delete 付きのビジネス・オブジェクト Customer の両方に対して定義されています。検索されたこのフォーマットのメッセージを正常に処理するためには、メッセージの内容にビジネス・オブジェクトと動詞が含まれ、データ・ハンドラーがそれらを識別できるようになっている必要があります (入力フォーマットの多重定義を参照してください)。Request 処理操作では、出力フォーマットが定義されていないため、コネクターは入力フォーマット MODIFY を使用していずれかの動詞のメッセージを送信します。
属性 Customer_Retrieve は、動詞 Retrieve 付きの Customer タイプのビジネス・オブジェクトを、フォーマット Retrieve のメッセージとして送信する必要があることを指定します。デフォルトの応答時間は、コネクターがタイムアウトまでに最大 10000 ミリ秒待機するようにオーバーライドされているので注意してください (応答が受信されない場合も終了します)。
[ReposCopy] Version = 3.1.0 Repositories = 1cHyILNuPTc= [End] [BusinessObjectDefinition] Name = Sample_MO Version = 1.0.0 [Attribute] Name = Default Type = String Cardinality = 1 MaxLength = 1 IsKey = true IsForeignKey = false IsRequired = false AppSpecificInfo = OutputQueue=CustomerQueue1;ResponseTimeout=5000;TimeoutFatal=true IsRequiredServerBound = false [End] [Attribute] Name = Customer_Create Type = String Cardinality = 1 MaxLength = 1 IsKey = false IsForeignKey = false IsRequired = false AppSpecificInfo = InputFormat=NEW IsRequiredServerBound = false [End] [Attribute] Name = Customer_Update Type = String Cardinality = 1 MaxLength = 1 IsKey = false IsForeignKey = false IsRequired = false AppSpecificInfo = InputFormat=MODIFY IsRequiredServerBound = false [End] [Attribute] Name = Customer_Delete Type = String Cardinality = 1 MaxLength = 1 IsKey = false IsForeignKey = false IsRequired = false AppSpecificInfo = InputFormat=MODIFY IsRequiredServerBound = false [End] [Attribute] Name = Customer_Retrieve Type = String Cardinality = 1 MaxLength = 1 IsKey = false IsForeignKey = false IsRequired = false AppSpecificInfo = OutputFormat=RETRIEVE;ResponseTimeout=10000 IsRequiredServerBound = false [End] [Attribute] Name = ObjectEventId Type = String MaxLength = 255 IsKey = false IsForeignKey = false IsRequired = false IsRequiredServerBound = false [End] [Verb] Name = Create [End] [Verb] Name = Delete [End] [Verb] Name = Retrieve [End] [Verb] Name = Update [End] [End]
静的メタオブジェクトに必要なメタデータを指定することが困難または実行不可能な場合、オプションで、コネクターが実行時にビジネス・オブジェクト・インスタンスごとに指定されたメタデータを受け入れることができます。
コネクターは、コネクターに渡されるトップレベルのビジネス・オブジェクトに子として追加された動的メタオブジェクトから、変換プロパティーを認識して読み取ります。この動的な子メタオブジェクトの属性値は、コネクターの構成に使用される静的なメタオブジェクトに指定可能であった変換プロパティーと重複します。
動的な子メタオブジェクトのプロパティーは静的なメタオブジェクトから検出されるプロパティーをオーバーライドするため、動的な子メタオブジェクトを指定する場合は、静的なメタオブジェクトを指定するコネクター・プロパティーを組み込む必要はありません。したがって、動的な子メタオブジェクトは、静的なメタオブジェクトとは無関係に使用することができ、その逆もまた同様です。
前のセクションの表と次の表に、ビジネス・オブジェクト (Customer_Create) の静的子メタオブジェクトと動的子メタオブジェクトのサンプルをそれぞれ示します。アプリケーション固有の情報は名前と値のペアで構成され、それぞれのペアはセミコロンで区切られています。
プロパティー名 | 値 |
---|---|
DataEncoding | Text:UnicodeLittle |
DataHandlerMimeType* | text/delimited |
OutputFormat | CUST_OUT |
OutputQueue | QueueA |
ResponseTimeout | 10000 |
TimeoutFatal | False |
* コネクター構成プロパティーまたは静的メタオブジェクトに DataHandlerConfigMO が指定されていると想定されています。
コネクターは、受信されたトップレベル・ビジネス・オブジェクトのアプリケーション固有の情報を調べて、タグ cw_mo_conn が子メタオブジェクトを指定しているかどうかを判断します。子メタオブジェクトが指定されている場合、動的な子メタオブジェクトの値が静的なメタオブジェクトに指定された値をオーバーライドします。
ポーリング中に検索されたメッセージについてさらに詳しい情報をコラボレーションに提供するため、コネクターは、作成されたビジネス・オブジェクトに動的なメタオブジェクトが定義済みである場合、その特定の属性に値を取り込みます。
次の表に、動的子メタオブジェクトのポーリングのための構成の例を示します。
プロパティー名 | サンプル値 |
---|---|
InputFormat | CUST_IN |
InputQueue | MYInputQueue |
OutputFormat | CxIgnore |
OutputQueue | CxIgnore |
ResponseTimeout | CxIgnore |
TimeoutFatal | CxIgnore |
上記の表に示すように、動的子メタオブジェクトでは、追加の属性 InputQueue を定義できます。この属性は、特定のメッセージの検索元キューの名前を含みます。このプロパティーが子メタオブジェクトで定義されていない場合は、このプロパティーは取り込まれません。
シナリオ例:
[BusinessObjectDefinition] Name = MO_Sample_Config Version = 1.0.0 [Attribute] Name = OutputFormat Type = String MaxLength = 1 IsKey = true IsForeignKey = false IsRequired = false DefaultValue = CUST IsRequiredServerBound = false [End] [Attribute] Name = OutputQueue Type = String MaxLength = 1 IsKey = false IsForeignKey = false IsRequired = false DefaultValue = OUT IsRequiredServerBound = false [End] [Attribute] Name = ResponseTimeout Type = String MaxLength = 1 IsKey = false IsForeignKey = false IsRequired = false DefaultValue = -1 IsRequiredServerBound = false [End] [Attribute] Name = TimeoutFatal Type = String MaxLength = 1 IsKey = false IsForeignKey = false IsRequired = false DefaultValue = false IsRequiredServerBound = false [End] [Attribute] Name = InputFormat Type = String MaxLength = 1 IsKey = true IsForeignKey = false IsRequired = false IsRequiredServerBound = false [End] [Attribute] Name = InputQueue Type = String MaxLength = 1 IsKey = false IsForeignKey = false IsRequired = false IsRequiredServerBound = false [End] [Attribute] Name = ObjectEventId Type = String MaxLength = 255 IsKey = false IsForeignKey = false IsRequired = false IsRequiredServerBound = false [End] [Verb] Name = Create [End] [Verb] Name = Delete [End] [Verb] Name = Retrieve [End] [Verb] Name = Update [End] [End] [BusinessObjectDefinition] Name = Customer Version = 1.0.0 AppSpecificInfo = cw_mo_conn=MyConfig [Attribute] Name = FirstName Type = String MaxLength = 1 IsKey = true IsForeignKey = false IsRequired = false IsRequiredServerBound = false [End] [Attribute] Name = LastName Type = String MaxLength = 1 IsKey = true IsForeignKey = false IsRequired = false IsRequiredServerBound = false [End] [Attribute] Name = Telephone Type = String MaxLength = 1 IsKey = false IsForeignKey = false IsRequired = false IsRequiredServerBound = false [End] [Attribute] Name = MyConfig Type = MO_Sample_Config ContainedObjectVersion = 1.0.0 Relationship = Containment Cardinality = 1 MaxLength = 1 IsKey = false IsForeignKey = false IsRequired = false IsRequiredServerBound = false [End] [Attribute] Name = ObjectEventId Type = String MaxLength = 255 IsKey = false IsForeignKey = false IsRequired = false IsRequiredServerBound = false [End] [Verb] Name = Create [End] [Verb] Name = Delete [End] [Verb] Name = Retrieve [End] [Verb] Name = Update [End] [End]
動的メタオブジェクトに属性を追加すると、メッセージ・トランスポートの詳細情報を取得したりメッセージ・トランスポートを詳細に制御したりすることができます。このような属性を追加すると、JMS プロパティーを変更し、(アダプター・プロパティーで指定されたデフォルト ReplyToQueue を使用せずに) 要求ごとに ReplyToQueue を制御したり、メッセージの CorrelationID を再ターゲットしたりすることができます。このセクションでは、これらの属性、および同期モードと非同期モードの両方におけるイベント通知と要求処理に対する影響について説明します。
以下の属性は 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 | 読み取り/書き込み |
|
読み取り専用属性は、イベント通知中にメッセージ・ヘッダーから読み取られ、動的メタオブジェクトに書き込まれます。これらのプロパティーは、要求処理中に応答メッセージが発行されたときに動的メタオブジェクトも設定します。読み取り/書き込み属性は、要求処理中に作成されるメッセージ・ヘッダーで設定されます。イベント通知中は、読み取り/書き込み属性はメッセージ・ヘッダーから読み取られ、動的メタオブジェクトを設定します。
以下のセクションでは、これらの属性の解釈および使用について説明します。
動的メタオブジェクトの他の属性と異なり、JMSProperties は単一カーディナリティー子オブジェクトを定義する必要があります。この子オブジェクトの各属性は、以下のように JMS メッセージ・ヘッダーの可変部分で読み取り/書き込みを行う単一プロパティーを定義する必要があります。
以下の表に、JMSProperties オブジェクトの属性に対して定義する必要があるアプリケーション固有情報プロパティーを示します。
表 5. JMS プロパティー属性のアプリケーション固有情報
名前 | 指定可能な値 | コメント |
---|---|---|
名前 | 任意の有効な JMS プロパティー名 | これは JMS プロパティーの名前です。ベンダーによっては、拡張機能を提供するために特定のプロパティーを予約している場合があります。一般に、ユーザーはベンダー固有の機能にアクセスする場合以外は、JMS で開始するカスタム・プロパティーを定義してはなりません。 |
Type | String、Int、Boolean、Float、Double、Long、Short | これは JMS プロパティーのタイプです。JMS API は、JMS メッセージに値を設定するための多くのメソッドを提供します (例: setIntProperty、setLongProperty、setStringProperty)。ここで指定する JMS プロパティーのタイプによって、どのメソッドを使用してメッセージのプロパティー値を設定するかが決まります。 |
以下の図に、動的メタオブジェクトの属性 JMSProperties および JMS メッセージ・ヘッダーの 4 つのプロパティー (ID、GID、RESPONSE、および RESPONSE_PERSIST) の定義を示します。属性のアプリケーション固有情報はそれぞれの名前およびタイプを定義します。例えば、属性 ID はタイプ String の JMS プロパティー ID にマップされます。
ヘッダー属性を持つ動的メタオブジェクトがイベント・ビジネス・オブジェクトに存在する場合は、コネクターは、(メタオブジェクトにトランスポート関連のデータを設定するほかに) 以下のステップを実行します。
同期イベント処理の場合は、アダプターはイベントを通知し、InterChange Server Express からの応答を待った後、アプリケーションに応答メッセージを送信します。ビジネス・データに対する変更は、戻される応答メッセージに反映されます。イベントを通知する前に、アダプターは、非同期イベント通知の場合と同様に動的メタオブジェクトを設定します。動的メタオブジェクトに設定される値は、以下のように応答発行ヘッダーに反映されます (動的メタオブジェクトの他の読み取り専用属性は無視されます)。
メタオブジェクトで属性 CorrelationID を定義しない場合は、コネクターは自動的に CorrelationID を処理します。
コネクターは、動的メタオブジェクト (存在する場合) を使用して要求メッセージを設定してから発行します。コネクターは、以下のステップを実行してから要求メッセージを送信します。
コネクターは、動的メタオブジェクト (存在する場合) を使用して要求メッセージを設定してから発行します。動的メタオブジェクトがヘッダー属性を含む場合は、コネクターは、応答メッセージで検出された対応する新しい値をそのヘッダー属性に設定します。コネクターは、応答メッセージを受信した後、(メタオブジェクトにトランスポート関連のデータを設定するほかに) 以下のステップを実行します。
JMS プロパティーをメッセージから読み取れない場合、またはメッセージに書き込めない場合は、コネクターはエラーをログに記録し、要求またはイベントは失敗します。ユーザー指定の ReplyToQueue が存在しないかアクセスできない場合は、コネクターはエラーをログに記録し、要求は失敗します。CorrelationID が無効であるか設定できない場合は、コネクターはエラーをログに記録し、要求は失敗します。いずれの場合も、ログに記録されたメッセージはコネクターのメッセージ・ファイルからのものです。