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

4.4.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型のデータを作成しています。