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