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) { . . .