| Interstage Application Server アプリケーション作成ガイド (イベントサービス編) | 
			目次
			索引
			![]()  
		 | 
	
| 第4章 アプリケーションの開発(各機能) | > 4.1 イベントチャネル接続のアプリケーション開発 | > 4.1.1 ノーティフィケーションサービスのQoS機能の運用 | 
QoSプロパティ項目は、イベントチャネル(静的生成、動的生成)およびメッセージに設定できます。
静的生成イベントチャネルのQoSプロパティ項目の設定は、CosNotification::QoSAdmin::set_qos()を使って、QoSPropertiesを設定します。動的生成イベントチャネルのQoSプロパティ項目の設定は、CosNotifyChannelAdmin::EventChannelFactory::create_channel()を使ってイベントチャネルの生成時に、QoSPropertiesを設定します。QoSPropertiesはProperty構造体からなるシーケンス型です。C++プログラムでQoSPropertiesを作成し、イベントチャネルに対してQoSプロパティ項目を設定する例と処理の流れを以下に説明します。
[QoSPropertiesの作成例(C++の場合)]
    CORBA::Short     priority        = 0;                                /* 1 */
    CORBA::ULongLong timeout         = 40;                               /* 2 */
    CORBA::Short     orderpolicy     = CosNotification::PriorityOrder;   /* 3 */
    CORBA::Short     discardpolicy   = CosNotification::AnyOrder;        /* 4 */
    CosNotification::Property_var    *pProperty =
            CosNotification::PropertySeq::allocbuf( 4 );                 /* 5 */
    pProperty[0]->name  = CORBA::string_dup( CosNotification::Priority ); 
    pProperty[0]->value = new CORBA::Any(); 
    *(pProperty[0]->value) <<= priority;                                 /* 6 */
    pProperty[1]->name  = CORBA::string_dup( CosNotification::Timeout ); 
    pProperty[1]->value = new CORBA::Any(); 
    *(pProperty[1]->value) <<= timeout;                                  /* 7 */
    pProperty[2]->name  = CORBA::string_dup( CosNotification::OrderPolicy ); 
    pProperty[2]->value = new CORBA::Any(); 
    *(pProperty[2]->value) <<= orderpolicy;                              /* 8 */
    pProperty[3]->name  = CORBA::string_dup( CosNotification::DiscardPolicy ); 
    pProperty[3]->value = new CORBA::Any(); 
    *(pProperty[3]->value) <<= discardpolicy;                            /* 9 */
    CosNotification::QoSProperties *pQoS =
                        new CosNotification::QoSProperties(
                            4, 4, pProperty, CORBA_TRUE );               /* 10 */
    try{
        ... 
        channel = イベントチャネルのオブジェクトリファレンスの獲得
        channel->set_qos( *pQoS, env );                                  /* 11 */
        ... 
    } catch( CORBA::Exception &e ) {
        ... 
    }
    /* 動的生成イベントチャネルの生成時 */
    try{
        ... 
        channel=factory->create_channel(*pQoS,*pAdmin,channelID, env );  /* 12 */
        ... 
    } catch( CORBA::Exception &e ) {
        ... 
    }
メッセージにQoSプロパティ項目を設定するには、StructuredEvent型データの中のOptionalHeaderFieldsとして設定します。OptionalHeaderFieldsはProperty構造体からなるシーケンス型です。C++プログラムでQoSプロパティ項目を設定したStructuredEvent型データの作成例と処理の流れを以下に説明します。
[StructuredEvent型データの作成例(C++の場合)]
    CORBA::Short     priority      = 0;                                  /* 1 */
    CORBA::ULongLong timeout       = 40;                                 /* 2 */
    CosNotification::StructuredEvent  *se =                              /* 3 */
               new CosNotification::StructuredEvent(); 
    CosNotification::Property_var     *pProperty =
            CosNotification::PropertySeq::allocbuf( 2 );                 /* 4 */
    pProperty[0]->name  = CORBA::string_dup( CosNotification::Priority ); 
    pProperty[0]->value = new CORBA::Any(); 
    *(pProperty[0]->value) <<= priority;                                 /* 5 */
    pProperty[1]->name  = CORBA::string_dup( CosNotification::Timeout ); 
    pProperty[1]->value = new CORBA::Any(); 
    *(pProperty[1]->value) <<= timeout;                                  /* 6 */
    CosNotification::OptionalHeaderFields *variable_header_data =
                        new CosNotification::OptionalHeaderFields(
                            2, 2, pProperty, CORBA_TRUE );               /* 7 */
    CosNotification::FilterableEventBody *filterable_data_data =
                        new CosNotification::FilterableEventBody(
                            0, 0, NULL, CORBA_FALSE );                   /* 8 */
    /* ---- domain_name ---- */
    se->header->fixed_header->event_type->domain_name =
                              CORBA::string_dup( "Telecom" );            /* 9 */
    
    /* ---- type_name ---- */
    se->header->fixed_header->event_type->type_name =
                              CORBA::string_dup( "CommunicationsAlarm" ); 
                                                                         /* 10 */
    /* ---- event_name ---- */
    se->header->fixed_header->event_name =
                              CORBA::string_dup( "data" );               /* 11 */
    /* ---- remainder_of_data->_value ---- */
    CORBA::Char* string_data; 
    string_data = CORBA::string_dup( "StructuredEvent data" ); 
    CORBA::Any *Any_data = new CORBA::Any(
            _tc_string, string_data, CORBA_TRUE );                       /* 12 */
    se->header->variable_header = variable_header_data; 
    se->filterable_data         = filterable_data_data; 
    se->remainder_of_body       = Any_data;
			目次
			索引
			![]()  
		 |