Interstage Application Server アプリケーション作成ガイド (イベントサービス編)
目次 索引 前ページ次ページ

第4章 アプリケーションの開発(各機能)

4.1 イベントチャネル接続のアプリケーション開発

 イベントチャネル接続での処理手順は、イベントチャネルの作成方法を問わず共通です。イベントサービスを使用する場合、アプリケーションは最初にイベントチャネルと接続する処理を行います。アプリケーションでのイベントチャネルとの接続手順を以下の図に示します。図では、アプリケーション内のメソッドの発行とイベントチャネルとの接続状態を表しています。

イベントサービスの場合

 Mixedモデルのアプリケーション作成例と処理の流れを以下に説明します。

[Mixedモデルのアプリケーション作成例(C言語の場合)]

  CORBA_Boolean func() {
    ...
    channel = イベントチャネルのオブジェクトリファレンスの獲得           /* 1 */
    supplier = CosEventChannelAdmin_EventChannel_for_suppliers(
                  channel, &env );                                       /* 2 */
    proxy_push = CosEventChannelAdmin_SupplierAdmin_obtain_push_consumer(
                  supplier, &env );                                      /* 3 */
    CosEventChannelAdmin_ProxyPushConsumer_connect_push_supplier(
                  proxy_push, CORBA_OBJECT_NIL, &env);                   /* 4 */
    CosEventChannelAdmin_ProxyPushConsumer_push(
                  proxy_push, push_data, &env);                          /* 5 */
    CosEventChannelAdmin_ProxyPushConsumer_disconnect_push_consumer(
                  proxy_push, &env );                                    /* 6 */
    ... 
  }
  1. イベントチャネルのオブジェクトリファレンスを獲得します。イベントチャネルのオブジェクトリファレンスの獲得方法については、“アプリケーションの開発(C言語)”−“イベントチャネルのオブジェクトリファレンスの獲得”を参照してください。
  2. CosEventChannelAdmin_EventChannel_for_suppliers()メソッドで、サプライヤ管理のオブジェクトリファレンスを獲得します。
  3. CosEventChannelAdmin_SupplierAdmin_obtain_push_consumer()メソッドで、サプライヤに接続するイベントチャネルのオブジェクトを獲得します。
  4. CosEventChannelAdmin_ProxyPushConsumer_connect_push_supplier()メソッドで、イベントチャネルとサプライヤを接続します。サプライヤまたはコンシューマとして動作する自アプリケーションのオブジェクトリファレンスをパラメタとして接続時に指定します。自アプリケーションのオブジェクトリファレンスの獲得方法については、“アプリケーションの開発(C言語)”−“コンシューマとサプライヤのオブジェクトリファレンスの獲得”を参照してください。
  5. CosEventChannelAdmin_ProxyPushConsumer_push()メソッドで、イベントチャネルにイベントデータを送信します。
  6. CosEventChannelAdmin_ProxyPushConsumer_disconnect_push_consumer()メソッドで、サプライヤをイベントチャネルと切断します。

