イベントサービスでアプリケーション運用中に異常が発生した場合の対処方法について説明します。
コンシューマアプリケーション運用中に異常が発生した場合、発生したタイミングにより対処を行う必要があります。また、対処方法は、コンシューマアプリケーションが接続情報を保存している場合としていない場合で異なります。それぞれについて説明します。
アプリケーション運用中にコネクションが切断される場合
■対処
アプリケーション運用中に、ユーザ例外“Disconnected”が復帰された場合、イベントチャネルの作成時に“コネクション情報を自動回収する処理”を有効と設定(esmkchnlコマンド実行時に-autodisconオプションを指定)したため、CORBAサービスのクライアント側無通信監視時間超過によりコネクションが切断された可能性があります。アプリケーションを継続して運用する場合は、イベントチャネルへの接続から行ってください。
コンシューマアプリケーションの異常終了(接続情報を保存している場合)
■イベントデータの待ち合わせ中に異常終了した場合の対処
イベントチャネルは、イベントデータ待ち合わせ中のコンシューマアプリケーションが異常終了しても、イベントチャネル内ではproxyのイベントデータの待ち合わせ状態が解除されず、サプライヤからイベントデータが送信されるまで、またはイベントデータの待ち合わせ時間まで、イベントデータを待ち合わせます。そのため、コンシューマアプリケーションの再起動後に、同一proxyで受信処理を行った場合は、イベントチャネル内でpullメソッドまたはpull_waitメソッドが2重に発行されることになり、以下の例外が復帰される可能性があります。
システム例外:BAD_PARAM マイナーコード:0x464a09e5
この場合、pull_cancelメソッドを発行し、イベントデータの待ち合わせ状態を解除した後に、pullメソッドおよびpull_waitメソッドを発行してください。
■トランザクション運用でイベントデータ受信後、commit/rollback処理前に異常終了した場合の対処
トランザクション運用中のアプリケーションが異常終了しても、イベントチャネルはトランザクションのタイムアウト時間までトランザクション処理中です。そのため、受信済みのイベントデータを再度受信する場合は、必ずrollbackメソッドを発行後にbeginメソッドを発行して再度トランザクション処理を行ってください。
なお、トランザクション処理中にdisconnectメソッドを発行した場合、イベントチャネルは自動的にcommit処理を実行します。
コンシューマアプリケーションの異常終了(接続情報を保存していない場合)
■トランザクション運用でイベントデータ受信後、commit/rollback処理前に異常終了した場合の対処
Point-To-Pointモデルの運用などにおいて、コンシューマアプリケーションが接続情報を保存せず、コンシューマの起動ごとにproxyを作成してローカルトランザクションを実施している場合、ローカルトランザクションのタイムアウト時間に大きい値を設定していると、前回受信したデータ(トランザクションが完了していない状態のデータ)を早く受信できません。
以下のいずれかの操作を行うことで、トランザクションタイムアウトの検出が早くなり、前回受信したデータ(トランザクションが完了していない状態のデータ)を早く受信できます。
イベントチャネル起動前に、essetcnfchnlコマンド(-ltrntimeオプション指定)を使用して、ローカルトランザクションのタイムアウト時間を300秒程度(初期設定値:300秒)に変更します。
イベントサービス起動前に、essetcnfコマンド(-ltrntimeオプション指定)を使用して、ローカルトランザクションのタイムアウト時間を300秒程度(初期設定値:300秒)に変更します。
なお、イベントチャネルの不揮発チャネル運用中の場合は、トランザクションタイムアウトの検出を待たずに、イベントチャネルの再起動を行うことによって、ローカルトランザクションは解除され、前回受信したイベントデータを復元できます。
動的イベントチャネルとの通信時に、システム例外“COMM_FAILURE”およびマイナーコード“0x464a01ec/0x464a09ec”が復帰される場合
■対処
動的イベントチャネルとの通信時に、Windows(R)の場合はイベントログ上、Solaris/Linuxの場合はシステムログ上に、エラーメッセージod10939が出力された場合は、以下のインタフェースに指定したホスト名またはポート番号に誤りがある可能性があります。
イベントサービス使用時
C言語の場合:EventFactory_create()
C++言語の場合:EventFactory::create()
Java言語の場合:com.fujitsu.ObjectDirector.EventService.EventFactory.create()
COBOLの場合:EVENTFACTORY-CREATE
ノーティフィケーションサービス使用時
C言語の場合:CosNotifyChannelAdmin_EventChannelFactory_create_channel()
C++言語の場合:CosNotifyChannelAdmin::EventChannelFactory::create_channel()
Java言語の場合:org.omg.CosNotifyChannelAdmin.EventChannelFactory.create_channel()
COBOLの場合:COSNOTIFYCHANNELADMIN-EVENTCHANNELFACTORY-CREATE-CHANNEL
アプリケーションプログラムにおいて、上記のインタフェースに指定したホスト名およびポート番号に誤りがないかを確認してください。
また、当該イベントファクトリを停止する場合は、esstopfctryコマンドを以下のオプションで実行し、すべての動的イベントチャネルを停止してください。
esstopfctry -o off
その他
イベントサービスのアプリケーションは、CORBAサービスのアプリケーションです。アプリケーション運用中に異常が発生した場合、“第9章 CORBAサービス使用時の異常”-“9.4 アプリケーションがエラーとなる”も参考にして対処してください。なお、Java言語のアプリケーション作成時の環境設定(ORBの指定および環境変数CLASSPATHの設定)については、“アプリケーション作成ガイド(イベントサービス編)”の“アプリケーションの開発(Java言語)”-“アプリケーションの作成方法”-“クライアントアプリケーションの作成方法”も参照してください。