diff options
Diffstat (limited to 'CIAO/ciao/Containers/Generic/Generic_Container.h')
-rw-r--r-- | CIAO/ciao/Containers/Generic/Generic_Container.h | 172 |
1 files changed, 172 insertions, 0 deletions
diff --git a/CIAO/ciao/Containers/Generic/Generic_Container.h b/CIAO/ciao/Containers/Generic/Generic_Container.h new file mode 100644 index 00000000000..56c5db305c0 --- /dev/null +++ b/CIAO/ciao/Containers/Generic/Generic_Container.h @@ -0,0 +1,172 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file Generic_Container.h + * + * $Id$ + * + * Header file for CIAO's container implementations + * + * @author Johnny Willemsen <jwillemsen@remedy.nl> + */ +//============================================================================= + +#ifndef CIAO_GENERIC_CONTAINER_H +#define CIAO_GENERIC_CONTAINER_H + +#include /**/ "ace/pre.h" + +#include "ciao/Containers/Generic/Generic_Container_export.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include "tao/PortableServer/Servant_Base.h" +#include "ciao/Containers/Container_Base_T.h" +#include "ciao/Containers/Generic/Generic_ContainerC.h" +#include "ccm/CCM_HomeExecutorBaseC.h" +#include "ccm/CCM_EnterpriseComponentC.h" + +#include <map> + +namespace CIAO +{ + class ClientContainerInterceptorRegistration_Impl; + class ServantContainerInterceptorRegistration_Impl; + class ServerContainerInterceptorRegistration_Impl; + class StubContainerInterceptorRegistration_Impl; + + class Servant_Activator; + + typedef ::Components::HomeExecutorBase_ptr (*HomeFactory) (void); + typedef ::PortableServer::Servant (*HomeServantFactory) (::Components::HomeExecutorBase_ptr p, + ::CIAO::Generic_Container_ptr c, + const char *ins_name); + typedef ::Components::EnterpriseComponent_ptr (*ComponentFactory) (void); + typedef ::PortableServer::Servant (*ComponentServantFactory) (::Components::EnterpriseComponent_ptr, + ::CIAO::Generic_Container_ptr, + const char *); + + typedef ACE_Hash_Map_Manager_Ex<ACE_CString, + HomeFactory, + ACE_Hash<ACE_CString>, + ACE_Equal_To<ACE_CString>, + ACE_Null_Mutex> + HOMECREATOR_FUNCPTR_MAP; + + typedef ACE_Hash_Map_Manager_Ex<ACE_CString, + HomeServantFactory, + ACE_Hash<ACE_CString>, + ACE_Equal_To<ACE_CString>, + ACE_Null_Mutex> + HOMESERVANTCREATOR_FUNCPTR_MAP; + + typedef ACE_Hash_Map_Manager_Ex<ACE_CString, + ComponentFactory, + ACE_Hash<ACE_CString>, + ACE_Equal_To<ACE_CString>, + ACE_Null_Mutex> + COMPONENTCREATOR_FUNCPTR_MAP; + + typedef ACE_Hash_Map_Manager_Ex<ACE_CString, + ComponentServantFactory, + ACE_Hash<ACE_CString>, + ACE_Equal_To<ACE_CString>, + ACE_Null_Mutex> + COMPONENTSERVANTCREATOR_FUNCPTR_MAP; + + + class GENERIC_CONTAINER_Export Generic_Container_i : + public Container_i < ::CIAO::Generic_Container> + { + public: + Generic_Container_i (CORBA::ORB_ptr o, + PortableServer::POA_ptr poa); + + virtual ~Generic_Container_i (void); + + /// Initialize the container with a name. + virtual void init (const char *name); + + virtual void fini (void); + + /** + * @brief Simply installing a home executor into the component. + * + * This operation install a home executor into the component. It + * requires the name of the DLLs to executor and the servant glue + * code, and the entry points to the respective DLLs. Currently, + * we don't try to manage the lifetime of DLL objects, but we + * should at some later point. + * + * @retval Home objref of the installed home. + */ + /// Install a new home + virtual Components::CCMHome_ptr install_home (const char *primary_artifact, + const char *entry_point, + const char *servant_artifact, + const char *servant_entrypoint, + const char *name); + + /// Install a new component + virtual Components::CCMObject_ptr install_component (const char *primary_artifact, + const char *entry_point, + const char *servant_artifact, + const char *servant_entrypoint, + const char *name); + + // @{ + /// Inherited from extension context. + Components::Cookie * install_service_reference (const char * service_id, + CORBA::Object_ptr objref); + + CORBA::Object_ptr uninstall_service_reference (Components::Cookie * ck); + + CORBA::Object_ptr resolve_service_reference (const char *service_id); + // @} + + // @{ + /** + * Getters for the Containter Portable Interceptor registration + * Objects. + */ + Components::ContainerPortableInterceptor::ClientContainerInterceptorRegistration_ptr + get_client_interceptor_registration (void); + + Components::ContainerPortableInterceptor::ServantContainerInterceptorRegistration_ptr + get_servant_interceptor_registration (void); + + Components::ContainerPortableInterceptor::ServerContainerInterceptorRegistration_ptr + get_server_interceptor_registration (void); + + Components::ContainerPortableInterceptor::StubContainerInterceptorRegistration_ptr + get_stub_interceptor_registration (void); + // @} + + private: + /// Not allowed to be + Generic_Container_i (void); + + /// Administration of installed CCM services + typedef std::map<const char *, + std::pair<Components::Cookie *, CORBA::Object_ptr> + > InstalledServices; + InstalledServices installed_services_; + + // @{ + /// Caching of the COPI registration objects + /// When a component want to register a Portable Interceptor, it'll + /// need the registration object. + ClientContainerInterceptorRegistration_Impl *client_copi_registration_; + ServantContainerInterceptorRegistration_Impl *servant_copi_registration_; + ServerContainerInterceptorRegistration_Impl *server_copi_registration_; + StubContainerInterceptorRegistration_Impl *stub_copi_registration_; + // @} + }; +} + +#include /**/ "ace/post.h" + +#endif /* CIAO_GENERIC_CONTAINER_H */ |