Connector for SWIFT は、2 種類のメタオブジェクトを認識および読み取ることができます。
動的な子メタオブジェクトの属性値は、静的なメタオブジェクトの属性値と重複し、それらをオーバーライドします。
静的メタオブジェクトは、ビジネス・オブジェクトごとに定義された変換プロパティーのリストで構成されています。ビジネス・オブジェクトの変換プロパティーを定義するには、ストリング属性を作成し、構文 busObj_verb を使用してそれを命名します。例えば、動詞 Create を含む Customer オブジェクトの変換プロパティーを定義するには、Swift_MT502_Create という名前の属性を作成します。属性のアプリケーション固有テキストには、実際の変換プロパティーを指定します。
さらに、Default という名前の予約済み属性名を、メタオブジェクトに定義することもできます。この属性があると、そのプロパティーはすべてのビジネス・オブジェクトの変換プロパティーのデフォルト値として使用されます。
表 14 に、メタオブジェクトのプロパティーを示します。
プロパティー名 | 説明 |
---|---|
CollaborationName | コラボレーション名は、ビジネス・オブジェクトと動詞の組み合わせに対する属性の、アプリケーション固有テキスト内で指定される必要があります。例えば、Create
動詞付きのビジネス・オブジェクト Customer
の同期要求を処理するようにしたい場合は、静的メタデータ・オブジェクト内に
Swift_MTnnn_Verb
という名前の属性を設定します。ここで、nnn は SWIFT
メッセージ・タイプを表します
(例、Swift_MT502_Create)。Swift_MT502_Create
属性には、名前と値のペアを含む、アプリケーション固有テキストが入っていなければなりません。例えば、CollaborationName=MyCustomerProcessingCollab
です。構文の詳細については、アプリケーション固有の情報
の節を参照してください。この条件が満たされていない場合は、コネクターが
Customer
ビジネス・オブジェクトに関する要求を同期処理しようとすると、ランタイム・エラーが発生します。
|
DoNotReportBusObj | オプションで、DoNotReportBusObj
プロパティーを含めることができます。このプロパティーを true
に設定すると、発行されるすべての PAN
レポート・メッセージのメッセージ本文がブランクになります。このプロパティーは、要求が正常処理されたことは確認したいが、ビジネス・オブジェクト変更の通知は必要ない場合に使用することをお勧めします。このプロパティーは、NAN
レポートには影響しません。静的メタオブジェクトにこのプロパティーがない場合、コネクターはデフォルトの
false
をとり、ビジネス・オブジェクトをメッセージ・レポートに取り込みます。
|
InputFormat | 入力フォーマットは、特定のビジネス・オブジェクトと関連付けるメッセージ・フォーマットです。検索されたメッセージがこのフォーマットである場合、メッセージは可能であれば特定のビジネス・オブジェクトに変換されます。ビジネス・オブジェクトにこのフォーマットが指定されていない場合、コネクターは特定のビジネス・オブジェクトのサブスクリプション・デリバリーを処理しません。
静的メタオブジェクト内の InputQueue プロパティーは、アダプターでメッセージが特定のビジネス・オブジェクトにマップされる際に、InputFormat プロパティーとともに基準の役割を果たします。この機能は、Adapter for SWIFT Protocol では使用されません。 |
OutputFormat | 出力フォーマットは、指定されたビジネス・オブジェクトから作成されたメッセージで設定されます。OutputFormat プロパティーの値が指定されていない場合、使用可能であれば入力フォーマットが使用されます。動的な子メタオブジェクトに定義された OutputFormat プロパティーは、静的なメタオブジェクトに定義された値をオーバーライドします。 |
InputQueue | コネクターが、新しいメッセージを検出するためにポーリングする入力キュー。コネクター固有のプロパティーとしての InputQueue
プロパティーは、アダプターのポーリング先キューを定義します。これは、アダプターがポーリングするキューを決定するのに使用する唯一のプロパティーです。
静的メタオブジェクト内の InputQueue プロパティーは、アダプターでメッセージが特定のビジネス・オブジェクトにマップされる際に、InputFormat プロパティーとともに基準の役割を果たします。この機能は、Adapter for SWIFT Protocol では使用されません。 |
OutputQueue | 出力キューは、特定のビジネス・オブジェクトから派生したメッセージが配信されるキューです。動的な子メタオブジェクトに定義された OutputQueue プロパティーは、静的なメタオブジェクトに定義された値をオーバーライドします。 |
ResponseTimeout | タイムアウトまでの応答の待ち時間 (ミリ秒)。このプロパティーが未定義、または負の値の場合、コネクターは応答を待たずに即時に SUCCESS を戻します。動的子メタオブジェクトに定義された ResponseTimeout プロパティーの値は、静的メタオブジェクトに定義された値をオーバーライドします。 |
TimeoutFatal | このプロパティーが定義されていて、値 true を含む場合、ResponseTimeout に指定された時間内に応答を受信しなければ、コネクターは APP_RESPONSE_TIMEOUT を戻します。応答メッセージを待機中のその他すべてのスレッドは、InterChange Server Express にすぐに APP_RESPONSE_TIMEOUT を戻します。これにより、InterChange Server Express はコネクターへの接続を終了します。動的な子メタオブジェクトに定義された TimeoutFatal プロパティーは、静的なメタオブジェクトに定義された値をオーバーライドします。 |
アプリケーション固有の情報は、名前と値のペアで構成され、それらはセミコロンで区切られています。例えば、次のようになります。
InputFormat=ORDER_IN;OutputFormat=ORDER_OUT
アプリケーション固有の情報を使用すれば、データ・ハンドラーを入力キューにマップできます。
静的メタオブジェクトのアプリケーション固有情報で InputQueue プロパティーを使用することにより、データ・ハンドラーと入力キューを関連付けることができます。この機能は、異なる書式や変換要件を持つ複数の取引先と取り引きする場合に役立ちます。それには、以下の作業を行う必要があります。
例えば、次に示す静的メタオブジェクトの属性は、データ・ハンドラーと、CompReceipts という名前の InputQueue を関連付けています。
[Attribute] Name = Swift_MT502_Create Type = String Cardinality = 1 MaxLength = 1 IsKey = false IsForeignKey = false IsRequired = false AppSpecificInfo = InputQueue=//queue.manager/CompReceipts; DataHandlerClassName=com.crossworlds. DataHandlers.swift.disposition_notification; DataHandlerMimeType=message/ disposition_notification IsRequiredServerBound = false [End]
コネクターは通常、メッセージ検索時に入力フォーマットを特定のビジネス・オブジェクトと動詞の組み合わせと付き合わせます。次に、コネクターはそのビジネス・オブジェクト名とメッセージの内容をデータ・ハンドラーに渡します。これにより、データ・ハンドラーは、メッセージの内容がユーザーの要求するビジネス・オブジェクトと対応しているかどうかを確認できます。
ただし、2 つ以上のビジネス・オブジェクトに同一の入力フォーマットが定義されている場合は、コネクターはデータ・ハンドラーにデータを渡す前にそのデータが表すビジネス・オブジェクトを判別することはできません。このような場合、コネクターはメッセージ内容のみをデータ・ハンドラーに渡してから、生成されるビジネス・オブジェクトに基づいた変換プロパティーを検索します。したがって、データ・ハンドラーはメッセージ内容のみに基づいてビジネス・オブジェクトを判別する必要があります。
生成されるビジネス・オブジェクトの動詞が設定されていない場合、コネクターはなんらかの動詞を含む同じビジネス・オブジェクトに定義されている変換プロパティーを検索します。変換プロパティーのセットが 1 つだけ検出された場合、コネクターは特定の動詞を割り当てます。複数の変換プロパティーが検出された場合、コネクターは動詞を区別できないため、メッセージは失敗します。
以下に示す静的なメタオブジェクトは、Create および Retrieve の動詞を使用して SWIFT_MT502 ビジネス・オブジェクトを変換するようにコネクターを構成します。属性 Default はメタオブジェクトで定義されます。コネクターは以下の属性を持つ変換プロパティーを使用します。
OutputQueue=CustomerQueue1;ResponseTimeout=5000; TimeoutFatal=true
この属性は、その他すべての変換プロパティーのデフォルト値として使用されます。したがって、ある属性によって別の指定をされたり動的な子メタオブジェクト値によってオーバーライドされる場合を除いて、コネクターはすべてのビジネス・オブジェクトをキュー CustomerQueue1 に発行し、その後応答メッセージを待機します。5000 ミリ秒内に応答が到着しない場合、コネクター はすぐに終了します。
属性 Swift_MT502_Create は、フォーマット NEW のメッセージはすべて、動詞 Create を含むビジネス・オブジェクトに変換する必要があることをコネクターに示します。出力フォーマットは定義されていないため、コネクターは入力用に定義されたフォーマット (この場合は NEW) を使用して、このオブジェクトと動詞の組み合わせを表すメッセージを送信します。
属性 Swift_MT502_Retrieve は、動詞 Retrieve を含むビジネス・オブジェクトが、フォーマット 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 = Swift_MT502_Create Type = String Cardinality = 1 MaxLength = 1 IsKey = false IsForeignKey = false IsRequired = false AppSpecificInfo = InputFormat=NEW IsRequiredServerBound = false [End] [Attribute] Name = Swift_MT502_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 = Retrieve [End] [End]
静的なメタオブジェクトに必要なメタデータを指定することが困難または実行不可能な場合、コネクターは、ビジネス・オブジェクト・インスタンスごとに実行時に指定されたメタデータをオプションで受け入れることができます。
コネクターは、コネクターに渡されるトップレベル・ビジネス・オブジェクトに子として追加される動的なメタオブジェクトから、変換プロパティーを認識し、読み取ります。この動的な子メタオブジェクトの属性値は、コネクターの構成に使用される静的なメタオブジェクトに指定可能であった変換プロパティーと重複します。
動的な子メタオブジェクトのプロパティーは静的なメタオブジェクトから検出されるプロパティーをオーバーライドするため、動的な子メタオブジェクトを指定する場合は、静的なメタオブジェクトを指定するコネクター・プロパティーを組み込む必要はありません。つまり、動的子メタオブジェクトと静的メタオブジェクトのいずれを使用することも、両方を使用することもできます。
表 15 に、ビジネス・オブジェクト Swift_MT502_Create
の静的メタオブジェクト・プロパティーの例を示します。アプリケーション固有のテキストは、セミコロンで区切られた名前と値のペアで構成されます。
表 15. Swift_MT502_Create の静的メタオブジェクト構造
属性名 | アプリケーション固有のテキスト |
---|---|
Swift_MT502_Create |
InputFormat=ORDER_IN;
|
表 16 に、ビジネス・オブジェクト Swift_MT_Create
の動的子メタオブジェクトの例を示します。
表 16. Swift_MT502_Create の動的子メタオブジェクト構造
プロパティー名 | 値 |
---|---|
OutputFormat | ORDER_OUT |
OutputQueue | QueueA |
ResponseTimeout | 10000 |
TimeoutFatal | False |
コネクターは、受信したトップレベルのビジネス・オブジェクトのアプリケーション固有テキストをチェックし、タグ cw_mo_conn に子メタオブジェクトが指定されているかを判別します。子メタオブジェクトが指定されている場合、動的な子メタオブジェクトの値が静的なメタオブジェクトに指定された値をオーバーライドします。
ポーリング中に検索されたメッセージについてさらに詳しい情報を InterChange Server Express に提供するため、コネクターは、作成されたビジネス・オブジェクトに動的なメタオブジェクトが定義済みである場合、その特定の属性に値を取り込みます。
表 17
に、動的な子メタオブジェクトがポーリング用に構造化される方法を示します。
表 17. ポーリング用の JMS 動的子メタオブジェクト構造
プロパティー名 | サンプル値 |
---|---|
InputFormat | ORDER_IN |
InputQueue | MYInputQueue |
OutputFormat | CxIgnore |
OutputQueue | CxIgnore |
ResponseTimeout | CxIgnore |
TimeoutFatal | CxIgnore |
表 17 に示すように、動的子メタオブジェクトで追加のプロパティー InputQueue を定義できます。このプロパティーには特定のメッセージが検索されるキューの名前が含まれます。子メタオブジェクト内にこのプロパティーが定義されていない場合、これらには値が取り込まれません。
シナリオ例:
[BusinessObjectDefinition] Name = MO_Sample_Config Version = 1.0.0 [Attribute] Name = OutputFormat Type = String MaxLength = 1 IsKey = true IsForeignKey = false IsRequired = false DefaultValue = ORDER 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 = Retrieve [End] [End] [BusinessObjectDefinition] Name = Swift_MT502 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 = Retrieve [End] [End]
動的メタオブジェクトに属性を追加すると、メッセージ・トランスポートの詳細情報を取得したりメッセージ・トランスポートを詳細に制御したりすることができます。このような属性を追加すると、JMS プロパティーを変更し、(アダプター・プロパティーで指定された デフォルト ReplyToQueue を使用せずに) 要求ごとに ReplyToQueue を制御したり、メッセージの CorrelationID を再ターゲットしたりすることができます。このセクションでは、これらの属性、および同期モードと非同期モードの両方におけるイベント通知と要求処理に対する影響について説明します。
以下の属性は JMS および SWIFT
ヘッダー・プロパティーを反映しており、動的メタオブジェクトで認識されます。
ヘッダー属性名 | モード | 対応する 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
オブジェクトの属性に対して定義する必要があるアプリケーション固有情報プロパティーを示します。
表 19. JMS プロパティー属性のアプリケーション固有情報
名前 | 指定可能な値 | コメント |
---|---|---|
Name | 任意の有効な 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 が無効であるか設定できない場合は、コネクターはエラーをログに記録し、要求は失敗します。いずれの場合も、ログに記録されたメッセージはコネクターのメッセージ・ファイルからのものです。