旅行予約サービスについて
最終更新日: 2006 年 11 月 23 日
目次
概要
「旅行予約サービス」は、NetBeans Enterprise Pack 5.5 に付属するサンプルビジネスプロセスです。
この旅行予約サービスは、ほかのサービスを論理的に集約するサービスとして機能し、次に示すような旅行予約システムの一般的なビジネスロジックに基づいています。
-
このプロセスは、クライアントが、部分的な旅行日程ドキュメントの入ったメッセージを送信してプロセスを開始することを想定しています。
-
クライアントの旅行日程は、次のようなものが考えられます。
-
既存の予約が何もない場合。
-
航空券、乗り物、ホテルのいずれか、またはそれらを組み合わせた既存の予約がある場合。
-
旅行予約サービスは、着信するクライアントの旅行日程を検査し、その旅行日程を処理して完成させます。
-
クライアントの旅行日程に航空券の既存の予約が含まれていない場合、旅行予約サービスはその旅行日程をパートナーサービスの「航空券予約サービス」に引き渡し、航空券の予約を追加します。
-
航空券予約サービスは、変更された旅行日程を、旅行予約サービスに戻します。
-
旅行予約サービスは、乗り物とホテルのどちらの予約についても同様のロジックを実行します。それぞれの事例で、このサービスは実際の予約の取得を「乗り物予約サービス」と「ホテル予約サービス」に委託します。
-
最後に、旅行予約サービスは完成した旅行日程を当初のクライアントに返信し、プロセスを完了します。
NetBeans IDE の操作の詳細については、NetBeans の Web サイトで「サポートおよびマニュアル」ページを参照してください。
前提条件
このチュートリアルは、Java の言語とプラットフォーム、および NetBeans IDE についての基本的な知識またはプログラミング経験を持つユーザーを想定しています。
システム要件
このチュートリアルでは、ユーザーのシステムが、『NetBeans Enterprise Pack 5.5 リリースノート』の「システム要件」の項で指定された要件を満たしていることを想定しています。
このチュートリアルに必要なソフトウェア
開始する前に、コンピュータに次のソフトウェアをインストールします。
- NetBeans IDE 5.5 と NetBeans Enterprise Pack 5.5 (ダウンロード)
ページの先頭へ
チュートリアル環境の構成
このアプリケーションを配備するには、前もって JBI Runtime および Sun Java System Application Server を正しく構成し、稼動させておく必要があります。
最初に、次の手順を実行して、JBI サーバーが稼動していることを確認します。
-
「実行時」ウィンドウを開きます。
-
「サーバー」ノードを展開します。
-
すでにノードに Sun Java Application Server が含まれている場合は、手順 5 へ進んでください。
-
ノードに Sun Java Application Server が含まれていない場合は、次の手順に従います。
-
「サーバー」ノードを右クリックし、「サーバーを追加」を選択します。
-
「サーバーインスタンスの追加」ダイアログで、「Sun Java Application Server」を選択します。
-
「次へ」をクリックします。
-
「プラットフォームの場所」で、C:\Sun\AppServer を指定します。これは、Enterprise Pack インストーラによって設定されたデフォルトの Application Server インストールパスです。「ローカルのデフォルトドメインを登録」を選択します。
-
「次へ」をクリックします。
-
次の Application Server のユーザー名とパスワードを入力します。admin/adminadmin。これは、インストーラによって設定されたデフォルトのユーザー名とパスワードです。
-
「完了」をクリックします。
-
「Sun Java System Application Server」ノードを右クリックし、「開始」を選択します。「開始」オプションが使用可能でなく、「Sun Java System Application Server」ノードの隣に緑色の三角形がある場合、そのサーバーはすでに稼動しています。
ページの先頭へ
旅行予約サービスサンプルプロジェクトでの新規プロジェクトの作成
旅行予約サービスサンプルを使用して新規プロジェクトを作成するには、次の手順に従います。
-
IDE のメインメニューから、「ファイル」>「新規プロジェクト」を選択します。
-
「カテゴリ」の下の、「サンプル」>「サービス指向アーキテクチャー」を選択します。
-
「プロジェクト」の下の「旅行予約サービス」を選択します。
-
「次へ」をクリックします。
-
プロジェクトの名前と場所を任意に入力するか、デフォルト値のままにします。
-
「完了」をクリックします。
-
この時点で、「プロジェクト」ウィンドウに 2 つのノードが含まれます。1 つは BPEL モジュール TravelReservationService 用で、もう 1 つは複合アプリケーション TravelReservationServiceApplication 用です。

