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