int ACE_TMAIN(int argc, ACE_TCHAR *argv[]) { // We may want this to be alive beyond the next block. PortableServer::Servant_var<Heartbeat_Application> app; try { // Initialize ORB and POA, POA Manager, parse args. CORBA::ORB_var orb = CORBA::ORB_init (argc, argv); if (parse_args (argc, argv) == -1) return 1; CORBA::Object_var obj = orb->resolve_initial_references ("RootPOA"); PortableServer::POA_var poa = PortableServer::POA::_narrow (obj.in ()); if (check_for_nil (poa.in (), "POA") == -1) return 1; PortableServer::POAManager_var manager = poa->the_POAManager (); // Obtain reference to EC. obj = orb->resolve_initial_references ("Event_Service"); RtecEventChannelAdmin::EventChannel_var ec = RtecEventChannelAdmin::EventChannel::_narrow (obj.in ()); if (check_for_nil (ec.in (), "EC") == -1) return 1; // Init our application. app = new Heartbeat_Application; if (!app.in ()) return 1; app->init (orb, ec); // Allow processing of CORBA requests. manager->activate (); // Receive events from EC. orb->run (); } catch (const CORBA::Exception& ex) { ex._tao_print_exception ("Exception in Heartbeat Application:"); // Since there was an exception, application might not have had // a chance to shutdown. app->shutdown (); return 1; } return 0; }
int ACE_TMAIN(int argc, ACE_TCHAR *argv[]) { try { // ORB. CORBA::ORB_var orb = CORBA::ORB_init (argc, argv); // Parse arguments. if (parse_args (argc, argv) != 0) return -1; // RootPOA. CORBA::Object_var object = orb->resolve_initial_references("RootPOA"); PortableServer::POA_var root_poa = PortableServer::POA::_narrow (object.in ()); if (check_for_nil (root_poa.in (), "RootPOA") == -1) return -1; // POAManager. PortableServer::POAManager_var poa_manager = root_poa->the_POAManager (); // Servant. Test_i server_impl (orb.in ()); // Create Object. int result; result = create_object (root_poa.in (), orb.in (), &server_impl, ior_output_file); if (result == -1) return -1; // Run ORB Event loop. poa_manager->activate (); orb->run (); ACE_DEBUG ((LM_DEBUG, "Server ORB event loop finished\n")); } catch (const CORBA::Exception& ex) { ex._tao_print_exception ( "Unexpected exception caught in Explicit_Binding test server:"); return -1; } return 0; }
CORBA::Short check_policy (Test_ptr server) { CORBA::Policy_var policy = server->_get_policy (RTCORBA::PRIORITY_MODEL_POLICY_TYPE); RTCORBA::PriorityModelPolicy_var priority_policy = RTCORBA::PriorityModelPolicy::_narrow (policy.in ()); if (check_for_nil (priority_policy.in (), "PriorityModelPolicy") == -1) return -1; RTCORBA::PriorityModel priority_model = priority_policy->priority_model (); if (priority_model != RTCORBA::SERVER_DECLARED) ACE_ERROR_RETURN ((LM_ERROR, "ERROR: priority_model != " "RTCORBA::SERVER_DECLARED!\n"), -1); return priority_policy->server_priority (); }
//Check if the policy of object is set to server declared CORBA::Short check_sd_policy (Test_ptr server ACE_ENV_ARG_DECL) { CORBA::Policy_var policy = server->_get_policy (RTCORBA::PRIORITY_MODEL_POLICY_TYPE ACE_ENV_ARG_PARAMETER); ACE_CHECK_RETURN (-1); RTCORBA::PriorityModelPolicy_var priority_policy = RTCORBA::PriorityModelPolicy::_narrow (policy.in () ACE_ENV_ARG_PARAMETER); ACE_CHECK_RETURN (-1); if (check_for_nil (priority_policy.in (), "PriorityModelPolicy") == -1) return -1; RTCORBA::PriorityModel priority_model = priority_policy->priority_model (ACE_ENV_SINGLE_ARG_PARAMETER); ACE_CHECK_RETURN (-1); if (priority_model != RTCORBA::SERVER_DECLARED) ACE_ERROR_RETURN ((LM_ERROR, "ERROR: priority_model != " "RTCORBA::SERVER_DECLARED!\n"), -1); return priority_policy->server_priority (ACE_ENV_SINGLE_ARG_PARAMETER); }
int Worker_Thread::svc (void) { try { // RTORB. CORBA::Object_var object = this->orb_->resolve_initial_references ("RTORB"); RTCORBA::RTORB_var rt_orb = RTCORBA::RTORB::_narrow (object.in ()); if (check_for_nil (rt_orb.in (), "RTORB") == -1) return 0; // PolicyCurrent. object = this->orb_->resolve_initial_references ("PolicyCurrent"); CORBA::PolicyCurrent_var policy_current = CORBA::PolicyCurrent::_narrow (object.in ()); if (check_for_nil (policy_current.in (), "PolicyCurrent") == -1) return 0; object = this->orb_->resolve_initial_references ("RTCurrent"); RTCORBA::Current_var current = RTCORBA::Current::_narrow (object.in ()); // We need to set the client thread CORBA priority current->the_priority (get_implicit_thread_CORBA_priority (this->orb_)); // Set ClientProtocolPolicy override on the Current. RTCORBA::ProtocolList protocols; protocols.length (1); protocols[0].protocol_type = this->protocol_type_; protocols[0].transport_protocol_properties = RTCORBA::ProtocolProperties::_nil (); protocols[0].orb_protocol_properties = RTCORBA::ProtocolProperties::_nil (); CORBA::PolicyList policy_list; policy_list.length (1); policy_list[0] = rt_orb->create_client_protocol_policy (protocols); policy_current->set_policy_overrides (policy_list, CORBA::SET_OVERRIDE); // Wait for other threads. this->synchronizer_->wait (); for (int i = 0; i < iterations; ++i) { // Invoke method. this->server_->test_method (); } } catch (const CORBA::Exception& ex) { ex._tao_print_exception ("Worker Thread exception:"); } return 0; }
int Task::svc (void) { try { // Priority Mapping Manager. CORBA::Object_var object = this->orb_->resolve_initial_references ("PriorityMappingManager"); RTCORBA::PriorityMappingManager_var mapping_manager = RTCORBA::PriorityMappingManager::_narrow (object.in ()); if (check_for_nil (mapping_manager.in (), "Mapping Manager") == -1) return -1; RTCORBA::PriorityMapping *pm = mapping_manager->mapping (); // RTCurrent. object = this->orb_->resolve_initial_references ("RTCurrent"); RTCORBA::Current_var current = RTCORBA::Current::_narrow (object.in ()); if (check_for_nil (current.in (), "RTCurrent") == -1) return -1; // Obtain Test object reference. object = this->orb_->string_to_object (ior); Test_var server = Test::_narrow (object.in ()); if (check_for_nil (server.in (), "Test object") == -1) return -1; // Check that test object is configured with CLIENT_PROPAGATED // PriorityModelPolicy. CORBA::Policy_var policy = server->_get_policy (RTCORBA::PRIORITY_MODEL_POLICY_TYPE); RTCORBA::PriorityModelPolicy_var priority_policy = RTCORBA::PriorityModelPolicy::_narrow (policy.in ()); if (check_for_nil (priority_policy.in (), "PriorityModelPolicy") == -1) return -1; RTCORBA::PriorityModel priority_model = priority_policy->priority_model (); if (priority_model != RTCORBA::CLIENT_PROPAGATED) ACE_ERROR_RETURN ((LM_ERROR, "ERROR: priority_model != " "RTCORBA::CLIENT_PROPAGATED!\n"), -1); // Spawn two worker threads. ACE_Barrier thread_barrier (2); int flags = THR_NEW_LWP | THR_JOINABLE | this->orb_->orb_core ()->orb_params ()->thread_creation_flags (); // Worker 1. Worker_Thread worker1 (this->orb_.in (), server.in (), protocol1, &thread_barrier); CORBA::Short native_priority1 = 0; if (pm->to_native (priority1, native_priority1) == 0) ACE_ERROR_RETURN ((LM_ERROR, "Cannot convert corba priority %d to native priority\n", priority1), -1); if (worker1.activate (flags, 1, 0, native_priority1) != 0) ACE_ERROR_RETURN ((LM_ERROR, "Cannot activate first client worker threads\n"), -1); // Worker 2. Worker_Thread worker2 (this->orb_.in (), server.in (), protocol2, &thread_barrier); CORBA::Short native_priority2 = 0; if (pm->to_native (priority2, native_priority2) == 0) ACE_ERROR_RETURN ((LM_ERROR, "Cannot convert corba priority %d to native priority\n", priority2), -1); if (worker2.activate (flags, 1, 0, native_priority2) != 0) ACE_ERROR_RETURN ((LM_ERROR, "Cannot activate second client worker threads\n"), -1); // Wait for worker threads to finish. ACE_Thread_Manager::instance ()->wait (); // Testing over. Shut down the server. ACE_DEBUG ((LM_DEBUG, "Client threads finished\n")); current->the_priority (priority1); server->shutdown (); } catch (const CORBA::Exception& ex) { ex._tao_print_exception ( "Unexpected exception in MT_Client_Protocol_Priority test client:"); return -1; } return 0; }
int ACE_TMAIN(int argc, ACE_TCHAR *argv[]) { try { // Initialize the ORB, resolve references and parse arguments. // ORB. CORBA::ORB_var orb = CORBA::ORB_init (argc, argv); // Parse arguments. if (parse_args (argc, argv) != 0) return -1; // Test object 1. CORBA::Object_var object = orb->string_to_object (ior1); Test_var server1 = Test::_narrow (object.in ()); if (check_for_nil (server1.in (), "server1") == -1) return -1; // Test object 2. object = orb->string_to_object (ior2); Test_var server2 = Test::_narrow (object.in ()); if (check_for_nil (server2.in (), "server2") == -1) return -1; // Check that test objects are configured with SERVER_DECLARED // PriorityModelPolicy, and get their server priorities. // Test object 1. CORBA::Short server1_priority = check_policy (server1.in ()); if (server1_priority == -1) return -1; // Test object 2. CORBA::Short server2_priority = check_policy (server2.in ()); if (server2_priority == -1) return -1; // Testing: make several invocations on test objects. for (int i = 0; i < 5; ++i) { server1->test_method (server1_priority); server2->test_method (server2_priority); } // Testing over. Shut down Server ORB. server1->shutdown (); } catch (const CORBA::Exception& ex) { ex._tao_print_exception ( "Unexpected exception in Server_Declared test client:"); return -1; } return 0; }
int Task::svc (void) { try { // RTORB. CORBA::Object_var object = this->orb_->resolve_initial_references ("RTORB"); RTCORBA::RTORB_var rt_orb = RTCORBA::RTORB::_narrow (object.in ()); if (check_for_nil (rt_orb.in (), "RTORB") == -1) return -1; // RootPOA. object = this->orb_->resolve_initial_references("RootPOA"); PortableServer::POA_var root_poa = PortableServer::POA::_narrow (object.in ()); if (check_for_nil (root_poa.in (), "RootPOA") == -1) return -1; // POAManager. PortableServer::POAManager_var poa_manager = root_poa->the_POAManager (); // Create child POA with SERVER_DECLARED PriorityModelPolicy, // and MULTIPLE_ID id uniqueness policy (so we can use one // servant to create several objects). CORBA::PolicyList poa_policy_list; poa_policy_list.length (2); poa_policy_list[0] = rt_orb->create_priority_model_policy (RTCORBA::SERVER_DECLARED, poa_priority); poa_policy_list[1] = root_poa->create_id_uniqueness_policy (PortableServer::MULTIPLE_ID); PortableServer::POA_var child_poa = root_poa->create_POA ("Child_POA", poa_manager.in (), poa_policy_list); RTPortableServer::POA_var rt_poa = RTPortableServer::POA::_narrow (child_poa.in ()); if (check_for_nil (rt_poa.in (), "RTPOA") == -1) return -1; // Servant. Test_i server_impl (this->orb_.in ()); // Create object 1 (it will inherit POA's priority). int result; ACE_DEBUG ((LM_DEBUG, "\nActivated object one as ")); result = create_object (rt_poa.in (), this->orb_.in (), &server_impl, -1, ior_output_file1); if (result == -1) return -1; // Create object 2 (override POA's priority). ACE_DEBUG ((LM_DEBUG, "\nActivated object two as ")); result = create_object (rt_poa.in (), this->orb_.in (), &server_impl, object_priority, ior_output_file2); if (result == -1) return -1; // Activate POA manager. poa_manager->activate (); // Start ORB event loop. this->orb_->run (); ACE_DEBUG ((LM_DEBUG, "Server ORB event loop finished\n\n")); } catch (const CORBA::Exception& ex) { ex._tao_print_exception ( "Unexpected exception caught in Server_Declared test server:"); return -1; } return 0; }
int ACE_TMAIN(int argc, ACE_TCHAR *argv[]) { try { // Initialize ORB and POA, POA Manager, parse args. CORBA::ORB_var orb = CORBA::ORB_init (argc, argv); if (parse_args (argc, argv) == -1) return 1; CORBA::Object_var obj = orb->resolve_initial_references ("RootPOA"); PortableServer::POA_var poa = PortableServer::POA::_narrow (obj.in ()); if (check_for_nil (poa.in (), "POA") == -1) return 1; PortableServer::POAManager_var manager = poa->the_POAManager (); // Obtain reference to EC. obj = orb->resolve_initial_references ("Event_Service"); RtecEventChannelAdmin::EventChannel_var ec = RtecEventChannelAdmin::EventChannel::_narrow (obj.in ()); if (check_for_nil (ec.in (), "EC") == -1) return 1; // Create the consumer and register it with POA. PortableServer::Servant_var<EC_Consumer> consumer_impl = new EC_Consumer (orb, ec); if (!consumer_impl.in ()) return -1; RtecEventComm::PushConsumer_var consumer; TAO_EC_Object_Deactivator consumer_deactivator; activate (consumer, poa.in (), consumer_impl.in (), consumer_deactivator); consumer_deactivator.disallow_deactivation (); // Obtain reference to ConsumerAdmin. RtecEventChannelAdmin::ConsumerAdmin_var consumer_admin = ec->for_consumers (); // Obtain ProxyPushSupplier and connect this consumer. RtecEventChannelAdmin::ProxyPushSupplier_var supplier = consumer_admin->obtain_push_supplier (); ACE_ConsumerQOS_Factory qos; qos.start_disjunction_group (3); qos.insert_type (A_EVENT_TYPE, 0); qos.insert_type (B_EVENT_TYPE, 0); qos.insert_type (C_EVENT_TYPE, 0); supplier->connect_push_consumer (consumer.in (), qos.get_ConsumerQOS ()); // Allow processing of CORBA requests. manager->activate (); // Receive events from EC. orb->run (); } catch (const CORBA::Exception& ex) { ex._tao_print_exception ("Exception in Consumer:"); return 1; } return 0; }
int ACE_TMAIN(int argc, ACE_TCHAR *argv[]) { try { // Initialize the ORB, resolve references and parse arguments. // ORB. CORBA::ORB_var orb = CORBA::ORB_init (argc, argv); // Parse arguments. if (parse_args (argc, argv) != 0) return -1; // RTORB. CORBA::Object_var object = orb->resolve_initial_references ("RTORB"); RTCORBA::RTORB_var rt_orb = RTCORBA::RTORB::_narrow (object.in ()); if (check_for_nil (rt_orb.in (), "RTORB") == -1) return -1; // PolicyCurrent. object = orb->resolve_initial_references ("PolicyCurrent"); CORBA::PolicyCurrent_var policy_current = CORBA::PolicyCurrent::_narrow (object.in ()); if (check_for_nil (policy_current.in (), "PolicyCurrent") == -1) return -1; // Test object 1. object = orb->string_to_object (ior1); Test_var server1 = Test::_narrow (object.in ()); if (check_for_nil (server1.in (), "server1") == -1) return -1; // Test object 2. object = orb->string_to_object (ior2); Test_var server2 = Test::_narrow (object.in ()); if (check_for_nil (server2.in (), "server2") == -1) return -1; // Make four invocations on test objects. Expected: connection // established on the first invocation, and reused in the // following three. ACE_DEBUG ((LM_DEBUG, "\n Invocation 1 --> new connection\n")); server1->test_method (); ACE_DEBUG ((LM_DEBUG, "\n Invocation 2 --> use connection from invocation 1\n")); server2->test_method (); ACE_DEBUG ((LM_DEBUG, "\n Invocation 3 --> use connection from invocation 1\n")); server1->test_method (); ACE_DEBUG ((LM_DEBUG, "\n Invocation 4 --> use connection from invocation 1\n")); server2->test_method (); // Set RTCORBA::PrivateConnectionPolicy on PolicyCurrent. CORBA::PolicyList policy_list; policy_list.length (1); policy_list[0] = rt_orb->create_private_connection_policy (); policy_current->set_policy_overrides (policy_list, CORBA::SET_OVERRIDE); // Make four invocations on test objects again. This time, // since RTCORBA::PrivateConnectionPolicy is set, we expect a // connection to be established for <server1> during the first // invocation, a connection to be established for <server2> during // the second invocation, <server1>'s connection reused on // third, and <server2>'s reused on fourth. ACE_DEBUG ((LM_DEBUG, "\n Invocation 5 --> new connection\n")); server1->test_method (); ACE_DEBUG ((LM_DEBUG, "\n Invocation 6 --> new connection\n")); server2->test_method (); ACE_DEBUG ((LM_DEBUG, "\n Invocation 7 --> use connection from invocation 5\n")); server1->test_method (); ACE_DEBUG ((LM_DEBUG, "\n Invocation 8 --> use connection from invocation 6\n")); server2->test_method (); // Testing over. Shut down Server ORB. ACE_DEBUG ((LM_DEBUG, "\n Testing over - shutting down\n")); server1->shutdown (); } catch (const CORBA::Exception& ex) { ex._tao_print_exception ( "Unexpected exception caught in Private_Connection test client:"); return -1; } return 0; }