summaryrefslogtreecommitdiff
path: root/TAO/CIAO/DAnCE/NodeApplicationManager
diff options
context:
space:
mode:
Diffstat (limited to 'TAO/CIAO/DAnCE/NodeApplicationManager')
-rw-r--r--TAO/CIAO/DAnCE/NodeApplicationManager/NodeApplicationManager_Impl.cpp337
-rw-r--r--TAO/CIAO/DAnCE/NodeApplicationManager/NodeApplicationManager_Impl.h67
-rw-r--r--TAO/CIAO/DAnCE/NodeApplicationManager/NodeApplicationManager_Impl.inl6
3 files changed, 276 insertions, 134 deletions
diff --git a/TAO/CIAO/DAnCE/NodeApplicationManager/NodeApplicationManager_Impl.cpp b/TAO/CIAO/DAnCE/NodeApplicationManager/NodeApplicationManager_Impl.cpp
index 0aaea995377..d54a3c7d51d 100644
--- a/TAO/CIAO/DAnCE/NodeApplicationManager/NodeApplicationManager_Impl.cpp
+++ b/TAO/CIAO/DAnCE/NodeApplicationManager/NodeApplicationManager_Impl.cpp
@@ -3,18 +3,20 @@
#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)
{
}
Deployment::NodeApplicationManager_ptr
-CIAO::NodeApplicationManager_Impl::init (
+CIAO::NodeApplicationManager_Impl_Base::init (
const char *nodeapp_location,
const CORBA::ULong delay,
const Deployment::DeploymentPlan & plan,
@@ -60,7 +62,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 +74,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,128 +86,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))
-{
- 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,
@@ -267,7 +149,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
@@ -289,6 +171,7 @@ startLaunch (const Deployment::Properties & configProperty,
Deployment::ImplementationInfos infos;
+ ACE_DEBUG ((LM_DEBUG, "In NAM::startLaunch\n"));
if (!(infos << (this->plan_)))
{
if (CIAO::debug_level () > 1)
@@ -353,7 +236,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
@@ -370,3 +253,203 @@ destroyApplication (Deployment::Application_ptr app
this->nodeapp_->remove (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK;
}
+
+
+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))
+{
+ Deployment::NodeApplication_var retval;
+ Deployment::Properties_var prop;
+
+ ACE_DEBUG ((LM_DEBUG, "create_node_application\n"));
+ 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))
+{
+ CIAO::Static_NodeApplication_Impl *nodeapp_servant;
+
+ ACE_DEBUG ((LM_DEBUG, "create_static_node_application\n"));
+
+ ACE_NEW_RETURN (nodeapp_servant,
+ CIAO::Static_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 ();
+}
diff --git a/TAO/CIAO/DAnCE/NodeApplicationManager/NodeApplicationManager_Impl.h b/TAO/CIAO/DAnCE/NodeApplicationManager/NodeApplicationManager_Impl.h
index f6ad72f4a79..58d4bdbbef3 100644
--- a/TAO/CIAO/DAnCE/NodeApplicationManager/NodeApplicationManager_Impl.h
+++ b/TAO/CIAO/DAnCE/NodeApplicationManager/NodeApplicationManager_Impl.h
@@ -34,13 +34,13 @@ namespace CIAO
/**
* @class NodeApplicationManager_Impl
*/
- class CIAO_NAM_Export NodeApplicationManager_Impl
+ class CIAO_NAM_Export NodeApplicationManager_Impl_Base
: public virtual POA_Deployment::NodeApplicationManager,
public virtual PortableServer::RefCountServantBase
{
public:
/// Constructor
- NodeApplicationManager_Impl (CORBA::ORB_ptr o,
+ NodeApplicationManager_Impl_Base (CORBA::ORB_ptr o,
PortableServer::POA_ptr p);
/*===========================================================
@@ -102,7 +102,7 @@ namespace CIAO
protected:
/// Destructor
- virtual ~NodeApplicationManager_Impl (void);
+ virtual ~NodeApplicationManager_Impl_Base (void);
// Internal help function to create new NodeApplicationProcess
virtual Deployment::NodeApplication_ptr
@@ -111,7 +111,7 @@ namespace CIAO
ACE_THROW_SPEC ((CORBA::SystemException,
Deployment::ResourceNotAvailable,
Deployment::StartError,
- Deployment::InvalidProperty));
+ Deployment::InvalidProperty))=0;
// Helper function to get the connection.
virtual Deployment::Connections *
@@ -173,6 +173,65 @@ namespace CIAO
// Synchronize access to the object set.
TAO_SYNCH_MUTEX lock_;
};
+
+ /**
+ * @class NodeApplicationManager_Impl
+ */
+ class NodeApplicationManager_Impl
+ : public virtual NodeApplicationManager_Impl_Base
+ {
+ public:
+ /// Constructor
+ NodeApplicationManager_Impl (CORBA::ORB_ptr o,
+ PortableServer::POA_ptr p);
+
+ protected:
+ /// Destructor
+ virtual ~NodeApplicationManager_Impl (void);
+
+ // Internal help function to create new NodeApplicationProcess
+ // Here we override it to create an in-process NodeApplication object
+ virtual Deployment::NodeApplication_ptr
+ create_node_application (const ACE_CString & options
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC ((CORBA::SystemException,
+ Deployment::ResourceNotAvailable,
+ Deployment::StartError,
+ Deployment::InvalidProperty));
+ };
+
+ struct Static_Config_EntryPoints_Maps;
+
+ /**
+ * @class Static_NodeApplicationManager_Impl
+ */
+ class Static_NodeApplicationManager_Impl
+ : public virtual NodeApplicationManager_Impl_Base
+ {
+ public:
+ /// Constructor
+ Static_NodeApplicationManager_Impl (CORBA::ORB_ptr o,
+ PortableServer::POA_ptr p,
+ Static_Config_EntryPoints_Maps* static_config_entrypoints_maps);
+
+ protected:
+ /// Destructor
+ virtual ~Static_NodeApplicationManager_Impl (void);
+
+ // Internal help function to create new NodeApplicationProcess
+ // Here we override it to create an in-process NodeApplication object
+ virtual Deployment::NodeApplication_ptr
+ create_node_application (const ACE_CString & options
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC ((CORBA::SystemException,
+ Deployment::ResourceNotAvailable,
+ Deployment::StartError,
+ Deployment::InvalidProperty));
+
+ Static_Config_EntryPoints_Maps* static_config_entrypoints_maps_;
+
+ };
+
}
#if defined (__ACE_INLINE__)
diff --git a/TAO/CIAO/DAnCE/NodeApplicationManager/NodeApplicationManager_Impl.inl b/TAO/CIAO/DAnCE/NodeApplicationManager/NodeApplicationManager_Impl.inl
index 24908a047a4..5a29debbb53 100644
--- a/TAO/CIAO/DAnCE/NodeApplicationManager/NodeApplicationManager_Impl.inl
+++ b/TAO/CIAO/DAnCE/NodeApplicationManager/NodeApplicationManager_Impl.inl
@@ -2,8 +2,8 @@
// $Id$
ACE_INLINE
-CIAO::NodeApplicationManager_Impl::
-NodeApplicationManager_Impl (CORBA::ORB_ptr o,
+CIAO::NodeApplicationManager_Impl_Base::
+NodeApplicationManager_Impl_Base (CORBA::ORB_ptr o,
PortableServer::POA_ptr p)
: orb_ (CORBA::ORB::_duplicate (o)),
poa_ (PortableServer::POA::_duplicate (p)),
@@ -20,7 +20,7 @@ NodeApplicationManager_Impl (CORBA::ORB_ptr o,
ACE_INLINE
Deployment::NodeApplicationManager_ptr
-CIAO::NodeApplicationManager_Impl::get_nodeapp_manager (void)
+CIAO::NodeApplicationManager_Impl_Base::get_nodeapp_manager (void)
{
return this->objref_.in ();
}