Borland(R) Enterprise Server VisiBroker(R) デベロッパーズガイド
コードサンプル24-4および24-5に,Borland Enterprise Server VisiBrokerをインストールしたディレクトリのexamples/vbe/dynanyに入っているクライアントアプリケーションを示します。クライアントアプリケーションはDynStructインタフェースを使って,動的にStructType構造体を生成します。
DynStructインタフェースは,NameValuePairオブジェクトのシーケンスを使って,構造体メンバとメンバに対応する値を表現します。名前・値の各ペアは,構造体のメンバ名を含む文字列と,構造体メンバの値を含むAnyオブジェクトで構成されています。
通常の方法でVisiBroker ORBを初期化し,PrintManagerオブジェクトにバインドしたあと,クライアントは次の動作をします。
// Client.C #include "Printer_c.hh" #include "dynany.h" int main(int argc, char* const* argv) { try { // Initialize the ORB. CORBA::ORB_ptr orb = CORBA::ORB_init(argc, argv); DynamicAny::DynAnyFactory_var factory = DynamicAny::DynAnyFactory::_narrow( orb->resolve_initial_references( "DynAnyFactory")); // Get the manager Id PortableServer::ObjectId_var managerId = PortableServer::string_to_ObjectId("PrinterManager"); // Locate an account manager. Give the full POA name // and the servant ID. Printer::PrinterManager_ptr manager = Printer::PrinterManager::_bind( "/serverPoa", managerId); DynamicAny::NameValuePairSeq seq(3); seq.length(3); CORBA::Any strAny,enumAny,floatAny; strAny <<= "String"; enumAny <<= Printer::second; floatAny <<= (CORBA::Float)864.50; CORBA::NameValuePair nvpairs[3]; nvpairs[0].id = CORBA::string_dup("str"); nvpairs[0].value = strAny; nvpairs[1].id = CORBA::string_dup("e"); nvpairs[1].value = enumAny; nvpairs[2].id = CORBA::string_dup("fl"); nvpairs[2].value = floatAny; seq[0] = nvpairs[0]; seq[1] = nvpairs[1]; seq[2] = nvpairs[2]; // Create Dynamic struct DynamicAny::DynStruct_var info = DynamicAny::DynStruct::_narrow( factory->create_dyn_any_from_type_code( Printer::_tc_StructType)); info->set_members(seq); manager->printAny(*(info->to_any())); manager->shutdown(); } catch(const CORBA::Exception& e) { cerr << "Caught " << e << "Exception" << endl; } }
// Client.java import org.omg.DynamicAny.*; public class Client { public static void main(String[ ] args) { try { // Initialize the ORB. org.omg.CORBA.ORB orb = org.omg.CORBA.ORB.init(args, null); DynAnyFactory factory = DynAnyFactoryHelper.narrow( orb.resolve_initial_references("DynAnyFactory")); // Locate a printer manager. Printer.PrinterManager manager = Printer.PrinterManagerHelper.bind(orb, "PrinterManager"); // Create Dynamic struct DynStruct info = DynStructHelper.narrow(factory. create_dyn_any_from_type_code( Printer.StructTypeHelper.type())); // Create our NameValuePair sequence (array) NameValuePair[ ] NVPair = new NameValuePair[3]; // Create and initialize Dynamic Struct data as any's org.omg.CORBA.Any str_any = orb.create_any(); str_any.insert_string("String"); org.omg.CORBA.Any e_any = orb.create_any(); Printer.EnumTypeHelper.insert( e_any, Printer.EnumType.second); org.omg.CORBA.Any fl_any = orb.create_any(); fl_any.insert_float((float)864.50); NVPair[0] = new NameValuePair("str", str_any); NVPair[1] = new NameValuePair("e", e_any); NVPair[2] = new NameValuePair("fl", fl_any); // Initialize the Dynamic Struct info.set_members(NVPair); manager.printAny(info.to_any()); manager.shutdown(); } catch (Exception e){ e.printStackTrace(); } } }
All Rights Reserved. Copyright (C) 2008, Hitachi, Ltd.
COPYRIGHT (C) 1992-2004 Borland Software Corporation. All rights reserved.