summaryrefslogtreecommitdiff
path: root/TAO/CIAO/DAnCE/NodeApplicationManager/NodeApplicationManager_Impl.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'TAO/CIAO/DAnCE/NodeApplicationManager/NodeApplicationManager_Impl.cpp')
-rw-r--r--TAO/CIAO/DAnCE/NodeApplicationManager/NodeApplicationManager_Impl.cpp341
1 files changed, 213 insertions, 128 deletions
diff --git a/TAO/CIAO/DAnCE/NodeApplicationManager/NodeApplicationManager_Impl.cpp b/TAO/CIAO/DAnCE/NodeApplicationManager/NodeApplicationManager_Impl.cpp
index 1252878379d..cb65366d8c6 100644
--- a/TAO/CIAO/DAnCE/NodeApplicationManager/NodeApplicationManager_Impl.cpp
+++ b/TAO/CIAO/DAnCE/NodeApplicationManager/NodeApplicationManager_Impl.cpp
@@ -1,20 +1,23 @@
// $Id$
+
#include "NodeApplicationManager_Impl.h"
#include "ace/Process.h"
#include "ace/OS_NS_stdio.h"
+#include "ciao/Container_Base.h"
+#include "ciao/NodeApplication_Impl.h"
#if !defined (__ACE_INLINE__)
# include "NodeApplicationManager_Impl.inl"
#endif /* __ACE_INLINE__ */
-CIAO::NodeApplicationManager_Impl::~NodeApplicationManager_Impl (void)
+CIAO::NodeApplicationManager_Impl_Base::~NodeApplicationManager_Impl_Base (void)
{
}
PortableServer::ObjectId
-CIAO::NodeApplicationManager_Impl::init (
+CIAO::NodeApplicationManager_Impl_Base::init (
const char *nodeapp_location,
const CORBA::ULong delay,
const Deployment::DeploymentPlan & plan,
@@ -61,7 +64,7 @@ CIAO::NodeApplicationManager_Impl::init (
ACE_CATCHANY
{
ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION,
- "NodeApplicationManager_Impl::init\t\n");
+ "NodeApplicationManager_Impl_Base::init\t\n");
ACE_RE_THROW;
}
ACE_ENDTRY;
@@ -72,7 +75,7 @@ CIAO::NodeApplicationManager_Impl::init (
}
void
-CIAO::NodeApplicationManager_Impl::
+CIAO::NodeApplicationManager_Impl_Base::
parse_config_value (ACE_CString & str
ACE_ENV_ARG_DECL)
ACE_THROW_SPEC ((CORBA::SystemException,
@@ -84,129 +87,8 @@ parse_config_value (ACE_CString & str
ACE_THROW ( CORBA::NO_IMPLEMENT() );
}
-Deployment::NodeApplication_ptr
-CIAO::NodeApplicationManager_Impl::
-create_node_application (const ACE_CString & options
- ACE_ENV_ARG_DECL)
- ACE_THROW_SPEC ((CORBA::SystemException,
- Deployment::ResourceNotAvailable,
- Deployment::StartError,
- Deployment::InvalidProperty))
-{
- CIAO_TRACE("CIAO::NodeApplicationManager_Impl::create_node_application");
- Deployment::NodeApplication_var retval;
- Deployment::Properties_var prop;
-
- ACE_NEW_THROW_EX (prop,
- Deployment::Properties,
- CORBA::INTERNAL ());
- ACE_CHECK_RETURN (Deployment::NodeApplication::_nil());
-
- // @@ Create a new callback servant.
- CIAO::NodeApplication_Callback_Impl * callback_servant = 0;
- ACE_NEW_THROW_EX (callback_servant,
- CIAO::NodeApplication_Callback_Impl (this->orb_.in (),
- this->callback_poa_.in (),
- this->objref_.in (),
- prop.in ()),
- CORBA::NO_MEMORY ());
- ACE_CHECK_RETURN (Deployment::NodeApplication::_nil());
-
- PortableServer::ServantBase_var servant_var (callback_servant);
- PortableServer::ObjectId_var cb_id
- = this->callback_poa_->activate_object (callback_servant
- ACE_ENV_ARG_PARAMETER);
- ACE_CHECK_RETURN (Deployment::NodeApplication::_nil());
-
- ACE_Process node_application;
- ACE_Process_Options p_options;
-
- ACE_TRY
- {
- CORBA::Object_var cb_obj =
- this->callback_poa_->id_to_reference (cb_id.in ()
- ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- CIAO::NodeApplication_Callback_var cb =
- CIAO::NodeApplication_Callback::_narrow (cb_obj.in ()
- ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- CORBA::String_var cb_ior =
- this->orb_->object_to_string (cb.in ()
- ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- // spawn the new NodeApplication.
- p_options.command_line ("%s -k %s"
- "%s",
- this->nodeapp_path_.c_str (),
- cb_ior.in (),
- options.c_str ());
-
- p_options.avoid_zombies (1);
-
- if (node_application.spawn (p_options) == -1)
- {
- if (CIAO::debug_level () > 1)
- ACE_DEBUG ((LM_ERROR, "Fail to spawn a NodeApplication process\n"));
- ACE_TRY_THROW (Deployment::ResourceNotAvailable ());
- }
-
- // wait for nodeApp to pass back its object reference. with a
- // timeout value. using perform_work and stuff.
-
- int looping = 1;
-
- ACE_Time_Value timeout (this->spawn_delay_, 0);
-
- while (looping)
- {
- this->orb_->perform_work (timeout
- ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- retval = callback_servant->get_nodeapp_ref ();
-
- if (timeout == ACE_Time_Value::zero || !CORBA::is_nil (retval.in ()))
- looping = 0;
- }
-
- if (CORBA::is_nil (retval.in ()))
- {
- if (CIAO::debug_level () > 1)
- ACE_DEBUG ((LM_ERROR, "Fail to acquire the NodeApplication object\n"));
-
- ACE_TRY_THROW (Deployment::ResourceNotAvailable ());
- }
-
- {
- //ACE_GUARD_RETURN (TAO_SYNCH_MUTEX, ace_mon, this->lock_, 0);
- this->nodeapp_ = Deployment::NodeApplication::_duplicate (retval.in ());
- }
- }
- ACE_CATCHANY
- {
- this->callback_poa_->deactivate_object (cb_id.in ());
- ACE_TRY_CHECK;
-
- ACE_RE_THROW;
- }
- ACE_ENDTRY;
- ACE_CHECK_RETURN (Deployment::NodeApplication::_nil ());
-
- this->callback_poa_->deactivate_object (cb_id.in () ACE_ENV_ARG_PARAMETER);
- ACE_CHECK_RETURN (Deployment::NodeApplication::_nil ());
-
- if (CIAO::debug_level () > 1)
- ACE_DEBUG ((LM_DEBUG, "CIAO::NodeApplicationManager_Impl::NodeApplication spawned!\n"));
-
- return retval._retn ();
-}
-
Deployment::Connections *
-CIAO::NodeApplicationManager_Impl::
+CIAO::NodeApplicationManager_Impl_Base::
create_connections (ACE_ENV_SINGLE_ARG_DECL)
ACE_THROW_SPEC ((CORBA::SystemException,
Deployment::ResourceNotAvailable,
@@ -269,7 +151,7 @@ create_connections (ACE_ENV_SINGLE_ARG_DECL)
}
Deployment::Application_ptr
-CIAO::NodeApplicationManager_Impl::
+CIAO::NodeApplicationManager_Impl_Base::
startLaunch (const Deployment::Properties & configProperty,
Deployment::Connections_out providedReference,
CORBA::Boolean start
@@ -358,7 +240,7 @@ startLaunch (const Deployment::Properties & configProperty,
void
-CIAO::NodeApplicationManager_Impl::
+CIAO::NodeApplicationManager_Impl_Base::
destroyApplication (Deployment::Application_ptr app
ACE_ENV_ARG_DECL)
ACE_THROW_SPEC ((CORBA::SystemException,
@@ -378,3 +260,206 @@ destroyApplication (Deployment::Application_ptr app
return;
}
+
+
+CIAO::NodeApplicationManager_Impl::~NodeApplicationManager_Impl (void)
+{
+}
+
+CIAO::NodeApplicationManager_Impl::
+NodeApplicationManager_Impl (CORBA::ORB_ptr o,
+ PortableServer::POA_ptr p)
+ : NodeApplicationManager_Impl_Base (o, p)
+{
+}
+
+Deployment::NodeApplication_ptr
+CIAO::NodeApplicationManager_Impl::
+create_node_application (const ACE_CString & options
+ ACE_ENV_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException,
+ Deployment::ResourceNotAvailable,
+ Deployment::StartError,
+ Deployment::InvalidProperty))
+{
+ CIAO_TRACE("CIAO::NodeApplicationManager_Impl::create_node_application");
+ Deployment::NodeApplication_var retval;
+ Deployment::Properties_var prop;
+
+ ACE_NEW_THROW_EX (prop,
+ Deployment::Properties,
+ CORBA::INTERNAL ());
+ ACE_CHECK_RETURN (Deployment::NodeApplication::_nil());
+
+ // @@ Create a new callback servant.
+ CIAO::NodeApplication_Callback_Impl * callback_servant = 0;
+ ACE_NEW_THROW_EX (callback_servant,
+ CIAO::NodeApplication_Callback_Impl (this->orb_.in (),
+ this->callback_poa_.in (),
+ this->objref_.in (),
+ prop.in ()),
+ CORBA::NO_MEMORY ());
+ ACE_CHECK_RETURN (Deployment::NodeApplication::_nil());
+
+ PortableServer::ServantBase_var servant_var (callback_servant);
+ PortableServer::ObjectId_var cb_id
+ = this->callback_poa_->activate_object (callback_servant
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (Deployment::NodeApplication::_nil());
+
+ ACE_Process node_application;
+ ACE_Process_Options p_options;
+
+ ACE_TRY
+ {
+ CORBA::Object_var cb_obj =
+ this->callback_poa_->id_to_reference (cb_id.in ()
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ CIAO::NodeApplication_Callback_var cb =
+ CIAO::NodeApplication_Callback::_narrow (cb_obj.in ()
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ CORBA::String_var cb_ior =
+ this->orb_->object_to_string (cb.in ()
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ // spawn the new NodeApplication.
+ p_options.command_line ("%s -k %s"
+ "%s",
+ this->nodeapp_path_.c_str (),
+ cb_ior.in (),
+ options.c_str ());
+
+ p_options.avoid_zombies (1);
+
+ if (node_application.spawn (p_options) == -1)
+ {
+ if (CIAO::debug_level () > 1)
+ ACE_DEBUG ((LM_ERROR, "Fail to spawn a NodeApplication process\n"));
+ ACE_TRY_THROW (Deployment::ResourceNotAvailable ());
+ }
+
+ // wait for nodeApp to pass back its object reference. with a
+ // timeout value. using perform_work and stuff.
+
+ int looping = 1;
+
+ ACE_Time_Value timeout (this->spawn_delay_, 0);
+
+ while (looping)
+ {
+ this->orb_->perform_work (timeout
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ retval = callback_servant->get_nodeapp_ref ();
+
+ if (timeout == ACE_Time_Value::zero || !CORBA::is_nil (retval.in ()))
+ looping = 0;
+ }
+
+ if (CORBA::is_nil (retval.in ()))
+ {
+ if (CIAO::debug_level () > 1)
+ ACE_DEBUG ((LM_ERROR, "Fail to acquire the NodeApplication object\n"));
+
+ ACE_TRY_THROW (Deployment::ResourceNotAvailable ());
+ }
+
+ {
+ //ACE_GUARD_RETURN (TAO_SYNCH_MUTEX, ace_mon, this->lock_, 0);
+ this->nodeapp_ = Deployment::NodeApplication::_duplicate (retval.in ());
+ }
+ }
+ ACE_CATCHANY
+ {
+ this->callback_poa_->deactivate_object (cb_id.in ());
+ ACE_TRY_CHECK;
+
+ ACE_RE_THROW;
+ }
+ ACE_ENDTRY;
+ ACE_CHECK_RETURN (Deployment::NodeApplication::_nil ());
+
+ this->callback_poa_->deactivate_object (cb_id.in () ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (Deployment::NodeApplication::_nil ());
+
+ if (CIAO::debug_level () > 1)
+ ACE_DEBUG ((LM_DEBUG, "CIAO::NodeApplicationManager_Impl::NodeApplication spawned!\n"));
+
+ return retval._retn ();
+}
+
+
+CIAO::Static_NodeApplicationManager_Impl::~Static_NodeApplicationManager_Impl (void)
+{
+}
+
+CIAO::Static_NodeApplicationManager_Impl::
+Static_NodeApplicationManager_Impl (CORBA::ORB_ptr o,
+ PortableServer::POA_ptr p,
+ Static_Config_EntryPoints_Maps* static_config_entrypoints_maps)
+ : NodeApplicationManager_Impl_Base (o, p),
+ static_config_entrypoints_maps_ (static_config_entrypoints_maps)
+{
+}
+
+Deployment::NodeApplication_ptr
+CIAO::Static_NodeApplicationManager_Impl::
+create_node_application (const ACE_CString & options
+ ACE_ENV_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException,
+ Deployment::ResourceNotAvailable,
+ Deployment::StartError,
+ Deployment::InvalidProperty))
+{
+ ACE_UNUSED_ARG(options);
+
+ CIAO::NodeApplication_Impl *nodeapp_servant;
+
+ ACE_DEBUG ((LM_DEBUG, "create_static_node_application\n"));
+
+ ACE_NEW_RETURN (nodeapp_servant,
+ CIAO::NodeApplication_Impl (orb_.in (),
+ poa_.in (),
+ this->static_config_entrypoints_maps_),
+ Deployment::NodeApplication::_nil ()
+ );
+ if (nodeapp_servant->init (ACE_ENV_SINGLE_ARG_PARAMETER))
+ {
+ ACE_DEBUG ((LM_DEBUG, "NodeApplication Failed on creating and\
+ initializing the session container!"));
+ return Deployment::NodeApplication::_nil ();
+ }
+ ACE_TRY_CHECK;
+
+ // CONFIGURING NodeApplication
+ PortableServer::ObjectId_var nodeapp_oid
+ = poa_->activate_object (nodeapp_servant
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ CORBA::Object_var
+ obj = poa_->id_to_reference (nodeapp_oid.in ()
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ Deployment::NodeApplication_var nodeapp_obj =
+ Deployment::NodeApplication::_narrow (obj.in ()
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ if (CORBA::is_nil (nodeapp_obj.in ()))
+ {
+ ACE_ERROR ((LM_ERROR, "Unable to activate NodeApplication object\n"));
+ return Deployment::NodeApplication::_nil ();
+ }
+
+ this->nodeapp_ = Deployment::NodeApplication::_duplicate (nodeapp_obj.in ());
+
+ return nodeapp_obj._retn ();
+}