summaryrefslogtreecommitdiff
path: root/TAO/CIAO/DAnCE/Plan_Launcher/Plan_Launcher_Impl.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'TAO/CIAO/DAnCE/Plan_Launcher/Plan_Launcher_Impl.cpp')
-rw-r--r--TAO/CIAO/DAnCE/Plan_Launcher/Plan_Launcher_Impl.cpp232
1 files changed, 157 insertions, 75 deletions
diff --git a/TAO/CIAO/DAnCE/Plan_Launcher/Plan_Launcher_Impl.cpp b/TAO/CIAO/DAnCE/Plan_Launcher/Plan_Launcher_Impl.cpp
index 8e66ff17a7e..7f5aa59ceda 100644
--- a/TAO/CIAO/DAnCE/Plan_Launcher/Plan_Launcher_Impl.cpp
+++ b/TAO/CIAO/DAnCE/Plan_Launcher/Plan_Launcher_Impl.cpp
@@ -10,7 +10,7 @@ namespace CIAO
{
namespace Plan_Launcher
{
-
+
static CORBA::Object_ptr
fetch_reference_naming (CORBA::ORB_ptr orb
ACE_ENV_ARG_DECL)
@@ -19,19 +19,17 @@ namespace CIAO
orb->resolve_initial_references ("NameService"
ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
-
+
CosNaming::NamingContext_var pns =
CosNaming::NamingContext::_narrow (tmp.in ()
ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
-
- CosNaming::Name name (2);
- name.length (2);
+
+ CosNaming::Name name (1);
+ name.length (1);
name[0].id =
- CORBA::string_dup ("CIAO");
- name[1].id =
CORBA::string_dup ("ExecutionManager");
-
+
return pns->resolve (name
ACE_ENV_ARG_PARAMETER);
}
@@ -40,13 +38,13 @@ namespace CIAO
: em_ ()
{
}
-
+
bool
Plan_Launcher_i::init (const char *em_ior,
- CORBA::ORB_ptr orb ACE_ENV_ARG_DECL)
+ CORBA::ORB_ptr orb ACE_ENV_ARG_DECL)
{
CORBA::Object_var obj;
-
+
if (em_ior == 0)
{
obj = fetch_reference_naming (orb ACE_ENV_ARG_PARAMETER);
@@ -58,55 +56,63 @@ namespace CIAO
ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
}
-
+
this->em_ = ::CIAO::ExecutionManagerDaemon::_narrow (obj.in ()
ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
-
+
if (CORBA::is_nil (this->em_.in ()))
{
ACE_ERROR ((LM_ERROR,
- "(%P|%t) CIAO_PlanLauncher: nil Execution"
- " Manager reference, narrow failed\n"));
+ "(%P|%t) CIAO_PlanLauncher: nil Execution"
+ " Manager reference, narrow failed\n"));
return false;
}
-
+
if (CIAO::debug_level () > 9)
ACE_DEBUG ((LM_DEBUG,
"(%P|%t) CIAO_PlanLauncher: Obtained Execution"
" Manager ref \n"));
-
+
return true;
}
-
-
- const char *
+
+
+ const char *
Plan_Launcher_i::launch_plan (const char *plan_uri ACE_ENV_ARG_DECL)
ACE_THROW_SPEC ((Plan_Launcher_i::Deployment_Failure))
{
+ ACE_DEBUG ((LM_DEBUG, "Parsing plan...\n"));
+
CIAO::Config_Handlers::XML_File_Intf intf (plan_uri);
-
+
::Deployment::DeploymentPlan_var plan =
intf.get_plan ();
-
+ ACE_DEBUG ((LM_DEBUG, "Parsing complete....\n"));
return this->launch_plan (plan.in ());
}
-
- const char *
+
+ const char *
Plan_Launcher_i::launch_plan (const ::Deployment::DeploymentPlan &plan ACE_ENV_ARG_DECL)
ACE_THROW_SPEC ((Plan_Launcher_i::Deployment_Failure))
{
-
+
if (CORBA::is_nil (this->em_.in ()))
{
- ACE_ERROR ((LM_ERROR,
+ ACE_ERROR ((LM_ERROR,
ACE_TEXT ("CIAO::Plan_Launcher_i: ")
- ACE_TEXT ("launch_plan called witn an uninitialized EM.\n")));
+ ACE_TEXT ("launch_plan called witn an uninitialized EM.\n")));
return 0;
}
-
+
+ ACE_ERROR ((LM_ERROR,
+ ACE_TEXT ("CIAO::Plan_Launcher_i: " )
+ ACE_TEXT ("about to call this->em_->preparePlan\n")));
::Deployment::DomainApplicationManager_var dam (this->em_->preparePlan (plan, 1));
-
+ ACE_ERROR ((LM_ERROR,
+ ACE_TEXT ("CIAO::Plan_Launcher_i: " )
+ ACE_TEXT ("after to call this->em_->preparePlan\n")));
+
if (CORBA::is_nil (dam.in ()))
{
ACE_DEBUG ((LM_DEBUG,
@@ -114,20 +120,20 @@ namespace CIAO
"nil DomainApplicationManager reference\n"));
return 0;
}
-
+
if (CIAO::debug_level () > 9)
ACE_DEBUG ((LM_DEBUG,
"CIAO_PlanLauncher: Obtained DAM ref \n"));
-
+
::Deployment::Properties_var properties;
ACE_NEW_RETURN (properties,
Deployment::Properties,
0);
-
+
if (CIAO::debug_level ())
ACE_DEBUG ((LM_DEBUG,
- "CIAO_PlanLauncher: start Launch application..."));
-
+ "CIAO_PlanLauncher: start Launch application...\n"));
+
// Dont not start the Application immediately since it vialtes
// the semantics of component activation sequence
int start = 0;
@@ -135,37 +141,35 @@ namespace CIAO
{
dam->startLaunch (properties.in (), 0);
-
+
if (CIAO::debug_level ())
ACE_DEBUG ((LM_DEBUG, "[success]\n"));
-
+
// Call finish Launch to complete the connections
if (CIAO::debug_level ())
ACE_DEBUG ((LM_DEBUG,
- "CIAO_PlanLauncher: finish Launch application..."));
- dam->finishLaunch (start);
-
+ "CIAO_PlanLauncher: finish Launch application...\n"));
+ dam->finishLaunch (start, false); // is_ReDAC by default is <false>
+
if (CIAO::debug_level ())
ACE_DEBUG ((LM_DEBUG, "[success]\n"));
-
+
// Call start to activate components
if (CIAO::debug_level ())
ACE_DEBUG ((LM_DEBUG,
- "CIAO_PlanLauncher: start activating components..."));
+ "CIAO_PlanLauncher: start activating components...\n"));
dam->start ();
-
+
if (CIAO::debug_level ())
ACE_DEBUG ((LM_DEBUG, "[success]\n"));
-
+
if (CIAO::debug_level ())
ACE_DEBUG ((LM_DEBUG,
ACE_TEXT ("CIAO_PlanLauncher: ")
ACE_TEXT ("Application Deployed successfully\n")));
-
+
map_.bind_dam_reference (plan.UUID.in (),
Deployment::DomainApplicationManager::_duplicate (dam.in ()));
-
-
}
ACE_CATCH (Deployment::ResourceNotAvailable, ex)
{
@@ -179,7 +183,7 @@ namespace CIAO
ex.resourceType.in (),
ex.propertyName.in (),
ex.elementName.in (),
- ex.resourceName.in ()));
+ ex.resourceName.in ()));
ACE_THROW (Deployment_Failure ());
}
ACE_CATCH (Deployment::StartError, ex)
@@ -206,15 +210,28 @@ namespace CIAO
ex.reason.in ()));
ACE_THROW (Deployment_Failure ());
}
+ ACE_CATCHANY
+ {
+ ACE_ERROR ((LM_ERROR,
+ "CORBA EXCEPTION: %s\n",
+ ACE_ANY_EXCEPTION._info().fast_rep()));
+ ACE_THROW (Deployment_Failure ());
+ }
+ ACE_CATCHALL
+ {
+ ACE_ERROR ((LM_ERROR,
+ "EXCEPTION: non-CORBA exception\n"));
+ ACE_THROW (Deployment_Failure ());
+ }
ACE_ENDTRY;
ACE_CHECK_RETURN (0);
-
+
std::string * retv = new std::string (plan.UUID.in ());
-
- return (*retv).c_str ();
+
+ return (*retv).c_str ();
}
-
- ::Deployment::DomainApplicationManager_ptr
+
+ ::Deployment::DomainApplicationManager_ptr
Plan_Launcher_i::get_dam (const char *uuid ACE_ENV_ARG_DECL)
{
if (!this->map_.is_plan_available (uuid))
@@ -226,53 +243,118 @@ namespace CIAO
}
return this->map_.fetch_dam_reference (uuid);
}
-
+
bool
Plan_Launcher_i::teardown_plan (const char *uuid)
{
- if (!this->map_.is_plan_available (uuid))
- return false;
-
- ::Deployment::DomainApplicationManager_var dapp_mgr
- (this->map_.fetch_dam_reference (uuid));
-
-
- this->map_.unbind_dam (uuid);
-
+ // Since people could always run another instance of the Plan_Launcher
+ // executable to tear down a plan, so we could NOT rely on the local
+ // DAM_Map to fetch DAM obj reference. Instead, we make a remote call
+ // on ExecutionManager to fetch it.
+ ACE_TRY
+ {
+ ::Deployment::DomainApplicationManager_var dapp_mgr =
+ this->em_->getManager (uuid);
+
+ dapp_mgr->destroyApplication ();
+ if (CIAO::debug_level ())
+ ACE_DEBUG ((LM_DEBUG, "[success]\n"));
+
+ // Note that we should ask the DAM to tell EM whether the DAM should
+ // be destroyed
+ this->destroy_dam_by_plan (uuid);
+ }
+ ACE_CATCHANY
+ {
+ ACE_DEBUG ((LM_ERROR, "Unable to find DomainApplicationManager "
+ "for plan with uuid: %s\n", uuid));
+ return false;
+ }
+ ACE_ENDTRY;
+
return true;
}
-
- bool
+
+ bool
Plan_Launcher_i::teardown_plan (::Deployment::DomainApplicationManager_ptr dam
- ACE_ENV_ARG_DECL)
+ ACE_ENV_ARG_DECL)
{
if (CIAO::debug_level ())
ACE_DEBUG ((LM_DEBUG,
- "CIAO_PlanLauncher: destroy the application....."));
+ "CIAO_PlanLauncher: destroy the application.....\n"));
+
dam->destroyApplication ();
-
+
if (CIAO::debug_level ())
ACE_DEBUG ((LM_DEBUG, "[success]\n"));
- this->destroy_dam (dam);
-
+ this->destroy_dam (dam);
+
return true;
}
-
- void
+
+ void
Plan_Launcher_i::destroy_dam (::Deployment::DomainApplicationManager_ptr dam
- ACE_ENV_ARG_DECL)
+ ACE_ENV_ARG_DECL)
{
if (CIAO::debug_level ())
ACE_DEBUG ((LM_DEBUG,
- "CIAO_PlanLauncher: destroy the manager....."));
+ "CIAO_PlanLauncher: destroy the manager.....\n"));
this->em_->destroyManager (dam);
if (CIAO::debug_level ())
ACE_DEBUG ((LM_DEBUG, "[success]\n"));
}
-
+
+ void
+ Plan_Launcher_i::destroy_dam_by_plan (const char* plan_uuid
+ ACE_ENV_ARG_DECL)
+ {
+ if (CIAO::debug_level ())
+ ACE_DEBUG ((LM_DEBUG,
+ "CIAO_PlanLauncher: destroy the manager.....\n"));
+
+ this->em_->destroyManagerByPlan (plan_uuid);
+
+ if (CIAO::debug_level ())
+ ACE_DEBUG ((LM_DEBUG, "[success]\n"));
+ }
+
+ const char *
+ Plan_Launcher_i::re_launch_plan (const char *plan_uri ACE_ENV_ARG_DECL)
+ ACE_THROW_SPEC ((Plan_Launcher_i::Deployment_Failure))
+ {
+ CIAO::Config_Handlers::XML_File_Intf intf (plan_uri);
+
+ ::Deployment::DeploymentPlan_var plan =
+ intf.get_plan ();
+
+ return this->re_launch_plan (plan.in ());
+ }
+
+ const char *
+ Plan_Launcher_i::re_launch_plan (const ::Deployment::DeploymentPlan &plan ACE_ENV_ARG_DECL)
+ ACE_THROW_SPEC ((Plan_Launcher_i::Deployment_Failure))
+ {
+
+ if (CORBA::is_nil (this->em_.in ()))
+ {
+ ACE_ERROR ((LM_ERROR,
+ ACE_TEXT ("CIAO::Plan_Launcher_i: ")
+ ACE_TEXT ("re_launch_plan called witn an uninitialized EM.\n")));
+ return 0;
+ }
+
+ this->em_->perform_redeployment (plan);
+
+ if (CIAO::debug_level ())
+ ACE_DEBUG ((LM_DEBUG,
+ "CIAO_PlanLauncher: new plan redeployed ...\n"));
+
+ std::string * retv = new std::string (plan.UUID.in ());
+
+ return (*retv).c_str ();
+ }
}
-
}