summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWilliam R. Otte <wotte@dre.vanderbilt.edu>2009-12-07 14:11:42 +0000
committerWilliam R. Otte <wotte@dre.vanderbilt.edu>2009-12-07 14:11:42 +0000
commit8cf95950bb429724a2c2ce7465432a3999909302 (patch)
tree8ec0b48d0cd7156d2fc1ddd2d8712a5a1e66f592
parent74a1cb1b9476872567767b30aa3384ebbedb033e (diff)
downloadATCD-8cf95950bb429724a2c2ce7465432a3999909302.tar.gz
Mon Dec 7 14:11:14 UTC 2009 William R. Otte <wotte@dre.vanderbilt.edu>
-rw-r--r--CIAO/ChangeLog22
-rw-r--r--CIAO/ciao/ComponentServer/CIAO_ComponentServer.idl13
-rw-r--r--CIAO/ciao/ComponentServer/CIAO_Container_Impl.cpp17
-rw-r--r--CIAO/ciao/ComponentServer/CIAO_Container_Impl.h10
-rw-r--r--CIAO/ciao/Containers/Container_Base.idl14
-rw-r--r--CIAO/ciao/Containers/Session/Session_Container.cpp120
-rw-r--r--CIAO/ciao/Containers/Session/Session_Container.h14
-rw-r--r--CIAO/ciao/Servants/Servant_Impl_Base.h2
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,