旅行予約サービスについて
執筆:
、管理:
2007 年 12 月
- このプロセスは、クライアントが、部分的な旅行日程ドキュメントの入ったメッセージを送信してプロセスを開始することを想定しています。
- クライアントの旅行日程は、次のようなものが考えられます。
- 既存の予約が何もない場合。
- 航空券、乗り物、ホテルのいずれか、またはそれらを組み合わせた既存の予約がある場合。
- 旅行予約サービスは、着信するクライアントの旅行日程を検査し、その旅行日程を処理して完成させます。
- クライアントの旅行日程に航空券の既存の予約が含まれていない場合、旅行予約サービスはその旅行日程をパートナーサービスの「航空券予約サービス」に引き渡し、航空券の予約を追加します。
- 航空券予約サービスは、変更された旅行日程を、旅行予約サービスに戻します。
- 旅行予約サービスは、乗り物とホテルのどちらの予約についても同様のロジックを実行します。それぞれの事例で、このサービスは実際の予約の取得を「乗り物予約サービス」と「ホテル予約サービス」に委託します。
- 最後に、旅行予約サービスは完成した旅行日程を当初のクライアントに返信し、プロセスを完了します。
予想される所要時間: 60 分
目次
ページの先頭へ
チュートリアルの要件
次に進む前に、この節の要件を確認してください。
前提条件
このチュートリアルでは、Java 言語、Java プラットフォーム、および NetBeans IDE の基本的な知識またはプログラミング経験があることを前提としています。
システム要件
これらのチュートリアルでは、『NetBeans IDE 6.0 リリースノート』の「システム要件」のトピックに指定された要件を、システムが満たしていることが前提になります。
チュートリアルに必要なソフトウェア
始める前に、NetBeans IDE 6.0 と SOA、および GlassFish アプリケーションサーバーをコンピュータにインストールする必要があります。これらは NetBeans IDE 6.0 ダウンロードのページにある「すべて」ダウンロードに含まれます。
ページの先頭へ
GlassFish アプリケーションサーバーの構成と起動
NetBeans 6.0 の完全版のダウンロードをインストールすると、GlassFish アプリケーションサーバーが含まれます。NetBeans IDE は、必要なときに、自動的にアプリケーションサーバーを起動します。
GlassFish アプリケーションサーバーを起動するには、次の手順に従います。
- 「サービス」ウィンドウが表示されていない場合は、「ウィンドウ」>「サービス」を選択します。
- 「サービス」ウィンドウで「サーバー」ノードを展開します。
「サーバー」ノードに GlassFish アプリケーションサーバーのサブノードが含まれるはずです。GlassFish アプリケーションサーバーのノードが表示されない場合は、GlassFish アプリケーションサーバーを構成する手順へ進んでください。

