21.3.1 アンタイプドオブジェクトラッパーファクトリのインプリメント

C++の場合
objectWrappersサンプルアプリケーションの一部であるTimeWrap.hファイルは,VISObjectWrapper::UntypedObjectWrapperFactoryから派生したアンタイプドオブジェクトラッパーファクトリの定義方法を示します。
コードサンプル21-1に,TimingObjectWrapperFactoryを示します。これはメソッド呼び出しのタイミング情報を表示するアンタイプドオブジェクトラッパーを生成するために使用します。keyパラメタをTimingObjectWrapperFactoryコンストラクタに追加することに注意してください。また,このパラメタはオブジェクトラッパーを識別するためにサービスイニシャライザが使用します。
コードサンプル21-1 TimeWrap.hファイルから派生するTimingObjectWrapperFactoryインプリメンテーション(C++)

class TimingObjectWrapperFactory
  : public VISObjectWrapper::UntypedObjectWrapperFactory
{
  public:
     TimingObjectWrapperFactory(VISObjectWrapper::
           Location loc, const char* key)
        : VISObjectWrapper::
           UntypedObjectWrapperFactory(loc), _key(key) {}

     // ObjectWrapperFactory operations
     VISObjectWrapper::UntypedObjectWrapper_ptr create (
              CORBA::Object_ptr target,
              VISObjectWrapper::Location loc) {
        if (_owrap == NULL) {
              _owrap = new TimingObjectWrapper(_key);
        }
        return VISObjectWrapper::UntypedObjectWrapper::
              _duplicate(_owrap);
  }

  private:
     CORBA::String_var _key;
     VISObjectWrapper::UntypedObjectWrapper_var _owrap;
};

Javaの場合
objectWrappersサンプルアプリケーションの一部であるTimingUntypedObjectWrapperFactoryのインプリメンテーションは,UntypedObjectWrapperFactoryから派生したアンタイプドオブジェクトラッパーファクトリの定義方法を示します。
クライアントがオブジェクトにバインドする際,またはサーバがオブジェクトインプリメンテーションでメソッドを起動する際はいつも,ユーザのファクトリのcreateメソッドが呼び出され,アンタイプドオブジェクトラッパーを生成します。createメソッドは目的のオブジェクトを受け取ります。つまりユーザは,無視したいオブジェクトタイプについて,ファクトリがアンタイプドオブジェクトラッパーを作らないようにファクトリを設計できます。また,生成されたオブジェクトラッパーがサーバ側オブジェクトインプリメンテーションなのか,クライアント側オブジェクトなのかを指定するenumも受け取ります。
コードサンプル21-2に,TimingObjectWrapperFactoryを示します。これはメソッド呼び出しのタイミング情報を表示するアンタイプドオブジェクトラッパーを生成するために使用されます。
コードサンプル21-2 TimingUntypedObjectWrapperFactoryインプリメンテーション

package UtilityObjectWrappers;
import com.inprise.vbroker.interceptor.*;

public class TimingUntypedObjectWrapperFactory implements
     UntypedObjectWrapperFactory {
  public UntypedObjectWrapper create(
        org.omg.CORBA.Object target,
        com.inprise.vbroker.interceptor.Location loc) {
     return new TimingUntypedObjectWrapper();
  }
}