ユーザは,独自のインタフェースを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が呼び出すメソッドを提供します。
class Activator {
public:
virtual CORBA::Object_ptr activate(
extension::ImplementationDef impl) = 0;
virtual void deactivate(
Object_ptr, extension::ImplementationDef_ptr impl)
= 0;
};
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を生成する方法を示します。
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を生成する方法を示します。
// 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...
}
}
. . .