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(); }