summaryrefslogtreecommitdiff
path: root/CIAO/ciao/Session_Container.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'CIAO/ciao/Session_Container.cpp')
-rw-r--r--CIAO/ciao/Session_Container.cpp534
1 files changed, 0 insertions, 534 deletions
diff --git a/CIAO/ciao/Session_Container.cpp b/CIAO/ciao/Session_Container.cpp
deleted file mode 100644
index 76779a21100..00000000000
--- a/CIAO/ciao/Session_Container.cpp
+++ /dev/null
@@ -1,534 +0,0 @@
-// $Id$
-
-#include "Session_Container.h"
-#include "Servant_Activator.h"
-
-#include "DAnCE/Deployment/Deployment_CoreC.h"
-#include "CIAO_common.h"
-
-#include "tao/Utils/PolicyList_Destroyer.h"
-
-#if !defined (__ACE_INLINE__)
-# include "Session_Container.inl"
-#endif /* __ACE_INLINE__ */
-
-namespace CIAO
-{
- ///////////////////////////////////////////////////////////////
-
- ACE_Atomic_Op <TAO_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)
- {
- 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");
-
- 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 ());
-
- this->create_component_POA (name,
- more_policies,
- root_poa.in ());
-
- 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 ());
-
- PortableServer::POAManager_var poa_manager =
- root_poa->the_POAManager ();
-
- poa_manager->activate ();
-
- return 0;
- }
-
- void
- Session_Container::create_component_POA (const char *name,
- const CORBA::PolicyList *p,
- PortableServer::POA_ptr root)
- {
- 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 ();
-
- this->component_poa_ =
- root->create_POA (name,
- poa_manager.in (),
- policies);
- }
-
- void
- Session_Container::create_facet_consumer_POA (const char *name,
- const CORBA::PolicyList *p,
- PortableServer::POA_ptr root)
- {
- CIAO_TRACE ("Session_Container::create_facet_consumer_POA");
-
- PortableServer::POAManager_var poa_manager = root->the_POAManager ();
- 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);
-
- // Servant Manager Policy
- policies[1] =
- root->create_request_processing_policy (
- PortableServer::USE_SERVANT_MANAGER);
-
- // Servant Retention Policy
- policies[2] =
- root->create_servant_retention_policy (PortableServer::RETAIN);
-
- 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_NEW_THROW_EX (this->sa_,
- Servant_Activator (this->orb_.in ()),
- CORBA::NO_MEMORY ());
-
- this->facet_cons_poa_->set_servant_manager (this->sa_);
- }
-
- CORBA::Object_ptr
- Session_Container::install_servant (PortableServer::Servant p,
- Container::OA_Type t)
- {
- 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);
-
- CORBA::Object_var objref = tmp->id_to_reference (oid.in ());
-
- return objref._retn ();
- }
-
- CORBA::Object_ptr
- Session_Container::install_component (PortableServer::Servant p,
- PortableServer::ObjectId_out oid)
- {
- CIAO_TRACE ("Session_Container::install_component");
- PortableServer::ObjectId_var id =
- this->component_poa_->activate_object (p);
-
- CORBA::Object_var objref =
- this->component_poa_->id_to_reference (id.in ());
-
- 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)
- {
- 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) Session_Container.cpp -"
- "Session_Container::ciao_install_home -"
- "ERROR: %s\n",
- exception.c_str ()));
-
- throw Deployment::UnknownImplId (
- "Session_Container::ciao_install_home",
- exception.c_str ());
- }
-
- 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) Session_Container.cpp -"
- "Session_Container::ciao_install_home -"
- "ERROR in opening the executor DLL [%s] \n",
- exe_dll_name));
-
- throw Deployment::UnknownImplId (
- "Session_Container::ciao_install_home",
- error.c_str ());
- }
-
- 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) Session_Container.cpp -"
- "Session_Container::ciao_install_home -"
- "ERROR in opening the servant DLL [%s] \n",
- sv_dll_name));
-
- throw Deployment::UnknownImplId (
- "Session_Container::ciao_install_home",
- error.c_str ());
- }
-
- 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) Session_Container.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) Session_Container.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;
- }
-
- throw Deployment::ImplEntryPointNotFound (
- "Session_Container::ciao_install_home",
- error.c_str ());
- }
-
- // 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)
- {
- throw Deployment::ImplEntryPointNotFound ();
- }
-
- 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;
- }
-
- throw Deployment::ImplEntryPointNotFound (
- "SessionContainer::ciao_install_home",
- error.c_str ());
- }
-
- Components::HomeExecutorBase_var home_executor = hcreator ();
-
- if (CORBA::is_nil (home_executor.in ()))
- {
- throw Deployment::InstallationFailure (
- "SessionContainer::ciao_install_home",
- "Executor entrypoint failed to create a home.");
- }
-
- PortableServer::Servant home_servant = screator (home_executor.in (),
- this,
- ins_name);
-
- if (home_servant == 0)
- {
- throw Deployment::InstallationFailure (
- "SessionContainer::ciao_install_home",
- "Servant entrypoing failed to create a home.");
- }
-
- PortableServer::ServantBase_var safe (home_servant);
-
- CORBA::Object_var objref =
- this->install_servant (home_servant, Container::Component);
-
- Components::CCMHome_var homeref =
- Components::CCMHome::_narrow (objref.in ());
-
- return homeref._retn ();
- }
-
- void
- Session_Container::ciao_uninstall_home (Components::CCMHome_ptr homeref)
- {
- CIAO_TRACE ("Session_Container::ciao_uninstall_home");
-
- this->uninstall (homeref, Container::Component);
- }
-
- void
- Session_Container::uninstall (CORBA::Object_ptr objref,
- Container::OA_Type t)
- {
- 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);
-
- tmp->deactivate_object (oid.in ());
- }
-
- void
- Session_Container::uninstall (PortableServer::Servant svt,
- Container::OA_Type t)
- {
- 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);
-
- tmp->deactivate_object (oid.in ());
- }
-
- void
- Session_Container::uninstall_component (Components::CCMObject_ptr objref,
- PortableServer::ObjectId_out oid)
- {
- CIAO_TRACE ("Session_Container::uninstall_component");
-
- PortableServer::ObjectId_var id =
- this->component_poa_->reference_to_id (objref);
-
- this->component_poa_->deactivate_object (id.in ());
-
- oid = id._retn ();
- }
-
- void
- Session_Container::add_servant_to_map (PortableServer::ObjectId &,
- Dynamic_Component_Servant_Base*)
- {
- CIAO_TRACE ("Session_Container::add_servant_to_map");
- }
-
- void
- Session_Container::deactivate_facet (const PortableServer::ObjectId &)
- {
- CIAO_TRACE ("Session_Container::deactivate_facet");
- }
-
- void
- Session_Container::delete_servant_from_map (PortableServer::ObjectId &)
- {
- CIAO_TRACE ("Session_Container::delete_servant_from_map");
- }
-
- CORBA::Object_ptr
- Session_Container::get_home_objref (PortableServer::Servant)
- {
- CIAO_TRACE ("Session_Container::get_home_objref");
- throw CORBA::NO_IMPLEMENT ();
- }
-
- CORBA::Object_ptr
- Session_Container::generate_reference (const char *obj_id,
- const char *repo_id,
- Container::OA_Type t)
- {
- 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 ());
-
- CORBA::Object_var objref =
- tmp->create_reference_with_id (oid.in (), repo_id);
-
- return objref._retn ();
- }
-}