diff options
author | William R. Otte <wotte@dre.vanderbilt.edu> | 2009-12-07 14:11:42 +0000 |
---|---|---|
committer | William R. Otte <wotte@dre.vanderbilt.edu> | 2009-12-07 14:11:42 +0000 |
commit | 8cf95950bb429724a2c2ce7465432a3999909302 (patch) | |
tree | 8ec0b48d0cd7156d2fc1ddd2d8712a5a1e66f592 | |
parent | 74a1cb1b9476872567767b30aa3384ebbedb033e (diff) | |
download | ATCD-8cf95950bb429724a2c2ce7465432a3999909302.tar.gz |
Mon Dec 7 14:11:14 UTC 2009 William R. Otte <wotte@dre.vanderbilt.edu>
-rw-r--r-- | CIAO/ChangeLog | 22 | ||||
-rw-r--r-- | CIAO/ciao/ComponentServer/CIAO_ComponentServer.idl | 13 | ||||
-rw-r--r-- | CIAO/ciao/ComponentServer/CIAO_Container_Impl.cpp | 17 | ||||
-rw-r--r-- | CIAO/ciao/ComponentServer/CIAO_Container_Impl.h | 10 | ||||
-rw-r--r-- | CIAO/ciao/Containers/Container_Base.idl | 14 | ||||
-rw-r--r-- | CIAO/ciao/Containers/Session/Session_Container.cpp | 120 | ||||
-rw-r--r-- | CIAO/ciao/Containers/Session/Session_Container.h | 14 | ||||
-rw-r--r-- | CIAO/ciao/Servants/Servant_Impl_Base.h | 2 |
8 files changed, 205 insertions, 7 deletions
diff --git a/CIAO/ChangeLog b/CIAO/ChangeLog index b337b098ada..f0531f42dce 100644 --- a/CIAO/ChangeLog +++ b/CIAO/ChangeLog @@ -1,15 +1,27 @@ +Mon Dec 7 14:11:14 UTC 2009 William R. Otte <wotte@dre.vanderbilt.edu> + + * ciao/ComponentServer/CIAO_ComponentServer.idl: + * ciao/ComponentServer/CIAO_Container_Impl.h: + * ciao/ComponentServer/CIAO_Container_Impl.cpp: + * ciao/Containers/Container_Base.idl: + * ciao/Containers/Session/Session_Container.h: + * ciao/Containers/Session/Session_Container.cpp: + * ciao/Servants/Servant_Impl_Base.h: + + Container code. + Sat Dec 5 05:33:43 UTC 2009 William R. Otte <wotte@dre.vanderbilt.edu> * DAnCE/Deployment/Deployment_DeploymentPlan.idl: * DAnCE/NodeApplication/NodeApplication_Impl.h: * DAnCE/NodeApplication/NodeApplication_Impl.cpp: - Infrastructure to connect local interfaces. - + Infrastructure to connect local interfaces. + * tests/IDL_Test/Local_Facet/Local_Facet.mpc: - - Enabled test. - + + Enabled test. + Local Variables: mode: change-log add-log-time-format: (lambda () (progn (setq tz (getenv "TZ")) (set-time-zone-rule "UTC") (setq time (format-time-string "%a %b %e %H:%M:%S %Z %Y" (current-time))) (set-time-zone-rule tz) time)) diff --git a/CIAO/ciao/ComponentServer/CIAO_ComponentServer.idl b/CIAO/ciao/ComponentServer/CIAO_ComponentServer.idl index 14290ae6683..4cb7c9beadc 100644 --- a/CIAO/ciao/ComponentServer/CIAO_ComponentServer.idl +++ b/CIAO/ciao/ComponentServer/CIAO_ComponentServer.idl @@ -59,6 +59,19 @@ module CIAO /// Returns a sequence of all homeless components. ::Components::CCMObjectSeq get_components (); + + void connect_local_facet (in ::Components::CCMObject provider_ref, + in string provider_port, + in ::Components::CCMObject user_ref, + in string user_port) + raises (::Components::InvalidConnection, + ::Components::AlreadyConnected); + + void disconnect_local_facet (in ::Components::CCMObject provider_ref, + in string provider_port, + in ::Components::CCMObject user_ref, + in string user_port) + raises (::Components::InvalidConnection); }; }; }; diff --git a/CIAO/ciao/ComponentServer/CIAO_Container_Impl.cpp b/CIAO/ciao/ComponentServer/CIAO_Container_Impl.cpp index e5c750cbf63..25284cc0d55 100644 --- a/CIAO/ciao/ComponentServer/CIAO_Container_Impl.cpp +++ b/CIAO/ciao/ComponentServer/CIAO_Container_Impl.cpp @@ -467,5 +467,22 @@ namespace CIAO CIAO_TRACE ("CIAO_Container_i::_default_POA"); return PortableServer::POA::_duplicate (this->poa_.in ()); } + + void CIAO_Container_i::connect_local_facet (::Components::CCMObject_ptr provider, + const char * provider_port, + ::Components::CCMObject_ptr user, + const char * user_port) + { + CIAO_TRACE ("CIAO_Container_i::connect_local_facet"); + } + + void CIAO_Container_i::disconnect_local_facet (::Components::CCMObject_ptr provider, + const char * provider_port, + ::Components::CCMObject_ptr user, + const char * user_port) + { + CIAO_TRACE ("CIAO_Container_i::connect_local_facet"); + + } } } diff --git a/CIAO/ciao/ComponentServer/CIAO_Container_Impl.h b/CIAO/ciao/ComponentServer/CIAO_Container_Impl.h index a2b9fb13f18..80cc987d661 100644 --- a/CIAO/ciao/ComponentServer/CIAO_Container_Impl.h +++ b/CIAO/ciao/ComponentServer/CIAO_Container_Impl.h @@ -71,6 +71,16 @@ namespace CIAO virtual void passivate_component (::Components::CCMObject_ptr comp); virtual PortableServer::POA_ptr _default_POA (void); + + virtual void connect_local_facet (::Components::CCMHome_ptr provider, + const char * provider_port, + ::Components::CCMHome_ptr user, + const char * user_port); + + virtual void disconnect_local_facet (::Components::CCMHome_ptr provider, + const char * provider_port, + ::Components::CCMHome_ptr user, + const char * user_port); private: /// Keep a pointer to the managing ORB serving this servant. diff --git a/CIAO/ciao/Containers/Container_Base.idl b/CIAO/ciao/Containers/Container_Base.idl index 01a79b71a15..8c29b6817a3 100644 --- a/CIAO/ciao/Containers/Container_Base.idl +++ b/CIAO/ciao/Containers/Container_Base.idl @@ -7,6 +7,7 @@ #include "tao/PortableServer/PortableServer_include.pidl" #include "ccm/CCM_Home.idl" +#include "ccm/CCM_Base.idl" #include "ciao/Containers/CIAO_Servant_Activator.idl" module CIAO @@ -57,7 +58,20 @@ module CIAO void passivate_component (in Components::CCMObject name); void uninstall_component (in Components::CCMObject compptr); + + void connect_local_facet (in ::Components::CCMObject provider_ref, + in string provider_port, + in ::Components::CCMObject user_ref, + in string user_port) + raises (::Components::InvalidConnection, + ::Components::AlreadyConnected); + void disconnect_local_facet (in ::Components::CCMObject provider_ref, + in string provider_port, + in ::Components::CCMObject user_ref, + in string user_port) + raises (::Components::InvalidConnection); + // *** Methods used by component specific container portions Object install_servant (in PortableServer::Servant svnt, in Container_Types::OA_Type type, diff --git a/CIAO/ciao/Containers/Session/Session_Container.cpp b/CIAO/ciao/Containers/Session/Session_Container.cpp index 10b50febab7..27e80d37a76 100644 --- a/CIAO/ciao/Containers/Session/Session_Container.cpp +++ b/CIAO/ciao/Containers/Session/Session_Container.cpp @@ -639,6 +639,126 @@ namespace CIAO return componentref._retn (); } + void + Session_Container::connect_local_facet (::Components::CCMObject_ptr provider, + const char * provider_port, + ::Components::CCMObject_ptr user, + const char * user_port) + { + CIAO_TRACE ("Session_Container::connect_local_facet"); + + if (provider_port == 0 || user_port == 0) + { + CIAO_ERROR ((LM_ERROR, CLINFO "Session_Container::connect_local_facet - " + "Nil port name provided to connect local facet, throwing exception\n")); + throw ::Components::InvalidConnection (); + } + + PortableServer::Servant srv_tmp; + + CIAO::Servant_Impl_Base *prov_serv (0), *user_serv (0); + + try + { + srv_tmp = this->component_poa_->reference_to_servant (provider); + CIAO_DEBUG ((LM_TRACE, CLINFO "Session_Container::connect_local_facet - " + "Successfully fetched provider servant from POA\n")); + + prov_serv = dynamic_cast<CIAO::Servant_Impl_Base *> (srv_tmp); + + if (prov_serv == 0) + { + CIAO_ERROR ((LM_ERROR, CLINFO "Session_Container::connect_local_facet - " + "Unable to cast to provider servant implementation\n")); + throw ::Components::InvalidConnection (); + } + + srv_tmp = this->component_poa_->reference_to_servant (user); + CIAO_DEBUG ((LM_TRACE, CLINFO "Session_Container::connect_local_facet - " + "Successfully fetched user servant from POA\n")); + + user_serv = dynamic_cast<CIAO::Servant_Impl_Base *> (srv_tmp); + + if (user_serv == 0) + { + CIAO_ERROR ((LM_ERROR, CLINFO "Session_Container::connect_local_facet - " + "Unable to cast to provider servant implementation\n")); + throw ::Components::InvalidConnection (); + } + } + catch (::Components::InvalidConnection &ex) + { + throw; + } + catch (...) + { + CIAO_ERROR ((LM_ERROR, CLINFO "Session_Container::connect_local_facet - " + "Attempting to connect components not managed by this container.\n")); + throw ::Components::InvalidConnection (); + } + + try + { + ::CORBA::LocalObject_ptr exec (prov_serv->get_facet_executor (provider_port)); + + // Note: Spec says that facet executor provided by component MAY BE NIL + + } + } + + void + Session_Container::disconnect_local_facet (::Components::CCMObject_ptr provider, + const char * provider_port, + ::Components::CCMObject_ptr user, + const char * user_port) + { + CIAO_TRACE ("Session_Container::connect_local_facet"); + + PortableServer::Servant srv_tmp; + + CIAO::Servant_Impl_Base *prov_serv (0), *user_serv (0); + + try + { + srv_tmp = this->component_poa_->reference_to_servant (provider); + CIAO_DEBUG ((LM_TRACE, CLINFO "Session_Container::disconnect_local_facet - " + "Successfully fetched provider servant from POA\n")); + + prov_serv = dynamic_cast<CIAO::Servant_Impl_Base *> (srv_tmp); + + if (prov_serv == 0) + { + CIAO_ERROR ((LM_ERROR, CLINFO "Session_Container::disconnect_local_facet - " + "Unable to cast to provider servant implementation\n")); + throw ::Components::InvalidConnection (); + } + + srv_tmp = this->component_poa_->reference_to_servant (user); + CIAO_DEBUG ((LM_TRACE, CLINFO "Session_Container::disconnect_local_facet - " + "Successfully fetched user servant from POA\n")); + + user_serv = dynamic_cast<CIAO::Servant_Impl_Base *> (srv_tmp); + + if (user_serv == 0) + { + CIAO_ERROR ((LM_ERROR, CLINFO "Session_Container::disconnect_local_facet - " + "Unable to cast to provider servant implementation\n")); + throw ::Components::InvalidConnection (); + } + } + catch (::Components::InvalidConnection &ex) + { + throw; + } + catch (...) + { + CIAO_ERROR ((LM_ERROR, CLINFO "Session_Container::disconnect_local_facet - " + "Attempting to connect components not managed by this container.\n")); + throw ::Components::InvalidConnection (); + } + + } + void Session_Container::activate_component (Components::CCMObject_ptr compref) { diff --git a/CIAO/ciao/Containers/Session/Session_Container.h b/CIAO/ciao/Containers/Session/Session_Container.h index b61a3d546d7..dd3b220a0d9 100644 --- a/CIAO/ciao/Containers/Session/Session_Container.h +++ b/CIAO/ciao/Containers/Session/Session_Container.h @@ -128,8 +128,18 @@ namespace CIAO const char *servant_artifact, const char *servant_entrypoint, const char *name); - - /// Activate component + + virtual void connect_local_facet (::Components::CCMObject_ptr provider, + const char * provider_port, + ::Components::CCMObject_ptr user, + const char * user_port); + + virtual void disconnect_local_facet (::Components::CCMObject_ptr provider, + const char * provider_port, + ::Components::CCMObject_ptr user, + const char * user_port); + + /// Activate component virtual void activate_component (Components::CCMObject_ptr compref); virtual void passivate_component (Components::CCMObject_ptr compref); diff --git a/CIAO/ciao/Servants/Servant_Impl_Base.h b/CIAO/ciao/Servants/Servant_Impl_Base.h index 584c27bdb06..486dc2f1eb9 100644 --- a/CIAO/ciao/Servants/Servant_Impl_Base.h +++ b/CIAO/ciao/Servants/Servant_Impl_Base.h @@ -171,6 +171,8 @@ namespace CIAO virtual ::CORBA::Object_ptr disconnect (const char * name, ::Components::Cookie * ck); + + virtual ::CORBA::Object_ptr get_facet_executor (const char *name) = 0; protected: void add_facet (const char *port_name, |