summaryrefslogtreecommitdiff
path: root/CIAO/DAnCE/NodeApplicationManager/NodeApplicationManager_Impl.h
diff options
context:
space:
mode:
Diffstat (limited to 'CIAO/DAnCE/NodeApplicationManager/NodeApplicationManager_Impl.h')
-rw-r--r--CIAO/DAnCE/NodeApplicationManager/NodeApplicationManager_Impl.h418
1 files changed, 0 insertions, 418 deletions
diff --git a/CIAO/DAnCE/NodeApplicationManager/NodeApplicationManager_Impl.h b/CIAO/DAnCE/NodeApplicationManager/NodeApplicationManager_Impl.h
deleted file mode 100644
index c0312cd6384..00000000000
--- a/CIAO/DAnCE/NodeApplicationManager/NodeApplicationManager_Impl.h
+++ /dev/null
@@ -1,418 +0,0 @@
-// $Id$
-
-// -*- C++ -*-
-
-//=============================================================================
-/**
- * @file NodeApplicationManager_Impl.h
- *
- * @author Tao Lu <lu@dre.vanderbilt.edu>
- * @author Gan Deng <dengg@dre.vanderbilt.edu>
- *
- * This file contains implementation for the servant of
- * Deployment::NodeApplicationManager.
- */
-//=============================================================================
-
-
-#ifndef CIAO_NODEAPPLICATIONMANAGER_IMPL_H
-#define CIAO_NODEAPPLICATIONMANAGER_IMPL_H
-#include /**/ "ace/pre.h"
-
-#include "ace/config-all.h"
-
-#if !defined (ACE_LACKS_PRAGMA_ONCE)
-# pragma once
-#endif /* ACE_LACKS_PRAGMA_ONCE */
-
-#include "ace/SString.h"
-#include "ace/Hash_Map_Manager_T.h"
-#include "ace/OS_NS_sys_wait.h"
-#include "ace/Process_Manager.h"
-#include "ciao/NodeApp_CB_Impl.h"
-#include "ciao/NodeApplicationManagerS.h"
-#include "ciao/CIAO_common.h"
-#include "CIAO_NAM_Export.h"
-#include "ImplementationInfo.h"
-#include "NodeManager/NodeManager_Impl.h"
-#include "NodeApplication/NodeApplication_Core.h"
-
-namespace CIAO
-{
-
- /**
- * @class NodeApplicationManager_Impl_Base
- */
- class CIAO_NAM_Export NodeApplicationManager_Impl_Base
- : public virtual POA_Deployment::NodeApplicationManager
- {
- public:
- /// Constructor
- NodeApplicationManager_Impl_Base (CORBA::ORB_ptr o,
- PortableServer::POA_ptr p);
-
- /*===========================================================
- * Below are operations from the NodeApplicationManager
- *
- *============================================================*/
-
- /// The return type is NodeApplication_ptr actually.
- /// For "external/shared" components of this child plan, they are
- /// not actaully installed, however, the object references
- /// of the ports of these external components are returned
- /// through <providedReference>.
- virtual Deployment::Application_ptr
- startLaunch (const Deployment::Properties & configProperty,
- Deployment::Connections_out providedReference,
- CORBA::Boolean start
- ACE_ENV_ARG_DECL_WITH_DEFAULTS)
- ACE_THROW_SPEC ((CORBA::SystemException,
- Deployment::ResourceNotAvailable,
- Deployment::StartError,
- Deployment::InvalidProperty));
-
- //@@ Destroy the whole applicaton.
- virtual void destroyApplication (Deployment::Application_ptr
- ACE_ENV_ARG_DECL_WITH_DEFAULTS)
- ACE_THROW_SPEC ((CORBA::SystemException,
- Deployment::StopError));
-
- virtual Deployment::Application_ptr
- perform_redeployment (const Deployment::Properties & configProperty,
- Deployment::Connections_out providedReference,
- CORBA::Boolean add_or_remove,
- CORBA::Boolean start
- ACE_ENV_ARG_DECL_WITH_DEFAULTS)
- ACE_THROW_SPEC ((::CORBA::SystemException,
- ::Deployment::PlanError,
- ::Deployment::InstallationFailure,
- ::Deployment::UnknownImplId,
- ::Deployment::ImplEntryPointNotFound,
- ::Deployment::InvalidConnection,
- ::Deployment::InvalidProperty,
- ::Components::RemoveFailure));
-
- virtual void
- reset_plan (const ::Deployment::DeploymentPlan & plan
- ACE_ENV_ARG_DECL_WITH_DEFAULTS)
- ACE_THROW_SPEC ((::CORBA::SystemException));
-
- virtual void
- set_shared_components (const Deployment::ComponentPlans & shared
- ACE_ENV_ARG_DECL_WITH_DEFAULTS)
- ACE_THROW_SPEC ((::CORBA::SystemException));
-
- /**
- * A factory operation to create NodeApplicationManager interface, and return
- * the object reference.
- * Initialize the NodeApplicationManager. The current implementation
- * of CIAO_NodeApplicationManager can only activate CIAO's own
- * NodeApplication processes. You should specify the location
- * (pathname) of the NodeApplication and the delay.
- * CIAO_NodeApplicationManager should wait (in second) for NodeApplication to
- * call back.
- *
- * @param nodeapp_location A null-termiated char * string pointing
- * to the pathname of a NodeApplication executable.
- *
- * @param nodeapp_options A null-terminated char * string
- * containing command line options to be passed to the
- * NodeApplication.
- *
- * @param delay instructs how long (in second) a CIAO_NodeApplicationManager
- * should wait for a newly spawned NodeApplication to pass back
- * its IOR.
- *
- * @param plan has all the information needed for the NodeAppManager to
- * construct the application locally. Note, this includes the properties
- * of the NodeApplication. For example, ORB config options etc.
- *
- * @param callback_poa contains child poa created for the callback interface.
- *
- * @para nm Pointer to the NodeManager_Impl servant object
- *
- * @return NodeApplicationManager_ptr.
- **/
- virtual PortableServer::ObjectId
- init (const char *nodeapp_location,
- const char *nodeapp_options,
- const CORBA::ULong delay,
- const Deployment::DeploymentPlan & plan,
- const PortableServer::POA_ptr callback_poa,
- NodeManager_Impl_Base * nm
- ACE_ENV_ARG_DECL_WITH_DEFAULTS)
- ACE_THROW_SPEC ((CORBA::SystemException,
- Deployment::InvalidProperty))=0;
-
- /// @note This method doesn't do duplicate.
- Deployment::NodeApplicationManager_ptr get_nodeapp_manager (void);
-
- /// Set the priority of the NodeApplication process which this NAM manages
- virtual ::CORBA::Long set_priority (
- const char * cid,
- const ::Deployment::Sched_Params & params
- ACE_ENV_ARG_DECL_WITH_DEFAULTS)
- ACE_THROW_SPEC ((CORBA::SystemException ));
-
- protected:
- /// Destructor
- virtual ~NodeApplicationManager_Impl_Base (void);
-
- /// Add new components
- virtual void
- add_new_components (void)
- ACE_THROW_SPEC ((CORBA::SystemException,
- ::Deployment::PlanError,
- ::Deployment::InstallationFailure,
- ::Deployment::UnknownImplId,
- ::Deployment::ImplEntryPointNotFound,
- ::Deployment::InvalidConnection,
- ::Deployment::InvalidProperty));
-
- /// Remove existing components
- virtual void
- remove_existing_components (void)
- ACE_THROW_SPEC ((CORBA::SystemException,
- ::Deployment::PlanError,
- ::Components::RemoveFailure));
-
- /// Determine whether a component is absent in the new_plan
- /// Return true if absent
- virtual bool
- is_to_be_removed (const char * name);
-
- /// Internal help function to create new NodeApplicationProcess
- 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))=0;
-
- /// Helper function to get the connection.
- virtual Deployment::Connections *
- create_connections (ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS)
- ACE_THROW_SPEC ((CORBA::SystemException,
- Deployment::ResourceNotAvailable,
- Deployment::StartError,
- Deployment::InvalidProperty));
-
- /**
- * Find the configurations in the plan and prepare them to pass to the
- * NodeApplication, from command line probably.
- */
- void parse_config_value (ACE_CString & str
- ACE_ENV_ARG_DECL_WITH_DEFAULTS)
- ACE_THROW_SPEC ((CORBA::SystemException,
- Deployment::InvalidProperty));
-
- /// Helper function to check wheather a component instance
- /// is in the "shared components list".
- bool is_shared_component (ACE_CString & name);
-
- /// Helper function to check wheather a component instance
- /// is in the "shared components list".
- bool is_external_component (ACE_CString & name);
-
- protected:
- /// location of the Nodeapplication
- ACE_CString nodeapp_path_;
-
- /// Keep a pointer to the managing ORB serving this servant.
- CORBA::ORB_var orb_;
-
- /// Keep a pointer to the managing POA.
- PortableServer::POA_var poa_;
-
- /// Pointer to the NodeManager_Impl servant object
- /// We could do this because NodeManager and NodeApplicationManager
- /// are always collocated in the same process, so we don't have
- /// to pass CORBA object reference back and forth.
- NodeManager_Impl_Base * node_manager_;
-
- /// ObjectRef of ourself which will be needed by the callback
- Deployment::NodeApplicationManager_var objref_;
-
- /// Child poa that uses active object map.
- PortableServer::POA_var callback_poa_;
-
- /// Cache a object reference of the underlying NodeApplication
- /// Since I have decided to have only 1 NA in NAM so no map is needed.
- Deployment::NodeApplication_var nodeapp_;
-
- /// Cached plan (This should be the part of the whole plan local to this node)
- /// The plan will be initialized when init is called.
- Deployment::DeploymentPlan plan_;
-
- /// Specify the time in second NodeApplicationManager will wait for a
- /// child NodeApplication to callback. Default is 5 second.
- CORBA::ULong spawn_delay_;
-
- /// Extracted commandline options to pass to the NodeApplication.
- CORBA::String_var nodeapp_command_op_;
-
- /// A list of components shared across deployment plans
- Deployment::ComponentPlans shared_components_;
-
- /// A list of components that are "external" to this plan
- Deployment::ComponentPlans external_components_;
-
- /// A map of the component created on this node.
- typedef ACE_Hash_Map_Manager_Ex<ACE_CString,
- Components::CCMObject_var,
- ACE_Hash<ACE_CString>,
- ACE_Equal_To<ACE_CString>,
- ACE_Null_Mutex> CCMComponent_Map;
- typedef CCMComponent_Map::iterator Component_Iterator;
- CCMComponent_Map component_map_;
-
- /// Synchronize access to the object set.
- TAO_SYNCH_MUTEX lock_;
-
- /// The Process Manager for this NodeApplicationManager
- ACE_Process_Manager node_app_process_manager_;
-
- /// The process id of the NA associated with the NAM,
- /// Each NAM will only have one NA associated with it,
- /// so we have only one process associated with it.
-
- // this is UNIX specific .... not portable
- pid_t process_id_;
- };
-
-
- /**
- * @class NAM_Handler
- * @brief The signal handler class for the SIGCHLD
- * handling to avoid zombies
- *
- */
- class NAM_Handler : public ACE_Event_Handler
- {
- public:
- virtual int handle_signal (int sig,
- siginfo_t *,
- ucontext_t *)
- {
- ACE_UNUSED_ARG (sig);
-
- // @@ Note that this code is not portable to all OS platforms
- // since it uses print statements within signal handler context.
- //ACE_DEBUG ((LM_DEBUG,
- // "Executed ACE signal handler for signal %S \n",
- // sig));
-
- ACE_exitcode status;
- // makes a claal to the underlying os system call
- // -1 to wait for any child process
- // and WNOHANG so that it retuurns immediately
- ACE_OS::waitpid (-1 ,&status, WNOHANG, 0);
-
- return 0;
- }
- };
-
-
- /**
- * @class NodeApplicationManager_Impl
- */
- class CIAO_NAM_Export NodeApplicationManager_Impl
- : public virtual NodeApplicationManager_Impl_Base
- {
- public:
- /// Constructor
- NodeApplicationManager_Impl (CORBA::ORB_ptr o,
- PortableServer::POA_ptr p);
-
- virtual PortableServer::ObjectId
- init (const char *nodeapp_location,
- const char *nodeapp_options,
- const CORBA::ULong delay,
- const Deployment::DeploymentPlan & plan,
- const PortableServer::POA_ptr callback_poa,
- NodeManager_Impl_Base * nm
- ACE_ENV_ARG_DECL_WITH_DEFAULTS)
- ACE_THROW_SPEC ((CORBA::SystemException,
- Deployment::InvalidProperty));
-
- 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));
-
-
- /**
- * @operation push_component_info
- * @brief pushes component info to the NodeManager
- *
- * @param process_id The id of the process of NodeApplication
- */
- void push_component_info (pid_t process_id);
-
- /// The signal handler
- NAM_Handler child_handler_;
- };
-
-
-
- struct Static_Config_EntryPoints_Maps;
-
- /**
- * @class Static_NodeApplicationManager_Impl
- */
- class CIAO_NAM_Export 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);
-
- virtual PortableServer::ObjectId
- init (const char *nodeapp_location,
- const char *nodeapp_options,
- const CORBA::ULong delay,
- const Deployment::DeploymentPlan & plan,
- const PortableServer::POA_ptr callback_poa,
- NodeManager_Impl_Base * nm
- ACE_ENV_ARG_DECL_WITH_DEFAULTS)
- ACE_THROW_SPEC ((CORBA::SystemException,
- Deployment::InvalidProperty));
-
- 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_;
-
- CIAO::NoOp_Configurator configurator_;
- };
-}
-
-#if defined (__ACE_INLINE__)
-# include "NodeApplicationManager_Impl.inl"
-#endif /* __ACE_INLINE__ */
-
-#include /**/ "ace/post.h"
-#endif /* CIAO_NODEAPPLICATIONMANAGER_IMPL_H */