- GlassFish アプリケーションサーバーのノードを右クリックし、「起動」を選択します。
「出力」ウィンドウに、アプリケーションの起動に関するログ情報が表示されます。「出力」ウィンドウが表示されていない場合は、「ウィンドウ」>「出力」>「出力」を選択します。
「Application server startup complete」というメッセージが「出力」ウィンドウに表示されたら、アプリケーションサーバーは実行中です。
注: GlassFish アプリケーションサーバーのノードに緑色の矢印のバッジが表示されていれば、そのサーバーは実行中です。
注: アプリケーションを GlassFish アプリケーションサーバーに配備すると、サーバーを自動的に起動します。したがって、アプリケーションサーバーを手動で起動する必要はありません。
注: 次の手順は、GlassFish V2 アプリケーションサーバーの別のバージョンを使用するように IDE を構成する方法を示しています。
GlassFish V2 アプリケーションサーバーを構成するには、次の手順に従います。
NetBeans 6.0 に付属のアプリケーションサーバーとは別のバージョンを使用したいことがあるでしょう。たとえば、GlassFish V2 アプリケーションサーバーの最新バージョンを GlassFish コミュニティーのサイトからダウンロードし、インストールしたい場合です。
次の手順は、GlassFish V2 アプリケーションサーバーの別のバージョンを使用するように NetBeans 6.0 IDE を構成する方法を示しています。アプリケーションサーバーの別のバージョンをすでにダウンロードし、インストールしてあることを前提としています。
- 「サービス」ウィンドウで「サーバー」ノードを右クリックし、ポップアップメニューから「サーバーを追加」を選択します。
「サーバーインスタンスの追加」ダイアログが開きます。
- 「サーバーを選択」ページで、リストから GlassFish V2 を選択します。
- 「次へ」をクリックします。
「プラットフォームフォルダの場所」ページが開きます。
- 「プラットフォームの場所」フィールドの「参照」ボタンを使用して、アプリケーションサーバーのインストール場所に移動して、選択します。
GlassFish アプリケーションサーバーをデフォルトの場所にインストールした場合、表 1 をインストール場所の参考にしてください。さもなければ、GlassFish V2 アプリケーションサーバーをインストールした場所を指定してください。
表 1: アプリケーションサーバーのデフォルトのインストールディレクトリ
Solaris OS
Linux |
root |
/opt/glassfish-v2 |
/opt/SUNWappserver |
Solaris OS
Linux |
user |
~/glassfish-v2 |
~/SUNWappserver |
| Mac OS X |
N/A |
/Applications/NetBeans/glassfish-v2b58g |
/Applications/NetBeans/NetBeans 6.0 |
| Windows |
N/A |
C:\Program Files\glassfish-v2-b58g |
C:\Sun\AppServer |
- 「ローカルのデフォルトドメインを登録」ラジオボタンを選択し、「次へ」をクリックします。
- ドメインの管理者のユーザー名とパスワードを入力します。
インストール時にデフォルト値のままにした場合、ユーザー名は admin で、パスワードは adminadmin です。
- 「完了」をクリックします。
ページの先頭へ
旅行予約サービスサンプルプロジェクトでの新規プロジェクトの作成
- IDE のメインメニューから、「ファイル」>「新規プロジェクト」を選択します。
- 「カテゴリ」の下で、「サンプル」>「SOA」を選択します。
- 「プロジェクト」の下で、旅行予約サービスを選択し、「次へ」をクリックします。
- デフォルト値を受け入れるか、プロジェクト名と選択した場所を入力します。
このドキュメントでは、プロジェクト名は TravelReservationService です。
- 「完了」をクリックします。
「プロジェクト」ウィンドウには 3 つのプロジェクトノードが含まれています。1 つは BPEL モジュールの TravelReservationService 用、もう 1 つは複合アプリケーションプロジェクトの TravelReservationServiceApplication 用、あとの 1 つはバンドルされた EJB プロジェクトの ReservationPartnerServices 用です。
ページの先頭へ
パートナー Web サービスプロジェクトの配備
この旅行予約サービスは、公開インタフェースを介してパートナーサービスと通信します。それらのインタフェースは、パートナー固有の WSDL ファイル内で定義されます。
IDE は、 ReservationPartnerServices というバンドルされた EJB プロジェクトを含んでいます。ReservationPartnerServices プロジェクトには、3 つのパートナーサービスの基本的な EJB および JMS ベースの実装が含まれています。それらのパートナーサービスは、ホテル予約サービス、乗り物予約サービス、および航空券予約サービスです。旅行予約サービスプロセスをテスト実行するには、前もってこれらのパートナー Web サービスを、バンドルされている GlassFish アプリケーションサーバーに配備する必要があります。
この実装は、旅行予約サービスプロセス用のテストハーネスとして機能することのみを意図しています。パートナーサービスの実装について、BPEL 開発者は考えないものとします。パートナーサービスは、旅行予約サービスをテストするための単なる前提条件にすぎません。
ReservationPartnerServices プロジェクトを配備するには、次の手順に従います。
- 「プロジェクト」ウィンドウで「ReservationPartnerServices」ノードを右クリックし、「配備の取り消しおよび配備」を選択します。これにより、 ReservationPartnerServices が配備されます。
- 次の手順を実行することにより、 ReservationPartnerServices アプリケーションが正常に配備されたことを確認します。
- 「実行時」ウィンドウに切り替えて、GlassFish V2 ノードを展開します。
- 「アプリケーション」ノードを展開し、さらに「EJB モジュール」ノードを展開します。
ページの先頭へ
アプリケーションサーバーへの複合アプリケーションプロジェクトの配備
TravelReservationServiceApplication プロジェクトは、BPEL プロジェクトを JBI モジュールとしてすでに含んでいます (「TravelReservationServiceApplication」>「JBI モジュール」>「TravelReservationService.jar」ノードを参照)。サービスアセンブリをアプリケーションサーバーで使用できるように、TravelReservationServiceApplication 複合アプリケーションを配備します。これを行うと、サービスユニットを実行できるようになります。
- 「プロジェクト」ウィンドウで、「TravelReservationServiceApplication」プロジェクトノードを右クリックし、ポップアップメニューから「配備」を選択します。
- 「警告」ダイアログで、「GlassFish V2」が選択されていることを確認し、「了解」をクリックします。
「出力」ウィンドウに次のメッセージが表示された場合、配備は成功です。
ページの先頭へ
旅行予約サービスプロセスのテスト実行
テスト実行機能によって、ビジネスプロセスの開発者はプロセスのテスト実行を行うことができます。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 アプリケーションをデバッグできます。
一般的なデバッグ手順
- 「プロジェクト」ウィンドウの「TravelReservationService」>「プロセスファイル」ノードで、「TravelReservationService.bpel」ファイルをダブルクリックします。
- ソースエディタで、ブレークポイントを配置する要素の行番号をクリックすることにより、ソースコード内にブレークポイントを設定します。ここでは HasNoReservations テストを使用するので、3 つのパートナーサービスのすべてを呼び出すアクティビティーに対してブレークポイントを設定します。
- 行 97 でアクティビティーを受け取る ReceiveItinerary 上にブレークポイントを置きます。これはプロセスを初期化するアクティビティーです。行番号が表示されない場合は、メインメニューから「表示」>「行番号を表示」を選択します。
図上でブレークポイントを設定することもできます。そのためには、デザインビューに切り替え、要素を右クリックし、ポップアップメニューから「ブレークポイントを切り替え」を選択します。
ブレークポイントのある要素の上部に、赤いボックスが表示されます。
「ブレークポイントを切り替え」ホップアップメニューコマンドは、ナビゲータの BPEL 論理ビュー内の要素についても使用できます。「ナビゲータ」ウィンドウが表示されていない場合は、メインメニューから「ウィンドウ」>「ナビゲート」>「ナビゲータ」を選択します。ブレークポイントのある要素の場合、ナビゲータは次の画像 (ReceiveItinerary) に見られるような小さな赤い四角を表示します。
- ブレークポイントを ReserveAirline (行 130)、 ReserveVehicle (行 183)、 ReserveHotel (行 236) の各呼び出しアクティビティーに設定します。
- この時点で、プロジェクトにウォッチポイントを追加します。
- 「ウォッチポイント」ウィンドウが表示されない場合は、メインメニューから「ウィンドウ」>「デバッグ」>「ウォッチポイント」を選択します。
- ソースビューで、行 127 へ進み、次の XPath 式をコピーします。
not($ItineraryIn.itinerary/ItineraryInfo/ReservationItems/Item/Air)
あるいは、図上の If 要素 HasAirline を選択し、XPath 式を「プロパティー」ウィンドウの「条件」行からコピーします。「プロパティー」ウィンドウが表示されない場合は、メインメニューから「ウィンドウ」>「プロパティー」を選択します。
- 「ウォッチポイント」ウィンドウの内部を右クリックし、「新規ウォッチポイント」を選択します。
- 「新規ウォッチポイント」ダイアログで、XPath 式を「ウォッチポイント式」フィールドにペーストし、「了解」をクリックします。
- さらに 2 つの式のウォッチポイントを、行 180 と行 233 に追加します。「ウォッチポイント」ウィンドウには 3 つの項目があるはずです。
- 「プロジェクト」ウィンドウで、「TravelReservationServiceApplication」ノードを右クリックし、「プロジェクト (BPEL) をデバッグ」を選択します。
- 「出力」ウィンドウに「構築成功」というメッセージが表示されるまで待ちます。
- 「BPEL デバッガコンソール」ウィンドウに切り替えて、「デバッグセッションが開始しました」メッセージが表示されていることを確認します。
- 次のウィンドウが開いていることを確認します。
- BPEL 変数。開いていない場合、メインメニューから「ウィンドウ」>「デバッグ」>「BPEL」>「BPEL 変数」を選択します。
- BPEL プロセスのインスタンス。開いていない場合、メインメニューから「ウィンドウ」>「デバッグ」>「BPEL」>「BPEL プロセスのインスタンス」を選択します。
- BPEL プロセス実行。開いていない場合、メインメニューから「ウィンドウ」>「デバッグ」>「BPEL」>「BPEL プロセス実行」を選択します。
- 「プロジェクト」ウィンドウで、「TraveReservationServiceApplication」の「テスト」ノードの下にある「HasNoReservations」を右クリックし、「実行」を選択してテストを開始します。
- プロセスが最初のブレークポイントに到達したら、次のウィンドウを確認します。
- 「BPEL 変数」ウィンドウ。
これは、局所変数の構造、現在のプロセスインスタンスでの値、および現在のプロセスインスタンスが一時停止になった位置を示しています。
値が XML である場合においては、「値」ダイアログの特定の変数に関連する XML 部分に、アクセスして変更することができます。ダイアログを表示するには、「BPEL 変数」ウィンドウの行の最後にある省略符号 (...) ボタンを押します。
- 「BPEL プロセスのインスタンス」ウィンドウ。
現在のデバッグセッション内の BPEL サービスエンジン上で実行されている、すべての BPEL プロセスインスタンスが一覧表示されます。
番号付けされた TravelReservationService インスタンスが中断状態になっているはずです。
- 「BPEL プロセス実行」ウィンドウ。
BPEL デバッガでの現在の BPEL プロセスインスタンスの実行の進捗が、グラフィカルに表示されます。
ReceiveItinerary アクティビティーが緑色で強調表示されているはずです。これは、その時点で実行されていることを意味します。
残りのアクティビティーはまだ実行されていないため、グレーです。
- 「ウォッチポイント」ウィンドウ。
このウィンドウには、3 つの式すべての「値」列に、<Cannot evaluate the expression> という文字列が入っています。これは、プロセスが最初の受信アクティビティーの開始位置で停止し、 ItineraryIn メッセージがまだ到着していないためです。
- デバッグツールバーの「継続」をクリックします (Ctrl-F5)。プロセスは 2 番目のブレークポイントで停止します。このときまでに ItineraryIn メッセージは到着しており、ウォッチポイントの条件は評価が終了しています。3 つの式すべての値は、 true に設定されています。
注: 対応する予約項目がメッセージに含まれていない場合、式は true を返します。HasAirline テストを実行した場合、not($ItineraryIn.itinerary/ItineraryInfo/ReservationItems/Item/Air) 式 (着信メッセージに航空座席の予約項目が含まれていないかどうかを調べます) の値は、false に設定されます。
- 「継続」をクリックします。
このプロセスが完了すると、HasNoReservations テストは成功です。
- メインメニューから「実行」>「デバッガセッションを終了」を選択します。
ブレークポイントでのアクションのデバッグ
プロセスインスタンスが中断されたら、次のような従来のデバッグツールバーのアクションを実行できます。デバッグツールバーが表示されない場合は、「表示」>「ツールバー」>「デバッグ」を選択します。
- デバッガセッションを終了 (Shift-F5)。 現在のデバッグセッションを終了します。
- 継続 (Ctrl-F5)。次のブレークポイントに到達するまで、またはプロセスインスタンスが完了するまで、現在のプロセスインスタンスを実行します。
- ステップイン (F7)。次の BPEL アクティビティーまでステップ実行します。ステップ実行は、BPEL 言語のアクティビティーの細分度でのみサポートされます。それより細かい細分度ではステップ実行は行われません。ステップ実行すると、現在の行インジケータが前進し、それに応じて「BPEL 変数とウォッチポイント」ウィンドウの内容が変更される場合があります。
- カーソルまで実行 (F4)。「ナビゲータ」ウィンドウ内および BPEL デザイナーの「ソース」ビューと「デザイン」ビューの両方でプロセスが実行されるとき、ブレークポイントを動的に設定できます。
ページの先頭へ