void Server_Request_Interceptor::receive_request_service_contexts ( PortableInterceptor::ServerRequestInfo_ptr ri) { this->request_count_++; CORBA::Boolean response_expected = ri->response_expected (); if (!response_expected) // A one-way request. return; // Request 1 -- non-forwarded // Request 2 -- forwarded by client request interceptor // Request 3 -- forwarded by this interception point if (this->request_count_ == 3) { // The client request interceptor should have already forwarded // the request to obj_[1], so we re-forward the request back to // obj_[0]. ACE_DEBUG ((LM_DEBUG, "SERVER (%P|%t) Request %d will be forwarded " "to object 1\n" // "object 1" as in "obj_[0]" "SERVER (%P|%t) via " "receive_request_service_contexts().\n", this->request_count_)); throw PortableInterceptor::ForwardRequest (this->obj_[0]); } }
void Server_Request_Interceptor::receive_request ( PortableInterceptor::ServerRequestInfo_ptr ri) { CORBA::Boolean response_expected = ri->response_expected (); if (!response_expected) // A one-way request. return; // Request 1 -- non-forwarded // Request 2 -- forwarded by client request interceptor // Request 3 -- forwarded by receive_request_service_contexts() // Request 4 -- non-forwarded (give client chance to print result) // Request 5 -- forwarded by this interception point // Request 6 -- non-forwarded (request 5 gets forwarded here) // Request 7 -- throw exception to initiate forwarding from sent_exception if (this->request_count_ == 5) { // This interceptor should have already forwarded the request to // obj_[0] so re-forward it to obj_[1]. This will be the last // location forward. ACE_DEBUG ((LM_DEBUG, "SERVER (%P|%t) Request %d will be forwarded " "to object 2\n" // "object 2" as in "obj_[1]" "SERVER (%P|%t) via receive_request().\n", this->request_count_ - 1)); // "request_count_ - 1" is used above since there was a location // forward. throw PortableInterceptor::ForwardRequest (this->obj_[1]); } if (this->request_count_ == 7) { // Throw an exception to force the invocation of send_exception. ACE_DEBUG ((LM_DEBUG, "SERVER (%P|%t) OBJ_NOT_EXIST exception thrown for request %d\n" "SERVER (%P|%t) via receive_request().\n", this->request_count_ - 2)); throw CORBA::OBJECT_NOT_EXIST ( CORBA::SystemException::_tao_minor_code ( TAO::VMCID, EINVAL), CORBA::COMPLETED_NO); } }
void Server_Request_Interceptor::send_other ( PortableInterceptor::ServerRequestInfo_ptr ri) { CORBA::Boolean response_expected = ri->response_expected (); if (!response_expected) // A one-way request. return; // If we get this far then we should have received a // LOCATION_FORWARD reply. // This will throw an exception if a location forward has not // occured. If an exception is thrown then something is wrong with // the PortableInterceptor::ForwardRequest support. CORBA::Object_var forward = ri->forward_reference (); if (CORBA::is_nil (forward.in ())) throw CORBA::INTERNAL (); }
void ServerRequestInterceptor::receive_request ( PortableInterceptor::ServerRequestInfo_ptr ri) { // If no response is expected, then we're invoking the oneway // shutdown operation. Don't bother displaying output a second // time. CORBA::Boolean response_expected = ri->response_expected (); if (!response_expected) return; PortableServer::POA_var poa; try { poa = this->poa_current_->get_POA (); } catch (const PortableServer::Current::NoContext& ex) { ex._tao_print_exception ("ServerRequestInterceptor::receive_request"); throw CORBA::INTERNAL (); } PortableServer::POA_var parent_poa = poa->the_parent (); // Make sure there is more than one POA in the POA hierarchy since // the servant should have been registered with a child POA, not the // RootPOA. ACE_ASSERT (!CORBA::is_nil (parent_poa.in ())); PortableInterceptor::AdapterName_var name = ri->adapter_name (); ACE_DEBUG ((LM_INFO, "POA Hierarchy:\n" "==============\n")); const CORBA::ULong len = name->length (); // Make sure there is more than one AdapterName in the AdapterName // sequence since the servant should have been registered with a // child POA, not the RootPOA. ACE_ASSERT (len > 1); for (CORBA::ULong i = 0; i < len; ++i) { for (CORBA::ULong j = 0; j < i; ++j) ACE_DEBUG ((LM_INFO, "\t")); ACE_DEBUG ((LM_INFO, "%C\n", static_cast<char const*>(name[i]))); } ACE_DEBUG ((LM_INFO, "\n" "==============\n")); // Make sure the name of the RootPOA is the first in the AdapterName // sequence. ACE_ASSERT (ACE_OS::strcmp ("RootPOA", name[(CORBA::ULong) 0]) == 0); CORBA::String_var orb_id = ri->orb_id (); ACE_ASSERT (ACE_OS::strcmp (this->orb_id_.in (), orb_id.in ()) == 0); CORBA::String_var server_id = ri->server_id (); ACE_ASSERT (ACE_OS::strcmp (server_id.in (), "ORT_test_server") == 0); }