21.6.4 アンタイプドオブジェクトラッパーのイニシャライザ

C++の場合
アンタイプドオブジェクトラッパーはBankWrappers/TraceWrap.CとTimeWrap.Cに定義され,TraceWrapInit::updateとTimingWrapInit::updateメソッド内に作成され,登録されます。これらのイニシャライザは,ORB_initメソッドが起動する時に起動され,さまざまなアンタイプドオブジェクトラッパーをインストールできます。コードサンプル21-17に,指定したコマンドラインプロパティに基づいて,該当するアンタイプドオブジェクトラッパーをインストールするTraceWrap.Cファイルの一部を示します。
コードサンプル21-17 アンタイプドオブジェクトラッパーのイニシャライザ(C++)

TraceWrapInit::update(int& argc, char* const* argv) {
  if (argc > 0) {
     init(argc, argv, "-TRACEWRAP");

     VISObjectWrapper::Location loc;
     const char* propname;
     LIST(VISObjectWrapper::
           UntypedObjectWrapperFactory_ptr) *list;

     for (CORBA::ULong i=0; i < 3; i++) {
        switch (i) {
           case 0:
              loc = VISObjectWrapper::Client;
              propname = "TRACEWRAPclient";
              list = &_clientfacts;
              break;
           case 1:
              loc = VISObjectWrapper::Server;
              propname = "TRACEWRAPserver";
              list = &_serverfacts;
              break;
           case 2:
              loc = VISObjectWrapper::Both;
              propname = "TRACEWRAPboth";
              list = &_bothfacts;
              break;
        }
        CORBA::String_var getArgValue(
                          property_value(propname));
        if (arg && strlen(arg) > 0) {
           int numNew = atoi((char*) arg);
           char key_buf[256];
           for (CORBA::ULong j=0; j < numNew; j++) {
              sprintf(key_buf, "%s-%d", propname,
                    list->size());
             list->add(new TraceObjectWrapperFactory(loc,
                   (const char*) key_buf));
           }
        }
     }
  }
}

Javaの場合
アンタイプドオブジェクトラッパーはUtilityObjectWrappersパッケージに定義され,コードサンプル21-18にあるサービスイニシャライザのUtilityObjectWrappers/Init.javaを含みます。このイニシャライザは,クライアントまたはサーバをvbjで起動する時にコマンドラインで-Dvbroker.orb.dynamicLibs=UtilityObjectWrappers.Initを指定すると起動されます。ユーザが指定するコマンドラインプロパティに基づいて,さまざまなアンタイプドオブジェクトラッパーをインストールできます。コマンドラインプロパティについては表21-6を参照してください。
コードサンプル21-18 UtilityObjectWrappersのサービスイニシャライザ(Java)

package UtilityObjectWrappers;
import java.util.*;
import com.inprise.vbroker.orb.ORB;
import com.inprise.vbroker.properties.PropertyManager;
import com.inprise.vbroker.interceptor.*;

public class Init implements ServiceLoader {
  com.inprise.vbroker.orb.ORB _orb;
  public void init(final org.omg.CORBA.ORB orb) {
     _orb = (ORB) orb;
     PropertyManager pm= _orb.getPropertyManager();
     try {
        ChainUntypedObjectWrapperFactory factory =
          ChainUntypedObjectWrapperFactoryHelper.narrow(
            orb.resolve_initial_references(
            "ChainUntypedObjectWrapperFactory"));
        // install my Timing ObjectWrapper
        String val = pm.getString("Timing", this.toString());
        if( !val.equals(this.toString())) {
           UntypedObjectWrapperFactory f=
              new TimingUntypedObjectWrapperFactory();
           if( val.equalsIgnoreCase("client") ) {
              factory.add(f, Location.CLIENT);
           } else if( val.equalsIgnoreCase("server") ) {
              factory.add(f, Location.SERVER);
           } else {
              factory.add(f, Location.BOTH);
           }
        }
        // install my Tracing ObjectWrapper
        val = pm.getString("Tracing", this.toString());
        if( !val.equals(this.toString())) {
           UntypedObjectWrapperFactory f=
                   new TracingUntypedObjectWrapperFactory();
           if( val.equalsIgnoreCase("client") ) {
              factory.add(f, Location.CLIENT);
           } else if( val.equalsIgnoreCase("server") ) {
              factory.add(f, Location.SERVER);
           } else {
              factory.add(f, Location.BOTH);
           }
        }
     } catch( org.omg.CORBA.ORBPackage.InvalidName e ) {
        return;
     }
  }

  public void init_complete(org.omg.CORBA.ORB orb) {}
  public void shutdown(org.omg.CORBA.ORB orb) {}
}