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

第4章 アプリケーションの開発(各機能)> 4.1 イベントチャネル接続のアプリケーション開発> 4.1.1 ノーティフィケーションサービスのQoS機能の運用

4.1.1.1 QoSプロパティ項目の設定

 QoSプロパテ項目は、イベントチャネル(静的生成、動的生成)およびメッセージに設定できます。

(1)イベントチャネルに対するQoSプロパティ項目の設定方法

[QoSPropertiesの作成例(Cの場合)]

 静的生成イベントチャネルのQoSプロパティ項目の設定は、CosNotification_QoSAdmin_set_qos()を使って、QoSPropertiesを設定します。動的生成イベントチャネルのQoSプロパティ項目の設定は、CosNotifyChannelAdmin_EventChannelFactory_create_channel()を使ってイベントチャネルの生成時に、QoSPropertiesを設定します。QoSPropertiesはProperty構造体からなるシーケンス型です。CプログラムでQoSPropertiesを作成し、イベントチャネルに対してQoSプロパティ項目を設定する例と処理の流れを以下に説明します。

    CORBA_short                    *priority;
    CORBA_unsigned_long_long       *timeout;
    CORBA_short                    *orderpolicy;
    CORBA_short                    *discardpolicy;
    CosNotification_Property       *pProperty;
    CosNotification_QoSProperties  *pQoS=NULL;

    priority  = CORBA_short_alloc();
    *priority = 1;                                                       /* 1 */

    timeout  = CORBA_unsigned_long_long_alloc();
    *timeout = 40;                                                       /* 2 */

    orderpolicy  = CORBA_short_alloc();
    *orderpolicy = CosNotification_PriorityOrder;                        /* 3 */

    discardpolicy  = CORBA_short_alloc();
    *discardpolicy = CosNotification_AnyOrder;                           /* 4 */

    pProperty = CosNotification_PropertySeq_allocbuf( 4 );               /* 5 */

    pProperty[0].name = CORBA_string_alloc( strlen( CosNotification_Priority ) );
    strcpy( pProperty[0].name, CosNotification_Priority );
    pProperty[0].value._type   = TC_short;
    pProperty[0].value._value  = priority;                               /* 6 */

    pProperty[1].name = CORBA_string_alloc( strlen( CosNotification_Timeout ) );
    strcpy( pProperty[1].name, CosNotification_Timeout );
    pProperty[1].value._type  = TC_ulonglong;
    pProperty[1].value._value = timeout;                                 /* 7 */

    pProperty[2].name = CORBA_string_alloc( strlen( CosNotification_OrderPolicy ) );
    strcpy( pProperty[2].name, CosNotification_OrderPolicy );
    pProperty[2].value._type   = TC_short;
    pProperty[2].value._value  = orderpolicy;                            /* 8 */

    pProperty[3].name = CORBA_string_alloc( strlen( CosNotification_DiscardPolicy ) );
    strcpy( pProperty[3].name, CosNotification_DiscardPolicy );
    pProperty[3].value._type   = TC_short;
    pProperty[3].value._value  = discardpolicy;                          /* 9 */

    pQoS = CosNotification_QoSProperties_alloc();                        /* 10 */
    pQoS->_length  = 4;
    pQoS->_maximum = 4;
    pQoS->_buffer  = pProperty;
        ... 
    channel = イベントチャネルのオブジェクトリファレンスの獲得
    CosNotifyChannelAdmin_EventChannel_set_qos( channel, pQoS, &env );   /* 11 */

        ... 

    /* 動的生成イベントチャネルの生成時 */
    CosNotifyChannelAdmin_EventChannelFactory_create_channel(
                             factory, pQoS, pAdmin, channelID, &env );   /* 12 */
        ... 
    }
  1. Priorityの値を設定します(short型)。
  2. Timeoutの値を設定します(unsigned long long型)。
  3. OrderPolicyの値を設定します(short型)。
  4. DiscardPolicyの値を設定します(short型)。
  5. 上記4項目分のバッファ領域を獲得します。
  6. nameにPriority、valueにany型で1の値を設定します。
  7. nameにTimeout、valueにany型で2の値を設定します。
  8. nameにOrderPolicy、valueにany型で3の値を設定します。
  9. nameにDiscardPolicy、valueにany型で4の値を設定します。
  10. 6〜9までのシーケンス型であるQoSPropertiesを作成します。
  11. イベントチャネルに対してQoSプロパティ項目を設定します。
    動的生成イベントチャネルの場合は、12のイベントチャネルの生成時にも指定できます。
  12. 動的生成イベントチャネルの場合は、イベントチャネルの生成時にQoSプロパティ項目を設定します。

