Interstage Application Server アプリケーション作成ガイド (イベントサービス編) |
目次
索引
![]() ![]() |
第4章 アプリケーションの開発(各機能) | > 4.1 イベントチャネル接続のアプリケーション開発 |
イベントサービスのアプリケーションは、Push,Pull,Mixedのすべてのモデルでイベントチャネルと接続した場合は、正常・異常時に関わらず必ずイベントチャネルと切断後、終了するように作成してください。
アプリケーションで切断処理を行わなかった場合は、イベントチャネルに接続情報が残るためイベントチャネルのデータが削除されないことがあります。このような状態は、Pullモデルのコンシューマまたは、Mixedモデルのコンシューマがイベントチャネルと切断しないで終了した場合に発生します。
しかし、回線の切断やアプリケーションの異常終了など、必ずしも設計どおりにイベントチャネルと切断ができない場合があります。イベントチャネルのコネクション自動回収機能を指定しなかった場合、イベントチャネルはアプリケーションとの接続情報を保持し続けます。
例えば、Mixedモデルのコンシューマの場合は、イベントチャネルからデータをpullするアプリケーションが存在しないにも関わらずデータが蓄積される状態が発生します。
イベントチャネルのコネクション自動回収機能を指定しなかった場合は、接続情報だけを回収する機能をサポートしていないため、ユーザアプリケーションで接続情報の回収を実装する必要があります。(2)に接続情報の回収方法を説明します。
回収方法の基本的な考え方は、アプリケーションが何らかの理由により切断できなかった場合に、他のアプリケーションが代行して接続情報を回収するものです。
以下の例は、アプリケーションがイベントチャネル接続時のProxyのオブジェクトリファレンスをファイルに書き込み、他のアプリケーションでファイルからProxyのオブジェクトリファレンスを読み込み、イベントチャネルの接続情報を回収する方式です。(図中の★はユーザが作成するアプリケーションおよびファイルを示します。)
※イベントチャネルとアプリケーションが動作するマシンが異なり、LANが断線した場合など、アプリケーション側のマシンからは接続情報を回収できません。この場合は、回線の復旧を待つか、イベントチャネル側のマシンで回収用アプリケーションを実行してください。
C : CORBA_ORB_object_to_string C++ : CORBA::ORB::object_to_string COBOL : CORBA-ORB-OBJECT-TO-STRING Java : org.omg.CORBA.ORB.object_to_string
C言語での実装例を以下に示します。(Mixedモデルのコンシューマの場合)
[イベントサービスの場合] FILE *fd; CORBA_string str; (省略) /* ---- イベントチャネルとの接続処理 ---- */ CosEventChannelAdmin_ProxyPullSupplier_connect_pull_consumer( proxy, CORBA_OBJECT_NIL, &env ); env_check( "ProxyPullSupplier_connect_pull_consumer", &env ); /* ---- Proxyオブジェクトを文字列に変換してファイルに出力します ---- */ str = CORBA_ORB_object_to_string( orb, proxy, &env ); env_check( "CORBA_ORB_object_to_string", &env ); fd = fopen( "proxy-file.txt", "w" ); fprintf( fd, "%s", str ); fclose( fd );
[ノーティフィケーションサービスの場合] FILE *fd; CORBA_string str; (省略) /* ---- イベントチャネルとの接続処理 ---- */ CosNotifyChannelAdmin_StructuredProxyPullSupplier_connect_structured_pull_consumer( proxy, CORBA_OBJECT_NIL, &env ); env_check( " StructuredProxyPullSupplier_connect_structured_pull_consumer ", &env ); /* ---- Proxyオブジェクトを文字列に変換してファイルに出力します ---- */ str = CORBA_ORB_object_to_string( orb, proxy, &env ); env_check( "CORBA_ORB_object_to_string", &env ); fd = fopen( "proxy-file.txt", "w" ); fprintf( fd, "%s", str ); fclose( fd );
C : CORBA_ORB_string_to_object C++ : CORBA::ORB::string_to_object COBOL : CORBA-ORB-STRING-TO-OBJECT Java : org.omg.CORBA.ORB.string_to_object
[イベントサービスの場合] CosEventChannelAdmin_ProxyPullSupplier proxy; FILE *fd; char str[4096]; (省略) /* ---- ファイルから文字列を読み込みProxyオブジェクトに変換します ---- */ fd = fopen( "proxy-file.txt", "r" ); fscanf( fd, "%s", str ); fclose( fd ); proxy = CORBA_ORB_string_to_object( orb, str, &env ); env_check( "CORBA_ORB_string_to_object", &env ); /* ---- イベントチャネルとの切断処理 ---- */ CosEventChannelAdmin_ProxyPullSupplier_disconnect_pull_supplier( proxy, &env );
[ノーティフィケーションサービスの場合] CosNotifyChannelAdmin_StructuredProxyPullSupplier proxy; FILE *fd; char str[4096]; (省略) /* ---- ファイルから文字列を読み込みProxyオブジェクトに変換します ---- */ fd = fopen( "proxy-file.txt", "r" ); fscanf( fd, "%s", str ); fclose( fd ); proxy = CORBA_ORB_string_to_object( orb, str, &env ); env_check( "CORBA_ORB_string_to_object", &env ); /* ---- イベントチャネルとの切断処理 ---- */ CosNotifyComm_StructuredPullSupplier_disconnect_structured_pull_supplier ( proxy, &env );
目次
索引
![]() ![]() |