ページの先頭行へ戻る
Interstage Application Server アプリケーション作成ガイド(イベントサービス編)

6.8 グローバルトランザクション

[C++言語によるMixedモデルのグローバルトランザクションのサプライヤ]

CORBA::Boolean func() {
    ...
    try {
        supplier = EventCh->default_supplier_admin( env );        /* 1 */
        tmp_proxy = supplier->obtain_notification_push_consumer(
              ctype,proxy_id, env );                              /* 2 */
        proxy_push = CosNotifyChannelAdmin::StructuredProxyPushConsumer::_narrow(
              tmp_proxy ); 
        proxy_push->connect_structured_push_supplier(
              CosNotifyComm::StructuredPushSupplier::_nil(),env); /* 3 */
        Current->begin(env);                                      /* 4 */
        proxy_push->push_structured_event(data,env);              /* 5 */
        Current->commit(CORBA_TRUE,  env);                        /* 6 */
        proxy_push->disconnect_structured_push_consumer(env);     /* 7 */
    } catch( CORBA::Exception &e ) {
          ... 
    }
    ... 
}

  1. イベントチャネル管理オブジェクトのオブジェクトリファレンスを獲得します。

  2. イベントチャネルのオブジェクトリファレンスを獲得します。

  3. イベントチャネルと接続します。

  4. グローバルトランザクションを開始します。

  5. イベントチャネルにイベントデータを送信します。

  6. グローバルトランザクションを完了します。

  7. イベントチャネルと切断します。


  接続するイベントチャネルのオブジェクトリファレンスを不揮発媒体に保存している場合、1, 2, 3, 7の処理は不要となります。


[C++言語によるMixedモデルのグローバルトランザクションのコンシューマ]

CORBA::Boolean func() {
    ... 
    try {
        consumer = EventCh->default_consumer_admin( env );             /* 1 */
        tmp_proxy = consumer->obtain_notification_pull_supplier(
              ctype,proxy_id,env);                                     /* 2 */
        proxy_pull = CosNotifyChannelAdmin::StructuredProxyPullSupplier::_narrow(
              tmp_proxy ); 
        proxy_pull->connect_structured_pull_consumer(
              CosNotifyComm::StructuredPullConsumer::_nil(),env);      /* 3 */
        Current->begin(env);                                           /* 4 */
        data = proxy_pull->pull_structured_event(env);                 /* 5 */
        Current->commit(CORBA_TRUE,  env);                             /* 6 */
        proxy_pull->disconnect_structured_pull_supplier(env);          /* 7 */
    } catch( CORBA::Exception &e ) {
          ...
    }
    ... 
}

  1. イベントチャネル管理オブジェクトのオブジェクトリファレンスを獲得します。

  2. イベントチャネルのオブジェクトリファレンスを獲得します。

  3. イベントチャネルと接続します。

  4. グローバルトランザクションを開始します。

  5. イベントチャネルにイベントデータを受信します。

  6. グローバルトランザクションを完了します。

  7. イベントチャネルと切断します。


  接続するイベントチャネルのオブジェクトリファレンスを不揮発媒体に保存している場合、1, 2, 3, 7の処理は不要となります。