diff options
author | dengg <dengg@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2006-04-17 20:15:20 +0000 |
---|---|---|
committer | dengg <dengg@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2006-04-17 20:15:20 +0000 |
commit | 74145259c53df320a4e14999af16ff13918ec444 (patch) | |
tree | 8696bfa7874229d6da0276738092332f2cac5002 | |
parent | 34874bddac8f586a921eba7b9464be4cf54f2cf4 (diff) | |
download | ATCD-74145259c53df320a4e14999af16ff13918ec444.tar.gz |
merged from lmco_march_demo to washu cvs head.
-rw-r--r-- | TAO/CIAO/DAnCE/DomainApplicationManager/DomainApplicationManager_Impl.cpp | 130 | ||||
-rw-r--r-- | TAO/CIAO/DAnCE/DomainApplicationManager/DomainApplicationManager_Impl.h | 9 |
2 files changed, 120 insertions, 19 deletions
diff --git a/TAO/CIAO/DAnCE/DomainApplicationManager/DomainApplicationManager_Impl.cpp b/TAO/CIAO/DAnCE/DomainApplicationManager/DomainApplicationManager_Impl.cpp index 01fb98210b6..0a501d506df 100644 --- a/TAO/CIAO/DAnCE/DomainApplicationManager/DomainApplicationManager_Impl.cpp +++ b/TAO/CIAO/DAnCE/DomainApplicationManager/DomainApplicationManager_Impl.cpp @@ -6,7 +6,6 @@ #include "ace/Null_Mutex.h" #include "ace/OS_NS_string.h" #include "ace/SString.h" -#include "ace/Assert.h" #if !defined (__ACE_INLINE__) # include "DomainApplicationManager_Impl.inl" @@ -640,6 +639,12 @@ startLaunch (const ::Deployment::Properties & configProperty, this->synchronize_shared_components_with_node_managers (); } + ACE_CATCH (Deployment::StartError,ex) + { + ACE_DEBUG ((LM_DEBUG, "DAM_Impl:StartError: %s, %s\n", + ex.name.in (), + ex.reason.in ())); + } ACE_CATCHANY { ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION, @@ -698,7 +703,7 @@ install_all_es (void) // Invoke install_es () operation on each cached NodeApplication object. ::Deployment::NodeApplication_ptr my_na = (entry->int_id_).node_application_.in (); - + ::Deployment::CIAO_Event_Services_var event_services = my_na->install_es (es_infos); @@ -909,7 +914,9 @@ finishLaunch (CORBA::Boolean start, // Invoke finishLaunch() operation on NodeApplication. if (unnecessary_connections->length () != 0) { - ACE_ASSERT (!CORBA::is_nil (entry->int_id_.node_application_.in ())); + if (CORBA::is_nil (entry->int_id_.node_application_.in ())) + throw Deployment::StartError (); + entry->int_id_.node_application_->finishLaunch (*unnecessary_connections, start, @@ -940,6 +947,12 @@ finishLaunch (CORBA::Boolean start, // Establish bindings on external/shared components of this deployment plan. this->post_finishLaunch (); } + ACE_CATCH (Deployment::StartError, ex) + { + ACE_ERROR ((LM_ERROR, "DAM_Impl::finishLaunch - StartError: %s, %s\n", + ex.name.in (), + ex.reason.in ())); + } ACE_CATCHANY { ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION, @@ -1420,22 +1433,22 @@ handle_direct_connection ( endpoint_inst.c_str ()) == 0 && ACE_OS::strcmp (curr_recv_conn.portName.in (), endpoint_port.c_str ()) == 0) - { - retv.length (len+1); - retv[len].instanceName = instname; - retv[len].portName = source_port.c_str (); - retv[len].endpointInstanceName = endpoint_inst.c_str (); - retv[len].endpointPortName = endpoint_port.c_str (); - - retv[len].endpoint = + { + retv.length (len+1); + retv[len].instanceName = instname; + retv[len].portName = source_port.c_str (); + retv[len].endpointInstanceName = endpoint_inst.c_str (); + retv[len].endpointPortName = endpoint_port.c_str (); + + retv[len].endpoint = CORBA::Object::_duplicate(curr_recv_conn.endpoint.in ()); - retv[len].kind = binding.internalEndpoint[i].kind; + retv[len].kind = binding.internalEndpoint[i].kind; - ++len; - found = true; - break; - } - } // End of searching received connections + ++len; + found = true; + break; + } + } // End of searching received connections // We didnt find the objref of the connection ... if (!found) @@ -1450,7 +1463,7 @@ handle_direct_connection ( false); } break; - } + } } return true; } @@ -1578,6 +1591,9 @@ destroyApplication (ACE_ENV_SINGLE_ARG_DECL) CIAO_TRACE("CIAO::DomainApplicationManager_Impl::destroyApplication"); ACE_TRY { + // Passivate shared components also, which should delegate to EM to handle + this->passivate_shared_components (); + // Passivate all components associated with the plan for (CORBA::ULong i = 0; i < this->num_child_plans_; ++i) { @@ -1602,6 +1618,8 @@ destroyApplication (ACE_ENV_SINGLE_ARG_DECL) ("DomainApplicationManager_Impl::destroyApplication", error.c_str ())); } + ACE_DEBUG ((LM_DEBUG, "DAM_Impl: Invoking passivate on %s\n", + this->node_manager_names_[i].c_str ())); // Invoke ciao_passivate () operation on each cached NodeApplication object. ::Deployment::NodeApplication_ptr my_na = @@ -1620,7 +1638,7 @@ destroyApplication (ACE_ENV_SINGLE_ARG_DECL) Deployment::Connections_var connections = this->get_outgoing_connections ( (entry->int_id_).child_plan_.in (), - true, // yes, get *all* the connections + true, // yes, get *all* the connections true, // yes, we search the current plan DomainApplicationManager_Impl::External_Connections ACE_ENV_ARG_PARAMETER); @@ -1689,6 +1707,8 @@ destroyApplication (ACE_ENV_SINGLE_ARG_DECL) // to clean up all the NodeApplicationManagers associated with this deployment // plan (one NodeApplicationManager per Node per plan). + // We should again activate those shared components + this->activate_shared_components (); } ACE_CATCHANY { @@ -1949,6 +1969,78 @@ subtract_connections (const Deployment::Connections & left, void CIAO::DomainApplicationManager_Impl:: +passivate_shared_components (void) + ACE_THROW_SPEC ((CORBA::SystemException, + Deployment::StartError)) +{ + ACE_TRY + { + // For each "external" component... + CORBA::ULong length = this->shared_->length (); + for (CORBA::ULong j = 0; j < length; ++j) + { + // Construct <Component_Binding_Info> struct for the component + CIAO::Component_Binding_Info * + binding = this->populate_binding_info ( + this->shared_[j].name.in (), + this->shared_[j].plan_uuid.in ()); + + // Invoke <finalize_global_binding> on ExecutionManager + this->execution_manager_->passivate_shared_components ( + *binding); + + delete binding; + } + } + ACE_CATCHANY + { + ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION, + "DomainApplicationManager_Impl::passivate_shared_components.\n"); + ACE_RE_THROW; + } + ACE_ENDTRY; + + ACE_CHECK; +} + +void +CIAO::DomainApplicationManager_Impl:: +activate_shared_components (void) + ACE_THROW_SPEC ((CORBA::SystemException, + Deployment::StartError)) +{ + ACE_TRY + { + // For each "external" component... + CORBA::ULong length = this->shared_->length (); + for (CORBA::ULong j = 0; j < length; ++j) + { + // Construct <Component_Binding_Info> struct for the component + CIAO::Component_Binding_Info * + binding = this->populate_binding_info ( + this->shared_[j].name.in (), + this->shared_[j].plan_uuid.in ()); + + // Invoke <finalize_global_binding> on ExecutionManager + this->execution_manager_->activate_shared_components ( + *binding); + + delete binding; + } + } + ACE_CATCHANY + { + ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION, + "DomainApplicationManager_Impl::activate_shared_components.\n"); + ACE_RE_THROW; + } + ACE_ENDTRY; + + ACE_CHECK; +} + +void +CIAO::DomainApplicationManager_Impl:: purge_connections (Deployment::Connections_var & connections, const char * inst) { diff --git a/TAO/CIAO/DAnCE/DomainApplicationManager/DomainApplicationManager_Impl.h b/TAO/CIAO/DAnCE/DomainApplicationManager/DomainApplicationManager_Impl.h index a97baa4fa1a..49e52ee7d37 100644 --- a/TAO/CIAO/DAnCE/DomainApplicationManager/DomainApplicationManager_Impl.h +++ b/TAO/CIAO/DAnCE/DomainApplicationManager/DomainApplicationManager_Impl.h @@ -189,6 +189,15 @@ namespace CIAO ACE_THROW_SPEC ((CORBA::SystemException, Deployment::StartError)); + virtual void passivate_shared_components (void) + ACE_THROW_SPEC ((CORBA::SystemException, + Deployment::StartError)); + + virtual void activate_shared_components (void) + ACE_THROW_SPEC ((CORBA::SystemException, + Deployment::StartError)); + + /** * Starts the application. Raises the StartError exception if * starting the application fails. |