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