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

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

29.2 アクティベータインタフェース

ユーザは,独自のインタフェースをActivatorクラス(C++)またはActivatorインタフェース(Java)から派生させることができます。これによってユーザはVisiBroker ORBがAccountImplオブジェクト(C++)またはDBObjectImplオブジェクト(Java)で使用する純仮想(C++)activateおよびdeactivateメソッドをインプリメントできます。次に,ユーザはBOAがオブジェクトに対する要求を受け取るまで,AccountImplオブジェクトの実体化を遅延させることができます。また,BOAがオブジェクトを非活性化する場合に,クリーンアップ処理を提供できるようになります。

コードサンプル29-1にActivatorクラス(C++),コードサンプル29-2にActivatorインタフェース(Java)を示します。これは,VisiBroker ORBオブジェクトを活性化,非活性化するためにBOAが呼び出すメソッドを提供します。

コードサンプル29-1 Activatorクラス(C++)
 
class Activator {
   public:
      virtual CORBA::Object_ptr activate(
            extension::ImplementationDef impl) = 0;
      virtual void deactivate(
            Object_ptr, extension::ImplementationDef_ptr impl) 
            = 0;
};
 

コードサンプル29-2 Activatorインタフェース(Java)
 
package com.inprise.vbroker.extension;
public interface Activator {
   public abstract org.omg.CORBA.Object
                            activate(ImplementationDef impl);
   public abstract void deactivate(org.omg.CORBA.Object obj,
                                   ImplementationDef impl);
}
 

コードサンプル29-3にAccountImplインタフェースに対してActivatorを生成する方法を示します。

コードサンプル29-3 activateおよびdeactivateメソッドをインプリメントしてDBActivatorクラス(C++)を派生
 
class extension {
   . . .
   class AccountImplActivator : public extension::Activator {
      public:
         virtual CORBA::Object_ptr activate(
               CORBA::ImplementationDef_ptr impl);
         virtual void deactivate(CORBA::Object_ptr,
               CORBA::ImplementationDef_ptr impl);
   };
   CORBA::Object_ptr AccountImplActivator::activate(
         CORBA::ImplementationDef_ptr impl) {
      // When the BOA needs to activate us,
      // instantiate the AccountImpl object.
      extension::ActivationImplDef* actImplDef =
              extension::ActivationImplDef::_downcast(impl);
      CORBA::Object_var obj =
              new AccountImpl(actImplDef->object_name());
      return CORBA::_duplicate(obj);
   }
   void AccountImplActivator::deactivate(CORBA::Object_ptr obj,
         CORBA::ImplementationDef_ptr impl) {
      // When the BOA deactivates us, release the Account object.
      obj->_release;
   }
}

コードサンプル29-4にDBObjectImplインタフェースに対してActivatorを生成する方法を示します。

コードサンプル29-4 activateおよびdeactivateメソッドをインプリメントしてDBActivatorインタフェース(Java)を派生
 
// Server.java
import com.inprise.vbroker.extension.*;
. . .
class DBActivator implements Activator {
   private static int _count;
   private com.inprise.vbroker.CORBA.BOA _boa;
 
   public DBActivator(com.inprise.vbroker.CORBA.BOA boa) {
      _boa = boa;
   }
   public org.omg.CORBA.Object activate(
       com.inprise.vbroker.extension.ImplementationDef impl) {
      System.out.println(
          "Activator called " + ++_count + " times");
      byte[ ] ref_data = ((ActivationImplDef) impl) .id();
      DBObjectImpl obj =
                   new DBObjectImpl(new String(ref_data));
      _boa.obj_is_ready(obj);
      return obj;
   }
   public void deactivate(org.omg.CORBA.Object obj,
      com.inprise.vbroker.extension.ImplementationDef impl) {
    // nothing to do here...
   }
}
. . .