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... } } . . .