summaryrefslogtreecommitdiff
path: root/modules/CIAO/DAnCE/ExecutionManager/ExecutionManager_Impl.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'modules/CIAO/DAnCE/ExecutionManager/ExecutionManager_Impl.cpp')
-rw-r--r--modules/CIAO/DAnCE/ExecutionManager/ExecutionManager_Impl.cpp159
1 files changed, 159 insertions, 0 deletions
diff --git a/modules/CIAO/DAnCE/ExecutionManager/ExecutionManager_Impl.cpp b/modules/CIAO/DAnCE/ExecutionManager/ExecutionManager_Impl.cpp
new file mode 100644
index 00000000000..7e40eabf0fb
--- /dev/null
+++ b/modules/CIAO/DAnCE/ExecutionManager/ExecutionManager_Impl.cpp
@@ -0,0 +1,159 @@
+//--*C++*--
+// $Id$
+
+#include "ExecutionManager_Impl.h"
+#include "ace/Log_Msg.h"
+#include "tools/Config_Handlers/DnC_Dump.h"
+#include "DAnCE/Logger/Log_Macros.h"
+
+
+using namespace DAnCE;
+
+ExecutionManager_Impl::ExecutionManager_Impl (CORBA::ORB_ptr orb,
+ PortableServer::POA_ptr poa,
+ CosNaming::NamingContext_ptr nc)
+ : orb_ (CORBA::ORB::_duplicate (orb)),
+ poa_ (PortableServer::POA::_duplicate (poa)),
+ locator_ (orb, nc)
+{
+ DANCE_TRACE ( "ExecutionManager_Impl::ExecutionManager_Impl");
+}
+
+ExecutionManager_Impl::~ExecutionManager_Impl()
+{
+ DANCE_TRACE ( "ExecutionManager_Impl::~ExecutionManager_Impl");
+ for (TDomainManagers::iterator iter = this->managers_.begin();
+ iter != this->managers_.end();
+ ++iter)
+ {
+ DANCE_DEBUG ((LM_TRACE, DLINFO ACE_TEXT("ExecutionManager_Impl::~ExecutionManager_Impl - ")
+ ACE_TEXT("deactivating DAM \"%C\"\n"), (*iter).ext_id_.c_str()));
+ PortableServer::ObjectId_var id = this->poa_->servant_to_id ( (*iter).int_id_);
+ DANCE_DEBUG ((LM_TRACE, DLINFO ACE_TEXT("ExecutionManager_Impl::~ExecutionManager_Impl - ")
+ ACE_TEXT("before deactivate_object...\n")));
+ this->poa_->deactivate_object (id.in());
+ DANCE_DEBUG ((LM_TRACE, DLINFO ACE_TEXT("ExecutionManager_Impl::~ExecutionManager_Impl - ")
+ ACE_TEXT("deleting DomainApplicationManager\n")));
+ delete (*iter).int_id_;
+ DANCE_DEBUG ((LM_TRACE, DLINFO ACE_TEXT("ExecutionManager_Impl::~ExecutionManager_Impl - ")
+ ACE_TEXT("DomainApplicationManager deleted\n")));
+ }
+}
+
+::Deployment::DomainApplicationManager_ptr
+ExecutionManager_Impl::preparePlan (const ::Deployment::DeploymentPlan & plan,
+ ::Deployment::ResourceCommitmentManager_ptr /*resourceCommitment*/)
+{
+ DANCE_TRACE ( "ExecutionManager_Impl::preparePlan");
+
+ // Check if plan is already deployed.
+ DomainApplicationManager_Impl * dam = 0;
+ if (0 == this->managers_.find (plan.UUID.in(), dam))
+ {
+ DANCE_DEBUG((LM_NOTICE, DLINFO ACE_TEXT("ExecutionManager_Impl::preparePlan - ")
+ ACE_TEXT("DomainApplicationManager with specified UUID already exists\n")));
+ // Should we return on this situation reference on existed DomainApplicationManager or
+ // we should throw PlanError exception?
+ CORBA::Object_var ref = this->poa_->servant_to_reference (dam);
+ return Deployment::DomainApplicationManager::_narrow (ref.in ());
+ }
+
+ DomainApplicationManager_Impl* dam_servant = 0;
+ ACE_NEW_THROW_EX (dam_servant,
+ DAnCE::DomainApplicationManager_Impl (this->orb_.in (),
+ this->poa_.in (),
+ plan,
+ this->locator_),
+ CORBA::NO_MEMORY ());
+ this->managers_.rebind (plan.UUID.in(), dam_servant);
+ DANCE_DEBUG((LM_TRACE, DLINFO ACE_TEXT("ExecutionManager_Impl::preparePlan - ")
+ ACE_TEXT("Domain Application Manager was successfully created.\n")));
+
+ PortableServer::ObjectId_var id = this->poa_->activate_object (dam_servant);
+
+ DANCE_DEBUG((LM_NOTICE, DLINFO ACE_TEXT("ExecutionManager_Impl::preparePlan - ")
+ ACE_TEXT("Plan with UUID %C was successfully prepared.\n"),
+ plan.UUID.in ()));
+
+ CORBA::Object_var ref = this->poa_->id_to_reference (id.in());
+ return Deployment::DomainApplicationManager::_narrow (ref.in ());
+}
+
+::Deployment::DomainApplicationManagers *
+ExecutionManager_Impl::getManagers ()
+{
+ DANCE_TRACE ( "ExecutionManager_Impl::getManagers ()");
+
+ ::Deployment::DomainApplicationManagers * managers = 0;
+ ACE_NEW_THROW_EX (managers,
+ ::Deployment::DomainApplicationManagers(),
+ CORBA::NO_MEMORY());
+
+ managers->length (this->managers_.current_size());
+ unsigned int index = 0;
+ for (TDomainManagers::iterator iter = this->managers_.begin();
+ iter != this->managers_.end();
+ ++iter)
+ {
+ CORBA::Object_var ref = this->poa_->servant_to_reference ( (*iter).int_id_);
+ (*managers) [index]
+ = Deployment::DomainApplicationManager::_narrow (ref.in ());
+ ++index;
+ }
+
+ return managers;
+}
+
+void
+ExecutionManager_Impl::destroyManager (::Deployment::DomainApplicationManager_ptr appManager)
+{
+ DANCE_DEBUG((LM_DEBUG, DLINFO ACE_TEXT("ExecutionManager_Impl::destroyManager - started\n")));
+
+ for (TDomainManagers::iterator iter = this->managers_.begin();
+ iter != this->managers_.end();
+ ++iter)
+ {
+ CORBA::Object_var app = this->poa_->servant_to_reference ( (*iter).int_id_);
+ if (appManager->_is_equivalent (app.in ()))
+ {
+ this->managers_.unbind ( (*iter).ext_id_);
+ PortableServer::ObjectId_var id = this->poa_->reference_to_id (appManager);
+ this->poa_->deactivate_object (id.in());
+ DANCE_DEBUG((LM_INFO, DLINFO ACE_TEXT("ExecutionManager_Impl::destroyManager - deleting DomainApplicationManager\n")));
+ delete (*iter).int_id_;
+ (*iter).int_id_ = 0;
+ DANCE_DEBUG((LM_INFO, DLINFO ACE_TEXT("ExecutionManager_Impl::destroyManager - DomainApplicationManager deleted\n")));
+ //this->managers_.unbind ( (*iter).ext_id_);
+ DANCE_DEBUG((LM_INFO, DLINFO ACE_TEXT("ExecutionManager_Impl::destroyManager - finished\n")));
+ return;
+ }
+ }
+ DANCE_ERROR ((LM_ERROR, DLINFO ACE_TEXT("ExecutionManager_Impl::destroyManager - ")
+ ACE_TEXT("corresponding DomainApplicationManager cannot be found\n")));
+ throw ::Deployment::StopError();
+}
+
+// This one derived from ExecutionManagerDaemon interface
+// for shutdowning DAnCE agent
+void
+ExecutionManager_Impl::shutdown ()
+{
+ DANCE_TRACE ("ExecutionManager_Impl::shutdown");
+ this->orb_->shutdown();
+}
+
+
+void
+ExecutionManager_Impl::add_node_manager (const ACE_TCHAR *name,
+ const ACE_TCHAR *ior)
+{
+ DANCE_TRACE ("ExecutionManager_Impl::add_node_manager");
+ this->locator_.store_ior (name, ior);
+}
+
+void
+ExecutionManager_Impl::load_node_map (const ACE_TCHAR *filename)
+{
+ DANCE_TRACE ("ExecutionManager_Impl::add_node_manager");
+ this->locator_.process_node_map (filename);
+}