[QoSPropertiesの作成例(C++の場合)]

 静的生成イベントチャネルのQoSプロパティ項目の設定は、CosNotification::QoSAdmin::set_qos()を使って、QoSPropertiesを設定します。動的生成イベントチャネルのQoSプロパティ項目の設定は、CosNotifyChannelAdmin::EventChannelFactory::create_channel()を使ってイベントチャネルの生成時に、QoSPropertiesを設定します。QoSPropertiesはProperty構造体からなるシーケンス型です。C++プログラムでQoSPropertiesを作成し、イベントチャネルに対してQoSプロパティ項目を設定する例と処理の流れを以下に説明します。

    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 ) {
        ... 
    }
  1. Priorityの値を設定します(short型)。
  2. Timeoutの値を設定します(unsigned long long型)。
  3. OrderPolicyの値を設定します(short型)。
  4. DiscardPolicyの値を設定します(short型)。
  5. 上記4項目分のバッファ領域を獲得します。
  6. nameにPriority、valueにany型で1の値を設定します。
  7. nameにTimeout、valueにany型で2の値を設定します。
  8. nameにOrderPolicy、valueにany型で3の値を設定します。
  9. nameにDiscardPolicy、valueにany型で4の値を設定します。
  10. 6〜9までのシーケンス型であるQoSPropertiesを作成します。
  11. イベントチャネルに対してQoSプロパティ項目を設定します。
    動的生成イベントチャネルの場合は、12のイベントチャネルの生成時にも指定できます。
  12. 動的生成イベントチャネルの場合は、イベントチャネルの生成時にQoSプロパティ項目を設定します。

[QoSPropertiesの作成例(Javaの場合)]

 静的生成イベントチャネルのQoSプロパティ項目の設定は、org.omg.CosNotification.QoSAdmin.set_qos()を使って、QoSPropertiesを設定します。動的生成イベントチャネルのQoSプロパティ項目の設定は、org.omg.CosNotifyChannelAdmin.EventChannelFactory.create_channel()を使ってイベントチャネルの生成時に、QoSPropertiesを設定します。QoSPropertiesはorg.omg.CosNotification.Propertyの配列型です。JavaプログラムでQoSPropertiesを作成し、イベントチャネルに対してQoSプロパティ項目を設定する例と処理の流れを以下に説明します。

    short    priority        = 0;                                      /* 1 */
    long     timeout         = 40;                                     /* 2 */
    short    orderpolicy     = org.omg.CosNotification.PriorityOrder;  /* 3 */
    short    discardpolicy   = org.omg.CosNotification.AnyOrder;       /* 4 */

    org.omg.CosNotification.Property[]    property =
            new org.omg.CosNotification.Property[ 4 ];                 /* 5 */

    String name1 = org.omg.CosNotification.Priority; 
    org.omg.CORBA.Any any1 = new org.omg.CORBA.Any(); 
    any1.insert_short(priority); 
    property[0] = new org.omg.CosNotification.Property(name1, any1);   /* 6 */

    String name2 = org.omg.CosNotification.Timeout; 
    org.omg.CORBA.Any any2 = new org.omg.CORBA.Any(); 
    any2.insert_ulonglong(timeout); 
    property[1] = new org.omg.CosNotification.Property(name2, any2);   /* 7 */

    String name3 = org.omg.CosNotification.OrderPolicy; 
    org.omg.CORBA.Any any3 = new org.omg.CORBA.Any(); 
    any3.insert_short(orderpolicy); 
    property[2] = new org.omg.CosNotification.Property(name3, any3);   /* 8 */

    String name4 = org.omg.CosNotification.DiscardPolicy; 
    org.omg.CORBA.Any any4 = new org.omg.CORBA.Any(); 
    any4.insert_short(discardpolicy); 
    property[3] = new org.omg.CosNotification.Property(name4, any4);   /* 9 */

    try{
        ... 
        channel = イベントチャネルのオブジェクトリファレンスの獲得
        channel.set_qos(property);                                     /* 10 */
        ... 
    } catch(Exception e) {
        ... 
    }

    /* 動的生成イベントチャネルの生成時 */
    try{
        ... 
        channel = factory.create_channel(property, admin, channelID);  /* 11 */
        ... 
    } catch( CORBA::Exception &e ) {
        ... 
    }
  1. Priorityの値を設定します(short型)。
  2. Timeoutの値を設定します(unsigned long long型)。
  3. OrderPolicyの値を設定します(short型)。
  4. DiscardPolicyの値を設定します(short型)。
  5. 上記4項目分のバッファ領域を獲得します。
  6. nameにPriority、valueにany型で1の値を設定します。
  7. nameにTimeout、valueにany型で2の値を設定します。
  8. nameにOrderPolicy、valueにany型で3の値を設定します。
  9. nameにDiscardPolicy、valueにany型で4の値を設定します。
  10. イベントチャネルに対してQoSプロパティ項目を設定します。
    動的生成イベントチャネルの場合は、11のイベントチャネルの生成時にも指定できます。
  11. 動的生成イベントチャネルの場合は、イベントチャネルの生成時にQoSプロパティ項目を設定します。