[Mixedモデルのアプリケーション作成例(C++の場合)]

  try {
      ...
      channel = イベントチャネルのオブジェクトリファレンスの獲得 /* 1 */
      supplier = channel->for_suppliers( channel );              /* 2 */
      proxy_push = supplier->obtain_push_consumer( env );        /* 3 */
      proxy_push->connect_push_supplier( my_obj, env );          /* 4 */
      proxy_push->push( push_data, env );                        /* 5 */
      proxy_push->disconnect_push_consumer( env );               /* 6 */
      channel->destroy( env );                                   /* 7 */
      ... 
  } catch( CORBA::Exception &e ) {
      ... 
  }
  1. イベントチャネルのオブジェクトリファレンスを獲得します。イベントチャネルのオブジェクトリファレンスの獲得方法については、“アプリケーションの開発(C++言語)”−“イベントチャネルのオブジェクトリファレンスの獲得”を参照してください。
  2. CosEventChannelAdmin::EventChannel::for_suppliers()メソッドで、サプライヤ管理のオブジェクトリファレンスを獲得します。
  3. CosEventChannelAdmin::SupplierAdmin::obtain_push_consumer()メソッドで、サプライヤに接続するイベントチャネルのオブジェクトを獲得します。
  4. CosEventChannelAdmin::ProxyPushConsumer::connect_push_supplier()メソッドで、イベントチャネルとサプライヤを接続します。サプライヤまたはコンシューマとして動作する自アプリケーションのオブジェクトリファレンスをパラメタとして接続時に指定します。自アプリケーションのオブジェクトリファレンスの獲得方法については、“アプリケーションの開発(C++言語)”−“コンシューマとサプライヤのオブジェクトリファレンスの獲得”を参照してください。
  5. CosEventChannelAdmin::ProxyPushConsumer::push()メソッドで、イベントチャネルにイベントデータを送信します。
  6. CosEventChannelAdmin::ProxyPushConsumer::disconnect_push_consumer()メソッドで、サプライヤをイベントチャネルと切断します。
  7. イベントチャネルが不要ならば、CosEventChannelAdmin::EventChannel::destroy()メソッドで、イベントチャネルを破壊します。

[Mixedモデルのアプリケーション作成例(Java言語の場合)]

  try {
    ... 
    channel = イベントチャネルのオブジェクトリファレンスの獲得           /* 1 */
    supplier = channel.for_suppliers();                                  /* 2 */
    proxy_push = supplier.obtain_push_consumer();                        /* 3 */
    proxy_push.connect_push_supplier(proxy_push);                        /* 4 */
    proxy_push.push(push_data);                                          /* 5 */
    proxy.disconnect_push_consumer()                                     /* 6 */
    ... 
  } catch (Exception e) {
    ... 
  }
  1. イベントチャネルのオブジェクトリファレンスを獲得します。イベントチャネルのオブジェクトリファレンスの獲得方法については、“アプリケーションの開発(Java言語)”−“イベントチャネルのオブジェクトリファレンスの獲得”を参照してください。
  2. for_suppliers()メソッドで、サプライヤ管理のオブジェクトリファレンスを獲得します。
  3. obtain_push_consumer()メソッドで、サプライヤに接続するイベントチャネルのオブジェクトを獲得します。
  4. connect_push_supplier()メソッドで、イベントチャネルとサプライヤを接続します。サプライヤまたはコンシューマとして動作する自アプリケーションのオブジェクトリファレンスをパラメタとして接続時に指定します。自アプリケーションのオブジェクトリファレンスの獲得方法については、“アプリケーションの開発(Java言語)”−“コンシューマとサプライヤのオブジェクトリファレンスの獲得”を参照してください。
  5. push()メソッドで、イベントチャネルにイベントデータを送信します。
  6. disconnect_push_consumer()メソッドで、サプライヤをイベントチャネルと切断します。

