CORBAワークユニットが停止しない
以下に記載されている方法でCORBAワークユニットの停止処理を行ったにもかかわらず、CORBAワークユニットが停止処理中の状態のまま停止が完了しない場合があります。
isstopwuコマンドで通常停止または同期停止を実行
Interstage管理コンソールを使用して通常停止または同期停止を実行
アプリケーションの実装と登録情報の不一致による問題
サーバアプリケーションの実装と登録情報が一致していないときに、この現象が発生する可能性があります。この現象が発生した場合、強制停止を実行することにより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”で活性化メソッド後にプロセスを終了させていない場合は、以下のどちらかの対処を行ってください。
動作モードを“COMPATIBLE”に変更する。
活性化メソッド復帰後にプロセスを終了するよう処理を修正する。
注) 活性化メソッドの一覧は以下のとおりとなります。
C : CORBA_BOA_impl_is_ready(), CORBA_BOA_obj_is_ready()
C++ : CORBA::BOA::impl_is_ready(), CORBA::BOA::obj_is_ready()
Java : org.omg.PortableServer.POAManager.activate()
COBOL : ORBA-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”で活性化メソッド後にプロセスを終了させていない場合は、以下のどちらかの対処を行ってください。
動作モードを“COMPATIBLE”に変更する。
活性化メソッド復帰後にプロセスを終了するよう処理を修正する。