summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordengg <dengg@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2006-04-17 20:15:20 +0000
committerdengg <dengg@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2006-04-17 20:15:20 +0000
commit74145259c53df320a4e14999af16ff13918ec444 (patch)
tree8696bfa7874229d6da0276738092332f2cac5002
parent34874bddac8f586a921eba7b9464be4cf54f2cf4 (diff)
downloadATCD-74145259c53df320a4e14999af16ff13918ec444.tar.gz
merged from lmco_march_demo to washu cvs head.
-rw-r--r--TAO/CIAO/DAnCE/DomainApplicationManager/DomainApplicationManager_Impl.cpp130
-rw-r--r--TAO/CIAO/DAnCE/DomainApplicationManager/DomainApplicationManager_Impl.h9
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.