メタオブジェクト属性構成

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_1Text:UnicodeLittleText、または 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 コネクターが、新しいメッセージを検出するためにポーリングする入力キュー。
注:
コネクター固有のプロパティーにある InputQueue プロパティーは、アダプターがポーリングするキューを定義します。これは、アダプターがポーリングするキューを決定するのに使用する唯一のプロパティーです。静的 MO では、InputQueue プロパティーおよび InputFormat プロパティーは、アダプターが指定されたメッセージを特定のビジネス・オブジェクトにマップする条件として使用できます。データ・ハンドラーの InputQueues へのマッピングについては、データ・ハンドラーから InputQueues へのマッピングを参照してください。
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

データ・ハンドラーから InputQueues へのマッピング

静的メタオブジェクトのアプリケーション固有情報で InputQueue プロパティーを使用することにより、データ・ハンドラーと入力キューを関連付けることができます。この機能は、異なる書式や変換要件を持つ複数の取引先と取り引きする場合に役立ちます。それには、以下の作業を行う必要があります。

  1. コネクター固有のプロパティー (InputQueue参照) を使用して 1 つ以上の入力キューを構成します。
  2. それぞれの入力キューごとに、キュー・マネージャーおよび入力キュー名を指定し、またアプリケーション固有情報にデータ・ハンドラーのクラス名および MIME タイプを指定する。

例えば、次に示す静的メタオブジェクトの属性は、データ・ハンドラーと、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 ミリ秒内に応答が到着しない場合、コネクター はすぐに終了します。

動詞 Create 付き Customer オブジェクト

属性 Customer_Create は、フォーマットが NEW であるすべてのメッセージを動詞 Create 付きの Customer ビジネス・オブジェクトに変換する必要があることをコネクターに示します。出力フォーマットは定義されていないため、コネクターは入力用に定義されたフォーマット (この場合は NEW) を使用して、このオブジェクトと動詞の組み合わせを表すメッセージを送信します。

動詞 Update および Delete 付き Customer オブジェクト

入力フォーマット MODIFY は多重定義されています。この入力フォーマットは、動詞 Update 付きのビジネス・オブジェクト Customer と動詞 Delete 付きのビジネス・オブジェクト Customer の両方に対して定義されています。検索されたこのフォーマットのメッセージを正常に処理するためには、メッセージの内容にビジネス・オブジェクトと動詞が含まれ、データ・ハンドラーがそれらを識別できるようになっている必要があります (入力フォーマットの多重定義を参照してください)。Request 処理操作では、出力フォーマットが定義されていないため、コネクターは入力フォーマット MODIFY を使用していずれかの動詞のメッセージを送信します。

動詞 Retrieve 付き Customer オブジェクト

属性 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 ヘッダー、WebSphere MQ メッセージ・プロパティー、および動的子メタオブジェクト属性

動的メタオブジェクトに属性を追加すると、メッセージ・トランスポートの詳細情報を取得したりメッセージ・トランスポートを詳細に制御したりすることができます。このような属性を追加すると、JMS プロパティーを変更し、(アダプター・プロパティーで指定されたデフォルト ReplyToQueue を使用せずに) 要求ごとに ReplyToQueue を制御したり、メッセージの CorrelationID を再ターゲットしたりすることができます。このセクションでは、これらの属性、および同期モードと非同期モードの両方におけるイベント通知と要求処理に対する影響について説明します。

以下の属性は JMS および WebSphere MQ ヘッダー・プロパティーを反映しており、動的メタオブジェクトで認識されます。

表 4. 動的メタオブジェクト・ヘッダー属性
ヘッダー属性名 モード 対応する 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
 
読み取り/書き込み

読み取り専用属性は、イベント通知中にメッセージ・ヘッダーから読み取られ、動的メタオブジェクトに書き込まれます。これらのプロパティーは、要求処理中に応答メッセージが発行されたときに動的メタオブジェクトも設定します。読み取り/書き込み属性は、要求処理中に作成されるメッセージ・ヘッダーで設定されます。イベント通知中は、読み取り/書き込み属性はメッセージ・ヘッダーから読み取られ、動的メタオブジェクトを設定します。

