diff options
Diffstat (limited to 'modules/CIAO/DAnCE/NodeApplication/NodeApplication_Impl.h')
-rw-r--r-- | modules/CIAO/DAnCE/NodeApplication/NodeApplication_Impl.h | 210 |
1 files changed, 210 insertions, 0 deletions
diff --git a/modules/CIAO/DAnCE/NodeApplication/NodeApplication_Impl.h b/modules/CIAO/DAnCE/NodeApplication/NodeApplication_Impl.h new file mode 100644 index 00000000000..d77ccccdd25 --- /dev/null +++ b/modules/CIAO/DAnCE/NodeApplication/NodeApplication_Impl.h @@ -0,0 +1,210 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file NodeApplication_Impl.h + * + * $Id$ + * + * @Brief Implementation of Deployment::NodeApplication + * + * @author Erwin Gottlieb <eg@prismtech.com> + * @author William R. Otte <wotte@dre.vanderbilt.edu> + */ +//============================================================================= + + +#ifndef NODEAPPLICATION_IMPL_H_ +#define NODEAPPLICATION_IMPL_H_ + +#include "NodeApplication_Export.h" + +#include "ace/Map_Manager.h" +#include "ace/Containers_T.h" +#include "tao/ORB.h" +#include "tao/Object.h" +#include "ccm/CCM_KeylessCCMHomeC.h" +#include "ccm/ComponentsC.h" +#include "ciao/ComponentServer/CIAO_ServerActivator_Impl.h" +#include "orbsvcs/orbsvcs/CosNamingC.h" + +#include "ccm/ComponentServer/CCM_ComponentServerC.h" +#include "Deployment/Deployment_NodeApplicationS.h" +#include "Deployment/Deployment_DeploymentPlanC.h" +#include "Deployment/DeploymentC.h" +#include "Deployment/Deployment_common.h" + +namespace DAnCE +{ + + class NodeManager_Impl; + + class NodeApplication_Export NodeApplication_Impl : public virtual POA_Deployment::NodeApplication + { + public: + NodeApplication_Impl (CORBA::ORB_ptr orb, + PortableServer::POA_ptr poa, + const ::Deployment::DeploymentPlan& plan, +// RedirectionService & redirection, + const ACE_CString& node_name, + const PROPERTY_MAP &properties); + + virtual ~NodeApplication_Impl(); + + virtual void finishLaunch (const ::Deployment::Connections & providedReference, + ::CORBA::Boolean start); + + virtual void start (); + + ::Deployment::Connections * getAllConnections(); + + //TODO Exception specification should be customized + void init_components(); + + void configuration_complete_components (); + + void passivate_components (); + + void remove_components (); + + enum ERequestType + { + eCreateComponentServer, + eCreateContainer, + eInstallHome, + eCreateComponentWithConfigValues + }; + + enum EInstanceType + { + eHome, + eComponent, + eHomedComponent, + eInvalid + }; + + enum EComponentState + { + eUninstalled, + eInstalled, + eConfigured, + eActive, + ePassive, + eRemoved, + eInvalidState + }; + + + protected: + //TODO Add throw specification + void init(); + + struct Container; + + struct Instance + { + Instance (EInstanceType type = eInvalid, + Container *cont = 0, + CORBA::ULong idd = 0, + CORBA::ULong mdd = 0) : + state (eUninstalled), + type (type), idd_idx (idd), mdd_idx (mdd), home(0), + container (cont) + { + } + + EComponentState state; + EInstanceType type; + CORBA::ULong idd_idx; + CORBA::ULong mdd_idx; + CORBA::Object_var ref; + Instance *home; + Container *container; + }; + + typedef ACE_Array<Instance> INSTANCES; + typedef ACE_Array<Instance *> INSTANCE_PTRS; + + struct Container + { + INSTANCES homes; + INSTANCES components; + ::Deployment::Properties properties; + Components::Deployment::Container_var ref; + }; + + typedef ACE_Array<Container> CONTAINERS; + + struct ComponentServer + { + CONTAINERS containers; + ::Deployment::Properties properties; + Components::Deployment::ComponentServer_var ref; + }; + + typedef ACE_Array<ComponentServer> COMPONENTSERVERS; + + EInstanceType get_instance_type (const ::Deployment::Properties& prop) const; + + void create_config_values (const ::Deployment::Properties& prop, + const ERequestType request, + Components::ConfigValues& cfg) const; + + void create_config_values(const ::Deployment::Properties& prop, + Components::ConfigValues& cfg) const; + + void create_component_server (size_t index); + + void create_container (size_t server, size_t container); + + void install_home (Container &cont, Instance &inst); + + void install_component (Container &cont, Instance &inst); + + void install_homed_component (Container &cont, Instance &inst); + + void store_instance_ior (Instance &inst); + + Components::Cookie* connect_receptacle (Components::CCMObject_ptr inst, + const ACE_CString& port_name, + CORBA::Object_ptr facet); + + Components::Cookie* connect_receptacle_ext (Components::CCMObject_ptr inst, + const ACE_CString& port_name, + CORBA::Object_ptr facet); + + void connect_emitter (Components::CCMObject_ptr inst, + const ACE_CString& port_name, + CORBA::Object_ptr consumer); + + void connect_emitter_ext (Components::CCMObject_ptr inst, + const ACE_CString& port_name, + CORBA::Object_ptr consumer); + + Components::Cookie* connect_publisher (Components::CCMObject_ptr inst, + const ACE_CString& port_name, + CORBA::Object_ptr consumer); + + CORBA::ORB_var orb_; + + PortableServer::POA_var poa_; + + const ::Deployment::DeploymentPlan& plan_; + + //ComponentInstallation_Impl* installation_; + auto_ptr<CIAO::Deployment::CIAO_ServerActivator_i> activator_; + +// RedirectionService & redirection_; + + ACE_CString node_name_; + + PROPERTY_MAP properties_; + + COMPONENTSERVERS servers_; + + INSTANCE_PTRS instances_; + + CosNaming::NamingContext_var instance_nc_; + }; +} +#endif /*NODEAPPLICATION_IMPL_H_*/ |