[SOA] OSB 11g & SAP – Single Channel/Program ID for Multiple IDOCs (A-Team - SOA)

原文はこちら。
https://blogs.oracle.com/ateamsoab2b/entry/osb_11g_sap_single_channel

背景
このメモは 以下のエントリの補足です。
SOA 11g & SAP – Single Channel/Program ID for Multiple IDOCs (Greg Mally)
https://blogs.oracle.com/ateamsoab2b/entry/soa_11g_sap_single_channel
http://orablogs-jp.blogspot.jp/2012/03/soa-11g-sap-single-channelprogram-id.html
Gregは簡単なSOAコンポジットとiWayアダプタ(SAP Adapter)を使って複数のIDOCをアダプタを、一つのSAPシステムのProgram IDに対応する一つのチャネルで受信する方法を説明していました。
今回は同じことをOSBでやってみたいと思います。

プロジェクトの作成
iWay SAP Adapterを使ったOSBプロジェクトの基本的な作業は、以下のエントリにも記載があるように、OSBコンソールとApplication Explorerでの作業からなります。
Using SAP Adapter with OSB 11g (PS3)
https://blogs.oracle.com/ateamsoab2b/entry/using_sap_adapter_ps3_with
OSBプロジェクト(その1)
まず、OSBのプロジェクトを適切なディレクトリに作成し、WSDL、XMLスキーマ、JCAバインディング情報をApplication Explorerから直接このプロジェクトにエクスポートできるようにしておきます。

Application Explorer - iWay Design Time Tool
IDOCの受信はApplication Explorerの中ではインバウンドのイベントという扱いです。イベントをセットアップするため、SAP内でOSBのために設定したように、同じPROGRAMID(RFCの送り先)を使ってチャネルをまず定義します(例:iDoc_Channel)。
 次に、同じチャネルを使って、候補のIDOC(例:DEBMAS06)用のJCA Inbound Eventのアーティファクトを直接事前に作成したOSBプロジェクトにエクスポートします。

スキーマの検証の設定はOFFになっていることに注意して下さい。結果として、これによりAdapterが実行時に一つのチャネルを使ってSAPから複数のIDOCタイプを受信することができ、スキーマチェックをせずにOSBに転送することができるのです。言い換えれば、各IDOCタイプで上記手順を繰り返す必要はないということです。

OSBプロジェクト(その2)
2個のXMLベースのBusiness Service(例:SAP_DEBMAS_FileとSAP_MATMAS_File)を作成し、ファイルを書き出します。

次に、前章でApplication ExplorerからエクスポートしたJCAバインディングファイルを使ってProxy Serviceを作成します。Proxy Serviceを作成中に、メッセージフローを編集してRouteNodeを追加します。

以下のルーティング関数を使って、RouteNodeのルーティング表を追加します。
  • fn:local-name-from-QName(fn:node-name($body/*[1]))
この関数は、Adapterによる変換の後、実行時のXMLペイロードにはトップの要素としてIDOCタイプを持つという事実を利用しています。


代わりにルーティング機能を使用する場合には、別のディレクトリにファイルを書き出すための適切なBusiness ServiceにIDOCをルーティングするため、2個のブランチを追加してルーティング表を作成します。

これでOSBプロジェクトは完成です。

テスト
デプロイしてアクティブ化した後に、SAP Adapterは複数種類のIDOCをSAPシステムから単一のチャネル経由で受信します。IDOCを受信すると、OSBプロジェクトが適切にルーティングして個々のIDOCタイプに対応するXMLペイロードを別々のディレクトリに保存するはずです。

0 件のコメント:

コメントを投稿