Hitachi

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


17.4.2 send_deferredメソッドを使用して遅延DIIリクエストを送信

オペレーション要求の送信には,応答を待ち続けないメソッドであるsend_deferredも使用できます。このメソッドを使用したクライアントは,リクエストを送信したあと,poll_responseメソッドを使用して応答が返ってきているかどうかを調べることができます。get_responseメソッドは,応答を受信するまで待ちます。コードサンプル17-20にsend_deferredメソッドとpoll_responseメソッドを使用して遅延DIIリクエストを送信する方法(C++),コードサンプル17-21に遅延DIIリクエストを送信する方法(Java)を示します。

コードサンプル17-20 send_deferredメソッドとpoll_responseメソッドを使用して遅延DIIリクエストを送信する(C++)
. . .
try {
   // Create request that will be sent to the manager object
   CORBA::Request_var request = manager->_request("open");
   // Create argument to request
   CORBA::Any customer;
   customer <<= (const char *) name;
   CORBA::NVList_ptr arguments = request->arguments();
   arguments->add_value( "name" , customer, CORBA::ARG_IN );
   // Set result type
   request->set_return_type(CORBA::_tc_Object);
   // Creation of a new account can take some time
   // Execute the deferred request to the manager object
   request->send_deferred();
   VISPortable::vsleep(1);
   while (!request->poll_response()) {
      cout << " Waiting for response..." << endl;
      VISPortable::vsleep(1); // Wait one second between polls
   }
   request->get_response();
   // Get the return value
   CORBA::Object_var account;
   CORBA::Any& open_result = request->return_value();
   open_result >>= CORBA::Any::to_object(account.out());
. . .
}
コードサンプル17-21 send_deferredメソッドとpoll_responseメソッドを使用して遅延DIIリクエストを送信する(Java)
try {
. . .
   // Create request that will be sent to the manager object
   org.omg.CORBA.Request request = manager._request("open");
   // Create argument to request
   org.omg.CORBA.Any customer = orb.create_any();
   customer.insert_string(name);
   org.omg.CORBA.NVList arguments = request.arguments();
   arguments.add_value("name",
                       customer, org.omg.CORBA.ARG_IN.value);
   // Set result type
   request.set_return_type(orb.get_primitive_tc
      (org.omg.CORBA.TCKind.tk_objref));
   // Creation of a new account can take some time
   // Execute the deferred request to the manager 
   // object-plist
   request.send_deferred();
   Thread.currentThread().sleep(1000);
   while (!request.poll_response()) {
      System.out.println(" Waiting for response...");
      Thread.currentThread().sleep(1000);
                             // Wait one second between polls
   }
   request.get_response();
   // Get the return value
   org.omg.CORBA.Object account;
   org.omg.CORBA.Any open_result = request.return_value();
   account = open_result.extract_Object();
   . . .
}catch(Exception e) {
   e.printStackTrace();
}