Java言語でのPullモデルのアプリケーションの開発について説明します。
(1)概要
コンシューマがサプライヤからイベントデータを受信する場合、イベントチャネルのCosEventChannelAdmin.ProxyPullSupplierに接続指示を出します。イベントチャネルは、ユーザがサプライヤに実装するPullSupplierPOAを継承したpull(またはtry_pull)メソッドを呼び出します。
本概要を以下の図に示します。

(2)サプライヤの作成
サプライヤは、イベントチャネルからイベントデータの要求を受け取るために、PullSupplierPOAを継承したpullメソッドを実装します。イベントチャネルは、サプライヤ上のpullメソッドを呼び出し、サプライヤにイベントデータを要求します。
サプライヤのpullメソッドを実装するまでの手続き例、および処理の流れを以下に示します。
[Java言語によるPullモデルのサプライヤ]
public boolean func() {
...
try {
supplier = EventCh.for_suppliers(); /* 1 */
proxy_pull = supplier.obtain_pull_consumer(); /* 2 */
proxy_pull.connect_pull_supplier( my_obj ); /* 3 */
} catch( Exception e ) {
...
}
...
}
class UserServant extends PullSupplierPOA
{
public org.omg.CORBA.Any pull() /* 4 */
throws CosEventComm.Disconnected {
...
/* アプリケーションの処理 */
...
return( rtn_value );
}
public void disconnect_pull_supplier() {
return;
}
}イベントチャネル管理オブジェクトのオブジェクトリファレンスを獲得します。
イベントチャネルのオブジェクトリファレンスを獲得します。
イベントチャネルと接続します。
ユーザがサプライヤ上に実装するpullメソッドです。
(3)コンシューマの作成
コンシューマからイベントチャネルにイベントデータを要求する手続き例、および処理の流れを以下に示します。
[Java言語によるPullモデルのコンシューマ]
public boolean func() {
...
try {
consumer = EventCh.for_consumers(); /* 1 */
proxy_pull = consumer.obtain_pull_supplier(); /* 2 */
proxy_pull.connect_pull_consumer( null ); /* 3 */
data = proxy_pull.pull(); /* 4 */
proxy_pull.disconnect_pull_supplier(); /* 5 */
} catch( Exception e ) {
...
}
...
}イベントチャネル管理オブジェクトのオブジェクトリファレンスを獲得します。
イベントチャネルのオブジェクトリファレンスを獲得します。
イベントチャネルと接続します。
イベントチャネルにorg.omg.CosEventChannelAdmin.ProxyPullSupplier.pullメソッドを発行します。
イベントチャネルと切断します。
[待ち合わせる場合]
イベントデータの受信を待ち合わせる場合は、以下のメソッドを使用します。イベントチャネルからイベントデータを取り出し、CORBA.Any型のreturn値を返します。イベントチャネルからイベントデータを取り出せるようになるか、または例外が発生するまでブロックされます。org.omg.CosEventChannelAdmin.ProxyPullSupplierは、org.omg.CosEventComm.PullSupplierを継承しています。
org.omg.CORBA.Any org.omg.CosEventChannelAdmin.ProxyPullSupplier.pull();
[待ち合わせない場合]
イベントデータの受信を待ち合わせない場合は、以下のメソッドを使用します。イベントチャネルからイベントデータを取り出し、CORBA.Any型のreturn値を返します。イベントチャネルからイベントデータが取り出せない場合は、即座に復帰します。イベントデータが取り出せた場合は、has_eventにtrueが設定されます。イベントデータが取り出せなかった場合は、has_eventにfalseが設定されます。org.omg.CosEventChannelAdmin.ProxyPullSupplierは、org.omg.CosEventComm.PullSupplierを継承しています。
org.omg.CORBA.Any org.omg.CosEventChannelAdmin.ProxyPullSupplier.try_pull(
org.omg.CORBA.Boolean_var has_event );