以下のセクションでは、これらの属性の解釈および使用について説明します。

注:
上記の属性はいずれも必須ではありません。ビジネス・プロセスに関連する動的メタオブジェクトには任意の属性を追加できます。

JMS プロパティー

動的メタオブジェクトの他の属性と異なり、JMSProperties は単一カーディナリティー子オブジェクトを定義する必要があります。この子オブジェクトの各属性は、以下のように JMS メッセージ・ヘッダーの可変部分で読み取り/書き込みを行う単一プロパティーを定義する必要があります。

  1. 属性の名前はセマンティック値を持ちません。
  2. 属性のタイプは、JMS プロパティー・タイプに無関係に必ず String でなければなりません。
  3. 属性のアプリケーション固有情報は、属性をマップする JMS メッセージ・プロパティーの名前と形式を定義する 2 つの名前と値の組を含まなければなりません。

以下の表に、JMSProperties オブジェクトの属性に対して定義する必要があるアプリケーション固有情報プロパティーを示します。

表 5. JMS プロパティー属性のアプリケーション固有情報
名前 指定可能な値 コメント
名前 任意の有効な JMS プロパティー名 これは JMS プロパティーの名前です。ベンダーによっては、拡張機能を提供するために特定のプロパティーを予約している場合があります。一般に、ユーザーはベンダー固有の機能にアクセスする場合以外は、JMS で開始するカスタム・プロパティーを定義してはなりません。
Type StringIntBooleanFloatDoubleLongShort これは JMS プロパティーのタイプです。JMS API は、JMS メッセージに値を設定するための多くのメソッドを提供します (例: setIntPropertysetLongPropertysetStringProperty)。ここで指定する JMS プロパティーのタイプによって、どのメソッドを使用してメッセージのプロパティー値を設定するかが決まります。

以下の図に、動的メタオブジェクトの属性 JMSProperties および JMS メッセージ・ヘッダーの 4 つのプロパティー (ID、GID、RESPONSE、および RESPONSE_PERSIST) の定義を示します。属性のアプリケーション固有情報はそれぞれの名前およびタイプを定義します。例えば、属性 ID はタイプ String の JMS プロパティー ID にマップされます。

図 3. 動的メタオブジェクトの JMS プロパティー属性


非同期イベント通知

ヘッダー属性を持つ動的メタオブジェクトがイベント・ビジネス・オブジェクトに存在する場合は、コネクターは、(メタオブジェクトにトランスポート関連のデータを設定するほかに) 以下のステップを実行します。

  1. メタオブジェクトの CorrelationId 属性に、メッセージの JMSCorrelationID ヘッダー・フィールドで指定された値を設定します。
  2. メタオブジェクトの ReplyToQueue 属性に、メッセージの JMSReplyTo ヘッダー・フィールドで指定されたキューを設定します。このヘッダー・フィールドはメッセージの Java オブジェクトによって表されるため、この属性にはキューの名前 (多くの場合は URI) が設定されます。
  3. メタオブジェクトの DeliveryMode 属性に、メッセージの JMSDeliveryMode ヘッダー・フィールドで指定された値を設定します。
  4. メタオブジェクトの Priority 属性に、メッセージの JMSPriority ヘッダー・フィールドを設定します。
  5. メタオブジェクトの Destination 属性に、メッセージの JMSDestination ヘッダー・フィールドの名前を設定します。Destination はオブジェクトによって表されるため、この属性には Destination オブジェクトの名前が設定されます。
  6. メタオブジェクトの Expiration 属性に、メッセージの JMSExpiration ヘッダー・フィールドの値を設定します。
  7. メタオブジェクトの MessageID 属性に、メッセージの JMSMessageID ヘッダー・フィールドの値を設定します。
  8. メタオブジェクトの Redelivered 属性に、メッセージの JMSRedelivered ヘッダー・フィールドの値を設定します。
  9. メタオブジェクトの TimeStamp 属性に、メッセージの JMSTimeStamp ヘッダー・フィールドの値を設定します。
  10. メタオブジェクトの Type 属性に、メッセージの JMSType ヘッダー・フィールドの値を設定します。
  11. メタオブジェクトの UserID 属性に、メッセージの JMSXUserID プロパティー・フィールドの値を設定します。
  12. メタオブジェクトの AppID 属性に、メッセージの JMSXAppID プロパティー・フィールドの値を設定します。
  13. メタオブジェクトの DeliveryCount 属性に、メッセージの JMSXDeliveryCount プロパティー・フィールドの値を設定します。
  14. メタオブジェクトの GroupID 属性に、メッセージの JMSXGroupID プロパティー・フィールドの値を設定します。
  15. メタオブジェクトの GroupSeq 属性に、メッセージの JMSXGroupSeq プロパティー・フィールドの値を設定します。
  16. メタオブジェクトの JMSProperties 属性に定義されたオブジェクトを検証します。アダプターは、メッセージの対応するプロパティーの値をこのオブジェクトの各属性に設定します。特定のプロパティーがメッセージで定義されていない場合は、アダプターはその属性の値を CxBlank に設定します。

