BPEL デザイナー開発者ガイド
管理:
Anastasia Koval
最終更新日: 2008 年 4 月
このページは、NetBeans IDE 6.1 に適用されます。
目次
このリリースにない BPEL 2.0 要素
BPEL デザイナーのこのリリースでサポートされている要素には制限があります。サポートされている BPEL 2.0 言語の構文と関連する制限事項については、『BPEL サービスエンジンユーザーガイド 』を参照してください。
BPEL 2.0 仕様とは異なる BPEL スキーマの使用
BPEL デザイナーのこのリリースでは、BPEL 2.0 の最終的な仕様をサポートしており、その前の仕様はサポートしていません。このため、以前の仕様のバージョンに準拠の BPEL ファイルを開くと、BPEL デザイナーに「図を表示できません」というメッセージが表示されます。
このメッセージが表示された場合は、次のことを行なってください。
BPEL ファイルが準拠している仕様のバージョンを確認します。BPEL 2.0 仕様に準拠している BPEL ファイルには次の文字列があります。x mlns="http://docs.oasis-open.org/wsbpel/2.0/process/executable"
パートナーリンク型の定義が含まれる WSDL ファイルには次の文字列があります。
xmlns:plnk="http://docs.oasis-open.org/wsbpel/2.0/plnktype"
ファイル内の名前空間をこの文字列に置き換え、BPEL デザイナーで BPEL ファイルを開いてみてください。
プロセスで使用している BPEL 構文が BPEL 2.0 仕様に準拠していることを確認します。
サービスエンドポイントの衝突
複数の複合アプリケーションプロジェクトを配備するときにサービス終了点の衝突が発生して配備に失敗する場合があります。サービス終了点の衝突が発生した場合は次のメッセージが表示されます。
Deploy service assembly failed. (partial success)
MESSAGE: (SOAPBC_DEPLOY_2) Failed to deploy: java.lang.Exception:
An activated endpoint already has the same SOAP Address location:
http://localhost:18181/SynchronousSample
C:\<...>\SynchronousSample1Application\nbproject\build-impl.xml:209:
Service assembly deployment failed.
構築失敗 (合計時間: 31 秒) 通常、これは、異なる複合アプリケーションプロジェクトにパッケージ化された、ほぼ同一の複数のプロセスを配備しようとすることから発生します。この問題を回避するには、異なる複合アプリケーションプロジェクトの配備時に異なる終了点を使用します。
説明: 異なる複合アプリケーションと異なる BPEL プロセスを配備していても、SynchronousSample.wsdl ファイルにデフォルトで定義される終了点アドレスは同じです。これらは両方とも次のエンドポイントアドレスを持ちます。
<service name="service1">
<port name="port1" binding="tns:binding1">
<documentation/>
<soap:address location="http://localhost:18181/SynchronousSample"/>
</port>
</service> 同じサービス終了点を持つ 2 つの複合アプリケーション (たとえば SynchronousSampleApplication と SynchronousSample1Application ) を配備しようとした場合、2 番目の複合アプリケーションの配備は、終了点の衝突のために失敗します。
これらのプロセスのどちらかまたは両方を修正して、それらを同時に配備するために、複数のバージョンの複合アプリケーションを配備する場合があります。また、その動作を比較する場合もあります。この場合、終了点アドレスを異なるものにする必要があります。これは、プロセスの WSDL ファイルを編集して、衝突しないように「soap:address location 」属性を調整することを意味します。ポート番号かサービス名のどちらかを調整できます。たとえば、このどちらかがオリジナルと十分に異なったものになります。
<soap:address location="http://localhost:18182/SynchronousSample"/> または
<soap:address location="http://localhost:18181/SynchronousSampleNew"/>
サービスエンドポイントとテストケースの関係
「テスト」アクションを呼び出すと、複合アプリケーションプロジェクト内の各テストケースが入力メッセージをターゲットプロセスに送信しようとします。メッセージの送信先を知るために、各テストケースには「宛先 」というプロパティーがあります。このプロパティーは「プロパティー」ウィンドウで変更できます。「プロパティー」ウィンドウを開くには、テストケースのノードを右クリックし、ポップアップウィンドウから「プロパティー」を選択します。
destination=http://localhost:18181/SynchronousSample 「宛先 」プロパティーの値は、テストケースの作成時に設定されます。したがって、あとでサービスエンドポイントを変更する場合は、以前に生成したすべてのテストケースの「宛先」属性を手動で調整しなければならなくなります。もちろん、新しく生成したテストケースについては問題ありません。
ポート
GlassFish V2 アプリケーションサーバーの HTTP ポート
デフォルトで、アプリケーションサーバーの HTTP ポートは、インストーラによって 8080 に設定されます。一部のサンプルプロセスでは、8080 の値が想定されています。何らかの理由で Application Server の HTTP ポートが 8080 ではない場合は、サンプルを手動で調整してください。
特に、旅行予約サービスサンプルには、いくつかの調整が必要になります。
たとえば、Application Server が、デフォルトの 8080 ではなく 8090 の HTTP ポートを利用しているとします。この場合、次のことを行なってください。
予約パートナーサービスの WSDL ファイルの調整
TravelReservationService BPEL モジュールプロジェクトで、AirlineReservationService.wsdl 内の soap アドレスの値を変更します。<soap:address
location="http://localhost:8080/webservice/AirlineReservationService"/> 次のように変更します。
<soap:address
location="http://localhost:8090/webservice/AirlineReservationService"/>
同様に、VehicleReservationService.wsdl と HotelReservationService.wsdl 内の soap アドレス値を更新します。
注: アプリケーションサーバーが利用している HTTP ポートを確認するには、「サービス」ウィンドウを開き、GlassFish V2 アプリケーションサーバーのノードを右クリックして、「管理コンソールを表示」を選択します。GlassFish V2 アプリケーションサーバーの管理コンソールがブラウザに開きます。ユーザー名とパスワードを入力して (デフォルト値は admin/adminadmin ) ログインします。左側の区画の「アプリケーションサーバー」をクリックし、右側の区画で「一般」タブを選択します。必要な HTTP ポートの値は、「HTTP Port(s): 」行の最初の値です。
または、Application Server ログで次の行を探します。
WEB0712: Starting Sun-Java-System/Application-Server HTTP/1.1 on 8080
WEB0712: Starting Sun-Java-System/Application-Server HTTP/1.1 on 8181
WEB0712: Starting Sun-Java-System/Application-Server HTTP/1.1 on 4848 必要な値は、最初の行にあります。
旅行予約サービスのエンドポイントの衝突
問題の一般的な説明については、「 サービスエンドポイントの衝突 」の節を参照してください。ただし、旅行予約サービスサンプルの場合は、次の追加の手順を実行してください。
ポート 18181 を使用できない場合、かつ TRS をポート 19191 などの別のポートで実行する場合は、次の手順に従います。
URL を変更する。
TravelReservationService.wsdl を開きます。
service タグで次の変更を行います。
soap:address location="http://localhost:18181/TravelReservation/buildItinerary"/
次のように変更します。
soap:address location="http://localhost:19191/TravelReservation/buildItinerary"/
同様に、airlineReserved 、hotelReserved 、および vehicleReserved の URL を更新します。
パートナー EJB プロジェクト ReservationPartnerServices の調整
次の手順を実行します。
IDE で ReservationPartnerServices プロジェクトを開きます。TravelReservationService プロジェクトを作成した場所に ReservationPartnerServices プロジェクトが作成されています。
「プロジェクト」ウィンドウで、「ReservationPartnerServices」プロジェクトノードを展開し、「構成ファイル」ノードを展開し、「ejb-jar.xml 」ノードをダブルクリックして、ビジュアルエディタでファイルを開きます。
デザインビューの「エンタープライズ Beans」の下で、ReservationCallBackProviderMDB をクリックしてエントリを展開します。「Bean の環境」を展開し、「環境エントリ」を展開します。
「環境エントリ」の下で、各エントリを選択し、「編集」をクリックして、「エントリ値」フィールドで 18181 のポート番号を変更します。たとえば、AirlineCallbackURL の場合は次のように変更します。
http://localhost:18181/TravelReservation/airlineReserved
次のように変更します。
http://localhost:19191/TravelReservation/airlineReserved
「宛先」プロパティーの更新
TravelReservationServiceApplication 複合プロジェクトの「テスト」ノードを展開します。その下のテストケースのノードごとに次の操作を行います。
テストケースノードを右クリックして、「プロパティー」を選択します。
「プロパティー」ウィンドウで「 宛先 」プロパティーの値を更新します。例:
変更前 http://localhost:18181/TravelReservation/buildItinerary
次のように変更します。
http://localhost:19191/TravelReservation/buildItinerary
イベントハンドラの良くない使い方
不適切なイベントハンドラの使い方によって、プロセスの妥当性検査が失敗する場合があります。例えば、主フローに送信されたリクエストに返信するイベントハンドラを使うと、妥当性検査でエラーが発生します。より詳しい情報は、イベントハンドラの使用 を参照してください。
テスト実行
テストケースを実行する場合、
Output.xml ファイルが空のときは、最初のテスト実行からの応答を Output.xml に格納するかどうかを問い合わせてきます。Output.xml ファイルは、新しいテストケースが作成されたあとは空です。この最初のテスト実行の出力は、テスト実行が失敗したと示します。
Output.xml ファイルが空でないときは、取得された結果がファイルの内容と比較されます。一致した場合、テスト実行は合格したものとしてマークされます。
テスト実行の失敗
失敗したテスト実行を受け取った場合、次のどちらかを実行できます。
失敗したテスト実行のあとの応答メッセージを調べます。応答メッセージは、「プロジェクト」ウィンドウの「テストケース」ノードの下にあります。応答メッセージには、タイムスタンプが付いています。応答が、期待された応答 (つまり Output.xml ) と一致しないこと、およびこれが問題の理解に役立つかもしれないことを確認できます。
失敗したテスト実行のあとのサーバーログファイルを調べます。これを行うには、IDE の「実行時」タブを参照します。GlassFish V2 アプリケーションサーバーのノードで、「サーバーログを表示 」アクションを選択します。
これにより、サーバーログの内容が表示され、テスト実行が失敗した理由に関する情報が含まれているかもしれません。
テスト実行失敗の 1 つの特定のケースは、Input.xml に埋め込まれた、内容ベースの相互関係を使用するテストに関連します。たとえば、旅行予約サービステストケース内の Input.xml ファイルには、相互関係の基礎として <UniqueID>...</UniqueID> があります。この状況で、同じテストケースによって開始された実行中のプロセスインスタンスがすでにあるときにテストケースを実行した場合、2 番目のプロセスインスタンスは開始されず、テストは失敗します。GlassFish V2 アプリケーションサーバーのログに次のメッセージが現れます。
Exception occurred while executing a business process instance.
com.sun.jbi.engine.bpel.core.bpel.exception.CorrelationAlreadyExists: An instance is associated with the correlation
<...>
サーバーを使用する場合のファイアウォールの無効化
Application Server 上のアプリケーションまたは BPEL Server 上のビジネスプロセスを正常に配備、実行、デバッグ、またはテストするために、ファイアウォールを無効にしなければならない場合があります。
必要な相互関係セットの使用が、妥当性検査システムで検出されない
BPEL サービスエンジンでは、相互関係セットをむ厳密に使用する必要があります。現在、妥当性検査システムは、次の要件の違反を検出しません。
メッセージ時: createInstance="yes" 属性を持たないピックアクティビティー内でメッセージ時要素が使用されている場合、メッセージ時要素は有効な <correlations> 子を持っている必要があります。
受信: 受信要素は、createInstance="yes" 属性を持っていない場合、有効な <correlations> 子を持っている必要があります。
イベント時: イベント時要素は、有効な <correlations> 子を持っている必要があります。
SOA に関する他の既知の問題については NetBeans IDE 6.1 リリースノート を参照してください。
ページの先頭へ