21.5.2 クライアント用タイプドオブジェクトラッパーの登録
- C++の場合
-
タイプドオブジェクトラッパーは,idl2cppコンパイラがクラス中に生成した<interface_name>::addメソッドを起動して,クライアント側に登録されます。クライアント側オブジェクトラッパーはORB_initメソッドが呼び出されたあと,ただしオブジェクトがバインドされる前に登録しなければなりません。コードサンプル21-11に,タイプドオブジェクトラッパーを生成,登録するTypedClient.Cファイルの一部を示します。
- コードサンプル21-11 クライアント側タイプドオブジェクトラッパーの生成と登録(C++)
. . . int main(int argc, char* const* argv) { try { // Initialize the ORB. CORBA::ORB_var orb = CORBA::ORB_init(argc, argv); //Install Typed Object Wrappers for Account. Bank::AccountObjectWrapper::add(orb, CachingAccountObjectWrapper::factory, VISObjectWrapper::Client); // Get the Manager ID. PortableServer::ObjectId_var managerId = PortableServer::string_to_ObjectId("BankManager"); // Locate an Account Manager. Bank::AccountManager_var manager = Bank::AccountManager::_bind( "/bank_ow_poa", managerId); . . .
- Javaの場合
-
タイプドオブジェクトラッパーは,idl2javaコンパイラがHelperクラス中に生成したaddClientObjectWrapperClassメソッドを起動して,クライアント側に登録されます。クライアント側オブジェクトラッパーはORB.initメソッドが呼び出されたあと,ただしオブジェクトがバインドされる前に登録しなければなりません。コードサンプル21-12に,タイプドオブジェクトラッパーを生成,登録するTypedClient.javaファイルの一部を示します。
- コードサンプル21-12 クライアント側タイプドオブジェクトラッパーのインストール(Java)
// TypedClient.java import com.inprise.vbroker.interceptor.*; public class TypedClient { public static void main(String[ ] args) throws Exception { // Initialize the ORB. org.omg.CORBA.ORB orb = org.omg.CORBA.ORB.init(args,null); doMain (orb, args); } public static void doMain(org.omg.CORBA.ORB orb, String[ ] args) { // Add a typed object wrapper for Account objects Bank.AccountHelper.addClientObjectWrapperClass(orb, BankWrappers.CachingAccountObjectWrapper.class); // Locate an account manager. Bank.AccountManager manager = Bank.AccountManagerHelper.bind(orb, "BankManager"); . . . } }
VisiBroker ORBは,クライアント側でこのクラスのために登録されたすべてのオブジェクトラッパーの動作の記録を採っています。クライアントが_bindメソッドを起動して,その型のオブジェクトにバインドしようとすると,必要なオブジェクトラッパーが生成されます。クライアントが特定のクラスのオブジェクトの複数のインスタンスにバインドする場合,各インスタンスは,それぞれ専用のオブジェクトラッパーのセットを持ちます。