[Mixedモデルのアプリケーション作成例(COBOL言語の場合)]

    ...
    CALL "イベントチャネルのオブジェクトリファレンスの獲得"
        COS-NAMING COS-NAME ENV CHANNEL.                                  /* 1 */
    CALL "COSEVENTCHANNELADMIN-EVENTCHANNEL-FOR-SUPPLIERS" USING
        CHANNEL ENV SUPPLIER.                                             /* 2 */
    CALL "COSEVENTCHANNELADMIN-SUPPLIERADMIN-OBTAIN-PUSH-CONSUMER" USING
        SUPPLIER ENV PROXY-PUSH.                                          /* 3 */
    CALL "COSEVENTCHANNELADMIN-PROXYPUSHCONSUMER-CONNECT-PUSH-SUPPLIER" USING
        PROXY-PUSH CORBA-OBJECT-NIL ENV.                                  /* 4 */
    CALL "COSEVENTCHANNELADMIN-PROXYPUSHCONSUMER-PUSH" USING
        PROXY-PUSH PUSH-DATA ENV.                                         /* 5 */
    CALL "COSEVENTCHANNELADMIN-PROXYPUSHCONSUMER-DISCONNECT-PUSH-CONSU" USING
        PROXY-PUSH ENV.                                                   /* 6 */
    ...
  1. イベントチャネルのオブジェクトリファレンスを獲得します。イベントチャネルのオブジェクトリファレンスの獲得方法については、“アプリケーションの開発(COBOL)”−“イベントチャネルのオブジェクトリファレンスの獲得”を参照してください。
  2. COSEVENTCHANNELADMIN-EVENTCHANNEL-FOR-SUPPLIERS関数で、サプライヤ管理のオブジェクトリファレンスを獲得します。
  3. COSEVENTCHANNELADMIN-SUPPLIERADMIN-OBTAIN-PUSH-CONSUMER関数で、サプライヤに接続するイベントチャネルのオブジェクトを獲得します。
  4. COSEVENTCHANNELADMIN-PROXYPUSHCONSUMER-CONNECT-PUSH-SUPPLIER関数で、イベントチャネルとサプライヤを接続します。サプライヤまたはコンシューマとして動作する自アプリケーションのオブジェクトリファレンスをパラメタとして接続時に指定します。自アプリケーションのオブジェクトリファレンスの獲得方法については、“アプリケーションの開発(COBOL)”−“コンシューマとサプライヤのオブジェクトリファレンスの獲得”を参照してください。
  5. COSEVENTCHANNELADMIN-PROXYPUSHCONSUMER-PUSH関数で、イベントチャネルにイベントデータを送信します。
  6. COSEVENTCHANNELADMIN-PROXYPUSHCONSUMER-DISCONNECT-PUSH-CONSU関数で、サプライヤをイベントチャネルと切断します。

ノーティフィケーションサービスの場合

 Mixedモデルのアプリケーション作成例と処理の流れを以下に説明します。

[Mixedモデルのアプリケーション作成例(C言語の場合)]

  CORBA_Boolean func() {
    ...
    channel = イベントチャネルのオブジェクトリファレンスの獲得     /* 1 */
    supplier = CosNotifyChannelAdmin_EventChannel_get_default_supplier_admin(
                  channel, &env );                                 /* 2 */
    proxy_push= CosNotifyChannelAdmin_SupplierAdmin_obtain_notification_push_consumer (
                  supplier,ctype,&proxy_id, &env);                 /* 3 */
    CosNotifyChannelAdmin_StructuredProxyPushConsumer_connect_structured_push_supplier(
                  proxy_push, CORBA_OBJECT_NIL, &env );            /* 4 */
    CosNotifyChannelAdmin_StructuredProxyPushConsumer_push_structured_event(
                  proxy_push, push_data, &env );                   /* 5 */
    CosNotifyChannelAdmin_StructuredProxyPushConsumer_disconnect_structured_push_consumer(
                  proxy_push, &env );                              /* 6 */
    ... 
  }
  1. イベントチャネルのオブジェクトリファレンスを獲得します。イベントチャネルのオブジェクトリファレンスの獲得方法については、“アプリケーションの開発(C言語)”−“イベントチャネルのオブジェクトリファレンスの獲得”を参照してください。
  2. CosNotifyChannelAdmin_EventChannel_get_default_supplier_admin()メソッドで、サプライヤ管理のオブジェクトリファレンスを獲得します。
  3. CosNotifyChannelAdmin_SupplierAdmin_obtain_notification_push_consumer()メソッドで、サプライヤに接続するイベントチャネルのオブジェクトを獲得します。
  4. CosNotifyChannelAdmin_StructuredProxyPushConsumer_connect_structured_push_supplier()メソッドで、イベントチャネルとサプライヤを接続します。サプライヤまたはコンシューマとして動作する自アプリケーションのオブジェクトリファレンスをパラメタとして接続時に指定します。自アプリケーションのオブジェクトリファレンスの獲得方法については、“アプリケーションの開発(C言語)”−“コンシューマとサプライヤのオブジェクトリファレンスの獲得”を参照してください。
  5. CosNotifyChannelAdmin_StructuredProxyPushConsumer_push_structured_event()メソッドで、イベントデータを送信します。
  6. CosNotifyChannelAdmin_StructuredProxyPushConsumer_disconnect_structured_push_consumer()メソッドで、サプライヤをイベントチャネルと切断します。

