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」が出力されることがありますが、特に問題ありません。