2010年4月2日金曜日

OSS 11g/Business Rule 1

シンプルな BusinessRule を作ってみる。

IF-THEN と デシジョンテーブルがあるが、今回は IF-THEN でやる事にした。

■ 仕様
BPEL プロセスからビジネスルールを実行するという事にだけ着目したいので、いつものごとく、極力シンプルな仕様にする。
  • SOAP で公開された BPEL プロセスが、リクエストメッセージ中の XMLデータをビジネスルールに渡す。
  • ビジネスルールは受け取った XMLデータ中の <input>要素の文字列長を判別して、5文字以下なら文字列"SHORT"、5文字長なら文字列"LONG"を<result>要素に設定したレスポンスメッセージを生成する。
  • BPEL プロセスは、ビジネスルールが生成したレスポンスをクライアントに返す

■ 環境
・Oracle SOA Suite 11g (11.1.1.2.0)
・Oracle JDeveloper 11g

■ コンポジット作成
  • プロジェクト名:任意。ここではSimpleBusinessRuleとした
  • プロジェクト・テクノロジ:SOAを選択
  • コンポジット・テンプレート:BPEL を使用するコンポジット
※勝手にBPELプロセスの作成が始まる。以下の作業に続く。

■ BPELプロセス作成
  • 名前:適当。ここでは SimpleBusinessRuleProcess とした
  • テンプレート:同期BPELプロセス
  • SOAPサービスとして公開:チェック

■ BusinessRule 作成
  • composite.xml を開く
  • コンポーネントのレーンにビジネスルールをドラッグ
  • 適当に名前を指定。ここでは LengthCategory とした。
  • 緑のプラスボタンで入力を追加
    • プロジェクトのスキーマ・ファイルからprocess を選択
  • 緑のプラスボタンで出力を追加
    • プロジェクトのスキーマ・ファイルからprocessResponse を選択
  • 作成したビジネスルールにBPELプロセスからワイアリング
※ルールの定義は後で。

■ BPEL の編集
  • receiveInput と replyOutput の間に Business Rule を置く
  • 名前は適当。ここでは CategorizeLength とした。
  • ディクショナリに LengthCategory を指定
  • 以下のように入力ファクトを追加
    • From:変数/プロセス/変数/inputVariable/payload/process
    • To:変数/{凄い長い名前の変数}/process
      ※To の「変数」は、ダブルクリックしないと展開されないので注意。展開すると凄い長い名前の変数が表示される
  • 以下のように出力ファクトを追加
    • From:変数/{凄い長い名前の変数}/processResponse
    • To:変数/プロセス/変数/outputVariable/payload/processResponse

■ ルールの作成
  • composite.xmlからビジネスルールの編集を開始
  • 緑のプラスボタンから[ルールの作成]
    • テストの挿入: process.input.length() <= 5
    • アクションの挿入: assert new processResponse(result:"SHORT")
  • 緑のプラスボタンからもう一個[ルールの作成]
    • テストの挿入: process.input.length() > 5
    • アクションの挿入: assert new processResponse(result:"LONG")
下図のようになる
※「<何とかの挿入>」というリンクをクリックして内容を組み立てていく方式だが、ちょっとクセがある。説明するのはちょっと難しいけど、やってみると使い方はすぐ分かる。

ただし難しくて理解しにくい事は無いけど、別に使い易い事もなく、むしろ、なんか面倒くさい。言語リファレンスとAPIドキュメントさえ見やすいところに用意してくれてさえいれば、こんな感じのバカチョン的なフォームよりも、自動補完付きのソースエディタの方がマシな気がする。

JDeveloper - SOA Composite Editor 全般でそんな印象を受ける。ルールエディタだけなら、ビジネスピープルを意識してこうなったのかとも思うけど、他はどうなんだろう。


■ デプロイ-テスト
  • SimpleBusinessRule のコンテキストメニューからデプロイ
  • SoapUI か Enterprise Manager からリクエストを送る(SoapUI の方がお勧め)
    • process/input に空文字列,"a", "abcde", "こんにちは"等を指定すると"SHORT"
    • process/input に"abcdef", "こんにちは!"を送ると"LONG"が返ってくる


■ 次回予定
デシジョンテーブルで同じようなことをやってみる。あと BPEL プロセスとビジネスルールの関係についてちょっと考えてみたい。

0 件のコメント:

コメントを投稿