[Mixedモデルのアプリケーション作成例(C++の場合)]

  try {
      ... 
      channel = イベントチャネルのオブジェクトリファレンスの獲得         /* 1 */
      supplier = channel->default_supplier_admin( env );                 /* 2 */
      tmp_proxy = supplier->obtain_notification_push_consumer
                                               (ctype,proxy_id, env );   /* 3 */
      proxy_push = CosNotifyChannelAdmin::ProxyPushConsumer::_narrow( tmp_proxy ); 
      proxy_push->connect_structured_push_supplier
              (CosNotifyComm::StructuredPushSupplier::_nil()  ,env);     /* 4 */
      proxy_push->push_structured_event(push_data, env );                /* 5 */
      proxy_push->disconnect_structured_push_consumer( env );            /* 6 */
      channel->destroy( env );                                           /* 7 */
      ... 
  } catch( CORBA::Exception &e ) {
      ... 
  }
  1. イベントチャネルのオブジェクトリファレンスを獲得します。イベントチャネルのオブジェクトリファレンスの獲得方法については、“アプリケーションの開発(C++言語)”−“イベントチャネルのオブジェクトリファレンスの獲得”を参照してください。
  2. CosNotifyChannelAdmin::EventChannel::default_supplier_admin()メソッドで、サプライヤ管理のオブジェクトリファレンスを獲得します。
  3. CosNotifyChannelAdmin::SupplierAdmin::obtain_notification_push_consumer()メソッドで、サプライヤに接続するイベントチャネルのオブジェクトを獲得します。
  4. CosNotifyChannelAdmin::StructuredProxyPushConsumer::connect_structured_push_consumer()メソッドで、イベントチャネルとサプライヤを接続します。サプライヤまたはコンシューマとして動作する自アプリケーションのオブジェクトリファレンスをパラメタとして接続時に指定します。自アプリケーションのオブジェクトリファレンスの獲得方法については、“アプリケーションの開発(C++言語)”−“コンシューマとサプライヤのオブジェクトリファレンスの獲得”を参照してください。
  5. CosNotifyComm::StructuredPushConsumer::push_structured_event()メソッドで、イベントデータを送信します。
  6. CosNotifyComm::StructuredPushConsumer::disconnect_structured_push_consumer()メソッドで、サプライヤをイベントチャネルと切断します。
  7. イベントチャネルが不要ならば、CosEventChannelAdmin::EventChannel::destroy()メソッドで、イベントチャネルを破壊します。

[Mixedモデルのアプリケーション作成例(Java言語の場合)]

  try {
    ...
    channel = イベントチャネルのオブジェクトリファレンスの獲得     /* 1 */
    supplier = channel.default_supplier_admin();                   /* 2 */
    proxy_push = StructuredProxyPushConsumerHelper.narrow(
                   supplier.obtain_notification_push_consumer(
                     ClientType.STRUCTURED_EVENT, proxyID));       /* 3 */
    proxy_push.connect_structured_push_supplier(proxy_push);       /* 4 */
    proxy_push.push_structured_event(push_data);                   /* 5 */
    proxy_push.disconnect_structured_push_consumer();              /* 6 */
    ... 
  } catch (Exception e) {
    ... 
  }
  1. イベントチャネルのオブジェクトリファレンスを獲得します。イベントチャネルのオブジェクトリファレンスの獲得方法については、“アプリケーションの開発(Java言語)”−“イベントチャネルのオブジェクトリファレンスの獲得”を参照してください。
  2. default_supplier_admin()メソッドで、サプライヤ管理のオブジェクトリファレンスを獲得します。
  3. obtain_notification_push_consumer()メソッドで、サプライヤに接続するイベントチャネルのオブジェクトを獲得し、StructuredProxyPushConsumerインスタンス型に変換します。
  4. connect_structured_push_supplier()メソッドで、イベントチャネルとサプライヤを接続します。サプライヤまたはコンシューマとして動作する自アプリケーションのオブジェクトリファレンスをパラメタとして接続時に指定します。自アプリケーションのオブジェクトリファレンスの獲得方法については、“アプリケーションの開発(Java言語)”−“コンシューマとサプライヤのオブジェクトリファレンスの獲得”を参照してください。
  5. push_structured_event()メソッドで、イベントデータを送信します。
  6. disconnect_structured_push_consumer()メソッドで、サプライヤをイベントチャネルと切断します。

