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プロセス作成
- 名前:適当。ここでは 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 全般でそんな印象を受ける。ルールエディタだけなら、ビジネスピープルを意識してこうなったのかとも思うけど、他はどうなんだろう。
ただし難しくて理解しにくい事は無いけど、別に使い易い事もなく、むしろ、なんか面倒くさい。言語リファレンスとAPIドキュメントさえ見やすいところに用意してくれてさえいれば、こんな感じのバカチョン的なフォームよりも、自動補完付きのソースエディタの方がマシな気がする。
JDeveloper - SOA Composite Editor 全般でそんな印象を受ける。ルールエディタだけなら、ビジネスピープルを意識してこうなったのかとも思うけど、他はどうなんだろう。
■ デプロイ-テスト
- SimpleBusinessRule のコンテキストメニューからデプロイ
- SoapUI か Enterprise Manager からリクエストを送る(SoapUI の方がお勧め)
- process/input に空文字列,"a", "abcde", "こんにちは"等を指定すると"SHORT"
- process/input に"abcdef", "こんにちは!"を送ると"LONG"が返ってくる
■ 次回予定
デシジョンテーブルで同じようなことをやってみる。あと BPEL プロセスとビジネスルールの関係についてちょっと考えてみたい。
0 件のコメント:
コメントを投稿