summaryrefslogtreecommitdiff
path: root/modules/CIAO/DAnCE/DomainApplication/Domain_Application_Impl.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'modules/CIAO/DAnCE/DomainApplication/Domain_Application_Impl.cpp')
-rw-r--r--modules/CIAO/DAnCE/DomainApplication/Domain_Application_Impl.cpp828
1 files changed, 828 insertions, 0 deletions
diff --git a/modules/CIAO/DAnCE/DomainApplication/Domain_Application_Impl.cpp b/modules/CIAO/DAnCE/DomainApplication/Domain_Application_Impl.cpp
new file mode 100644
index 00000000000..1613d1ea36b
--- /dev/null
+++ b/modules/CIAO/DAnCE/DomainApplication/Domain_Application_Impl.cpp
@@ -0,0 +1,828 @@
+// $Id$
+
+#include "Domain_Application_Impl.h"
+#include "DAnCE/Logger/Log_Macros.h"
+
+namespace DAnCE
+{
+ DomainApplication_Impl::DomainApplication_Impl (
+ const char* plan_uuid,
+ PortableServer::POA_ptr poa,
+ TNam2Nm & nams,
+ TNm2Id& node_ids)
+ : poa_ (PortableServer::POA::_duplicate (poa)),
+ planUUID_ (plan_uuid),
+ nams_ (nams),
+ node_ids_ (node_ids)
+ {
+ DANCE_TRACE("DomainApplication_Impl::DomainApplication_Impl");
+ }
+
+ DomainApplication_Impl::~DomainApplication_Impl()
+ {
+ DANCE_TRACE ("DomainApplication_Impl::~DomainApplication_Impl()");
+
+ this->node_applications_.unbind_all();
+ }
+
+ void
+ DomainApplication_Impl::finishLaunch (::Deployment::AMH_ApplicationResponseHandler_ptr _tao_rh,
+ const ::Deployment::Connections & connections,
+ CORBA::Boolean start)
+ {
+ DANCE_TRACE ("DomainApplication_Impl::finishLaunch");
+
+ try
+ {
+ DANCE_DEBUG (9, (LM_DEBUG, DLINFO ACE_TEXT("DomainApplication_impl::finishLaunch - ")
+ ACE_TEXT("Plan %C DomainApplication[%@] : %u applications to finish launching\n"),
+ this->planUUID_.c_str (),
+ this,
+ this->node_applications_.current_size ()));
+
+ // create completion counter
+ DA_NA_ReplyHandlerImpl::Counter* _cp = 0;
+ ACE_NEW_THROW_EX (_cp,
+ DA_NA_ReplyHandlerImpl::Counter (node_applications_.current_size (),
+ this,
+ _tao_rh),
+ CORBA::NO_MEMORY ());
+ DA_NA_ReplyHandlerImpl::Counter_AutoPtr _counter_ptr (_cp);
+
+ for (TApp2Mgr::iterator iter = this->node_applications_.begin();
+ iter != this->node_applications_.end();
+ ++iter)
+ {
+ ACE_CString node_id;
+ this->app_node_ids_.find ((*iter).ext_id_, node_id);
+ try
+ {
+ // create and activate reply handler
+ DA_NA_ReplyHandlerImpl* da_na_rh_servant = 0;
+ ACE_NEW_THROW_EX (da_na_rh_servant,
+ DA_NA_ReplyHandlerImpl (this,
+ node_id.c_str (),
+ _counter_ptr),
+ CORBA::NO_MEMORY ());
+
+ PortableServer::ObjectId_var id = this->poa_->activate_object (da_na_rh_servant);
+
+ CORBA::Object_var ref = this->poa_->id_to_reference (id.in());
+
+ ::Deployment::AMI_ApplicationHandler_var da_na_handler =
+ ::Deployment::AMI_ApplicationHandler::_narrow (ref.in ());
+
+ DANCE_DEBUG (6, (LM_TRACE, DLINFO ACE_TEXT("DomainApplication_Impl::finishLaunch - ")
+ ACE_TEXT("Plan %C DomainApplication[%@] node %C : ")
+ ACE_TEXT("calling finishLaunch on a node application\n"),
+ this->planUUID_.c_str (),
+ this,
+ node_id.c_str ()));
+
+ (*iter).ext_id_->sendc_finishLaunch (da_na_handler.in (),
+ connections,
+ start);
+
+ DANCE_DEBUG (9, (LM_TRACE, DLINFO ACE_TEXT("DomainApplication_Impl::finishLaunch - ")
+ ACE_TEXT("finishLaunch has been called on a node application\n")));
+ }
+ catch (CORBA::Exception& ex)
+ {
+ DANCE_ERROR (1, (LM_ERROR, DLINFO
+ ACE_TEXT("DomainApplication_Impl::finishLaunch - ")
+ ACE_TEXT("DomainApplication[%@] caught a CORBA exception handling node %C : %C\n"),
+ this,
+ node_id.c_str (),
+ ex._info ().c_str ()));
+ // mark failure
+ _counter_ptr->increment_fail_count ();
+ // mark off node
+ _counter_ptr->decrement_exec_count ();
+ // continue for next node
+ }
+ catch (...)
+ {
+ DANCE_ERROR (1, (LM_ERROR, DLINFO
+ ACE_TEXT("DomainApplication_Impl::finishLaunch - ")
+ ACE_TEXT("DomainApplication[%@] caught a unknown exception handling node %C\n"),
+ this,
+ node_id.c_str ()));
+ // mark failure
+ _counter_ptr->increment_fail_count ();
+ // mark off node
+ _counter_ptr->decrement_exec_count ();
+ // continue for next node
+ }
+ }
+ }
+ catch (CORBA::Exception& ex)
+ {
+ CORBA::Exception* local_ex = ex._tao_duplicate ();
+ ::Deployment::AMH_ApplicationExceptionHolder amh_exholder (local_ex);
+ _tao_rh->finishLaunch_excep (&amh_exholder);
+ }
+ catch (...)
+ {
+ DANCE_ERROR (1, (LM_ERROR, DLINFO
+ ACE_TEXT("DomainApplication_Impl::finishLaunch - ")
+ ACE_TEXT("Propagating StartError for unknown exception caught here\n")));
+ CORBA::Exception* start_ex = new Deployment::StartError();
+ ::Deployment::AMH_ApplicationExceptionHolder amh_exholder (start_ex);
+ _tao_rh->finishLaunch_excep (&amh_exholder);
+ }
+ }
+
+ void
+ DomainApplication_Impl::start (::Deployment::AMH_ApplicationResponseHandler_ptr _tao_rh)
+ {
+ DANCE_TRACE ("DomainApplication_Impl::start");
+ try
+ {
+ DANCE_DEBUG (9, (LM_DEBUG, DLINFO ACE_TEXT("DomainApplication_impl::start - ")
+ ACE_TEXT("Plan %C DomainApplication[%@] : %u applications to start\n"),
+ this->planUUID_.c_str (),
+ this,
+ this->node_applications_.current_size ()));
+
+ // create completion counter
+ DA_NA_ReplyHandlerImpl::Counter* _cp = 0;
+ ACE_NEW_THROW_EX (_cp,
+ DA_NA_ReplyHandlerImpl::Counter (node_applications_.current_size (),
+ this,
+ _tao_rh),
+ CORBA::NO_MEMORY ());
+ DA_NA_ReplyHandlerImpl::Counter_AutoPtr _counter_ptr (_cp);
+
+ for (TApp2Mgr::iterator iter = this->node_applications_.begin();
+ iter != this->node_applications_.end();
+ ++iter)
+ {
+ ACE_CString node_id;
+ this->app_node_ids_.find ((*iter).ext_id_, node_id);
+
+ try
+ {
+ // create and activate reply handler
+ DA_NA_ReplyHandlerImpl* da_na_rh_servant = 0;
+ ACE_NEW_THROW_EX (da_na_rh_servant,
+ DAnCE::DA_NA_ReplyHandlerImpl (this,
+ node_id.c_str (),
+ _counter_ptr),
+ CORBA::NO_MEMORY ());
+
+ PortableServer::ObjectId_var id = this->poa_->activate_object (da_na_rh_servant);
+
+ CORBA::Object_var ref = this->poa_->id_to_reference (id.in());
+
+ ::Deployment::AMI_ApplicationHandler_var da_na_handler =
+ ::Deployment::AMI_ApplicationHandler::_narrow (ref.in ());
+
+ DANCE_DEBUG (6, (LM_TRACE, DLINFO ACE_TEXT("DomainApplication_Impl::start - ")
+ ACE_TEXT("Plan %C DomainApplication[%@] node %C : ")
+ ACE_TEXT("calling start on a node application\n"),
+ this->planUUID_.c_str (),
+ this,
+ node_id.c_str ()));
+
+ (*iter).ext_id_->sendc_start (da_na_handler.in ());
+
+ DANCE_DEBUG (9, (LM_TRACE, DLINFO ACE_TEXT("DomainApplication_Impl::start - ")
+ ACE_TEXT("start has been called on an application\n")));
+ }
+ catch (CORBA::Exception& ex)
+ {
+ DANCE_ERROR (1, (LM_ERROR, DLINFO
+ ACE_TEXT("DomainApplication_Impl::start - ")
+ ACE_TEXT("DomainApplication[%@] caught a CORBA exception handling node %C : %C\n"),
+ this,
+ node_id.c_str (),
+ ex._info ().c_str ()));
+ // mark failure
+ _counter_ptr->increment_fail_count ();
+ // mark off node
+ _counter_ptr->decrement_exec_count ();
+ // continue for next node
+ }
+ catch (...)
+ {
+ DANCE_ERROR (1, (LM_ERROR, DLINFO
+ ACE_TEXT("DomainApplication_Impl::start - ")
+ ACE_TEXT("DomainApplication[%@] caught a unknown exception handling node %C\n"),
+ this,
+ node_id.c_str ()));
+ // mark failure
+ _counter_ptr->increment_fail_count ();
+ // mark off node
+ _counter_ptr->decrement_exec_count ();
+ // continue for next node
+ }
+ }
+ }
+ catch (CORBA::Exception& ex)
+ {
+ CORBA::Exception* local_ex = ex._tao_duplicate ();
+ ::Deployment::AMH_ApplicationExceptionHolder amh_exholder (local_ex);
+ _tao_rh->start_excep (&amh_exholder);
+ }
+ catch (...)
+ {
+ DANCE_ERROR (1, (LM_ERROR, DLINFO
+ ACE_TEXT("DomainApplication_Impl::start - ")
+ ACE_TEXT("Propagating StartError for unknown exception caught here\n")));
+ CORBA::Exception* start_ex = new Deployment::StartError();
+ ::Deployment::AMH_ApplicationExceptionHolder amh_exholder (start_ex);
+ _tao_rh->start_excep (&amh_exholder);
+ }
+ }
+
+ void
+ DomainApplication_Impl::startLaunch (
+ const Deployment::Properties & configProperty,
+ DA_CompletionHandler* completion_handler)
+ {
+ DANCE_TRACE ("DomainApplication_Impl::startLaunch");
+
+ DA_CompletionHandler_AutoPtr _ch_ptr (completion_handler); // manage handler
+
+ DANCE_DEBUG (9, (LM_TRACE, DLINFO ACE_TEXT("DomainApplication_Impl::startLaunch - ")
+ ACE_TEXT("Plan %C DomainApplication[%@] : %u nodes to launch\n"),
+ this->planUUID_.c_str (),
+ this,
+ nams_.current_size ()));
+
+ // create completion counter
+ DA_NAM_ReplyHandlerImpl::Counter* _cp = 0;
+ ACE_NEW_THROW_EX (_cp,
+ DA_NAM_ReplyHandlerImpl::Counter (nams_.current_size (),
+ this,
+ _ch_ptr),
+ CORBA::NO_MEMORY ());
+ DA_NAM_ReplyHandlerImpl::Counter_AutoPtr _counter_ptr (_cp);
+
+ for (TNam2Nm::iterator iter = this->nams_.begin();
+ iter != this->nams_.end();
+ ++iter)
+ {
+ ACE_CString node_id;
+ this->node_ids_.find ((*iter).int_id_, node_id);
+
+ try
+ {
+ // create and activate reply handler
+ DA_NAM_ReplyHandlerImpl* da_nam_rh_servant = 0;
+ ACE_NEW_THROW_EX (da_nam_rh_servant,
+ DA_NAM_ReplyHandlerImpl (this,
+ (*iter).ext_id_,
+ node_id.c_str (),
+ _counter_ptr),
+ CORBA::NO_MEMORY ());
+
+ PortableServer::ObjectId_var id = this->poa_->activate_object (da_nam_rh_servant);
+
+ CORBA::Object_var ref = this->poa_->id_to_reference (id.in());
+
+ ::Deployment::AMI_NodeApplicationManagerHandler_var da_nam_handler =
+ ::Deployment::AMI_NodeApplicationManagerHandler::_narrow (ref.in ());
+
+ DANCE_DEBUG (6, (LM_TRACE, DLINFO ACE_TEXT("DomainApplication_Impl::startLaunch - ")
+ ACE_TEXT("Plan %C DomainApplication[%@] : ")
+ ACE_TEXT("calling startLaunch on node application manager for node %C\n"),
+ this->planUUID_.c_str (),
+ this,
+ node_id.c_str ()));
+
+ (*iter).ext_id_->sendc_startLaunch (da_nam_handler.in (),
+ configProperty);
+
+ DANCE_DEBUG (9, (LM_TRACE, DLINFO ACE_TEXT("DomainApplication_Impl::startLaunch - ")
+ ACE_TEXT("startLaunch has been called on an application\n")));
+ }
+ catch (CORBA::Exception& ex)
+ {
+ DANCE_ERROR (1, (LM_ERROR, DLINFO
+ ACE_TEXT("DomainApplication_Impl::startLaunch - ")
+ ACE_TEXT("DomainApplication[%@] caught a CORBA exception handling node %C : %C\n"),
+ this,
+ node_id.c_str (),
+ ex._info ().c_str ()));
+ // mark failure
+ _counter_ptr->increment_fail_count ();
+ // mark off node
+ _counter_ptr->decrement_exec_count ();
+ // continue for next node
+ }
+ catch (...)
+ {
+ DANCE_ERROR (1, (LM_ERROR, DLINFO
+ ACE_TEXT("DomainApplication_Impl::startLaunch - ")
+ ACE_TEXT("DomainApplication[%@] caught a unknown exception handling node %C\n"),
+ this,
+ node_id.c_str ()));
+ // mark failure
+ _counter_ptr->increment_fail_count ();
+ // mark off node
+ _counter_ptr->decrement_exec_count ();
+ // continue for next node
+ }
+ }
+ }
+
+ void
+ DomainApplication_Impl::destroyApplication (
+ const DA_CompletionHandler_AutoPtr& _ch_ptr)
+ {
+ DANCE_TRACE ("DomainApplication_Impl::destroyApplication");
+
+ DANCE_DEBUG (9, (LM_TRACE, DLINFO ACE_TEXT("DomainApplication_Impl::destroyApplication - ")
+ ACE_TEXT("Plan %C DomainApplication[%@] : %u node applications to destroy\n"),
+ this->planUUID_.c_str (),
+ this,
+ this->node_applications_.current_size ()));
+
+ // create completion counter
+ DA_NAM_ReplyHandlerImpl::Counter* _cp = 0;
+ ACE_NEW_THROW_EX (_cp,
+ DA_NAM_ReplyHandlerImpl::Counter (this->node_applications_.current_size (),
+ this,
+ _ch_ptr),
+ CORBA::NO_MEMORY ());
+ DA_NAM_ReplyHandlerImpl::Counter_AutoPtr _counter_ptr (_cp);
+
+ for (TApp2Mgr::iterator iter = this->node_applications_.begin();
+ iter != this->node_applications_.end();
+ ++iter)
+ {
+ ACE_CString node_id;
+ this->app_node_ids_.find ((*iter).ext_id_, node_id);
+
+ try
+ {
+ // create and activate reply handler
+ DA_NAM_ReplyHandlerImpl* da_nam_rh_servant = 0;
+ ACE_NEW_THROW_EX (da_nam_rh_servant,
+ DAnCE::DA_NAM_ReplyHandlerImpl (this,
+ (*iter).int_id_,
+ node_id.c_str (),
+ _counter_ptr),
+ CORBA::NO_MEMORY ());
+
+ PortableServer::ObjectId_var id = this->poa_->activate_object (da_nam_rh_servant);
+
+ CORBA::Object_var ref = this->poa_->id_to_reference (id.in());
+
+ ::Deployment::AMI_NodeApplicationManagerHandler_var da_nam_handler =
+ ::Deployment::AMI_NodeApplicationManagerHandler::_narrow (ref.in ());
+
+ DANCE_DEBUG (6, (LM_TRACE, DLINFO ACE_TEXT("DomainApplication_Impl::destroyApplication - ")
+ ACE_TEXT("Plan %C DomainApplication[%@] : ")
+ ACE_TEXT("calling destroyApplication on node application manager for node %C\n"),
+ this->planUUID_.c_str (),
+ this,
+ node_id.c_str ()));
+
+ (*iter).int_id_->sendc_destroyApplication (da_nam_handler.in (),
+ (*iter).ext_id_.in());
+
+ DANCE_DEBUG (9, (LM_TRACE, DLINFO ACE_TEXT("DomainApplication_Impl::destroyApplication - ")
+ ACE_TEXT("destroyApplication has been called on node application manager\n")));
+ }
+ catch (CORBA::Exception& ex)
+ {
+ DANCE_ERROR (1, (LM_ERROR, DLINFO
+ ACE_TEXT("DomainApplication_Impl::destroyApplication - ")
+ ACE_TEXT("DomainApplication[%@] caught a CORBA exception handling node %C : %C\n"),
+ this,
+ node_id.c_str (),
+ ex._info ().c_str ()));
+ // mark failure
+ _counter_ptr->increment_fail_count ();
+ // mark off node
+ _counter_ptr->decrement_exec_count ();
+ // continue for next node
+ }
+ catch (...)
+ {
+ DANCE_ERROR (1, (LM_ERROR, DLINFO
+ ACE_TEXT("DomainApplication_Impl::destroyApplication - ")
+ ACE_TEXT("DomainApplication[%@] caught a unknown exception handling node %C\n"),
+ this,
+ node_id.c_str ()));
+ // mark failure
+ _counter_ptr->increment_fail_count ();
+ // mark off node
+ _counter_ptr->decrement_exec_count ();
+ // continue for next node
+ }
+ }
+
+ DANCE_DEBUG (9, (LM_TRACE, DLINFO ACE_TEXT("DomainApplication_Impl::destroyApplication - finished\n")));
+ }
+
+ void
+ DomainApplication_Impl::getConnections (Deployment::Connections& conn)
+ {
+ conn = this->connections_;
+ }
+
+ const char*
+ DomainApplication_Impl::getPlanUUID (void)
+ {
+ return this->planUUID_.c_str ();
+ }
+
+ DA_NAM_ReplyHandlerImpl::Counter::Counter (
+ unsigned int exec_count,
+ DomainApplication_Impl* da_servant,
+ const DA_CompletionHandler_AutoPtr& dam_completion_handler)
+ : Completion_Counter_Base<ACE_Null_Mutex> (exec_count, 0),
+ da_servant_ (DomainApplication_Impl_var::_duplicate (da_servant)),
+ dam_ch_ptr_ (dam_completion_handler)
+ {
+ }
+
+ void
+ DA_NAM_ReplyHandlerImpl::Counter::on_all_completed ()
+ {
+ DANCE_DEBUG (6, (LM_DEBUG, DLINFO
+ ACE_TEXT("DA_NAM_ReplyHandlerImpl::Counter::on_all_completed - ")
+ ACE_TEXT("Plan %C DomainApplication[%@] successfully finished all nodes\n"),
+ this->da_servant_->getPlanUUID (),
+ this->da_servant_.in ()));
+
+ this->dam_ch_ptr_->handle_completion (da_servant_.in ());
+ }
+
+ void
+ DA_NAM_ReplyHandlerImpl::Counter::on_all_completed_with_failure ()
+ {
+ DANCE_ERROR (1, (LM_ERROR, DLINFO
+ ACE_TEXT("DA_NAM_ReplyHandlerImpl::Counter::on_all_completed_with_failure - ")
+ ACE_TEXT("Plan %C DomainApplication[%@] : %u errors from nodemanagers\n"),
+ this->da_servant_->getPlanUUID (),
+ this->da_servant_.in (),
+ this->fail_count ()));
+
+ this->dam_ch_ptr_->handle_exception (new Deployment::StartError());
+ }
+
+ DA_NAM_ReplyHandlerImpl::DA_NAM_ReplyHandlerImpl (
+ DomainApplication_Impl* da_servant,
+ ::Deployment::NodeApplicationManager_ptr nam,
+ const char* node_id,
+ const Counter_AutoPtr& counter)
+ : da_servant_ (DomainApplication_Impl_var::_duplicate (da_servant)),
+ node_id_ (node_id),
+ nam_ (::Deployment::NodeApplicationManager::_duplicate (nam)),
+ counter_ (counter)
+ {
+ }
+
+ void
+ DA_NAM_ReplyHandlerImpl::startLaunch (
+ ::Deployment::Application_ptr na,
+ const ::Deployment::Connections & conn)
+ {
+ DANCE_DEBUG (9, (LM_TRACE, DLINFO ACE_TEXT("DA_NAM_ReplyHandlerImpl::startLaunch called.\n")));
+
+ if (CORBA::is_nil (na))
+ {
+ DANCE_ERROR (1, (LM_ERROR, DLINFO
+ ACE_TEXT("DA_NAM_ReplyHandlerImpl::startLaunch -")
+ ACE_TEXT("Plan %C DomainApplication[%@] node %C startLaunch returned nil object reference.\n"),
+ this->da_servant_->getPlanUUID (),
+ this->da_servant_.in (),
+ this->node_id_.c_str ()));
+
+ this->counter_->increment_fail_count ();
+ }
+ else
+ {
+ DANCE_DEBUG (6, (LM_TRACE, DLINFO
+ ACE_TEXT("DA_NAM_ReplyHandlerImpl::startLaunch - ")
+ ACE_TEXT("Plan %C DomainApplication[%@] node %C startLaunch succeeded, ")
+ ACE_TEXT("received %u connections\n"),
+ this->da_servant_->getPlanUUID (),
+ this->da_servant_.in (),
+ this->node_id_.c_str (),
+ conn.length ()));
+
+ this->da_servant_->node_applications_.bind (
+ ::Deployment::Application::_duplicate (na),
+ ::Deployment::NodeApplicationManager::_duplicate (this->nam_.in ()));
+ this->da_servant_->app_node_ids_.bind (
+ ::Deployment::Application::_duplicate (na),
+ this->node_id_);
+
+ CORBA::ULong const before = this->da_servant_->connections_.length();
+ this->da_servant_->connections_.length (before + conn.length());
+ for (CORBA::ULong i = 0; i < conn.length(); ++i)
+ {
+ this->da_servant_->connections_[before+i] = conn[i];
+ }
+ }
+
+ // mark off one node
+ this->counter_->decrement_exec_count ();
+
+ // deactivate AMI response handler
+ PortableServer::ObjectId_var oid = this->da_servant_->poa_->servant_to_id (this);
+ this->da_servant_->poa_->deactivate_object (oid.in ());
+ }
+ void
+ DA_NAM_ReplyHandlerImpl::startLaunch_excep (
+ ::Messaging::ExceptionHolder * excep_holder)
+ {
+ DANCE_DEBUG (9, (LM_TRACE, DLINFO ACE_TEXT("DA_NAM_ReplyHandlerImpl::startLaunch_excep called")));
+
+ try
+ {
+ excep_holder->raise_exception ();
+ }
+ catch (Deployment::StartError &)
+ {
+ DANCE_ERROR (1, (LM_ERROR, DLINFO
+ ACE_TEXT("DA_NAM_ReplyHandlerImpl::startLaunch_excep - ")
+ ACE_TEXT("Plan %C DomainApplication[%@] node %C : StartError exception caught.\n"),
+ this->da_servant_->getPlanUUID (),
+ this->da_servant_.in (),
+ this->node_id_.c_str ()));
+ }
+ catch (CORBA::Exception &ex)
+ {
+ DANCE_ERROR (1, (LM_ERROR, DLINFO
+ ACE_TEXT("DA_NAM_ReplyHandlerImpl::startLaunch_excep - ")
+ ACE_TEXT("Plan %C DomainApplication[%@] node %C : Caught a CORBA exception: %C\n"),
+ this->da_servant_->getPlanUUID (),
+ this->da_servant_.in (),
+ this->node_id_.c_str (),
+ ex._info ().c_str ()));
+ }
+ catch (...)
+ {
+ DANCE_ERROR (1, (LM_ERROR, DLINFO
+ ACE_TEXT("DA_NAM_ReplyHandlerImpl::startLaunch_excep - ")
+ ACE_TEXT("Plan %C DomainApplication[%@] node %C : Caught unknown exception.\n"),
+ this->da_servant_->getPlanUUID (),
+ this->da_servant_.in (),
+ this->node_id_.c_str ()));
+ }
+
+ // add failure
+ this->counter_->increment_fail_count ();
+
+ // mark off node
+ this->counter_->decrement_exec_count ();
+
+ // deactivate AMI response handler
+ PortableServer::ObjectId_var oid = this->da_servant_->poa_->servant_to_id (this);
+ this->da_servant_->poa_->deactivate_object (oid.in ());
+ }
+
+ void
+ DA_NAM_ReplyHandlerImpl::destroyApplication (void)
+ {
+ DANCE_DEBUG (9, (LM_TRACE, DLINFO ACE_TEXT("DA_NAM_ReplyHandlerImpl::destroyApplication called.\n")));
+
+ DANCE_DEBUG (9, (LM_TRACE, DLINFO
+ ACE_TEXT("DA_NAM_ReplyHandlerImpl::destroyApplication - ")
+ ACE_TEXT("Plan %C DomainApplication[%@] node %C : Node application destroy succeeded\n"),
+ this->da_servant_->getPlanUUID (),
+ this->da_servant_.in (),
+ this->node_id_.c_str ()));
+
+ // mark off one application
+ this->counter_->decrement_exec_count ();
+
+ // deactivate AMI response handler
+ PortableServer::ObjectId_var oid = this->da_servant_->poa_->servant_to_id (this);
+ this->da_servant_->poa_->deactivate_object (oid.in ());
+ }
+ void
+ DA_NAM_ReplyHandlerImpl::destroyApplication_excep (
+ ::Messaging::ExceptionHolder * excep_holder)
+ {
+ DANCE_DEBUG (9, (LM_TRACE, DLINFO ACE_TEXT("DA_NAM_ReplyHandlerImpl::destroyApplication_excep called\n")));
+
+ try
+ {
+ excep_holder->raise_exception ();
+ }
+ catch (Deployment::StopError &)
+ {
+ DANCE_ERROR (1, (LM_ERROR, DLINFO
+ ACE_TEXT("DA_NAM_ReplyHandlerImpl::destroyApplication_excep - ")
+ ACE_TEXT("Plan %C DomainApplication[%@] node %C : StopError exception caught.\n"),
+ this->da_servant_->planUUID_.c_str (),
+ this->da_servant_.in (),
+ this->node_id_.c_str ()));
+ }
+ catch (CORBA::Exception &ex)
+ {
+ DANCE_ERROR (1, (LM_ERROR, DLINFO
+ ACE_TEXT("DA_NAM_ReplyHandlerImpl::destroyApplication_excep - ")
+ ACE_TEXT("Plan %C DomainApplication[%@] node %C : Caught a CORBA exception: %C\n"),
+ this->da_servant_->planUUID_.c_str (),
+ this->da_servant_.in (),
+ this->node_id_.c_str (),
+ ex._info ().c_str ()));
+ }
+ catch (...)
+ {
+ DANCE_ERROR (1, (LM_ERROR, DLINFO
+ ACE_TEXT("DA_NAM_ReplyHandlerImpl::destroyApplication_excep - ")
+ ACE_TEXT("Plan %C DomainApplication[%@] node %C : Caught unknown exception.\n"),
+ this->da_servant_->planUUID_.c_str (),
+ this->da_servant_.in (),
+ this->node_id_.c_str ()));
+ }
+
+ // add failure
+ this->counter_->increment_fail_count ();
+
+ // mark off application
+ this->counter_->decrement_exec_count ();
+
+ // deactivate AMI response handler
+ PortableServer::ObjectId_var oid = this->da_servant_->poa_->servant_to_id (this);
+ this->da_servant_->poa_->deactivate_object (oid.in ());
+ }
+
+ DA_NA_ReplyHandlerImpl::Counter::Counter (
+ unsigned int exec_count,
+ DomainApplication_Impl* da_servant,
+ ::Deployment::AMH_ApplicationResponseHandler_ptr _tao_rh)
+ : Completion_Counter_Base<ACE_Null_Mutex> (exec_count, 0),
+ da_servant_ (DomainApplication_Impl_var::_duplicate (da_servant)),
+ da_rh_ (::Deployment::AMH_ApplicationResponseHandler::_duplicate (_tao_rh))
+ {
+ }
+
+ void
+ DA_NA_ReplyHandlerImpl::Counter::on_all_completed ()
+ {
+ DANCE_DEBUG (6, (LM_DEBUG, DLINFO
+ ACE_TEXT("DA_NA_ReplyHandlerImpl::finishLaunch - ")
+ ACE_TEXT("Plan %C DomainApplication[%@] : Successfully finished all nodes\n"),
+ this->da_servant_->getPlanUUID (),
+ this->da_servant_.in ()));
+
+ this->da_rh_->finishLaunch ();
+ }
+
+ void
+ DA_NA_ReplyHandlerImpl::Counter::on_all_completed_with_failure ()
+ {
+ DANCE_ERROR (1, (LM_ERROR, DLINFO
+ ACE_TEXT("DA_NA_ReplyHandlerImpl::Counter::on_all_completed_with_failure - ")
+ ACE_TEXT("Plan %C DomainApplication[%@] : %u errors from node applications\n"),
+ this->da_servant_->getPlanUUID (),
+ this->da_servant_.in (),
+ this->fail_count ()));
+
+ CORBA::Exception* start_ex = new Deployment::StartError();
+ ::Deployment::AMH_ApplicationExceptionHolder amh_exholder (start_ex);
+ this->da_rh_->finishLaunch_excep (&amh_exholder);
+ }
+
+ DA_NA_ReplyHandlerImpl::DA_NA_ReplyHandlerImpl (
+ DomainApplication_Impl* da_servant,
+ const char* node_id,
+ const Counter_AutoPtr& counter)
+ : da_servant_ (DomainApplication_Impl_var::_duplicate (da_servant)),
+ node_id_ (node_id),
+ counter_ (counter)
+ {
+ }
+
+ void DA_NA_ReplyHandlerImpl::finishLaunch ()
+ {
+ DANCE_DEBUG (9, (LM_TRACE, DLINFO ACE_TEXT("DA_NA_ReplyHandlerImpl::finishLaunch - ")
+ ACE_TEXT("Plan %C DomainApplication[%@] node %C.\n"),
+ this->da_servant_->planUUID_.c_str (),
+ this->da_servant_.in (),
+ this->node_id_.c_str ()));
+
+ // mark off one node
+ this->counter_->decrement_exec_count ();
+
+ // deactivate AMI response handler
+ PortableServer::ObjectId_var oid = this->da_servant_->poa_->servant_to_id (this);
+ this->da_servant_->poa_->deactivate_object (oid.in ());
+ }
+
+ void DA_NA_ReplyHandlerImpl::finishLaunch_excep (
+ ::Messaging::ExceptionHolder * excep_holder)
+ {
+ DANCE_DEBUG (9, (LM_TRACE, DLINFO ACE_TEXT("DA_NA_ReplyHandlerImpl::finishLaunch_excep called")));
+
+ try
+ {
+ excep_holder->raise_exception ();
+ }
+ catch (Deployment::StartError &)
+ {
+ DANCE_ERROR (1, (LM_ERROR, DLINFO
+ ACE_TEXT("DA_NA_ReplyHandlerImpl::finishLaunch_excep - ")
+ ACE_TEXT("Plan %C DomainApplication[%@] node %C : StartError exception caught.\n"),
+ this->da_servant_->planUUID_.c_str (),
+ this->da_servant_.in (),
+ this->node_id_.c_str ()));
+ }
+ catch (CORBA::Exception &ex)
+ {
+ DANCE_ERROR (1, (LM_ERROR, DLINFO
+ ACE_TEXT("DA_NA_ReplyHandlerImpl::finishLaunch_excep - ")
+ ACE_TEXT("Plan %C DomainApplication[%@] node %C : Caught a CORBA exception: %C\n"),
+ this->da_servant_->planUUID_.c_str (),
+ this->da_servant_.in (),
+ this->node_id_.c_str (),
+ ex._info ().c_str ()));
+ }
+ catch (...)
+ {
+ DANCE_ERROR (1, (LM_ERROR, DLINFO
+ ACE_TEXT("DA_NA_ReplyHandlerImpl::finishLaunch_excep - ")
+ ACE_TEXT("Plan %C DomainApplication[%@] node %C : Caught unknown exception.\n"),
+ this->da_servant_->planUUID_.c_str (),
+ this->da_servant_.in (),
+ this->node_id_.c_str ()));
+ }
+
+ // add failure
+ this->counter_->increment_fail_count ();
+
+ // mark off node
+ this->counter_->decrement_exec_count ();
+
+ // deactivate AMI response handler
+ PortableServer::ObjectId_var oid = this->da_servant_->poa_->servant_to_id (this);
+ this->da_servant_->poa_->deactivate_object (oid.in ());
+ }
+
+ void DA_NA_ReplyHandlerImpl::start (void)
+ {
+ DANCE_DEBUG (9, (LM_TRACE, DLINFO ACE_TEXT("DA_NA_ReplyHandlerImpl::start - ")
+ ACE_TEXT("Plan %C DomainApplication[%@] node %C.\n"),
+ this->da_servant_->planUUID_.c_str (),
+ this->da_servant_.in (),
+ this->node_id_.c_str ()));
+
+ // mark off one node
+ this->counter_->decrement_exec_count ();
+
+ // deactivate AMI response handler
+ PortableServer::ObjectId_var oid = this->da_servant_->poa_->servant_to_id (this);
+ this->da_servant_->poa_->deactivate_object (oid.in ());
+ }
+
+ void DA_NA_ReplyHandlerImpl::start_excep (
+ ::Messaging::ExceptionHolder * excep_holder)
+ {
+ DANCE_DEBUG (9, (LM_TRACE, DLINFO ACE_TEXT("DA_NA_ReplyHandlerImpl::start_excep called")));
+
+ try
+ {
+ excep_holder->raise_exception ();
+ }
+ catch (Deployment::StartError &)
+ {
+ DANCE_ERROR (1, (LM_ERROR, DLINFO
+ ACE_TEXT("DA_NA_ReplyHandlerImpl::start_excep - ")
+ ACE_TEXT("Plan %C DomainApplication[%@] node %C : StartError exception caught.\n"),
+ this->da_servant_->planUUID_.c_str (),
+ this->da_servant_.in (),
+ this->node_id_.c_str ()));
+ }
+ catch (CORBA::Exception &ex)
+ {
+ DANCE_ERROR (1, (LM_ERROR, DLINFO
+ ACE_TEXT("DA_NA_ReplyHandlerImpl::start_excep - ")
+ ACE_TEXT("Plan %C DomainApplication[%@] node %C : Caught a CORBA exception: %C\n"),
+ this->da_servant_->planUUID_.c_str (),
+ this->da_servant_.in (),
+ this->node_id_.c_str (),
+ ex._info ().c_str ()));
+ }
+ catch (...)
+ {
+ DANCE_ERROR (1, (LM_ERROR, DLINFO
+ ACE_TEXT("DA_NA_ReplyHandlerImpl::start_excep - ")
+ ACE_TEXT("Plan %C DomainApplication[%@] node %C : Caught unknown exception.\n"),
+ this->da_servant_->planUUID_.c_str (),
+ this->da_servant_.in (),
+ this->node_id_.c_str ()));
+ }
+
+ // add failure
+ this->counter_->increment_fail_count ();
+
+ // mark off node
+ this->counter_->decrement_exec_count ();
+
+ // deactivate AMI response handler
+ PortableServer::ObjectId_var oid = this->da_servant_->poa_->servant_to_id (this);
+ this->da_servant_->poa_->deactivate_object (oid.in ());
+ }
+
+} // DAnCE
+