[Mixedモデルのアプリケーション作成例(COBOL言語の場合)]

    ...
    CALL "イベントチャネルのオブジェクトリファレンスの獲得"
        COS-NAMING COS-NAME ENV CHANNEL.                                  /* 1 */
    CALL "COSNOTIFYCHANNELADMIN-EVENTCHANNEL--GET-DEFAULT-SUPPLIER-ADMIN" USING
        CHANNEL ENV SUPPLIER.                                             /* 2 */
    CALL "COSNOTIFYCHANNELADMIN-SUPPLIERADMIN-OBTAIN-NOTIFICATION-PUSH-CONSUMER" USING
        SUPPLIER CTIPE PROXY-ID ENV PROXY-PUSH.                           /* 3 */
    CALL "COSNOTIFYCHANNELADMIN -PROXYPUSHCONSUMER-CONNECT-PUSH-SUPPLIER" USING
        PROXY-PUSH CORBA-OBJECT-NIL ENV.                                  /* 4 */
    CALL "COSNOTIFYCHANNELADMIN-STRUCTUREDPROXYPUSHCONSUMER-PUSH-STRUCTURED-EVENT" USING
        PROXY-PUSH PUSH-DATA ENV.                                         /* 5 */
    CALL "COSNOTIFYCHANNELADMIN-STRUCTUREDPROXYPUSHCONSUMER-DISCONNECT-STRUCTURED-PUSH-CONSUMER" USING
        PROXY-PUSH ENV.                                                   /* 6 */
    ...
  1. イベントチャネルのオブジェクトリファレンスを獲得します。イベントチャネルのオブジェクトリファレンスの獲得方法については、“アプリケーションの開発(COBOL)”−“イベントチャネルのオブジェクトリファレンスの獲得”を参照してください。
  2. COSNOTIFYCHANNELADMIN-EVENTCHANNEL--GET-DEFAULT-SUPPLIER-ADMIN関数で、サプライヤ管理のオブジェクトリファレンスを獲得します。
  3. COSNOTIFYCHANNELADMIN-SUPPLIERADMIN-OBTAIN-NOTIFICATION-PUSH-CONSUMER関数で、サプライヤに接続するイベントチャネルのオブジェクトを獲得します。
  4. COSNOTIFYCHANNELADMIN-PROXYPUSHCONSUMER-CONNECT-PUSH-SUPPLIER関数で、イベントチャネルとサプライヤを接続します。サプライヤまたはコンシューマとして動作する自アプリケーションのオブジェクトリファレンスをパラメタとして接続時に指定します。自アプリケーションのオブジェクトリファレンスの獲得方法については、“アプリケーションの開発(COBOL)”−“コンシューマとサプライヤのオブジェクトリファレンスの獲得”を参照してください。
  5. COSNOTIFYCHANNELADMIN-STRUCTUREDPROXYPUSHCONSUMER-PUSH-STRUCTURED-EVENT関数で、イベントデータを送信します。
  6. COSNOTIFYCHANNELADMIN-STRUCTUREDPROXYPUSHCONSUMER-DISCONNECT-STRUCTURED-PUSH-CONSUMER関数で、サプライヤをイベントチャネルと切断します。


 イベントチャネルの接続(connect)を行ったアプリケーションは、必ずイベントチャネルからの切断(disconnect)を行ったうえ、終了するように作成してください。


下へ4.1.1 ノーティフィケーションサービスのQoS機能の運用
下へ4.1.2 アプリケーション異常終了時の接続情報の回収方法
下へ4.1.3 イベントチャネルの接続情報の取得

目次 索引 前ページ次ページ

Copyright 2008 FUJITSU LIMITED