同期イベント通知

同期イベント処理の場合は、アダプターはイベントを通知し、InterChange Server Express からの応答を待った後、アプリケーションに応答メッセージを送信します。ビジネス・データに対する変更は、戻される応答メッセージに反映されます。イベントを通知する前に、アダプターは、非同期イベント通知の場合と同様に動的メタオブジェクトを設定します。動的メタオブジェクトに設定される値は、以下のように応答発行ヘッダーに反映されます (動的メタオブジェクトの他の読み取り専用属性は無視されます)。

非同期要求処理

コネクターは、動的メタオブジェクト (存在する場合) を使用して要求メッセージを設定してから発行します。コネクターは、以下のステップを実行してから要求メッセージを送信します。

  1. 属性 CorrelationID が動的メタオブジェクトに存在する場合は、コネクターは、アウトバウンド要求メッセージの CorrelationID をこの値に設定します。
  2. 属性 ReplyToQueue が動的メタオブジェクトで指定されている場合は、コネクターは、応答メッセージでこのキューを渡し、このキューで応答を待ちます。これにより、コネクター構成プロパティーで指定されている ReplyToQueue 値をオーバーライドできます。さらに負の ResponseTimeout (コネクターが応答を待たないことを示す) を指定した場合は、コネクターは実際には応答を待ちませんが、応答メッセージで ReplyToQueue が設定されます。
  3. 属性 DeliveryMode2 に設定すると、メッセージは永続的に送信されます。DeliveryMode1 に設定すると、メッセージは永続的に送信されません。その他の値を設定すると、コネクターに障害が発生します。MO に DeliveryMode を指定しないと、JMS プロバイダーが永続設定を確立します。
  4. 属性 Priority を指定すると、コネクターが発信要求に値を設定します。Priority 属性には 0 から 9 までの値を設定できます。その他の値を指定すると、コネクターが終了します。
  5. 動的メタオブジェクトで属性 JMSProperties を指定した場合は、コネクターによって送信されるアウトバウンド・メッセージに、子動的メタオブジェクトで指定された対応する JMS プロパティーが設定されます。

注:
動的メタオブジェクトのヘッダー属性が定義されていない場合または CxIgnore を指定した場合は、コネクターはデフォルト設定に従います。

同期要求処理

