サービスエンドポイントの衝突
複合アプリケーション配備の時点で、システムは、配備されたプロセスの、1 つまたは複数のサービスエンドポイントの定義を試みます。各サービスエンドポイントは一意でなければなりません。したがって、同じサービスエンドポイント定義を持つ 2 つのプロセスをユーザーが配備しようとした場合、エラーとして退け、配備は成功しません。次のようなメッセージが表示されます。
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.
BUILD FAILED (total time:31 seconds)
この種のメッセージが表示された場合、それは、サービスエンドポイントの衝突があることを意味します。通常、これは、異なる複合アプリケーションプロジェクトにパッケージ化された、ほぼ同一の複数のプロセスを配備しようとすることから発生します。たとえば、「新規プロジェクト」>「サンプル」>「非同期 BPEL プロセス」(またはその他のサンプル) を 2 度以上呼び出す場合に、これが発生します。複数の BPEL モジュールと、複数の複合アプリケーションプロジェクトを取得することになります。たとえば、デフォルトパスを 2度取った場合です。プロジェクトは、次の 4 つになります。
-
SynchronousSample
SynchronousSampleApplication
-
SynchronousSample1
SynchronousSample1Application
これらは別個の複合アプリケーションと別個の 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"/>
エンドポイントの停止
BPEL エンジンがエンドポイントの衝突に遭遇した場合、BPEL エンジンは、衝突したエンドポイントを予防的に停止します。これが発生すると、次のメッセージがサーバーログに現れます。
java.lang.RuntimeException:javax.jbi.messaging.MessagingException:Endpoint has been deactivated.
at com.sun.jbi.engine.bpel.EngineChannel.reply(EngineChannel.java:227)
最初はこのメッセージに気付かないかもしれませんが、この問題の症状は、以後のテスト実行が失敗することにあります。
このメッセージがあったら、衝突を解決して、複合アプリケーションを再配備してください。そうすれば、すべてうまくいくはずです。
サービスエンドポイントとテストケースの関係
「テスト」アクションを呼び出すと、複合アプリケーション内の各テストケースが入力メッセージをターゲットプロセスに送信しようとします。メッセージの送信先を知るために、各テストケースには「宛先」というプロパティーがあります。このプロパティーは、テストケースノードを右クリックしてポップアップウィンドウから「プロパティー」を選択すると呼び出される「プロパティー」ウィンドウで修正できます。
destination=http://localhost:18181/SynchronousSample
「宛先」プロパティーの値は、テストケースの作成時に設定されます。したがって、あとでサービスエンドポイントを変更する場合は、以前に生成したすべてのテストケースの「宛先」属性を手動で調整しなければならなくなります。もちろん、新しく生成したテストケースについては問題ありません。
ポート
Sun Java System Application Server の HTTP ポート
デフォルトでは、Enterprise Pack インストーラは、Application Server の 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 アドレス値を更新します。
注: Application Server が利用している HTTP ポートを確認するには、「実行時」ウィンドウを開き、「Sun Java System Application Server 9」ノードを右クリックして、「管理コンソールを表示」を選択します。Sun Java System Application Server 管理コンソールがブラウザに開きます。ユーザー名とパスワード (デフォルト値は admin と adminadmin) を入力し、ログインします。左の区画で「Application Server」をクリックし、右の区画で「一般」タブを選択します。必要な 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 を開きます。
「サービス」タグで、
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」ノードをダブルクリックして、ejb-jar.xml ビジュアルエディタでファイルを開きます。
-
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 の「実行時」タブを参照します。「Sun Java System Application Server」ノードで、「サーバーログを表示」アクションを選択します。
これにより、サーバーログの内容が表示され、テスト実行が失敗した理由に関する情報が含まれているかもしれません。
テスト実行失敗の 1 つの特定のケースは、Input.xml に埋め込まれた、内容ベースの相互関係を使用するテストに関連します。たとえば、旅行予約サービステストケース内の Input.xml ファイルには、相互関係の基礎として <UniqueID>...</UniqueID> があります。この状況で、同じテストケースによって開始された実行中のプロセスインスタンスがすでにあるときにテストケースを実行した場合、2 番目のプロセスインスタンスは開始されず、テストは失敗します。Sun Java System Application Server ログに次のメッセージが現れます。
Exception occured 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 上のビジネスプロセスを正常に配備、実行、デバッグ、またはテストするために、ファイアウォールを無効にしなければならない場合があります。
XSD ファイルと WSDL ファイルの修正
課題 81190
XSD ファイルと WSDL ファイルを修正したとき、BPEL の妥当性検査は自動的には開始されません。BPEL の妥当性検査が呼び出されるのは、BPEL ファイルに変更を加えたとき、または BPEL プロジェクトに対して構築または配備のアクションを実行したときだけです。デザインビューまたはソースビューのツールバーで「XML の妥当性検査」ボタン (Alt+Shift+F9) をクリックすることで、BPEL の妥当性検査を手動で呼び出すこともできます。詳細については、「妥当性検査」の節を参照してください。
課題 86274
XSD ファイルまたは WSDL ファイルが整形式でない場合は、問題を修正します。ただし、XSD ファイルと WSDL ファイルに加えた変更は、BPEL ファイルを再び開くまでは BPEL ファイルに反映されないことに注意してください。
必要な相互関係セットの使用が、妥当性検査システムで検出されない
BPEL サービスエンジンでは、相互関係セットをむ厳密に使用する必要があります。現在、妥当性検査システムは、次の要件の違反を検出しません。
-
メッセージ時: createInstance="yes" 属性を持たないピックアクティビティー内でメッセージ時を使用する場合、メッセージ時要素は、有効な <correlations> 子を持っていなければなりません。
-
受信: 受信要素は、createInstance="yes" 属性を持たない場合は、有効な <correlations> 子を持っていなければなりません。
-
イベント時: イベント時要素は、有効な <correlations> 子を持っていなければなりません。
パートナーサービス内の変更
課題 86499
たとえば、Web サービス操作のシグニチャーが変化する場合など、パートナーサービスのインタフェースが変化した場合に、修正された WSDL ファイルをインポートしなかったときは、BPEL プロセスがハングします。新しい WSDL ファイルをインポートして、アプリケーションを再配備してください。場合によっては、BPEL サービスエンジンを再起動しなければなりません。
ナビゲータで相互関係セットからプロパティーを削除すると、誤って WSDL からプロパティーが削除される
課題 87221
ナビゲータでポップアップメニューコマンドを使用して相互関係セットからプロパティーを削除すると、WSDL ファイルからプロパティーが誤って削除されます。これを回避するには、相互関係セットエディタを使用し、「プロパティー」ノード自体に対しては「削除」のホップアップメニューアクションを使用しないようにします。
「パートナーリンク」ダイアログのキャンセル
NetBeans プロジェクトから BPEL モジュールの図に WSDL ファイルまたは「Web サービス」ノードをドラッグすると、いくつかの影響が発生します。これらの影響には、ドラッグされたソースオブジェクトの WSDL ファイルの自動的な「検索」などがあります。WSDL ファイルまたは「Web サービス」ノードを図にドラッグした場合に表示される「パートナーリンク」ダイアログをキャンセルした場合、IDE は、WSDL ファイルの検索をロールバックしません。これらの WSDL ファイルがプロジェクトに必要ない場合は、ほかのプロジェクトリソースを削除する場合と同様に、「プロジェクト」ウィンドウから手動でそれらのファイルを削除してください。
「元に戻す」コマンドと「再実行」コマンド
課題 84793
「ナビゲータ」ウィンドウにフォーカスがある場合、「元に戻す」コマンドと「再実行」コマンドは使用できません。「元に戻す」コマンドと「再実行」コマンドにアクセスするには、図にフォーカスを置きます。「ナビゲータ」ウィンドウで開始した変更を元に戻したり、再実行したりできるようになります。
デバッグ
デバッグ中のブレークポイントの追加
課題 82497
アクティブなデバッグセッションがある場合、ブレークポイントは、アクティブなデバッグセッションの言語にしか追加できません。たとえば、アクティブな BPEL デバッグセッションがある場合に java にブレークポイントを追加したり、この逆を行ったりすることはできません。これを回避するには、ブレークポイントを追加する言語に関連するデバッグセッションをアクティブにします。または、ブレークポイントを追加するには、すべてのデバッグセッションを閉じます。
BPEL デバッガコンソールのメッセージ
BPEL デバッガコンソールには、次のメッセージが表示されることがあります。
-
Connecting to <host>:<port>
-
デバッガが BPEL サービスエンジンに接続しようとしています。
-
Debug session started
-
デバッガが BPEL サービスエンジンに正常に接続し、デバッグセッションが開始されました。
-
Unable to start a debug session :Unable to connect to <host>:<port> :Connection timed out:connect
-
このメッセージが表示された場合は、次のことを確認します。
-
Sun Java System Application Server が動作している。
-
BPEL サービスエンジンが起動している。
-
BPEL サービスエンジンの「DebugEnabled」プロパティーが「true」に設定されている。
-
ホスト名が、ユーザーが接続している Sun Java System Application Server を実行しているマシンのホスト名になっている (デフォルトでは localhost)。
-
ポートの値が、ユーザーが接続している BPEL サービスエンジンの「DebugPort」プロパティーと同じになっている (デフォルトでは 3343)。
-
Unable to start a debug session :Already connected to <host>:<port>
-
この特定のサービスエンジンに接続した実行中のデバッグセッションがすでにあります。
-
Debug session terminated :Target disconnected
-
デバッガがサーバーとの接続を失いました。サーバーが動作していて、ネットワークが稼動していることを確認します。
-
Stop connecting
-
デバッグセッションの接続中にデバッグセッションを明示的に終了しました。
-
Debug session finished
-
デバッグセッションの実行中にデバッグセッションを明示的に終了しました。
デバッガが異なるプロジェクトの BPEL ソースを混同する
課題 79288
同じ QName を持つ IDE のプロセスが 2 つあり、両方のプロセスの異なる要素にブレークポイントが設定されている場合、どちらか一方を配備してデバッグすると、BPEL デバッガは両方のプロセス内に指定されているブレークポイントで停止します。この問題が発生するのは、BPEL デバッガは、それぞれのプロセスでなく、BPEL エンジン自身に接続されるためです。
異なる名前 (たとえば SynchronousSample および SynchronousSample1) のプロジェクトが 2 つあり、それら両方のプロジェクトには、同じ名前のプロセス (SynchronousSample) が含まれていると仮定します。さらに、それら両方のプロセスにはブレークポイントが設定されており、どちらか一方のプロセス (SynchronousSample) は配備され、SynchronousSample1 は閉じられ、IDE にも開いていないと仮定します。デバッグを開始すると、デバッガが全てのブレークポイント (両方のファイルにある一連のブレークポイント) で停止します。IDE はブレークポイントに達すると自動的にソースファイルを開くため、これにより予期しない結果が生じる可能性があります。この例では、IDE は SynchronousSample1.SynchronousSample プロセスファイルを開き、そのファイルのブレークポイントの 1 箇所で停止します。この問題を回避するには、衝突するプロセスファイルのブレークポイントを解除します。
デバッグの詳細については、「BPEL プロセスのデバッグ」の節を参照してください。
図の表示不能
課題 87719
通常、デザインビューで「図を表示できません」のメッセージが表示されるのは、BPEL ソースが正しくない場合だけです。このような場合に推奨される手順は、ソースビューに移動し、「XML の検査」アクションと「XML の妥当性検査」アクションのどちらかまたは両方を実行することです。これにより、BPEL ソース内の何を修正すべきかがわかります。修正を行ってください。次に、ファイルを保存します。この時点で、デザインビューの図が適切に描画されるはずです。ただし、場合によっては、BPEL ファイルが適切に構成されていても、デザインビューに「図を表示できません」と表示されることがあります。このようなケースの 1 つが「課題 87719」で言及されています。この場合、BPEL ファイルは実際に正しく構成されていますが、デザインビューでは「図を表示できません」の表示が続きます。この場合の唯一の対策は、IDE を再起動することです。再起動後、図は適切に描画されるはずです。