ページの先頭行へ戻る
Interstage Application Server/Interstage Web Server トラブルシューティング集
Interstage

10.3 アプリケーションが停止しない

CORBAワークユニットが停止しない

  以下に記載されている方法でCORBAワークユニットの停止処理を行ったにもかかわらず、CORBAワークユニットが停止処理中の状態のまま停止が完了しない場合があります。


アプリケーションの実装と登録情報の不一致による問題

  サーバアプリケーションの実装と登録情報が一致していないときに、この現象が発生する可能性があります。この現象が発生した場合、強制停止を実行することによりCORBAワークユニットを停止することが可能です。

  サーバアプリケーションの動作モードに“COMPATIBLE”を指定した場合は特別な処理は不要ですが、動作モードに“SYNC_END”を指定した場合は活性化メソッド(注)から復帰した後に(exit関数の発行など)明示的にプロセスを終了させる必要があります。ユーザ論理のスレッドがすべて終了してもCORBA機能用の管理スレッドが存在するため、プロセスは終了しません。そのため、“SYNC_END”の場合に活性化メソッド後のプロセス終了処理が行われていないと、CORBAワークユニットの停止処理を行ったにもかかわらず、CORBAワークユニットが停止しない(CORBAワークユニットのプロセスが残存する)という現象が発生します。
  たとえば、V7以前のサンプルでは活性化メソッド後にスレッドの終了処理(Solaris版: thr_exit関数の発行、Windows(R)版: ExitThread関数の発行、 Linux版: pthread_exit関数の発行)を行っていますが、これは“COMPATIBLE”を期待した処理です。動作モードを“SYNC_END”に変更する場合は、活性化メソッド後にexit関数を発行するなどの修正をする必要があります。
  動作モードが“SYNC_END”で活性化メソッド後にプロセスを終了させていない場合は、以下のどちらかの対処を行ってください。

  注) 活性化メソッドの一覧は以下のとおりとなります。

C : CORBA_BOA_impl_is_ready(), CORBA_BOA_obj_is_ready()
C++ : CORBA::BOA::impl_is_ready(), CORBA::BOA::obj_is_ready(), PortableServer::POAManager::activate()
Java : org.omg.PortableServer.POAManager.activate()
COBOL : ORBA-BOA-IMPL-IS-READY, CORBA-BOA-OBJ-IS-READY
OOCOBOL : CORBA-BOA-IMPL_IS_READY, CORBA-BOA-OBJ_IS_READY


COBOLアプリケーションの標準出力切り替えを実施していないことによる問題

  ワークユニットではコンソールが無いため、COBOLアプリケーションではバッチ処理での実行と同じ扱いになります。そのためCOBOLアプリケーションでDISPLAY文を使用している場合は、データ出力先をファイルに変更するか環境変数“@WinCloseMSG”にOFFを設定するなどの対処を行わないとワークユニット停止時にアプリケーションがハングアップする可能性があります。COBOLのバッチ処理についての詳細は、ご利用されているCOBOLのマニュアルを参照してください。


CORBAサーバアプリケーションが停止しない

  odcntlqueコマンドを使用してCORBAサーバアプリケーションの停止を行ったにもかかわらずCORBAサーバアプリケーションのプロセスが終了しない場合、サーバアプリケーションの実装と登録情報が一致していない可能性があります。
  サーバアプリケーションの動作モードに“COMPATIBLE”を指定した場合は特別な処理は不要ですが、動作モードに“SYNC_END”を指定した場合は活性化メソッドから復帰した後に(exit関数の発行など)明示的にプロセスを終了させる必要があります。ユーザ論理のスレッドがすべて終了してもCORBA機能用の管理スレッドが存在するため、プロセスは終了しません。そのため、“SYNC_END”の場合に活性化メソッド後のプロセス終了処理が行われていないと、CORBAサーバアプリケーションの停止処理を行ったにもかかわらず、CORBAサーバアプリケーションのプロセスが残存するという現象が発生します。
  動作モードが“SYNC_END”で活性化メソッド後にプロセスを終了させていない場合は、以下のどちらかの対処を行ってください。