コネクターは、動的メタオブジェクト (存在する場合) を使用して要求メッセージを設定してから発行します。動的メタオブジェクトがヘッダー属性を含む場合は、コネクターは、応答メッセージで検出された対応する新しい値をそのヘッダー属性に設定します。コネクターは、応答メッセージを受信した後、(メタオブジェクトにトランスポート関連のデータを設定するほかに) 以下のステップを実行します。

  1. 属性 CorrelationID が動的メタオブジェクトに存在する場合は、アダプターは、応答メッセージで指定された JMSCorrelationID でこの属性を更新します。
  2. 属性 ReplyToQueue が動的メタオブジェクトで定義されている場合は、アダプターは、応答メッセージで指定された JMSReplyTo の名前でこの属性を更新します。
  3. 属性 DeliveryMode が動的メタオブジェクトに存在する場合は、アダプターは、メッセージの JMSDeliveryMode ヘッダー・フィールドの値でこの属性を更新します。
  4. 属性 Priority が動的メタオブジェクトに存在する場合は、アダプターは、メッセージの JMSPriority ヘッダー・フィールドの値でこの属性を更新します。
  5. 属性 Destination が動的メタオブジェクトで定義されている場合は、アダプターは、応答メッセージで指定された JMSDestination の名前でこの属性を更新します。
  6. 属性 Expiration が動的メタオブジェクトに存在する場合は、アダプターは、メッセージの JMSExpiration ヘッダー・フィールドの値でこの属性を更新します。
  7. 属性 MessageID が動的メタオブジェクトに存在する場合は、アダプターは、メッセージの JMSMessageID ヘッダー・フィールドの値でこの属性を更新します。
  8. 属性 Redelivered が動的メタオブジェクトに存在する場合は、アダプターは、メッセージの JMSRedelivered ヘッダー・フィールドの値でこの属性を更新します。
  9. 属性 TimeStamp が動的メタオブジェクトに存在する場合は、アダプターは、メッセージの JMSTimeStamp ヘッダー・フィールドの値でこの属性を更新します。
  10. 属性 Type が動的メタオブジェクトに存在する場合は、アダプターは、メッセージの JMSType ヘッダー・フィールドの値でこの属性を更新します。
  11. 属性 UserID が動的メタオブジェクトに存在する場合は、アダプターは、メッセージの JMSXUserID ヘッダー・フィールドの値でこの属性を更新します。
  12. 属性 AppID が動的メタオブジェクトに存在する場合は、アダプターは、メッセージの JMSXAppID プロパティー・フィールドの値でこの属性を更新します。
  13. 属性 DeliveryCount が動的メタオブジェクトに存在する場合は、アダプターは、メッセージの JMSXDeliveryCount ヘッダー・フィールドの値でこの属性を更新します。
  14. 属性 GroupID が動的メタオブジェクトに存在する場合は、アダプターは、メッセージの JMSXGroupID ヘッダー・フィールドの値でこの属性を更新します。
  15. 属性 GroupSeq が動的メタオブジェクトに存在する場合は、アダプターは、メッセージの JMSXGroupSeq ヘッダー・フィールドの値でこの属性を更新します。
  16. 属性 JMSProperties が動的メタオブジェクトで定義されている場合は、アダプターは、子オブジェクトで定義されているすべてのプロパティーを、応答メッセージで検出された値で更新します。子オブジェクトで定義されているプロパティーがメッセージに存在しない場合は、値は CxBlank に設定されます。

注:
動的メタオブジェクトを使用して要求メッセージで設定された CorrelationID を変更しても、アダプターが応答メッセージを識別する方法には影響しません。アダプターは、デフォルトですべての応答メッセージの CorrelationID がアダプターによって送信された要求のメッセージ ID に等しいことを要求します。

エラー処理

JMS プロパティーをメッセージから読み取れない場合、またはメッセージに書き込めない場合は、コネクターはエラーをログに記録し、要求またはイベントは失敗します。ユーザー指定の ReplyToQueue が存在しないかアクセスできない場合は、コネクターはエラーをログに記録し、要求は失敗します。CorrelationID が無効であるか設定できない場合は、コネクターはエラーをログに記録し、要求は失敗します。いずれの場合も、ログに記録されたメッセージはコネクターのメッセージ・ファイルからのものです。

Copyright IBM Corp. 2004