Hitachi

VisiBroker Version 5 Borland(R) Enterprise Server VisiBroker(R) デベロッパーズガイド


17.4.4 複数のリクエストを送信

Requestオブジェクトの配列を使用すると,DII Requestオブジェクトのシーケンスを生成できます。リクエストのシーケンスを送信するには,VisiBroker ORBメソッドのsend_multiple_requests_onewayかsend_multiple_requests_deferredを使用します。リクエストのシーケンスを一方向リクエストとして送信した場合,どのリクエストにもサーバからの応答は期待できません。

C++の場合,コードサンプル17-22に,二つのリクエストがどのように生成され,リクエストのシーケンスを生成するためにどのように使用されるかを示します。シーケンスは,send_multiple_requests_deferredメソッドによって送信されます。

コードサンプル17-22 send_multiple_requests_deferredメソッドによる複数の遅延リクエストの送信(C++)
. . .
// Create request to balance
try {
   req1 = account->_request("balance");
   // Create argument to request
   customer1 <<= (const char *) "Happy";
   CORBA::NVList_ptr arguments = req1->arguments();
   arguments->add_value("customer", customer1, CORBA::ARG_IN);
   // Set result
   . . .
} catch(const CORBA::Exception& excep) {
   cout << "Error while creating request" << endl;
   cout << excep << endl;
}
// Create request2 to slowBalance
try {
   req2 = account->_request("slowBalance");
   // Create argument to request
   customer2 <<= (const char *) "Sleepy";
   CORBA::NVList_ptr arguments = req2->arguments();
   arguments->add_value("customer", customer2, CORBA::ARG_IN);
   // Set result
   . . .
}catch(const CORBA::Exception& excep) {
   cout << "Error while creating request" << endl;
   cout << excep << endl;
}
// Create request sequence
CORBA::Request_ptr reqs[2];
reqs[0] = (CORBA::Request*) req1;
reqs[1] = (CORBA::Request*) req2;
CORBA::RequestSeq reqseq((CORBA::ULong)2, 2,
      (CORBA::Request_ptr *)reqs);
// Send the request
try {
   orb->send_multiple_requests_deferred(reqseq);
   cout << "Send multiple deferred calls are made..." << endl;
} catch(const CORBA::Exception& excep) {
. . .