| Interstage Application Server アプリケーション作成ガイド (イベントサービス編) |
目次
索引
![]()
|
| 第6章 アプリケーションの開発(C++言語) |
C++言語でのPushモデルのアプリケーションの開発について説明します。
サプライヤがコンシューマにイベントデータを送信する場合、イベントチャネル上のCosEventChannelAdmin::ProxyPushConsumerに接続指示を出します。この後、イベントチャネルにCosEventChannelAdmin::ProxyPushConsumer::pushメソッドを発行します。イベントチャネルはユーザがコンシューマ上に実装するCosEventComm::PushConsumer::pushメソッドを呼び出します。その概要を以下に示します。

サプライヤからイベントチャネルへイベントデータを送信する手続き例と処理の流れを以下に説明します。
[C++言語によるPushモデルのサプライヤ]
CORBA::Boolean func() {
...
try {
supplier = EventCh->for_suppliers( env ); /* 1 */
proxy_push = supplier->obtain_push_consumer( env ); /* 2 */
proxy_push->connect_push_supplier( my_obj, env ); /* 3 */
proxy_push->push( data, env ); /* 4 */
proxy_push->disconnect_push_consumer( env ); /* 5 */
} catch( CORBA::Exception &e ) {
...
}
...
}
サプライヤからイベントデータを送信するには下記のメソッドを使用します。引数のdataにイベントデータを指定して送信します。このCosEventChannelAdmin::ProxyPushConsumerはCosEventComm::PushConsumerを継承しています。
void CosEventChannelAdmin::ProxyPushConsumer::push(
CORBA::Any& data,
CORBA::Environment& env );
コンシューマはイベントチャネルから送信されるイベントデータを受け取るために、CosEventComm_PushConsumer_impl::pushメソッドを実装します。イベントチャネルはコンシューマ上の、CosEventComm::PushConsumer::pushメソッドを呼び出し、コンシューマにイベントデータを送信します。コンシューマがイベントデータを受け取る例と処理の流れを以下に説明します。
[C++言語によるPushモデルのコンシューマ]
CORBA::Boolean func() {
...
try {
consumer = EventCh->for_consumers( env ); /* 1 */
proxy_push = consumer->obtain_push_supplier( env ); /* 2 */
proxy_push->connect_push_consumer( my_obj, env ); /* 3 */
} catch( CORBA::Exception &e ) {
...
}
...
}
void
CosEventComm_PushConsumer_impl::push( /* 4 */
const CORBA::Any &any_data,
CORBA::Environment &env )
throw( CORBA::Exception ) {
...
/* アプリケーションの処理 */
...
return;
}

コンシューマ側のアプリケーションでイベントチャネルに対してCosEventChannelAdmin::ProxyPushSupplier::disconnect_push_supplierメソッドを発行しないで、アプリケーションを終了させ、その後、同一のアプリケーションを再起動した場合、同一イベントデータが複数個配信されます。コンシューマアプリケーションを終了する場合は、必ずイベントチャネルに対してCosEventChannelAdmin::ProxyPushSupplier::disconnect_push_supplierメソッドを発行してください。
目次
索引
![]()
|