この章では、Oracle B2Bインタフェースを使用して、アウトバウンドのEDI X12およびEDI EDIFACTメッセージをアウトバウンド・メッセージ用にバッチ処理、スケジュールおよび送信する方法について説明します(Oracle B2Bへのインバウンド・メッセージは自動的にバッチ処理解除されます。)
この章では、次の項目について説明します。
EDIの詳細は、次を参照してください。
通常、バッチ処理はメッセージをドキュメント・タイプ別にグループ化するために使用します。たとえば、発注書のバッチや請求書のバッチを、1つ以上の取引パートナに送信できます。また、複数のドキュメント・タイプをバッチ処理して、1つ以上の取引パートナに送信することもできます。
1000を超えるドキュメントをバッチ処理するときに、ペイロード・サイズが30KBを超える場合は、特別な設定が必要です。Oracle Fusion Middlewareパフォーマンス・ガイドの多数のドキュメントのバッチ処理に関する設定を参照してください。
図11-1に、EDIメッセージのバッチ送信を設定する画面を示します。
バッチを設定するには、次を行います:
「管理」リンクをクリックします。
「バッチ」タブで、「バッチのスケジュール」タブをクリックします。
表11-1で説明する検索パラメータを使用して、バッチ処理するアグリーメントを特定します。
ドキュメント検索パラメータは次のように使用します。最初に、ドキュメント・プロトコル名を選択してドキュメント・プロトコル・バージョンのリストを移入します。次に、ドキュメント・プロトコル・バージョンを選択してドキュメント・タイプのリストを移入します。その後、ドキュメント・タイプを選択してドキュメント定義のリストを移入します。
表11-1 バッチ作成用の検索パラメータ
パラメータ | 説明 |
---|---|
一致(「すべて」または「任意」) |
「すべて」を選択すると、値を設定したフィールドがand条件を使用して照合されます。「任意」を選択すると、値を設定したフィールドがor条件を使用して照合されます。 |
応答パートナ |
「次で始まる」、「次を含む」、「次と等しい」または「次で終わる」を選択し、応答取引パートナの名前の該当する部分を入力します。 |
アグリーメント |
「次で始まる」、「次を含む」、「次と等しい」または「次で終わる」を選択し、アグリーメントの名前の該当する部分を入力します。 |
ドキュメント・プロトコル名 |
「EDI_EDIFACT」または「EDI_X12」を選択します。 |
ドキュメント・プロトコル・バージョン |
以前に作成したドキュメント・プロトコル・バージョンを選択します。 |
ドキュメント・タイプ |
以前に作成したドキュメント・タイプを選択します。 |
ドキュメント定義 |
以前に作成したドキュメント定義を選択します。 |
「検索」をクリックします。
検索基準と一致したデプロイ済のアクティブなアグリーメント(アウトバウンド)が表示されます。
タスク2、「バッチの作成」に進みます。
バッチの一意の名前を入力します。
バッチ処理するアグリーメントを選択します。
「バッチの作成」をクリックします。
タスク3、「バッチのスケジュール」に進みます。
「スケジューラの起動」をクリックします。
「非繰返しイベント」タブまたは「繰返しイベント」タブを選択します。
非繰返しイベントの場合は、次のいずれかを実行します。
「スケジューラ」ダイアログに示された書式で日付を入力し、「OK」をクリックします。
または、「カレンダ」ボタンをクリックし、日付と時刻を指定して「OK」をクリックします。
繰返しイベント(図11-2を参照)の場合は、分、時間、月、年および日付の詳細を指定して、イベントをトリガーする間隔に関する詳細を入力します。次に、「OK」をクリックします。
作成したバッチは、「バッチの管理」タブに表示できます。
注意: バッチ内のいずれかのドキュメントの検証フラグがオンに設定されている場合、バッチ全体が検証済になります。 |
この機能を使用して、バッチ処理メッセージの許容トランザクション数(「最大数」)またはバッチ処理メッセージの許容サイズ(「最大サイズ」)に基づいて、アウトバウンドEDIメッセージをバッチ処理できます。
「最大数」または「最大サイズ」に基づいてメッセージをバッチ処理するには、次の手順を実行します。
バッチを作成します。
「バッチ名」フィールドにバッチの一意の名前を入力します。
「バッチ処理するアグリーメントの検索」に従って、バッチ処理するアグリーメントを検索します。
トランザクション数または最大サイズに基づいてバッチを作成する場合、「スケジュール範囲」はオプションです。ただし、「スケジューラの起動」をクリックして、タスク3「バッチのスケジュール」の指定に従ってイベント(非繰返しまたは繰返し)をスケジュールすることはできます。
アウトバウンドEDIメッセージのサイズに基づいてバッチ処理を行う場合は、「最大サイズ(KB)」フィールドにアウトバウンド・ペイロードのサイズの値をKB単位で入力します。
アウトバウンドEDIメッセージのトランザクション数に基づいてバッチ処理を行う場合は、「最大数」フィールドに値を入力します。
「バッチの作成」をクリックします。
パフォーマンスを向上するために、121.3.0 B2Bのバッチ処理には変更が導入されています。つまり、バッチ・モニタリング・スレッドがエンジンに追加されました。このスレッドは(デフォルトで)1分間スリープし、ウェイクアップすると、バッチ処理する保留メッセージを検索し、それらを処理して、件数やサイズの条件が満たされているかどうかを確認します。スレッドのスリープ時間は、プロパティb2b.batchMonitorSleepInterval
で制御されます。
ここでのサイズは、xmlペイロード・サイズであることに注意してください。
この変更では、新しいオプションb2b.batchMonitorStragglerTimeLag
(分単位で指定)も導入されています。これは、指定された特定の時間制限内に件数とサイズが一致しない場合であっても、バッチ処理を強制的に実行するためのオプションです。
たとえば、タイム・ラグが60分、件数が50、サイズが10MBに設定されている場合、バッチ・モニタリング・スレッドがウェイクアップして、保留メッセージ表内の先頭のメッセージの待ち時間が1時間を超えていることを検出すると、サイズと件数の条件が満たされていなくても、バッチの作成が強制的に行われます。
この機能では、b2b.batchMonitorStragglerTimeLag
およびb2b.batchMonitorStragglerBatchName
という2つのプロパティが使用されます。
その機能の詳細は、E.1項「Fusion Middleware Controlで設定するプロパティ」の表E-1「Oracle Enterprise Manager Fusion Middleware ControlのOracle B2Bプロパティ」を参照してください。
次に、様々なバッチ設定に基づくバッチ処理を示します。
ケース1: バッチ作成時に「最大数」のみが指定されている場合: 指定されたトランザクション数に基づいてバッチ処理が実行されます。
たとえば、「最大数」として4が指定されている場合、アウトバウンドEDIメッセージを4つエンキューすると、バッチ・モニタリング・スレッドがスリープからウェイクアップしたときに、4つのトランザクションを含むバッチ処理メッセージが1つ作成されます。エンキューされたメッセージの数が4つに満たない場合、それらのメッセージはバッチ処理されません。5つ以上(8個未満)のメッセージをエンキューすると、4つのメッセージがバッチ処理され、残りは保留表に保持されます。
ケース2: バッチ作成時に「最大サイズ」(KB単位)のみが指定されている場合: バッチ処理するメッセージのサイズ(最後のメッセージのサイズを含む)に基づいてバッチ処理が実行されます。
たとえば、「最大サイズ」として4KBが指定されている場合、それぞれが1KBのアウトバウンドEDIメッセージを4つエンキューすると、バッチ・モニタリング・スレッドがスリープからウェイクアップしたときに、サイズ4KBのバッチ処理メッセージが1つ作成されます。エンキューされたメッセージがサイズの条件を満たさない場合、これらのメッセージはバッチ処理されません。4KBを超えてメッセージを追加すると(たとえば、6個のメッセージ)、4つのメッセージのみがバッチ処理され、残りの2つのメッセージは保留表に保持されます。
ケース3: バッチ作成時に「最大数」と「最大サイズ」の両方が指定されている場合: 最初に満たされた条件に基づいてバッチ処理が実行されます。
ケース4: バッチ作成時に「最大数」と「最大サイズ」が指定され、さらに(「スケジューラの起動」を使用して)バッチのイベントがスケジュールされている場合: ケース1、ケース2およびケース3の順番にメッセージのバッチ処理が実行されます。ただし、タイマー・イベントが発生すると、その時点でバッチ処理可能なすべてのメッセージがバッチ処理されます(「最大数」と「最大サイズ」に指定されている値は無視されます。)
ケース5: バッチ作成時に「最大数」のみが指定され、b2b.batchMonitorStragglerTimeLagおよびb2b.batchMonitorStragglerBatchNameがバッチ用に設定されている場合:
条件5.1: タイム・ラグを超えていないが、最大数を超えている場合。たとえば、「最大数」として4、タイム・ラグとして10分が指定されている場合、アウトバウンドEDIメッセージを4つエンキューすると、バッチ・モニタリング・スレッドがスリープからウェイクアップしたときに、4つのトランザクションを含むバッチ処理メッセージが1つ作成されます。エンキューされたメッセージの数が4つに満たない場合、それらのメッセージはバッチ処理されません(タイム・ラグは超えていません)。5つ以上(8個未満)のメッセージをエンキューすると、4つのメッセージがバッチ処理され、残りは保留表に保持されます。
条件5.2: タイム・ラグを超えていて、最大数を超えていない場合。たとえば、「最大数」として4、タイム・ラグとして10分が指定されている場合、アウトバウンドEDIメッセージを3つエンキューすると、バッチ・モニタリング・スレッドがスリープからウェイクアップしたときに、保留リスト内の先頭のメッセージが10分というタイム・ラグ条件を超えていることが検出されると、3つのトランザクションを含むバッチ処理メッセージが1つ作成されます。
条件5.3: タイム・ラグを超えていて、最大数を超えている場合
たとえば、「最大数」として4、タイム・ラグとして10分が指定されている場合、アウトバウンドEDIメッセージを10個エンキューすると、バッチ・モニタリング・スレッドがスリープからウェイクアップしたときに、保留リスト内の先頭のメッセージが10分というタイム・ラグ条件を超えていることが検出されると、それぞれ4つのトランザクションを含む2つのバッチ処理メッセージと、2つのトランザクションのみを含む別のバッチ処理メッセージが作成されます。
ケース6: バッチ作成時に「最大サイズ」(KB)のみが指定され、b2b.batchMonitorStragglerTimeLagおよびb2b.batchMonitorStragglerBatchNameがバッチ用に設定されている場合:
条件6.1: タイム・ラグを超えてなく、最大サイズを超えている場合
たとえば、「最大サイズ」として4KB、タイム・ラグとして10分が指定されている場合、それぞれが1KBのアウトバウンドEDIメッセージを4つエンキューすると、バッチ・モニタリング・スレッドがスリープからウェイクアップしたときに、サイズ4KBのバッチ処理メッセージが1つ作成されます。エンキューされたメッセージがサイズの条件を満たさない場合、これらのメッセージはバッチ処理されません(タイム・ラグは超えていません)。4KBを超えてメッセージをエンキューすると(たとえば、6個のメッセージ)、4つのメッセージのみがバッチ処理され、残りの2つのメッセージは保留表に保持されます。
条件6.2: タイム・ラグを超えていて、最大サイズを超えていない場合
たとえば、「最大サイズ」として4KB、タイム・ラグとして10分が指定されている場合、アウトバウンドEDIメッセージを3つエンキューすると、バッチ・モニタリング・スレッドがスリープからウェイクアップしたときに、保留リスト内の先頭のメッセージが10分というタイム・ラグ条件を超えていることが検出されると、3つのトランザクションを含むバッチ処理メッセージが1つ作成されます。
条件6.3: タイム・ラグを超えていて、最大サイズを超えている場合
たとえば、「最大サイズ」として4KB、タイム・ラグとして10分が指定されている場合、アウトバウンドEDIメッセージを10個エンキューすると、バッチ・モニタリング・スレッドがスリープからウェイクアップしたときに、保留リスト内の先頭のメッセージが10分というタイム・ラグ条件を超えていることが検出されると、それぞれ4つのトランザクションを含む2つのバッチ処理メッセージと、2つのトランザクションのみを含む別のバッチ処理メッセージが作成されます。
ケース7: バッチ作成時に「最大数」と「最大サイズ」の両方が指定され、b2b.batchMonitorStragglerTimeLag
およびb2b.batchMonitorStragglerBatchName
がバッチ用に設定されている場合:
バッチ・モニタリング・スリープ・スレッドがウェイクアップすると、最初に一致した条件によって、バッチの作成がトリガーされます。
タイム・ラグを超えている場合、サイズが指定の制限を超えていると、件数またはサイズの条件に基づいてバッチがグループ化または制限され、保留中の残りのメッセージもバッチ処理されます。
注意: 「最大数」および「最大サイズ」に基づくメッセージのバッチ処理は、次の前提に従って動作します。
|
図11-3に、以前に作成したバッチの検索、バッチの詳細の表示、バッチの無効化、更新または削除を実行できる画面を示します。
「更新」バッチ・アクションの場合、更新できるのは選択したドキュメント定義のみです。新規ドキュメントのみでなく、バッチに属しているすべてのドキュメントを必ず再選択してください。
B2Bでは、バッチ処理スケジュールの更新時に、バッチ処理したメッセージが選択されない場合があります。バッチされたメッセージが取得されない場合、バッチを削除し、以前のバッチと同じ名前で新規バッチ・スケジュールを作成します。同じ名前を使用する必要があるのは、B2BによってWAIT_BATCH
ステータスの以前のメッセージが選択されるようにするためです。
Oracle B2Bは、インバウンド・バッチ処理メッセージに対するサポートを提供します。
Oracle B2Bは、バッチ処理メッセージを受信すると、次の処理を実行します。
Oracle B2Bは、順序付けマネージャの表にエントリを1つのみ作成し、メッセージの状態をPROCESSING
に設定します。
バッチ処理解除によって、メッセージがビジネス・メッセージの表およびB2B_PENDING_MESSAGE
表に挿入され、B2B_PENDING_MESSAGE
表の属性列(Attribute4
)にメッセージのシーケンス番号が格納されます。
Oracle B2Bは、バッチの最後のメッセージを処理した後、順序メッセージの状態をPROCESSED
に変更し、messageIDにBATCH_MESSAGE
とマークすることによって、そのメッセージがバッチ処理メッセージであることを示します。
Oracle B2Bは、バッチからメッセージをディスパッチした後、ビジネス・メッセージの状態をMSG_COMPLETE
に変更し、B2B_PENDING_MESSAGE
表の対応するエントリを削除します。Oracle B2Bがバッチ処理の途中で停止した場合、リカバリ時にOracle B2Bが送信するのは、B2B_PENDING_MESSAGE
表に存在するメッセージのみです。
注意: この方法には、バッチ全体がOracle B2Bにより処理されるまでバッチ配信は再開されないという制限があります。 |
注意: 順序付きバッチ処理は、インバウンド側でのみサポートされます。 |
バッチ処理機能を利用して送信カスタム・ドキュメントをバッチ処理するために、カスタム・ドキュメントを使用できます。次の基準でバッチをトリガーできます:
注意: カスタム・ドキュメントのバッチ処理を有効化するには、EMプロパティb2b.batchCustoDocumentをtrueに設定する必要があります |
時間 - 予定された時間にバッチをトリガーするため
件数 - 受け取ったメッセージの数が構成された数と一致した場合にトリガーするため
サイズ - メッセージの合計数のサイズが構成されたサイズに達する場合にトリガーするため
一緒にバッチ処理するメッセージが構成可能なデリミタで区切られます。これは取引パートナ・パラメータの一部として構成されます。これを行うには、「管理」→「タイプ」で取引パートナ・パラメータ名を設定します。パラメータ名は、CustomMsgSplitterです。
カスタム・メッセージ・スプリッタの値をプロファイル画面で構成できます(図11-5を参照してください)。
同じデリミタがインバウンドおよびアウトバウンド機能に対して使用されます。取引パートナ・パラメータのパブリックAPIを使用して、これを取得できます。
また、特定の取引パートナの特定のドキュメントに対してデリミタを提供して、デリミタに達することもできます。図11-6で提供されるデリミタは、コールアウト引数の一部として使用できます。