Java言語でのPushモデルのアプリケーションの開発について説明します。
(1)概要
サプライヤがコンシューマにイベントデータを送信する場合、イベントチャネル上のCosEventChannelAdmin.ProxyPushConsumerに接続指示を出します。この後、イベントチャネルにorg.omg.CosEventChannelAdmin.ProxyPushConsumer.pushメソッドを発行します。イベントチャネルは、ユーザがコンシューマ上に実装するPushConsumerPOAを継承したpushメソッドを呼び出します。
その概要を以下に示します。
(2)サプライヤの作成
サプライヤからイベントチャネルへイベントデータを送信する手続きの例、および処理の流れを以下に示します。
[Java言語によるPushモデルのサプライヤ]
public boolean func() { ... try { supplier = EventCh.for_suppliers(); /* 1 */ proxy_push = supplier.obtain_push_consumer(); /* 2 */ proxy_push.connect_push_supplier( null ); /* 3 */ proxy_push.push( data ); /* 4 */ proxy_push.disconnect_push_consumer(); /* 5 */ ... } catch( Exception e ) { ... } ... }
イベントチャネル管理オブジェクトのオブジェクトリファレンスを獲得します。
イベントチャネルのオブジェクトリファレンスを獲得します。
イベントチャネルと接続します。
イベントチャネルにorg.omg.CosEventChannelAdmin.ProxyPushConsumer.pushメソッドを発行します。
イベントチャネルと切断します。
[イベントデータの送信]
イベントチャネルにイベントデータdataを送信します。org.omg.CosEventChannelAdmin.ProxyPushConsumerは、org.omg.CosEventComm.PushConsumerを継承しています。
void org.omg.CosEventChannelAdmin.ProxyPushConsumer.push( org.omg.CORBA.Any data );
(3)コンシューマの作成
コンシューマは、イベントチャネルから送信されるイベントデータを受け取るために、PushConsumerPOAを継承したクラスを実装します。イベントチャネルは、コンシューマ上のPushConsumerPOAを継承したpushメソッドを呼び出し、コンシューマにイベントデータを送信します。
コンシューマがイベントデータを受け取る例、および処理の流れを以下に示します。
[Java言語によるPushモデルのコンシューマ]
public boolean func() { ... try { consumer = EventCh.for_consumer(); /* 1 */ proxy_push = consumer.obtain_push_supplier(); /* 2 */ proxy_push.connect_push_consumer( my_obj ); /* 3 */ }catch( Exception e ){ ... } ... } class UserServant extends PushConsumerPOA { public void push( org.omg.CORBA.Any data ) /* 4 */ throws CosEventComm.Disconnected { ... /* アプリケーションの処理 */ ... return; } public void disconnect_push_consumer() { return; } }
イベントチャネル管理オブジェクトのオブジェクトリファレンスを獲得します。
イベントチャネルのオブジェクトリファレンスを獲得します。
イベントチャネルと接続します。
ユーザがコンシューマ上に実装するpushメソッドです。
注意
コンシューマ側のアプリケーションでは、イベントチャネルに対して、必ずorg.omg.CosEventChannelAdmin.ProxyPushSupplier.disconnect_push_supplierを発行して、アプリケーションを終了してください。
org.omg.CosEventChannelAdmin.ProxyPushSupplier.disconnect_push_supplierを発行せずに同一のアプリケーションを再起動した場合、イベントデータが配信され、エラーメッセージes10802が出力されることがありますが、特に問題ありません。