21.6.2 タイプドオブジェクトラッパーのイニシャライザ
- C++の場合
-
タイプドオブジェクトラッパーはobjectWrappers/BankWrap.Cに定義され,BankInit::updateイニシャライザで生成されます。このイニシャライザは,ORB_initが呼び出されるときに起動され,ユーザが指定するコマンドラインプロパティに基づいて,さまざまなタイプドオブジェクトラッパーをインストールできます。
コードサンプル21-15に,イニシャライザがPropStructオブジェクトのセットをどのように使用し,指定されたコマンドラインオプションを把握し,該当するロケーションにAccountObjectWrapperオブジェクトを追加または削除するかを示します。
- コードサンプル21-15 タイプドオブジェクトラッパーのイニシャライザ(C++)
. . . static const CORBA::ULong kNumTypedAccountProps = 2; static PropStruct TypedAccountProps[kNumTypedAccountProps] = { { "BANKaccountCacheClnt", CachingAccountObjectWrapper::factory, VISObjectWrapper::Client }, { "BANKaccountCacheSrvr", CachingAccountObjectWrapper::factory, VISObjectWrapper::Server } }; static const CORBA::ULong kNumTypedAccountManagerProps = 4; static PropStruct TypedAccountManagerProps[ kNumTypedAccountManagerProps] = { { "BANKmanagerCacheClnt", CachingAccountManagerObjectWrapper::factory, VISObjectWrapper::Client }, { "BANKmanagerSecurityClnt", SecureAccountManagerObjectWrapper::factory, VISObjectWrapper::Client }, { "BANKmanagerCacheSrvr", CachingAccountManagerObjectWrapper::factory, VISObjectWrapper::Server }, { "BANKmanagerSecuritySrvr", SecureAccountManagerObjectWrapper::factory, VISObjectWrapper::Server }, }; void BankInit::update(int& argc, char* const* argv) { if (argc > 0) { init(argc, argv, "-BANK"); CORBA::ULong i; for (i=0; i < kNumTypedAccountProps; i++) { CORBA::String_var arg( getArgValue(TypedAccountProps[i].propname)); if (arg && strlen(arg) > 0) { if (atoi((char*) arg)) { Bank::AccountObjectWrapper::add(_orb, TypedAccountProps[i].fact, TypedAccountProps[i].loc); } else { Bank::AccountObjectWrapper::remove(_orb, TypedAccountProps[i].fact, TypedAccountProps[i].loc); } } } for (i=0; i < kNumTypedAccountManagerProps; i++) { CORBA::String_var arg( getArgValue( TypedAccountManagerProps[i].propname)); if (arg && strlen(arg) > 0 ) { if (atoi((char*) arg)) { Bank::AccountManagerObjectWrapper ::add(_orb, TypedAccountManagerProps[i].fact, TypedAccountManagerProps[i].loc); } else { Bank::AccountManagerObjectWrapper ::remove(_orb, TypedAccountManagerProps[i].fact, TypedAccountManagerProps[i].loc); } } } } }
- Javaの場合
-
タイプドオブジェクトラッパーはBankWrappersパッケージに定義され,コードサンプル21-16にあるサービスイニシャライザのBankWrappers/Init.javaを含みます。このイニシャライザは,クライアントまたはサーバをvbjで起動するときにコマンドラインで-Dvbroker.orb.dynamicLibs=BankWrappers.Initを指定すると起動されます。ユーザが指定するコマンドラインプロパティに基づいて,さまざまなタイプドオブジェクトラッパーをインストールできます。コマンドラインプロパティについては表21-4を参照してください。
- コードサンプル21-16 BankWrappersのサービスイニシャライザ(Java)
package BankWrappers; 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(); // install my CachingAccountObjectWrapper String val = pm.getString("CachingAccount", this.toString()); Class c = CachingAccountObjectWrapper.class; if( !val.equals(this.toString())) { if( val.equalsIgnoreCase("client") ) { Bank.AccountHelper. addClientObjectWrapperClass(orb, c); } else if( val.equalsIgnoreCase("server") ) { Bank.AccountHelper. addServerObjectWrapperClass(orb, c); } else { Bank.AccountHelper. addClientObjectWrapperClass(orb, c); Bank.AccountHelper. addServerObjectWrapperClass(orb, c); } } // install my CachingAccountManagerObjectWrapper val = pm.getString("CachingAccountManager", this.toString()); c = CachingAccountManagerObjectWrapper.class; if( !val.equals(this.toString())) { if( val.equalsIgnoreCase("client") ) { Bank.AccountManagerHelper. addClientObjectWrapperClass(orb, c); } else if( val.equalsIgnoreCase("server") ) { Bank.AccountManagerHelper. addServerObjectWrapperClass(orb, c); } else { Bank.AccountManagerHelper. addClientObjectWrapperClass(orb, c); Bank.AccountManagerHelper. addServerObjectWrapperClass(orb, c); } } // install my CachingAccountManagerObjectWrapper val = pm.getString("SecureAccountManager", this.toString()); c = SecureAccountManagerObjectWrapper.class; if( !val.equals(this.toString())) { if( val.equalsIgnoreCase("client") ) { Bank.AccountManagerHelper. addClientObjectWrapperClass(orb, c); } else if( val.equalsIgnoreCase("server") ) { Bank.AccountManagerHelper. addServerObjectWrapperClass(orb, c); } else { Bank.AccountManagerHelper. addClientObjectWrapperClass(orb, c); Bank.AccountManagerHelper. addServerObjectWrapperClass(orb, c); } } } public void init_complete(org.omg.CORBA.ORB orb) {} public void shutdown(org.omg.CORBA.ORB orb) {} }