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

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

4.1.1.2 Adminプロパティ項目の設定

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

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

    CORBA_long                       *maxQueueLength;
    CORBA_long                       *maxConsumers;
    CORBA_long                       *maxSuppliers;
    CosNotification_AdminProperties  *pAdmin;

    maxQueueLength  = CORBA_long_alloc();
    *maxQueueLength  = 200;                                             /* 1 */
    maxConsumers  = CORBA_long_alloc();
    *maxConsumers  = 100;                                               /* 2 */
    maxSuppliers  = CORBA_long_alloc();
    *maxSuppliers  = 20;                                                /* 3 */

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

    pProperty[0].name = CORBA_string_alloc( strlen(CosNotification_MaxQueueLength ) );
    strcpy( pProperty[0].name, CosNotification_MaxQueueLength );
    pProperty[0].value._type  = TC_long;
    pProperty[0].value._value = maxQueueLength;                         /* 5 */

    pProperty[1].name = CORBA_string_alloc( strlen(CosNotification_MaxConsumers ) );
    strcpy( pProperty[1].name, CosNotification_MaxConsumers);
    pProperty[1].value._type  = TC_long;
    pProperty[1].value._value = maxConsumers;                           /* 6 */

    pProperty[2].name = CORBA_string_alloc( strlen(CosNotification_MaxSuppliers ) );
    strcpy( pProperty[2].name, CosNotification_MaxSuppliers );
    pProperty[2].value._type  = TC_long;
    pProperty[2].value._value = maxSuppliers;                           /* 7 */

    pAdmin = CosNotification_AdminProperties_alloc();                   /* 8 */
    pAdmin->_length = pAdmin ->_maximum = 3;
    pAdmin ->_buffer = pProperty;

    channel = CosNotifyChannelAdmin_EventChannelFactory_create_channel(
                                       factory,
                                       initial_qos,
                                       pAdmin,
                                       &channelID,
                                       &env );                          /* 9 */
  1. MaxQueueLengthの値を設定します(long型)。
  2. MaxConsumersの値を設定します(long型)。
  3. MaxSuppliersの値を設定します(long型)。
  4. 上記3項目分のバッファ領域を獲得します。
  5. nameにMaxQueueLength、valueにany型で1の値を設定します。
  6. nameにMaxConsumers、valueにany型で2の値を設定します。
  7. nameにMaxSuppliers、valueにany型で3の値を設定します。
  8. 5〜7までのシーケンス型であるAdminPropertiesを作成します。
  9. イベントチャネルの生成時にAdminプロパティ項目を設定します。

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

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

    CORBA::Long    maxQueueLength  = 200;                                /* 1 */
    CORBA::Long    maxConsumers    = 100;                                /* 2 */
    CORBA::Long    maxSuppliers    = 20;                                 /* 3 */

    CosNotification::Property_var    *pProperty =
            CosNotification::PropertySeq::allocbuf( 3 );                 /* 4 */

    pProperty[0]->name = CORBA::string_dup( CosNotification::MaxQueueLength ); 
    pProperty[0]->value = new CORBA::Any(); 
    *(pProperty[0]->value) <<= maxQueueLength;                           /* 5 */

    pProperty[1]->name = CORBA::string_dup( CosNotification::MaxConsumers ); 
    pProperty[1]->value = new CORBA::Any(); 
    *(pProperty[1]->value) <<= maxConsumers;                             /* 6 */

    pProperty[2]->name = CORBA::string_dup( CosNotification::MaxSuppliers ); 
    pProperty[2]->value = new CORBA::Any(); 
    *(pProperty[2]->value) <<= maxSuppliers;                             /* 7 */

    CosNotification::AdminProperties * pAdmin =
                        new CosNotification::AdminProperties(
                            3, 3, pProperty, CORBA_TRUE );               /* 8 */

    try{
        ... 
        channel=factory->create_channel(*pQoS,*pAdmin,channelID, env );  /* 9 */
        ... 
    } catch( CORBA::Exception &e ) {
        ... 
    }
  1. MaxQueueLengthの値を設定します(long型)。
  2. MaxConsumersの値を設定します(long型)。
  3. MaxSuppliersの値を設定します(long型)。
  4. 上記3項目分のバッファ領域を獲得します。
  5. nameにMaxQueueLength、valueにany型で1の値を設定します。
  6. nameにMaxConsumers、valueにany型で2の値を設定します。
  7. nameにMaxSuppliers、valueにany型で3の値を設定します。
  8. 5〜7までのシーケンス型であるAdminPropertiesを作成します。
  9. イベントチャネルの生成時にAdminプロパティ項目を設定します。

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

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

    int    maxQueueLength  = 200;                                       /* 1 */
    int    maxConsumers    = 100;                                       /* 2 */
    int    maxSuppliers    = 20;                                        /* 3 */

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

    String name1 = org.omg.CosNotification.MaxQueueLength;
    org.omg.CORBA.Any any1 = new org.omg.CORBA.Any(); 
    any1.insert_long(maxQueueLength);
    property[0] = new org.omg.CosNotification.Property(name1, any1);    /* 5 */

    String name2 = org.omg.CosNotification.MaxConsumers; 
    org.omg.CORBA.Any any2 = new org.omg.CORBA.Any(); 
    any1.insert_long(maxConsumers);
    property[1] = new org.omg.CosNotification.Property(name2, any2);    /* 6 */

    String name3 = org.omg.CosNotification.MaxSuppliers; 
    org.omg.CORBA.Any any3 = new org.omg.CORBA.Any(); 
    any1.insert_long(maxSuppliers); 
    property[2] = new org.omg.CosNotification.Property(name3, any3);    /* 7 */

    try{
        ... 
        channel=factory->create_channel(QoS, property, channelID);      /* 8 */
        ... 
    } catch(Exception e) {
        ... 
    }
  1. MaxQueueLengthの値を設定します(long型)。
  2. MaxConsumersの値を設定します(long型)。
  3. MaxSuppliersの値を設定します(long型)。
  4. 上記3項目分のバッファ領域を獲得します。
  5. nameにMaxQueueLength、valueにany型で1の値を設定します。
  6. nameにMaxConsumers、valueにany型で2の値を設定します。
  7. nameにMaxSuppliers、valueにany型で3の値を設定します。
  8. イベントチャネルの生成時にAdminプロパティ項目を設定します。

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

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

    DATA DIVISION.
    WORKING-STORAGE SECTION.

    01 COPY ULONG IN CORBA REPLACING CORBA-UNSIGNED-LONG BY STRING-LENGTH.
    01 COPY NOTIFICATION-PROPERTY IN COSEVENTCOMM REPLACING COSNOTIFICATION-PROPERTY BY N-PROPERTY.
    01 COPY ADMINPROPERTIES IN COSEVENTCOMM REPLACING COSNOTIFICATION-ADMINPROPER001 BY ADMIN-PROPERTIES.
    01 COPY ANY IN CORBA REPLACING CORBA-ANY BY TMP-ANY.

    LINKAGE SECTION.
    01 COPY LONG IN CORBA REPLACING CORBA-LONG BY MAXQUEUELENGTH-DATA.
    01 COPY LONG IN CORBA REPLACING CORBA-LONG BY MAXCONSUMERS-DATA.
    01 COPY LONG IN CORBA REPLACING CORBA-LONG BY MAXSUPPLIERS-DATA.

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

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

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

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

     CALL "COSNOTIFYCHANNELADMIN-EVENTCHANNELFACTORY-CREATE-CHANNEL" USING
              FACTRY-NAMING
              QOS-PROPERTIES
              ADMIN-PROPERTIES
              CHANNEL-ID
              ENV
              EVENT-CHNL.                                               /* 8 */
  1. 3項目分のバッファ領域を獲得します。
  2. NAMEにMAXQUEUELENGTHを設定します。
  3. ANY-VALUEにANY型でMAXQUEUELENGTHの値を設定します(LONG型)。
  4. NAMEにMAXCONSUMERSを設定します。
  5. ANY-VALUEにANY型でMAXCONSUMERSの値を設定します(LONG型)。
  6. NAMEにMAXSUPPLIERSを設定します。
  7. ANY-VALUEにANY型でMAXSUPPLIERSの値を設定します(LONG型)。
  8. イベントチャネルの生成時にAdminプロパティ項目を設定します。

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

Copyright 2008 FUJITSU LIMITED