(デモを表示)
パートナーサービス
この旅行予約サービスは、公開インタフェースを介してパートナーサービスと通信します。それらのインタフェースは、パートナー固有の WSDL ファイル内で定義されます。
IDE は、ReservationPartnerServices というバンドルされた EJB プロジェクトを含んでいます。ReservationPartnerServices プロジェクトには、3 つのパートナーサービスの基本的な EJB および JMS ベースの実装が含まれています。それらのパートナーサービスは、ホテル予約サービス、乗り物予約サービス、および航空券予約サービスです。
旅行予約サービスプロセスをテスト実行するには、前もってこれらのパートナー Web サービスを、バンドルされている Sun Java Application Server に配備する必要があります。
この実装は、旅行予約サービスプロセス用のテストハーネスとして機能することのみを意図しています。パートナーサービスの実装について、BPEL 開発者は考えないものとします。パートナーサービスは、旅行予約サービスをテストするための単なる前提条件にすぎません。
次の手順に従って、ReservationPartnerServices を開き、配備してください。
-
メインメニューから「ファイル」>「プロジェクトを開く」を選択します。
-
「プロジェクトを開く」ウィザードを使用して、TravelReservationService ディレクトリに移動します。
TravelReservationService が入っているディレクトリには、バンドルされている ReservationPartnerServices も入っています。
-
「ReservationPartnerServices」を選択し、「プロジェクトフォルダを開く」ボタンをクリックします。
-
「ReservationPartnerServices」を右クリックし、「プロジェクトを配備」を選択します。これにより、ReservationPartnerServices が配備されます。
-
次の手順を実行することにより、ReservationPartnerServices アプリケーションが正常に配備されたことを確認します。
-
「実行時」ウィンドウに切り替え、「Sun Java System Application Server 」ノードを展開します。
-
「アプリケーション」ノードを展開し、さらに「EJB モジュール」ノードを展開します。

(デモを表示)
ページの先頭へ
アプリケーションサーバーへの BPEL プロジェクトの配備
BPEL プロジェクトを直接配備することはできません。BPEL プロジェクトは、JBI モジュールとして複合アプリケーションプロジェクトに追加する必要があります。そのあと、複合アプリケーションプロジェクトを配備できます。プロジェクトを配備すると、サービスアセンブリがアプリケーションサーバーから使用可能になり、したがって、そのサービスユニットを実行できるようになります。
-
「TravelReservationServiceApplication」配備プロジェクトノードを右クリックし、「JBI モジュールを追加」を選択します。
「プロジェクトの選択」ウィザードが起動します。
-
「プロジェクトの選択」ウィザードから「TravelReservationService」を選択します。
-
「プロジェクト JAR ファイルを追加」ボタンをクリックします。
-
「プロジェクト」ウィンドウで、「TravelReservationServiceApplication」>「JBI モジュール」を展開します。
-
「TravelReservationService.jar」ノードが追加されたことを確認してください。
-
「TravelReservationServiceApplication」プロジェクトノードを右クリックし、ポップアップメニューから「プロジェクトを配備」を選択します。
-
「警告」ダイアログで、「Sun Java Application Server 9」が選択されていることを確認し、「了解」をクリックします。
-
「出力」ウィンドウに次のメッセージが表示された場合、配備は成功です。

