Borland(R) Enterprise Server VisiBroker(R) デベロッパーズガイド

[目次][索引][前へ][次へ]

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) {}
}