[QoSPropertiesの作成例(COBOLの場合)]

 静的生成イベントチャネルのQoSプロパティ項目の設定は、COSNOTIFICATION-QOSADMIN-SET-QOS関数を使って、QoSPropertiesを設定します。動的生成イベントチャネルのQoSプロパティ項目の設定は、COSNOTIFYCHANNELADMIN-EVENTCHANNELFACTORY-CREATE-CHANNEL関数を使ってイベントチャネルの生成時に、QoSPropertiesを設定します。QoSPropertiesはProperty構造体からなるシーケンス型です。COBOLプログラムでQoSPropertiesを作成し、イベントチャネルに対してQoSプロパティ項目を設定する例と処理の流れを以下に説明します。

    DATA DIVISION.
    WORKING-STORAGE SECTION.

    01 COPY ANY IN CORBA REPLACING CORBA-ANY BY PROPERTY-ANY.
    01 COPY ULONG IN CORBA REPLACING CORBA-UNSIGNED-LONG BY STRING-LENGTH.
    01 COPY QOSPROPERTIES IN COSEVENTCOMM REPLACING COSNOTIFICATION-QOSPROPERTIES BY QOS-PROPERTY.
    01 COPY NOTIFICATION-PROPERTY IN COSEVENTCOMM REPLACING COSNOTIFICATION-PROPERTY BY NOTIFI-PROPERTY.

    LINKAGE SECTION.
    01 COPY SHORT IN CORBA REPLACING CORBA-SHORT BY PRIORITY-DATA.
    01 COPY SHORT IN CORBA REPLACING CORBA-SHORT BY ORDERPOLICY-DATA.
    01 COPY SHORT IN CORBA REPLACING CORBA-SHORT BY DISCARDPOLICY-DATA.
    01 COPY ULLONG IN CORBA REPLACING CORBA-UNSIGNED-LONG-LONG BY TIMEOUT-DATA.

    PROCEDURE DIVISION.
    MOVE 4 TO SEQ-MAXIMUM OF QOS-PROPERTY.
    MOVE 4 TO SEQ-LENGTH OF QOS-PROPERTY.
    CALL "CORBA-SEQUENCE-COSNOTIFICATION-PROPERTY-ALLOCBUF" USING
             SEQ-MAXIMUM OF QOS-PROPERTY
             SEQ-BUFFER OF QOS-PROPERTY.                                /* 1 */

    MOVE FUNCTION LENG( COSNOTIFICATION-PRIORITY ) TO STRING-LENGTH.
    CALL "CORBA-STRING-SET" USING
             NAME OF NOTIFI-PROPERTY
             STRING-LENGTH
             COSNOTIFICATION-PRIORITY.                                  /* 2 */
    MOVE FUNCTION LENG( TC-SHORT ) TO STRING-LENGTH.
    CALL "CORBA-STRING-SET" USING
             TMP-POINTER
             STRING-LENGTH
             TC-SHORT.
    CALL "CORBA-ORB-TYPECODE-FROM-CGEN-TC" USING
             TMP-POINTER
             ANY-TYPE OF PROPERTY-ANY.
    CALL "CORBA-FREE" USING TMP-POINTER.
    CALL "CORBA-SHORT-ALLOC" USING ANY-VALUE OF PROPERTY-ANY.
    SET ADDRESS OF PRIORITY-DATA TO ANY-VALUE OF PROPERTY-ANY.          /* 3 */
    MOVE 1 TO PRIORITY-DATA.
    MOVE PROPERTY-ANY TO IDL-VALUE OF NOTIFI-PROPERTY.
    MOVE FUNCTION ADDR( QOS-PROPERTY ) TO TMP-SEQ-POINTER.
    MOVE FUNCTION ADDR( NOTIFI-PROPERTY ) TO TMP-POINTER.
    MOVE 1 TO WK.
    CALL "CORBA-SEQUENCE-ELEMENT-SET" USING
             TMP-SEQ-POINTER
             WK
             TMP-POINTER.

    MOVE FUNCTION LENG( COSNOTIFICATION-TIMEOUT ) TO STRING-LENGTH.
    CALL "CORBA-STRING-SET" USING
             NAME OF NOTIFI-PROPERTY
             STRING-LENGTH
             COSNOTIFICATION-TIMEOUT.                                   /* 4 */
     MOVE FUNCTION LENG( TC-ULLONG ) TO STRING-LENGTH.
     CALL "CORBA-STRING-SET" USING
             TMP-POINTER
             STRING-LENGTH
             TC-ULLONG.
     CALL "CORBA-ORB-TYPECODE-FROM-CGEN-TC" USING
             TMP-POINTER
             ANY-TYPE OF PROPERTY-ANY.
     CALL "CORBA-FREE" USING TMP-POINTER.
     CALL "CORBA-UNSIGNED-LONG-LONG-ALLOC" USING ANY-VALUE OF PROPERTY-ANY.
     SET ADDRESS OF TIMEOUT-DATA TO ANY-VALUE OF PROPERTY-ANY.          /* 5 */
     MOVE 40 TO TIMEOUT-DATA.
     MOVE PROPERTY-ANY TO IDL-VALUE OF NOTIFI-PROPERTY.
     MOVE FUNCTION ADDR( QOS-PROPERTY ) TO TMP-SEQ-POINTER.
     MOVE FUNCTION ADDR( NOTIFI-PROPERTY ) TO TMP-POINTER.
     MOVE 2 TO WK.
     CALL "CORBA-SEQUENCE-ELEMENT-SET" USING
             TMP-SEQ-POINTER
             WK
             TMP-POINTER.

     MOVE FUNCTION LENG( COSNOTIFICATION-ORDERPOLICY ) TO STRING-LENGTH.
     CALL "CORBA-STRING-SET" USING
             NAME OF NOTIFI-PROPERTY
             STRING-LENGTH
             COSNOTIFICATION-ORDERPOLICY.                               /* 6 */
     MOVE FUNCTION LENG( TC-SHORT ) TO STRING-LENGTH.
     CALL "CORBA-STRING-SET" USING
             TMP-POINTER
             STRING-LENGTH
             TC-SHORT.
     CALL "CORBA-ORB-TYPECODE-FROM-CGEN-TC" USING
             TMP-POINTER
             ANY-TYPE OF PROPERTY-ANY.
     CALL "CORBA-FREE" USING  TMP-POINTER.
     CALL "CORBA-SHORT-ALLOC" USING ANY-VALUE OF PROPERTY-ANY.
     SET  ADDRESS OF ORDERPOLICY-DATA TO ANY-VALUE OF PROPERTY-ANY.     /* 7 */
     MOVE 2 TO ORDERPOLICY-DATA. 
     MOVE PROPERTY-ANY TO IDL-VALUE OF NOTIFI-PROPERTY.
     MOVE FUNCTION ADDR( QOS-PROPERTY ) TO TMP-SEQ-POINTER.
     MOVE FUNCTION ADDR( NOTIFI-PROPERTY ) TO TMP-POINTER.
     MOVE 3 TO WK.
     CALL "CORBA-SEQUENCE-ELEMENT-SET" USING
             TMP-SEQ-POINTER
             WK
             TMP-POINTER.

     MOVE FUNCTION LENG( COSNOTIFICATION-DISCARDPOLICY ) TO STRING-LENGTH.
     CALL "CORBA-STRING-SET" USING
             NAME OF NOTIFI-PROPERTY
             STRING-LENGTH
             COSNOTIFICATION-DISCARDPOLICY.                             /* 8 */
     MOVE FUNCTION LENG( TC-SHORT ) TO STRING-LENGTH.
     CALL "CORBA-STRING-SET" USING
             TMP-POINTER
             STRING-LENGTH
             TC-SHORT.
     CALL "CORBA-ORB-TYPECODE-FROM-CGEN-TC" USING
             TMP-POINTER
             ANY-TYPE OF PROPERTY-ANY.
     CALL "CORBA-FREE" USING  TMP-POINTER.
     CALL "CORBA-SHORT-ALLOC" USING ANY-VALUE OF PROPERTY-ANY.
     SET ADDRESS OF DISCARDPOLICY-DATA TO ANY-VALUE OF PROPERTY-ANY.    /* 9 */
     MOVE 0 TO DISCARDPOLICY-DATA.
     MOVE PROPERTY-ANY TO IDL-VALUE OF NOTIFI-PROPERTY.
     MOVE 4 TO WK.
     MOVE FUNCTION ADDR( QOS-PROPERTY ) TO TMP-SEQ-POINTER.
     MOVE FUNCTION ADDR( NOTIFI-PROPERTY ) TO TMP-POINTER.
     CALL "CORBA-SEQUENCE-ELEMENT-SET" USING
             TMP-SEQ-POINTER
             WK
             TMP-POINTER.
        ... 
     CALL "イベントチャネルのオブジェクトリファレンスの獲得"
             COS-NAMING COS-NAME ENV CHANNEL.
        ... 
     CALL "COSNOTIFICATION-QOSADMIN-SET-QOS" USING
             CHANNEL
             QOS-PROPERTY
             ENV.                                                      /* 10 */
        ... 
     * 動的生成イベントチャネルの生成時
     CALL "COSNOTIFYCHANNELADMIN-EVENTCHANNELFACTORY-CREATE-CHANNEL" USING
             FACTRY
             QOS-PROPERTY
             ADMIN-PROPERTIES
             CHANNEL-ID
             ENV
             EVENT-CHNL.                                               /* 11 */
  1. 4項目分のバッファ領域を獲得します。
  2. NAMEにPriorityの値を設定します。
  3. ANY-VALUEにANY型でPriorityの値を設定します(SHORT型)。
  4. NAMEにTimeoutの値を設定します。
  5. ANY-VALUEにANY型でTimeoutの値を設定します(UNSIGNED LONG LONG型)。
  6. NAMEにOrderPolicyの値を設定します。
  7. ANY-VALUEにANY型でOrderPolicyの値を設定します(SHORT型)。
  8. NAMEにDiscardPolicyの値を設定します。
  9. ANY-VALUEにANY型でDiscardPolicyの値を設定します(SHORT型)。
  10. イベントチャネルに対してQoSプロパティ項目を設定します。
    動的生成イベントチャネルの場合は、11のイベントチャネルの生成時にも指定できます。
  11. 動的生成イベントチャネルの場合は、イベントチャネルの生成時にQoSプロパティ項目を設定します。

