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 */ ... }
Priorityの値を設定します(short型)。
Timeoutの値を設定します(unsigned long long型)。
OrderPolicyの値を設定します(short型)。
DiscardPolicyの値を設定します(short型)。
上記4項目分のバッファ領域を獲得します。
nameにPriority、valueにany型で1の値を設定します。
nameにTimeout、valueにany型で2の値を設定します。
nameにOrderPolicy、valueにany型で3の値を設定します。
nameにDiscardPolicy、valueにany型で4の値を設定します。
6~9までのシーケンス型であるQoSPropertiesを作成します。
イベントチャネルに対してQoSプロパティ項目を設定します。
動的生成イベントチャネルの場合は、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 ) { ... }
Priorityの値を設定します(short型)。
Timeoutの値を設定します(unsigned long long型)。
OrderPolicyの値を設定します(short型)。
DiscardPolicyの値を設定します(short型)。
上記4項目分のバッファ領域を獲得します。
nameにPriority、valueにany型で1の値を設定します。
nameにTimeout、valueにany型で2の値を設定します。
nameにOrderPolicy、valueにany型で3の値を設定します。
nameにDiscardPolicy、valueにany型で4の値を設定します。
6~9までのシーケンス型であるQoSPropertiesを作成します。
イベントチャネルに対してQoSプロパティ項目を設定します。
動的生成イベントチャネルの場合は、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 ) { ... }
Priorityの値を設定します(short型)。
Timeoutの値を設定します(unsigned long long型)。
OrderPolicyの値を設定します(short型)。
DiscardPolicyの値を設定します(short型)。
上記4項目分のバッファ領域を獲得します。
nameにPriority、valueにany型で1の値を設定します。
nameにTimeout、valueにany型で2の値を設定します。
nameにOrderPolicy、valueにany型で3の値を設定します。
nameにDiscardPolicy、valueにany型で4の値を設定します。
イベントチャネルに対してQoSプロパティ項目を設定します。
動的生成イベントチャネルの場合は、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 */
4項目分のバッファ領域を獲得します。
NAMEにPriorityの値を設定します。
ANY-VALUEにANY型でPriorityの値を設定します(SHORT型)。
NAMEにTimeoutの値を設定します。
ANY-VALUEにANY型でTimeoutの値を設定します(UNSIGNED LONG LONG型)。
NAMEにOrderPolicyの値を設定します。
ANY-VALUEにANY型でOrderPolicyの値を設定します(SHORT型)。
NAMEにDiscardPolicyの値を設定します。
ANY-VALUEにANY型でDiscardPolicyの値を設定します(SHORT型)。
イベントチャネルに対してQoSプロパティ項目を設定します。
動的生成イベントチャネルの場合は、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 */
Priorityの値を設定します(short型)。
Timeoutの値を設定します(unsigned long long型)。
StructuredEvent型データを作成します。
1、2の項目分のバッファ領域を獲得します。
nameにPriority、valueにany型で1の値を設定します。
nameにTimeout、valueにany型で2の値を設定します。
domain_nameを設定します。
type_nameを設定します。
event_nameを設定します。
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;
Priorityの値を設定します(short型)。
Timeoutの値を設定します(unsigned long long型)。
StructuredEvent型データを作成します。
1、2の項目分のバッファ領域を獲得します。
nameにPriority、valueにany型で1の値を設定します。
nameにTimeout、valueにany型で2の値を設定します。
5~6までのシーケンス型であるOptionalHeaderFieldsを作成します。
FilterableEventBodyには、作成例のように設定してください。
domain_nameを設定します。
type_nameを設定します。
event_nameを設定します。
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 */
Priorityの値を設定します(short型)。
Timeoutの値を設定します(unsigned long long型)。
1、2の項目分のバッファ領域を獲得します。
nameにPriority、valueにany型で1の値を設定します。
nameにTimeout、valueにany型で2の値を設定します。
FixedEventHeaderを作成します。
4~6を含むEventHeaderを作成します。
filterablebodyを作成します。例では、NULLです。
送信データを作成します。例では、“StructuredEvent data”というstring型のデータを作成しています。
送信データを含む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 */
2項目分のバッファ領域を獲得します。
NAMEにPriorityを設定します。
ANY-VALUEにANY型でPriorityの値を設定します(SHORT型)。
NAMEにTimeoutを設定します。
ANY-VALUEにANY型でTimeoutの値を設定します(UNSIGNED LONG LONG型)。
DOMAIN-NAMEを設定します。
TYPE-NAMEを設定します。
EVENT-NAMEを設定します。
REMAINDER-OF-BODYを作成します。ここで送信したいデータ本体を設定します。
例では、“StructuredEvent data”というstring型のデータを作成しています。