コードサンプル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();
}
}
}