(デモを表示)
ページの先頭へ
旅行予約サービスプロセスのテスト実行
テスト実行機能を使用すると、ビジネスプロセス開発者はプロセスをテスト実行できます。BPEL プロセスは BPEL 実行環境へ配備され、その実行環境がプロセスのライフサイクルを管理します。BPEL プロセスは、プロセスの開始を行う受信アクティビティーまたはピックアクティビティーによって開始されます。
BPEL プロセスは、Web サービスでもあります。あらゆる Web サービスと同様に、BPEL プロセスは、公開インタフェースを記述した、関連する WSDL ファイルを持っています。このインタフェースは、クライアントがプロセスインスタンスを作成するためにターゲットとすることができる操作とメッセージを記述しています。これらの受信アクティビティーのいずれかをターゲットとしたメッセージを受信すると、BPEL 実行環境は BPEL プロセスインスタンスを作成し、メッセージをそのプロセスインスタンスの処理のために引き渡します。
たとえば、TravelReservationService.wsdl の場合、buildItinerary という操作があります。これは、TravelReservationService クライアントが TravelReservationService との会話を開始するために呼び出す操作です。
<portType name="TravelReservationPortType">
<operation name="buildItinerary">
<input message="tns:ItineraryIn"/>
<output message="tns:ItineraryOut"/>
<fault name="itineraryProblem" message="tns:ItineraryFault"/>
</operation>
</portType>
したがって、BPEL プロセスをテストするには、プロセス受信アクティビティーの 1 つをターゲットとするメッセージを BPEL 実行環境へ送信する必要があります。
このバージョンの BPEL デザイナーには、このテストをポイントしてクリックで行うことができる機能が含まれています。具体的に言えば、TravelReservationService サンプルプロジェクトでは buildItinerary 要求を、配備された TravelReservationService へ送信できます。
テスト実行手順
TravelReservationService をテスト実行するには、次の手順に従います。
-
「TravelReservationServiceApplication」ノードを展開します。これには、「テスト」というサブノードがあります。
-
「テスト」ノードを展開します。4 つのサブノードがあります。
-
HasNoReservations - 予約が何もない旅行日程のテスト
-
HasAirline - 既存の航空券予約が存在する旅行日程のテスト
-
HasVehicle - 既存の航空券と乗り物の予約が存在する旅行日程のテスト
-
HasHotel - 既存の航空券、乗り物、およびホテルの予約が存在する旅行日程のテスト
これらのテストノードは、実際に SOAP メッセージデータが入った XML ファイルです。それぞれ異なるケースを表しており、これらを使用して TravelReservationService をテストし、このプロセスを少しずつ異なる方法で練習できます。
-
「HasNoReservations」ノードを右クリックし、ポップアップメニューから「テスト」を選択します。「テスト」アクションを選択すると、IDE は HasNoReservations の SOAP メッセージを BPEL 実行環境へ送信します。IDE は、テストが成功したかどうかを示します。

(デモを表示)
注:JBI モジュールを追加する前、またはプロジェクトを配備する前にテストシナリオの 1 つをテスト実行すると、テストは失敗します。
注: テスト実行するときのサービスエンドポイントの問題を解決するには、「BPEL デザイナー開発者ガイド: トラブルシューティング」の「ポート」の節にある指示を参照してください。
ページの先頭へ
旅行予約サービスプロセスのデバッグ
IDE を使用して、サンプルの BPEL アプリケーションをデバッグできます。
一般的なデバッグ手順
サンプルアプリケーションをデバッグするときは、次の一般的な手順に従います。
-
「実行時」ウィンドウを開きます。
-
「Sun Java System Application Server」ノードを展開します。
-
「JBI」ノードで、次の操作を実行します。
-
「サービスエンジン」を展開します。
-
「JavaEEServiceEngine」ノードの下で「com.sun.bpelse-1.0-2」を右クリックし、プロパティーを取得します。
-
プロパティーシートで、「DebugEnabled」を False から True に変更し、3343 のポート設定値を覚えておきます。プロパティーシート上の項目を変更するのは、デバッグセッションを開始するときの 1 回だけです。
-
メインメニューから「実行」>「デバッガを接続」を選択します。「接続」ダイアログが表示されます。
-
次の手順を実行します。
-
必ず、「デバッガ」として「BPEL デバッガ」を選択しておいてください。
-
ホスト名が localhost、ポートが 3343 であることを確認します。
-
「了解」をクリックします。

