summaryrefslogtreecommitdiff
path: root/CIAO/ciao/Container_Base.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'CIAO/ciao/Container_Base.cpp')
-rw-r--r--CIAO/ciao/Container_Base.cpp686
1 files changed, 0 insertions, 686 deletions
diff --git a/CIAO/ciao/Container_Base.cpp b/CIAO/ciao/Container_Base.cpp
deleted file mode 100644
index 1d6fea6ed12..00000000000
--- a/CIAO/ciao/Container_Base.cpp
+++ /dev/null
@@ -1,686 +0,0 @@
-// $Id$
-
-#include "Container_Base.h"
-#include "CIAO_common.h"
-#include "ace/DLL.h"
-#include "tao/Utils/PolicyList_Destroyer.h"
-#include "ace/OS_NS_stdio.h"
-#include "Servant_Activator.h"
-
-#if !defined (__ACE_INLINE__)
-# include "Container_Base.inl"
-#endif /* __ACE_INLINE__ */
-
-namespace CIAO
-{
- ////////////////////////////////////////////////////////////////
-
- Container::Container (CORBA::ORB_ptr o)
- : orb_ (CORBA::ORB::_duplicate (o)),
- container_impl_ (0)
- {
- }
-
- Container::Container (CORBA::ORB_ptr o, Container_Impl *container_impl)
- : orb_ (CORBA::ORB::_duplicate (o)),
- container_impl_ (container_impl)
- {
- }
-
- Container::~Container (void)
- {
- }
-
- PortableServer::POA_ptr
- Container::the_POA (void) const
- {
- return this->component_poa_.in ();
- }
-
- PortableServer::POA_ptr
- Container::the_facet_cons_POA (void) const
- {
- return this->facet_cons_poa_.in ();
- }
-
- CORBA::ORB_ptr
- Container::the_ORB (void) const
- {
- return this->orb_.in ();
- }
-
- ///////////////////////////////////////////////////////////////
-
- ACE_Atomic_Op <ACE_SYNCH_MUTEX, unsigned long>
- Session_Container::serial_number_ (0);
-
- Session_Container::Session_Container (CORBA::ORB_ptr o,
- Container_Impl *container_impl,
- bool static_config_flag,
- const Static_Config_EntryPoints_Maps* maps)
- : Container (o, container_impl),
- number_ (0),
- static_config_flag_ (static_config_flag),
- static_entrypts_maps_ (maps),
- sa_ (0)
- {
- }
-
- Session_Container::~Session_Container (void)
- {
- if (! CORBA::is_nil (this->component_poa_.in ()))
- {
- this->component_poa_->destroy (1, 1);
- }
-
- if (! CORBA::is_nil (this->facet_cons_poa_.in ()))
- {
- this->facet_cons_poa_->destroy (1, 1);
- }
-
- if (! CORBA::is_nil (this->home_servant_poa_.in ()))
- {
- this->home_servant_poa_->destroy (1, 1);
- }
-
- delete this->sa_;
- }
-
- int
- Session_Container::init (const char *name,
- const CORBA::PolicyList *more_policies
- ACE_ENV_ARG_DECL)
- ACE_THROW_SPEC ((CORBA::SystemException))
- {
- CIAO_TRACE ("Session_Container::init");
-
- char buffer[MAXPATHLEN];
-
- if (name == 0)
- {
- this->number_ = ++Session_Container::serial_number_;
- ACE_OS::sprintf (buffer,
- "CIAO::Session_Container-%ld",
- this->number_);
- name = buffer;
- }
-
- CORBA::Object_var poa_object =
- this->orb_->resolve_initial_references("RootPOA"
- ACE_ENV_ARG_PARAMETER);
- ACE_CHECK_RETURN (-1);
-
- if (CORBA::is_nil (poa_object.in ()))
- {
- ACE_ERROR_RETURN ((LM_ERROR,
- " (%P|%t) Unable to initialize the POA.\n"),
- -1);
- }
-
- PortableServer::POA_var root_poa =
- PortableServer::POA::_narrow (poa_object.in ()
- ACE_ENV_ARG_PARAMETER);
- ACE_CHECK_RETURN (-1);
-
- this->create_component_POA (name,
- more_policies,
- root_poa.in ()
- ACE_ENV_ARG_PARAMETER);
- ACE_CHECK_RETURN (-1);
-
- ACE_CString port_poa_name (name);
- port_poa_name += ":Port_POA";
- this->create_facet_consumer_POA (port_poa_name.c_str (),
- more_policies,
- root_poa.in ()
- ACE_ENV_ARG_PARAMETER);
- ACE_CHECK_RETURN (-1);
-
- PortableServer::POAManager_var poa_manager =
- root_poa->the_POAManager (ACE_ENV_SINGLE_ARG_PARAMETER);
- ACE_CHECK_RETURN (-1);
-
- poa_manager->activate (ACE_ENV_SINGLE_ARG_PARAMETER);
- ACE_CHECK_RETURN (-1);
-
- return 0;
- }
-
- void
- Session_Container::create_component_POA (const char *name,
- const CORBA::PolicyList *p,
- PortableServer::POA_ptr root
- ACE_ENV_ARG_DECL)
- {
- CIAO_TRACE ("Session_Container::create_component_POA");
-
- // Set up proper poa policies here. Default policies seems to be
- // fine for session container. If you add some other default
- // policies here, then you need to "add" more_policies below
- // instead of simply assigning more_policies to the init policy
- // list.
- CORBA::PolicyList policies (0);
-
- if (p != 0)
- {
- policies = *p;
- }
-
- PortableServer::POAManager_var poa_manager =
- root->the_POAManager (ACE_ENV_SINGLE_ARG_PARAMETER);
- ACE_CHECK;
-
- this->component_poa_ =
- root->create_POA (name,
- poa_manager.in (),
- policies
- ACE_ENV_ARG_PARAMETER);
- ACE_CHECK;
- }
-
- void
- Session_Container::create_facet_consumer_POA (
- const char *name,
- const CORBA::PolicyList *p,
- PortableServer::POA_ptr root
- ACE_ENV_ARG_DECL)
- {
- CIAO_TRACE ("Session_Container::create_facet_consumer_POA");
-
- PortableServer::POAManager_var poa_manager =
- root->the_POAManager (ACE_ENV_SINGLE_ARG_PARAMETER);
- ACE_CHECK;
-
- CORBA::ULong p_length = 0;
- if (p != 0)
- {
- p_length = p->length ();
- }
-
- TAO::Utils::PolicyList_Destroyer policies (p_length + 3);
- policies.length (p_length + 3);
-
- policies[0] =
- root->create_id_assignment_policy (PortableServer::USER_ID
- ACE_ENV_ARG_PARAMETER);
- ACE_CHECK;
-
- // Servant Manager Policy
- policies[1] =
- root->create_request_processing_policy
- (PortableServer::USE_SERVANT_MANAGER
- ACE_ENV_ARG_PARAMETER);
- ACE_CHECK;
-
- // Servant Retention Policy
- policies[2] =
- root->create_servant_retention_policy (PortableServer::RETAIN
- ACE_ENV_ARG_PARAMETER);
- ACE_CHECK;
-
- for (CORBA::ULong i = 0; i < p_length; ++i)
- {
- policies[i+3] = (*p)[i];
- }
-
- this->facet_cons_poa_ =
- root->create_POA (name,
- poa_manager.in (),
- policies
- ACE_ENV_ARG_PARAMETER);
- ACE_CHECK;
-
- ACE_NEW_THROW_EX (this->sa_,
- Servant_Activator (this->orb_.in ()),
- CORBA::NO_MEMORY ());
-
- this->facet_cons_poa_->set_servant_manager (
- this->sa_
- ACE_ENV_ARG_PARAMETER
- );
- ACE_CHECK;
- }
-
- CORBA::Object_ptr
- Session_Container::install_servant (PortableServer::Servant p,
- Container::OA_Type t
- ACE_ENV_ARG_DECL)
- ACE_THROW_SPEC ((CORBA::SystemException))
- {
- CIAO_TRACE ("Session_Container::install_servant");
-
- PortableServer::POA_ptr tmp = 0;
-
- if (t == Container::Component)
- {
- tmp = this->component_poa_.in ();
- }
- else
- {
- tmp = this->facet_cons_poa_.in ();
- }
-
- PortableServer::ObjectId_var oid =
- tmp->activate_object (p
- ACE_ENV_ARG_PARAMETER);
- ACE_CHECK_RETURN (0);
-
- CORBA::Object_var objref =
- tmp->id_to_reference (oid.in ()
- ACE_ENV_ARG_PARAMETER);
- ACE_CHECK_RETURN (0);
-
- return objref._retn ();
- }
-
- CORBA::Object_ptr
- Session_Container::install_component (PortableServer::Servant p,
- PortableServer::ObjectId_out oid
- ACE_ENV_ARG_DECL)
- ACE_THROW_SPEC ((CORBA::SystemException))
- {
- CIAO_TRACE ("Session_Container::install_component");
- PortableServer::ObjectId_var id =
- this->component_poa_->activate_object (p
- ACE_ENV_ARG_PARAMETER);
- ACE_CHECK_RETURN (0);
-
- CORBA::Object_var objref =
- this->component_poa_->id_to_reference (id.in ()
- ACE_ENV_ARG_PARAMETER);
- ACE_CHECK_RETURN (0);
-
- oid = id._retn ();
-
- return objref._retn ();
- }
-
-
- //@@ Apparently we need to be cautious when handling the exception
- // thrown here. We should make sure that new DnC interfaces
- // NodeApplication/NodeApplicationManager etc will cache the new
- // exceptions--> rethrow of new exceptions is needed.
- // --Tao
- Components::CCMHome_ptr
- Session_Container::ciao_install_home (const char *exe_dll_name,
- const char *exe_entrypt,
- const char *sv_dll_name,
- const char *sv_entrypt,
- const char *ins_name
- ACE_ENV_ARG_DECL)
- ACE_THROW_SPEC ((CORBA::SystemException,
- Deployment::UnknownImplId,
- Deployment::ImplEntryPointNotFound,
- Deployment::InstallationFailure))
- {
- CIAO_TRACE ("Session_Container::ciao_install_home");
-
- HomeFactory hcreator = 0;
- ServantFactory screator = 0;
-
- if (this->static_config_flag_ == false)
- {
- ACE_DLL executor_dll, servant_dll;
-
- if (exe_dll_name == 0 || sv_dll_name == 0)
- {
- ACE_CString exception;
-
- if (exe_dll_name == 0)
- {
- exception = "Null component executor DLL name";
- }
-
- if (sv_dll_name == 0)
- {
- exception = "Null component servant DLL name";
- }
-
- ACE_ERROR ((LM_ERROR,
- "CIAO (%P|%t) Container_Base.cpp -"
- "Session_Container::ciao_install_home -"
- "ERROR: %s\n",
- exception.c_str ()));
-
- ACE_THROW_RETURN
- (Deployment::UnknownImplId (
- "Session_Container::ciao_install_home",
- exception.c_str ()),
- Components::CCMHome::_nil ());
- }
-
- if (executor_dll.open (exe_dll_name,
- ACE_DEFAULT_SHLIB_MODE,
- 0) != 0)
- {
- ACE_CString error ("Failed to open executor DLL: ");
- error += exe_dll_name;
-
- ACE_ERROR ((LM_ERROR,
- "CIAO (%P|%t) Container_Base.cpp -"
- "Session_Container::ciao_install_home -"
- "ERROR in opening the executor DLL [%s] \n",
- exe_dll_name));
-
- ACE_THROW_RETURN
- (Deployment::UnknownImplId
- ("Session_Container::ciao_install_home",
- error.c_str ()), Components::CCMHome::_nil ());
- }
-
- if (servant_dll.open (sv_dll_name,
- ACE_DEFAULT_SHLIB_MODE,
- 0) != 0)
- {
- ACE_CString error ("Failed to open executor DLL: ");
- error += sv_dll_name;
-
- ACE_ERROR ((LM_ERROR,
- "CIAO (%P|%t) Container_Base.cpp -"
- "Session_Container::ciao_install_home -"
- "ERROR in opening the servant DLL [%s] \n",
- sv_dll_name));
-
- ACE_THROW_RETURN
- (Deployment::UnknownImplId
- ("Session_Container::ciao_install_home",
- error.c_str ()), Components::CCMHome::_nil ());
- }
-
- if (exe_entrypt == 0 || sv_entrypt == 0)
- {
- ACE_CString error ("Entry point is null for ");
-
- if (exe_entrypt == 0)
- {
- ACE_ERROR ((LM_ERROR,
- "CIAO (%P|%t) Container_Base.cpp -"
- "Session_Container::ciao_install_home -"
- "ERROR in opening the executor entry point "
- "for executor DLL [%s] \n",
- exe_dll_name));
- error += exe_dll_name;
- }
- else
- {
- ACE_ERROR ((LM_ERROR,
- "CIAO (%P|%t) Container_Base.cpp -"
- "Session_Container::ciao_install_home -"
- "ERROR in opening the servant entry point "
- "for servant DLL [%s] \n",
- sv_dll_name));
- error += sv_dll_name;
- }
-
- ACE_THROW_RETURN
- (Deployment::ImplEntryPointNotFound
- ("Session_Container::ciao_install_home",
- error.c_str ()), Components::CCMHome::_nil ());
- }
-
- // We have to do this casting in two steps because the C++
- // standard forbids casting a pointer-to-object (including
- // void*) directly to a pointer-to-function.
- void *void_ptr = executor_dll.symbol (exe_entrypt);
- ptrdiff_t tmp_ptr = reinterpret_cast<ptrdiff_t> (void_ptr);
- hcreator = reinterpret_cast<HomeFactory> (tmp_ptr);
-
- void_ptr = servant_dll.symbol (sv_entrypt);
- tmp_ptr = reinterpret_cast<ptrdiff_t> (void_ptr);
- screator = reinterpret_cast<ServantFactory> (tmp_ptr);
- }
- else
- {
- if (static_entrypts_maps_ == 0
- || static_entrypts_maps_->home_creator_funcptr_map_ == 0
- || static_entrypts_maps_->home_servant_creator_funcptr_map_ == 0)
- {
- ACE_THROW_RETURN (Deployment::ImplEntryPointNotFound (),
- Components::CCMHome::_nil ());
- }
-
- ACE_CString exe_entrypt_str (exe_entrypt);
- static_entrypts_maps_->home_creator_funcptr_map_->find (
- exe_entrypt_str,
- hcreator
- );
-
- ACE_CString sv_entrypt_str (sv_entrypt);
- static_entrypts_maps_->home_servant_creator_funcptr_map_->find (
- sv_entrypt_str,
- screator
- );
- }
-
- if (hcreator == 0 || screator == 0)
- {
- ACE_CString error ("Entry point ");
-
- if (hcreator == 0)
- {
- error += exe_entrypt;
- error += " invalid in dll ";
- error += exe_dll_name;
- }
- else
- {
- error += sv_entrypt;
- error += " invalid in dll ";
- error += sv_dll_name;
- }
-
- ACE_THROW_RETURN
- (Deployment::ImplEntryPointNotFound
- ("SessionContainer::ciao_install_home",
- error.c_str ()), Components::CCMHome::_nil ());
- }
-
- Components::HomeExecutorBase_var home_executor = hcreator ();
-
- if (CORBA::is_nil (home_executor.in ()))
- {
- ACE_THROW_RETURN
- (Deployment::InstallationFailure
- ("SessionContainer::ciao_install_home",
- "Executor entrypoint failed to create a home."),
- Components::CCMHome::_nil ());
- }
-
- PortableServer::Servant home_servant = screator (home_executor.in (),
- this,
- ins_name
- ACE_ENV_ARG_PARAMETER);
- ACE_CHECK_RETURN (Components::CCMHome::_nil ());
-
- if (home_servant == 0)
- {
- ACE_THROW_RETURN
- (Deployment::InstallationFailure
- ("SessionContainer::ciao_install_home",
- "Servant entrypoing failed to create a home."),
- Components::CCMHome::_nil ());
- }
-
- PortableServer::ServantBase_var safe (home_servant);
-
- CORBA::Object_var objref =
- this->install_servant (home_servant,
- Container::Component
- ACE_ENV_ARG_PARAMETER);
- ACE_CHECK_RETURN (Components::CCMHome::_nil ());
-
- Components::CCMHome_var homeref =
- Components::CCMHome::_narrow (objref.in ()
- ACE_ENV_ARG_PARAMETER);
- ACE_CHECK_RETURN (0);
-
- return homeref._retn ();
- }
-
- void
- Session_Container::ciao_uninstall_home (Components::CCMHome_ptr homeref
- ACE_ENV_ARG_DECL)
- ACE_THROW_SPEC ((CORBA::SystemException))
- {
- CIAO_TRACE ("Session_Container::ciao_uninstall_home");
-
- this->uninstall (homeref,
- Container::Component
- ACE_ENV_ARG_PARAMETER);
- ACE_CHECK;
- }
-
- void
- Session_Container::uninstall (CORBA::Object_ptr objref,
- Container::OA_Type t
- ACE_ENV_ARG_DECL)
- ACE_THROW_SPEC ((CORBA::SystemException))
- {
- CIAO_TRACE ("Session_Container::uninstall");
-
- PortableServer::POA_ptr tmp = 0;
-
- if (t == Container::Component)
- {
- tmp = this->component_poa_.in ();
- }
- else
- {
- tmp = this->facet_cons_poa_.in ();
- }
-
- PortableServer::ObjectId_var oid =
- tmp->reference_to_id (objref
- ACE_ENV_ARG_PARAMETER);
- ACE_CHECK;
-
- tmp->deactivate_object (oid.in ()
- ACE_ENV_ARG_PARAMETER);
- ACE_CHECK;
- }
-
- void
- Session_Container::uninstall (PortableServer::Servant svt,
- Container::OA_Type t
- ACE_ENV_ARG_DECL)
- ACE_THROW_SPEC ((CORBA::SystemException))
- {
- CIAO_TRACE ("Session_Container::uninstall");
- PortableServer::POA_ptr tmp = 0;
-
- if (t == Container::Component)
- {
- tmp = this->component_poa_.in ();
- }
- else
- {
- tmp = this->facet_cons_poa_.in ();
- }
-
- PortableServer::ObjectId_var oid
- = tmp->servant_to_id (svt
- ACE_ENV_ARG_PARAMETER);
- ACE_CHECK;
-
- tmp->deactivate_object (oid.in ()
- ACE_ENV_ARG_PARAMETER);
- ACE_CHECK;
- }
-
- void
- Session_Container::uninstall_component (Components::CCMObject_ptr objref,
- PortableServer::ObjectId_out oid
- ACE_ENV_ARG_DECL)
- ACE_THROW_SPEC ((CORBA::SystemException))
- {
- CIAO_TRACE ("Session_Container::uninstall_component");
-
- PortableServer::ObjectId_var id =
- this->component_poa_->reference_to_id (objref
- ACE_ENV_ARG_PARAMETER);
- ACE_CHECK;
-
- this->component_poa_->deactivate_object (id.in ()
- ACE_ENV_ARG_PARAMETER);
- ACE_CHECK;
-
- oid = id._retn ();
- }
-
- void
- Session_Container::add_servant_map (
- PortableServer::ObjectId &,
- Dynamic_Component_Servant_Base*
- ACE_ENV_ARG_DECL_NOT_USED
- )
- {
- CIAO_TRACE ("Session_Container::add_servant_map");
- }
-
- void
- Session_Container::deactivate_facet (const PortableServer::ObjectId &
- ACE_ENV_ARG_DECL_NOT_USED)
- ACE_THROW_SPEC ((CORBA::SystemException))
- {
- CIAO_TRACE ("Session_Container::deactivate_facet");
- }
-
- void
- Session_Container::delete_servant_map (
- PortableServer::ObjectId &
- ACE_ENV_ARG_DECL_NOT_USED
- )
- {
- CIAO_TRACE ("Session_Container::delete_servant_map");
- }
-
- CORBA::Object_ptr
- Session_Container::get_home_objref (PortableServer::Servant
- ACE_ENV_ARG_DECL)
- ACE_THROW_SPEC ((CORBA::SystemException))
- {
- CIAO_TRACE ("Session_Container::get_home_objref");
- ACE_THROW_RETURN (CORBA::NO_IMPLEMENT (), 0);
- }
-
- CORBA::Object_ptr
- Session_Container::generate_reference (const char *obj_id,
- const char *repo_id,
- Container::OA_Type t
- ACE_ENV_ARG_DECL)
- {
- CIAO_TRACE ("Session_Container::generate_reference");
-
- PortableServer::POA_ptr tmp = 0;
-
- if (t == Container::Component)
- {
- tmp = this->component_poa_.in ();
- }
- else
- {
- tmp = this->facet_cons_poa_.in ();
- }
-
- PortableServer::ObjectId_var oid =
- PortableServer::string_to_ObjectId (obj_id);
-
- CORBA::String_var str =
- PortableServer::ObjectId_to_string (oid.in ());
-
- if (t == Container::Facet_Consumer)
- {
- //if (CIAO::debug_level () > 9)
- // ACE_DEBUG ((LM_DEBUG, "STRING in container is %s\n",
- // str.in ()));
- }
-
- CORBA::Object_var objref =
- tmp->create_reference_with_id (oid.in (),
- repo_id
- ACE_ENV_ARG_PARAMETER);
- ACE_CHECK_RETURN (CORBA::Object::_nil ());
-
- return objref._retn ();
- }
-}