17.3.6 Requestオブジェクトの生成例
Requestオブジェクトはオペレーション,引数,および結果に対応するすべてのメモリの所有権を保持し,プログラマがそれらの項目を解放しないようにします。コードサンプル17-7にRequestオブジェクトの生成例(C++),コードサンプル17-8にRequestオブジェクトの生成例(Java)を示します。
- コードサンプル17-7 Requestオブジェクトを生成する(C++)
. . . CORBA::NamedValue_ptr result; CORBA::Any_ptr resultAny; CORBA::Request_var req; CORBA::Any customer; . . . try { req = account->_request("balance"); // Create argument to request customer <<= (const char *) name; CORBA::NVList_ptr arguments = req->arguments(); arguments->add_value("customer", customer, CORBA::ARG_IN); // Set result result = req->result(); resultAny = result->value(); resultAny->replace(CORBA::_tc_float, &result); } catch(CORBA::Exception& excep) { . . .
- コードサンプル17-8 Requestオブジェクトを生成する(Java)
// Client.java public class Client { public static void main(String[ ] args) { if (args.length ! = 2) { System.out.println( "Usage: vbj Client <manager-name> <account-name>\n"); return; } String managerName = args[0]; String accountName = args[1]; org.omg.CORBA.Object accountManager, account; org.omg.CORBA.ORB orb = org.omg.CORBA.ORB.init(args, null); accountManager = orb.bind("IDL:Bank/AccountManager:1.0", managerName, null, null); org.omg.CORBA.Request request = accountManager._request("open"); request.add_in_arg().insert_string(accountName); request.set_return_type(orb.get_primitive_tc( org.omg.CORBA.TCKind.tk_objref) ); request.invoke(); account = request.result().value().extract_Object(); org.omg.CORBA.Request request = account._request("balance"); request.set_return_type(orb.get_primitive_tc( org.omg.CORBA.TCKind.tk_float) ); request.invoke(); float balance = request.result().value().extract_float(); System.out.println("The balance in " + accountName + "'s account is $" + balance); } }