NetBeans vs JDeveloper (BPEL開発)

たまたま時間が空いていたので、先週水曜日に「2時間で学ぶ今月のJavaホットトピック」に行ってきました。

はっし〜〜 (橋本吉治さん)NetBeans Ruby PackとJRubyのセッションにも興味がありますが、今回のお目当てはNetBeansでのBPEL開発。

1.「続: 30 分でできる『かんたん開発』 - SOA/BPEL 編 -」

SOA っていう言葉はよく聞くけど、具体的にはどういうものなんだろう?」という方を対象に、30分でできる Web サービス連携をお届けします。今回も「かんたんに、ただで、楽しく」をモットーに NetBeans による視覚的な BPEL 実行やデバッグのデモを交えて紹介します。

BPELやJBIの技術的説明はほとんどなくて、大部分がBPEL開発のデモでした。セミナー後に、NetBeansで一通りBPEL開発を試してみたので、その経験も踏まえて感想を。僕は、普段Oracle BPEL Process Manager 10.1.3.1とJDeveloper 10.1.3.xを使っているので、それと比較してみます。

ちなみに、今回試してみたのは、NetBeans 5.5 + NetBeans Enterprise Pack 5.5です (5.5.1のRC版も出ていたんですが、とりあえず正式リリースの最新版にしています)。Enterprise Packインストール時に、BPEL実行環境としてOpen ESBが入ったSun Java System Application Server Platform Edition 9も同時にインストールできます。

セミナーでの最初のデモは、既に作成済みのJAX-WS Webサービス (たぶん) を、新規作成した同期型BPELプロセスから呼び出す、というシンプルなもの。2つ目のデモでは、さらに、条件分岐とAmazon Webサービスの呼び出しを追加していました。

BPELプロジェクトの新規作成時にXMLスキーマの定義とWSDL定義を毎回作成しないといけないのは、面倒だしちょっと敷居が高い気が。JDeveloperだと、BPELプロジェクトの新規作成時にデフォルトのXMLスキーマの定義とWSDL定義が作成されるので、この辺りを最初に意識しなくてもOKです。プロジェクト新規作成時や作成後に、これらの定義の変更も、もちろん可能です。

BPELプロセスを、アクティビティのドラッグ&ドロップで構築していくところは、JDeveloperと似たような感じです。ちょっと気になったのは、NetBeansではスコープの折り畳みができなそうなのがところ (JDeveloperでは、できます)。BPELプロセスのアクティビティ数が多かったり、BPELプロセスの構造が何段階かネストしていたりすると、ダイアグラム内でのナビゲーションが大変そうです。

NetBeansでは、Assignアクティビティのコピー・ルールの編集のためのUIとして、「BPELマッパー」が提供されています。JDeveloperでは、1つのコピー・ルールごとに設定していくのですが、NetBeansBPELマッパーでは、複数のコピー・ルールを1回で設定できて、これはちょっと便利そうです。でも、AssignアクティビティからXSLT変換を呼び出す設定や、XSLT変換自体を設定するUIは、見当たりませんでした。

BPELプロセスのBPELサーバへのデプロイは、まぁ簡単です。NetBeansの場合、JBI実装であるOpen ESBの上で動くBPEL Service Engineで、BPELプロセスが動作するので、BPELプロセスのJBIモジュールを含むサービス・アセンブリ作成する形になります。BPELプロジェクトとは別に、JBIモジュール作成用の「複合アプリケーション」プロジェクトを別途作る必要があるのは、ちょっと面倒ですが。JDeveloperでは、一度Oracle BPEL Process Managerへの接続を定義しておけば、あとはBPELプロジェクトから1クリックでデプロイできます。

NetBeansでは、BPELプロセスのテストのために、入力メッセージを指定して、期待される出力メッセージと実際にBPELプロセスから返された出力を比較するJUnitテストケースを簡単に作成できます。この機能では、BPELプロセス自体の入出力は扱えるようですが、BPELプロセスから呼び出す別のサービスとの相互作用はエミュレーションできないようで、実際に呼び出すしかないようです。

Oracle BPEL Process Managerでは、BPEL Control (管理コンソール) から簡単にテスト実行できますし、JUnitベースの「BPELテスト・フレームワーク」を使うこともできます。BPELテスト・フレームワークでは、エミュレーション機能があるので、BPELプロセスが依存する他のサービスがない状態でも、テストを実行できます。

NetBeansデバッグ機能は、いいですね。BPELプロセスのアクティビティにブレーク・ポイントを指定しておいて、BPELプロセスを実行すると、ブレーク・ポイントで実行が一時停止してBPEL変数の内容などを確認できます。

Oracle BPEL Process Managerでは、デバッグ機能に相当するものはありませんが、BPEL Controlでテスト実行すると、その実行結果を「ビジュアル・フロー」として参照でき、実行パスや各アクティビティの入出力メッセージを簡単に確認できます。

セミナーの最後のデモでは、データベース・アクセスや電子メール送信をBPELプロセスに組み込む、というもの。完成版を実行するだけだったので詳細は不明ですが、Open ESBの下記の機能あたりを活用しているんでしょう、きっと。NetBeans Enterprise Pack 5.5では、こういった機能を開発する方法に関して情報が見当たらなかったので、手元の環境ではテストできず…。

Oracle BPEL Process Managerでは、データベース・アクセスについては、J2EE Connector Architecture準拠のデータベース・アダプタ、メール送信については、通知サービスを使って実現できます。

全体としては、まだまだ成熟していない部分が少なからず目に付きますが、思ったよりできは悪くないなと思います。BPELを勉強する目的くらいなら、使い物になりそうです。