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

第4章 アプリケーションの開発(各機能)> 4.3 イベントファクトリのアプリケーション開発

4.3.1 イベントチャネルの生成と起動

 イベントファクトリを使用してイベントチャネルを作成するC++プログラムの例(イベントサービスの場合ノーティフィケーションの場合)と処理の流れを以下に説明します。

イベントサービスの場合

[イベントファクトリによるイベントチャネルの生成(C++の場合)]

    CORBA::ORB_ptr                           orb;
    CORBA::Object_ptr                        obj; 
    CORBA::Environment                       env; 
    EventFactory_ptr                         factory; 
    EventFactory::Option                    *option; 
    CosEventChannelAdmin::EventChannel_ptr   event_ch; 

    try {
        obj = orb->resolve_initial_references(
        EventFactory::ObjectId_Factory, env );                   /* 1 */
        factory = EventFactory::_narrow( obj ); 
        CORBA::release( obj ); 
  
        option = new EventFactory::Option(); 
        option->max_queuing    = 100; 
        option->life_time      = 60; 
        option->model          = EventFactory::ModelAny; 
        event_ch = factory->create( "keyword", option, env );    /* 2 */
            .... 
        event_ch->destroy( env );                                /* 3 */
    } catch( CORBA::Exception &e ) {
            .... 
    }
  1. イベントファクトリのオブジェクトリファレンスをイニシャルサービスから獲得します。イニシャルサービスには「EventFactory::ObjectId_Factory」を指定してください。
  2. EventFactory::create()メソッドでイベントファクトリにイベントチャネルの生成を指示します。複数のプロセス間で、同一のイベントチャネルのオブジェクトリファレンスを獲得するには、EventFactory::create()メソッドに同一キーワードを指定します。これにより、異なるプロセス間のイベント通信を行うことができます。このキーワードは動的生成したイベントチャネルの名前です。
  3. イベントチャネルが不要ならば、CosEventChannelAdmin::EventChannel::destroy()メソッドで、イベントチャネルを破壊します。

 アプリケーションとイベントチャネルの動的生成のシーケンスを以下に示します。

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

[イベントファクトリによるイベントチャネルの生成(C++の場合)]

    CORBA::ORB_ptr                                      orb;
    CORBA::Object_ptr                                   obj; 
    CORBA::Environment                                  env; 
    CosNotifyChannelAdmin::EventChannelFactory_ptr    factory; 
    CosNotification::QoSProperties                     initial_qos; 
    CosNotification::AdminProperties                   initial_admin; 
    CosNotifyChannelAdmin::ChannelID                   id; 
    CosNotifyChannelAdmin::EventChannel_ptr            event_ch; 

    try {
        obj = orb->resolve_initial_references("NotificationService",env);  /* 1 */
        factory = CosNotifyChannelAdmin::EventChannelFactory::_narrow( obj ); 
        CORBA::release( obj ); 

        event_ch = factory->create_channel( &initial_qos, &initial_admin, &id, env );
                                                                           /* 2 */
            .... 
        event_ch->destroy( env );                                          /* 3 */
    } catch( CORBA::Exception &e ) {
            .... 
    }
  1. イベントファクトリのオブジェクトリファレンスをイニシャルサービスから獲得します。イニシャルサービスには"NotificationService"を指定してください。
  2. CosNotifyChannelAdmin::EventChannelFactory::create_channel()メソッドでイベントファクトリにイベントチャネルの生成を指示します。イベントチャネルが生成されると、idにイベントチャネルの識別IDが指定されます。複数のプロセス間で同一のイベントチャネルのオブジェクトリファレンスを獲得するには、ノーティフィケーションサービスインタフェースのEventChannelFactoryインタフェースのget_event_channel()メソッドで同一の識別IDを指定して取得します。これにより、異なるプロセス間のイベント通信を行うことができます。
  3. イベントチャネルが不要ならば、CosEventChannelAdmin::EventChannel::destroy()メソッドで、イベントチャネルを破壊します。

 アプリケーションとイベントチャネルの動的生成のシーケンスを以下に示します。


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

All Rights Reserved, Copyright(C) 富士通株式会社 2005