(2)メッセージに対するQoSプロパティ項目の設定方法

[StructuredEvent型データの作成例(Cの場合)]

 メッセージにQoSプロパティ項目を設定するには、StructuredEvent型データの中のOptionalHeaderFieldsとして設定します。OptionalHeaderFieldsはProperty構造体からなるシーケンス型です。CプログラムでQoSプロパティ項目を設定したStructuredEvent型データの作成例と処理の流れを以下に説明します。

    CORBA_short                      *priority;
    CORBA_unsigned_long_long         *timeout;
    CosNotification_Property         *pProperty;
    CosNotification_StructuredEvent  *event;
    CORBA_char                       *domain_name_data;
    CORBA_char                       *type_name_data;
    CORBA_char                       *event_name_data;
    CORBA_string                     *any_string;

    priority  = CORBA_short_alloc();
    *priority = 1;                                                         /* 1 */

    timeout  = CORBA_unsigned_long_long_alloc();
    *timeout = 40;                                                         /* 2 */

    event = CosNotification_StructuredEvent_alloc();                       /* 3 */
    pProperty = CosNotification_PropertySeq_allocbuf( 2 );                 /* 4 */

    pProperty[0].name = CORBA_string_alloc( strlen( CosNotification_Priority ) );
    strcpy( pProperty[0].name, CosNotification_Priority );
    pProperty[0].value._type   = TC_short;
    pProperty[0].value._value  = priority;                                 /* 5 */

    pProperty[1].name = CORBA_string_alloc( strlen( CosNotification_Timeout ) );
    strcpy( pProperty[1].name, CosNotification_Timeout );
    pProperty[1].value._type  = TC_ulonglong;
    pProperty[1].value._value = timeout;                                   /* 6 */

    /* ---- domain_name ---- */
    domain_name_data = CORBA_string_alloc( strlen( "Telecom" ) );
    strcpy( domain_name_data, "Telecom" );
    event->header.fixed_header.event_type.domain_name = domain_name_data;  /* 7 */

    /* ---- type_name ---- */
    type_name_data = CORBA_string_alloc( strlen( "CommunicationsAlarm" ) );
    strcpy( type_name_data, "CommunicationsAlarm" );
    event->header.fixed_header.event_type.type_name   = type_name_data;    /* 8 */

    /* ---- event_name ---- */
    event_name_data = CORBA_string_alloc( strlen( "data" ) );
    strcpy( event_name_data, "data" );
    event->header.fixed_header.event_name = event_name_data;               /* 9 */

    /* ---- remainder_of_data->_value ---- */

    event->filterable_data._maximum = 0;
    event->filterable_data._length  = 0;
    event->filterable_data._buffer  = NULL;

    any_string       = CORBA_string_ptr_alloc();
    *any_string      = CORBA_string_alloc( strlen("StructuredEvent data");

    strcpy( *any_string, "StructuredEvent data" );
    event->remainder_of_body._type  = TC_string;
    event->remainder_of_body._value = any_string;                          /* 10 */
  1. Priorityの値を設定します(short型)。
  2. Timeoutの値を設定します(unsigned long long型)。
  3. StructuredEvent型データを作成します。
  4. 1、2の項目分のバッファ領域を獲得します。
  5. nameにPriority、valueにany型で1の値を設定します。
  6. nameにTimeout、valueにany型で2の値を設定します。
  7. domain_nameを設定します。
  8. type_nameを設定します。
  9. event_nameを設定します。
  10. remainder_of_bodyを作成します。ここで送信したいデータ本体を設定します。
    例では、“StructuredEvent data”というstring型のデータを作成しています。

[StructuredEvent型データの作成例(C++の場合)]

 メッセージにQoSプロパティ項目を設定するには、StructuredEvent型データの中のOptionalHeaderFieldsとして設定します。OptionalHeaderFieldsはProperty構造体からなるシーケンス型です。C++プログラムでQoSプロパティ項目を設定したStructuredEvent型データの作成例と処理の流れを以下に説明します。

    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;
  1. Priorityの値を設定します(short型)。
  2. Timeoutの値を設定します(unsigned long long型)。
  3. StructuredEvent型データを作成します。
  4. 1、2の項目分のバッファ領域を獲得します。
  5. nameにPriority、valueにany型で1の値を設定します。
  6. nameにTimeout、valueにany型で2の値を設定します。
  7. 5〜6までのシーケンス型であるOptionalHeaderFieldsを作成します。
  8. FilterableEventBodyには、作成例のように設定してください。
  9. domain_nameを設定します。
  10. type_nameを設定します。
  11. event_nameを設定します。
  12. remainder_of_bodyを作成します。ここで送信したいデータ本体を設定します。
    例では、“StructuredEvent data”というstring型のデータを作成しています。

[StructuredEvent型データの作成例(Javaの場合)]

 メッセージにQoSプロパティ項目を設定するには、StructuredEvent型データの中のheaderの中のvariable_headerとして設定します。filterable_dataはorg.omg.CosNotification.Propertyの配列型です。JavaプログラムでQoSプロパティ項目を設定したStructuredEvent型データの作成例と処理の流れを以下に説明します。

    short   priority      = 0;                                              /* 1 */
    long    timeout       = 40;                                             /* 2 */

    org.omg.CosNotification.Property[]    property = 
            new org.omg.CosNotification.Property[2];                        /* 3 */

    String name1 = org.omg.CosNotification.Priority; 
    org.omg.CORBA.Any any1 = new org.omg.CORBA.Any(); 
    any1.insert_short(priority); 
    property[0] = new org.omg.CosNotification.Property(name1, any1);        /* 4 */

    String name2 = org.omg.CosNotification.Timeout; 
    org.omg.CORBA.Any any2 = new org.omg.CORBA.Any(); 
    any2.insert_ulonglong(timeout); 
    property[1] = new org.omg.CosNotification.Property(name2, any2);        /* 5 */

    org.omg.CosNotification.EventType et = 
        new org.omg.CosNotification.EventType("Telecom", "CommunicationsAlarm");
    org.omg.CosNotification.FixedEventHeader fixedHeader = 
        new org.omg.CosNotification.FixedEventHeader(et, "data");           /* 6 */

    org.omg.CosNotification.EventHeader header = 
        new org.omg.CosNotification.EventHeader(fixedHeader, property);     /* 7 */

    org.omg.CosNotification.FilterableEventBody filterablebody = null;      /* 8 */

    /* ---- remainder_of_data->_value ---- */
    String strdata = "StructuredEvent data"; 
    org.omg.CORBA.Any msg = new org.omg.CORBA.Any();
    msg.insert_string(strdata);                                             /* 9 */

    org.omg.CosNotification.StructuredEvent se = 
        new CosNotification::StructuredEvent(header, filterablebody, msg);  /* 10 */
  1. Priorityの値を設定します(short型)。
  2. Timeoutの値を設定します(unsigned long long型)。
  3. 1、2の項目分のバッファ領域を獲得します。
  4. nameにPriority、valueにany型で1の値を設定します。
  5. nameにTimeout、valueにany型で2の値を設定します。
  6. FixedEventHeaderを作成します。
  7. 4〜6を含むEventHeaderを作成します。
  8. filterablebodyを作成します。例では、NULLです。
  9. 送信データを作成します。例では、“StructuredEvent data”というstring型のデータを作成しています。
  10. 送信データを含むStructuredEventデータを作成します。

[StructuredEvent型データの作成例(COBOLの場合)]

 メッセージにQoSプロパティ項目を設定するには、STRUCTUREDEVENT型データの中のHEADERの中のVARIABLE-HEADERとして設定します。FILTERABLE-DATAはProperty構造体からなるシーケンス型です。COBOLプログラムでQoSプロパティ項目を設定したSTRUCTUREDEVENT型データの作成例と処理の流れを以下に説明します。

    DATA DIVISION.
    WORKING-STORAGE SECTION.

    01 TMP-STRING-BUF PIC X(64).
    01 COPY ANY IN CORBA REPLACING CORBA-ANY BY PROPERTY-ANY.
    01 COPY ULONG IN CORBA REPLACING CORBA-UNSIGNED-LONG BY STRING-LENGTH.
    01 COPY NOTIFICATION-PROPERTY IN COSEVENTCOMM REPLACING COSNOTIFICATION-PROPERTY BY NOTIFI-PROPERTY.
    01 COPY STRUCTUREDEVENT IN COSEVENTCOMM REPLACING COSNOTIFICATION-STRUCTUREDEVEN BY STREVENT.
    01 COPY ANY IN CORBA REPLACING CORBA-ANY BY TMP-ANY.
    01 STRING-PTR USAGE IS POINTER.
    01 SEND-DATA PIC X(27).

    LINKAGE SECTION.
    01 COPY SHORT IN CORBA REPLACING CORBA-SHORT BY PRIORITY-DATA.
    01 COPY ULLONG IN CORBA REPLACING CORBA-UNSIGNED-LONG-LONG BY TIMEOUT-DATA.

    PROCEDURE DIVISION.
    MOVE 2 TO SEQ-MAXIMUM OF VARIABLE-HEADER OF HEADER OF STREVENT.
    MOVE 2 TO SEQ-LENGTH OF VARIABLE-HEADER OF HEADER OF STREVENT.
    CALL "CORBA-SEQUENCE-COSNOTIFICATION-PROPERTY-ALLOCBUF" USING
             SEQ-MAXIMUM OF VARIABLE-HEADER OF HEADER OF STREVENT
             SEQ-BUFFER OF VARIABLE-HEADER OF HEADER OF STREVENT.       /* 1 */

    MOVE FUNCTION LENG( COSNOTIFICATION-PRIORITY ) TO STRING-LENGTH.
    CALL "CORBA-STRING-SET" USING
             NAME OF NOTIFI-PROPERTY
             STRING-LENGTH
             COSNOTIFICATION-PRIORITY.                                  /* 2 */
    MOVE FUNCTION LENG( TC-SHORT ) TO STRING-LENGTH.
    CALL "CORBA-STRING-SET" USING
             TMP-POINTER
             STRING-LENGTH
             TC-SHORT.
    CALL "CORBA-ORB-TYPECODE-FROM-CGEN-TC" USING
             TMP-POINTER
             ANY-TYPE OF PROPERTY-ANY.
    CALL "CORBA-FREE" USING TMP-POINTER.
    CALL "CORBA-SHORT-ALLOC" USING ANY-VALUE OF PROPERTY-ANY.
    SET ADDRESS OF PRIORITY-DATA TO ANY-VALUE OF PROPERTY-ANY.          /* 3 */
    MOVE 1 TO PRIORITY-DATA.
    MOVE PROPERTY-ANY TO IDL-VALUE OF NOTIFI-PROPERTY.
    MOVE FUNCTION ADDR( VARIABLE-HEADER OF HEADER OF STREVENT ) TO TMP-SEQ-POINTER.
    MOVE FUNCTION ADDR( NOTIFI-PROPERTY ) TO TMP-POINTER.
    MOVE 1 TO WK.
    CALL "CORBA-SEQUENCE-ELEMENT-SET" USING
             TMP-SEQ-POINTER
             WK
             TMP-POINTER.

    MOVE FUNCTION LENG( COSNOTIFICATION-TIMEOUT ) TO STRING-LENGTH.
    CALL "CORBA-STRING-SET" USING
             NAME OF NOTIFI-PROPERTY
             STRING-LENGTH
             COSNOTIFICATION-TIMEOUT.                                   /* 4 */
     MOVE FUNCTION LENG( TC-ULLONG ) TO STRING-LENGTH.
     CALL "CORBA-STRING-SET" USING
             TMP-POINTER
             STRING-LENGTH
             TC-ULLONG.
     CALL "CORBA-ORB-TYPECODE-FROM-CGEN-TC" USING
             TMP-POINTER
             ANY-TYPE OF PROPERTY-ANY.
     CALL "CORBA-FREE" USING TMP-POINTER.
     CALL "CORBA-UNSIGNED-LONG-LONG-ALLOC" USING ANY-VALUE OF PROPERTY-ANY.
     SET ADDRESS OF TIMEOUT-DATA TO ANY-VALUE OF PROPERTY-ANY.          /* 5 */
     MOVE 40 TO TIMEOUT-DATA.
     MOVE PROPERTY-ANY TO IDL-VALUE OF NOTIFI-PROPERTY.
     MOVE FUNCTION ADDR( VARIABLE-HEADER OF HEADER OF STREVENT ) TO TMP-SEQ-POINTER.
     MOVE FUNCTION ADDR( NOTIFI-PROPERTY ) TO TMP-POINTER.
     MOVE 2 TO WK.
     CALL "CORBA-SEQUENCE-ELEMENT-SET" USING
             TMP-SEQ-POINTER
             WK
             TMP-POINTER.

     MOVE "Telecom" TO TMP-STRING-BUF.
     MOVE FUNCTION LENG(TMP-STRING-BUF) TO STRING-LENGTH.
     CALL "CORBA-STRING-SET" USING
             DOMAIN-NAME OF EVENT-TYPE OF FIXED-HEADER OF HEADER OF STREVENT
             STRING-LENGTH
             TMP-STRING-BUF.                                            /* 6 */
     MOVE "CommunicationsAlarm" TO TMP-STRING-BUF.
     MOVE FUNCTION LENG(TMP-STRING-BUF) TO STRING-LENGTH.
     CALL "CORBA-STRING-SET" USING
             TYPE-NAME OF EVENT-TYPE OF FIXED-HEADER OF HEADER OF STREVENT
             STRING-LENGTH
             TMP-STRING-BUF.                                            /* 7 */
     MOVE "data" TO TMP-STRING-BUF.
     MOVE FUNCTION LENG(TMP-STRING-BUF) TO STRING-LENGTH.
     CALL "CORBA-STRING-SET" USING
             EVENT-NAME OF FIXED-HEADER OF HEADER OF STREVENT
             STRING-LENGTH
             TMP-STRING-BUF.                                            /* 8 */

     MOVE 0 TO SEQ-LENGTH  OF FILTERABLE-DATA OF STREVE
     MOVE 0 TO SEQ-MAXIMUM OF FILTERABLE-DATA OF STREVE
     SET SEQ-BUFFER OF FILTERABLE-DATA OF STREVENT TO NULL.

     MOVE FUNCTION LENG( TC-STRING ) TO WK.
     CALL "CORBA-STRING-SET" USING
             TMP-POINTER
             WK
             TC-STRING.
     CALL "CORBA-ORB-TYPECODE-FROM-CGEN-TC" USING
             TMP-POINTER
             ANY-TYPE OF TMP-ANY.
     CALL "CORBA-FREE" USING TMP-POINTER.
     CALL "CORBA-STRING-PTR-ALLOC" USING STRING-PTR.
     SET ADDRESS OF STRING-VALUE TO STRING-PTR.
     MOVE "StructuredEvent data" TO SEND-DATA.
     MOVE FUNCTION LENG( SEND-DATA ) TO WK.
     CALL "CORBA-STRING-SET" USING
             STRING-VALUE
             WK
             SEND-DATA.
     MOVE STRING-PTR TO ANY-VALUE OF TMP-ANY.
     MOVE TMP-ANY TO REMAINDER-OF-BODY OF STREVENT.                     /* 9 */
  1. 2項目分のバッファ領域を獲得します。
  2. NAMEにPriorityを設定します。
  3. ANY-VALUEにANY型でPriorityの値を設定します(SHORT型)。
  4. NAMEにTimeoutを設定します。
  5. ANY-VALUEにANY型でTimeoutの値を設定します(UNSIGNED LONG LONG型)。
  6. DOMAIN-NAMEを設定します。
  7. TYPE-NAMEを設定します。
  8. EVENT-NAMEを設定します。
  9. REMAINDER-OF-BODYを作成します。ここで送信したいデータ本体を設定します。
    例では、“StructuredEvent data”というstring型のデータを作成しています。

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

Copyright 2008 FUJITSU LIMITED