(デモを表示)
-
「プロジェクト」ウィンドウの「TravelReservationService」ノードで、「TravelReservationService.bpel」ファイルをダブルクリックします。
-
ソースエディタで、ブレークポイントを配置する要素の行番号をクリックすることにより、ソースコード内にブレークポイントを設定します。ここでは HasNoReservations テストを使用するので、3 つのパートナーサービスのすべてを呼び出すアクティビティーに対してブレークポイントを設定します。
-
行 46 の ReceiveItinerary 受信アクティビティーにブレークポイントを配置します。これは、プロセスを開始するアクティビティーです。行番号が表示されない場合は、メインメニューから「表示」>「行番号を表示」を選択します。
図上でブレークポイントを設定することもできます。そのためには、デザインビューに切り替え、要素を右クリックし、ポップアップメニューから「ブレークポイントを切り替え」を選択します。
ブレークポイントのある要素の上部に、赤いボックスが表示されます。
「ブレークポイントを切り替え」ポップアップメニューコマンドは、ナビゲータの BPEL 論理ビュー内の要素についても使用できます。「ナビゲータ」ウィンドウが表示されない場合は、メインメニューから「ウィンドウ」>「ナビゲータ」を選択します。ブレークポイントのある要素の場合、ナビゲータは次の画面例 (ReceiveItinerary) に見られるような小さな赤い四角を表示します。
-
ブレークポイントを ReserveAirline (行 74)、ReserveVehicle (行 115)、ReserveHotel (行 156) の各呼び出しアクティビティーに設定します。

(デモを表示)
-
この時点で、プロジェクトにウォッチポイントを追加します。
-
「ウォッチポイント」ウィンドウが表示されない場合は、メインメニューから「ウィンドウ」>「デバッグ」>「ウォッチポイント」を選択します。
-
ソースビューで、行 71 へ進み、次の XPath 式をコピーします。
not($ItineraryIn.itinerary/ItineraryInfo/ReservationItems/Item/Air)
あるいは、図上の If 要素 HasAirline を選択し、XPath 式を「プロパティー」ウィンドウの「条件」行からコピーする方法もあります。「プロパティー」ウィンドウが表示されない場合は、メインメニューから「ウィンドウ」>「プロパティー」を選択します。
-
「ウォッチポイント」ウィンドウの内部を右クリックし、「新規ウォッチポイント」を選択します。
-
「新規ウォッチポイント」ダイアログで、XPath 式を「ウォッチポイント式」フィールドにペーストします。
-
さらに 2 つの式のウォッチポイントを、行 112 と 153 に追加します。この時点で、「ウォッチポイント」ウィンドウには、次の 3 つの項目が表示されます。
-
「プロジェクト」ウィンドウで、「TraveReservationServiceApplication」の「テスト」ノードの下にある「HasNoReservations」を右クリックし、「実行」を選択します。
-
プロセスが最初のブレークポイントに到達したら、「ウォッチポイント」ウィンドウを確認します。このウィンドウには、3 つの式すべての「値」列に、<Cannot evaluate the expression> という文字列が入っています。これは、プロセスが最初の受信アクティビティーの開始位置で停止し、ItineraryIn メッセージがまだ到着していないためです。
-
デバッグツールバーの「継続」をクリックします (Ctrl-F5)。プロセスは 2 番目のブレークポイントで停止します。このときまでに ItineraryIn メッセージは到着しており、ウォッチポイントの条件は評価が終了しています。3 つの式すべての値は、true に設定されています。
注:式が true を返すのは、対応する予約項目がメッセージに含まれていない場合です。HasAirline テストを実行した場合、not($ItineraryIn.itinerary/ItineraryInfo/ReservationItems/Item/Air) 式 (着信メッセージに航空座席の予約項目が含まれていないかどうかをチェックする式) の値は、false に設定されます。
-
「継続」をクリックします。「BPEL プロセスのインスタンス」ウィンドウで、BPEL プロセスの状態を確認します。また、「BPEL 変数」ウィンドウで、プロセスの進行につれて変数の値が変更されるのを監視します。

(デモを表示)
ブレークポイントでのアクションのデバッグ
プロセスインスタンスが中断されたら、次のような従来のデバッグツールバーのアクションを実行できます。デバッグツールバーが表示されない場合は、「表示」>「ツールバー」>「デバッグ」を選択します。
-
デバッグセッションを完了 (Shift-F5)。現在のデバッグセッションを終了します。
-
継続 (Ctrl-F5)。次のブレークポイントに到達するまで、またはプロセスインスタンスが完了するまで、現在のプロセスインスタンスを実行します。
-
ステップイン (F7)。次の BPEL アクティビティーまでステップ実行します。ステップ実行は、BPEL 言語の「アクティビティー」の細分度でのみサポートされます。それより細かい細分度ではステップ実行は行われません。ステップ実行すると、現在の行インジケータが前進し、それに応じて「BPEL 変数とウォッチポイント」ウィンドウの内容が変更される場合があります。
ページの先頭へ