[BAM] BAM design pointers

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

お客様とSOAやBAMの作業をしたところ、BAMのベストプラクティスは思っていたほどよく知られていないことがわかりました。以下にいくつか注意事項をまとめておきます。

EMSとDOを一致させる
EMS(Enterprise Message Source)をBAMのデータソースとして使う場合、一つのEMSを使って一つのデータオブジェクト(Data Object、以下DO)に書き込むことがベストプラクティスです。複数のEMSが同時にDOの同じ行に書き込むと、衝突や重複の可能性があります。このお客様の場合、17個のEMSを使って同時に1個のDOに書き込んでいました。BPELプロセスの各センサーは1個のトピックに書き込んでいますが、そのトピックは一つのセンサーに対応する1個のEMSによって読まれます。その後、BAMの中のXSLを使ってペイロードをBAMのDOフォーマットに変換します。したがって、特定のBPELインスタンスのために、投げられた17個のセンサー情報は、1個のJMSトピックに存在し、その情報は17個のEMSが消費します。そして、次々に1個のDOフォーマットに書き込みます。(BAMにより多くの情報を送信する必要があるアプリケーションの後継バージョンで、何が起こるのか想像がつくでしょう)。

我々は設計を変更して、DO(具体的にはOrdersというDO)に関連する全てのセンサーについて、センサー名に基づいた1個のマスタXSLを使うようにした結果、17個のEMSを1個のEMSとマスタXSLにまとめることに成功しました。
この設計がどれほど美しいのか疑問を抱いてらっしゃることでしょう。ええ、あなたは正しいです!これは確かに美しすぎることはありませんが、別の「推論される」ベストプラクティスに到達します。

変換(Transformations)と計算(Calculations)
BPELのようなエンジンで変換(Transformation)を実施するべきです。JDeveloperの優れたGUI XSLマッパーでモデリングが簡単になるだけでなく、BPELのXSLエンジンは非常にランタイムで効率がよいのです。BAMでXSL変換を実施することはあまり賢明ではありません。同じことが計算(Calculation)においても言えます。全ての変換、計算やデータのサニタイズは、BPELのようなレイヤで実施し、これらのデータを(JMSやWebサービス経由で)BAMへ送信するべきです。これにより、レポートの表示機能とリアルタイムレポートの仕組みを、Oracle BAMという、最も適したレポーティングツールに任せることができます。

全てのNULLが同じ結果になるとは限らない
おそらく既知の内容ですが、繰り返します。EMSでUpsertを使う場合、
  1. 空のタグもしくは値が含まれていないタグ(例えば<Tag1/>や<Tag1></Tag1>)が送られた場合、DOは--null--で上書きする。
  2. 空のタグが削除されている、つまり全く生成されない場合、対応するDOのフィールドは上書きされず、以前に存在した値がそのまま残る。
EMSでInsertを使う場合、値がないタグでも空タグでも、--null--でDOを上書きします。

0 件のコメント:

コメントを投稿