summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordengg <dengg@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2006-03-28 01:04:00 +0000
committerdengg <dengg@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2006-03-28 01:04:00 +0000
commite83111f5f50c162603c5984c179e784971d00e4a (patch)
tree7e4fde1f1216332fbc597881e8d51697e75dec50
parent843d2c548e7ba3f46bfcd0455c81950847e49644 (diff)
downloadATCD-e83111f5f50c162603c5984c179e784971d00e4a.tar.gz
.
-rw-r--r--TAO/CIAO/DAnCE/DomainApplicationManager/DomainApplicationManager_Impl.cpp16
-rw-r--r--TAO/CIAO/DAnCE/NodeApplication/NodeApplication_Impl.cpp21
-rw-r--r--TAO/CIAO/DAnCE/NodeApplication/NodeApplication_Impl.h10
-rw-r--r--TAO/CIAO/ciao/Deployment_Core.idl4
-rw-r--r--TAO/CIAO/ciao/Deployment_Events.idl18
-rw-r--r--TAO/CIAO/ciaosvcs/Events/CIAO_EventServiceBase.h25
-rw-r--r--TAO/CIAO/ciaosvcs/Events/CIAO_EventService_Factory_impl.cpp9
-rw-r--r--TAO/CIAO/ciaosvcs/Events/CIAO_Events.idl8
-rw-r--r--TAO/CIAO/ciaosvcs/Events/CIAO_RTEC/CIAO_RTEvent.h3
9 files changed, 94 insertions, 20 deletions
diff --git a/TAO/CIAO/DAnCE/DomainApplicationManager/DomainApplicationManager_Impl.cpp b/TAO/CIAO/DAnCE/DomainApplicationManager/DomainApplicationManager_Impl.cpp
index d6570cc6cfa..7d7ffad9aab 100644
--- a/TAO/CIAO/DAnCE/DomainApplicationManager/DomainApplicationManager_Impl.cpp
+++ b/TAO/CIAO/DAnCE/DomainApplicationManager/DomainApplicationManager_Impl.cpp
@@ -659,13 +659,24 @@ install_all_es (void)
// Construct the ESInstallationInfos data
Deployment::ESInstallationInfos_var es_infos;
ACE_NEW (es_infos,
- Deployment::ESInstallationInfos);
+ Deployment::ESInstallationInfos);
es_infos->length (1);
(*es_infos)[0].id = es[j].name.in ();
(*es_infos)[0].type = CIAO::RTEC; //only RTEC is supported so far
(*es_infos)[0].svcconf = es[j].svc_cfg_file.in ();
+ // Populate the "filters" info, in case this CIAO_Event_Service has
+ // one or more filters specified through descriptors
+ for (CORBA::ULong k = 0; k < es[j].filters.length (); ++k)
+ {
+ CORBA::ULong len = (*es_infos)[0].es_config.length ();
+ (*es_infos)[0].es_config.length (len + 1);
+ (*es_infos)[0].es_config[len].name =
+ CORBA::string_dup ("RtecFilter");
+ (*es_infos)[0].es_config[len].value <<= es[j].filters;
+ }
+
// Find NA, and then invoke operation on it
ACE_Hash_Map_Entry <ACE_CString, Chained_Artifacts> *entry = 0;
@@ -1297,6 +1308,9 @@ handle_es_connection (
retv[len].endpointInstanceName = es_id.c_str ();
retv[len].endpointPortName = "CIAO_ES";
+ if (binding.deployRequirement.length () != 0)
+ retv[len].config = binding.deployRequirement[0].property;
+
// If we didnt find the objref of the connection ...
CIAO::CIAO_Event_Service_var es;
diff --git a/TAO/CIAO/DAnCE/NodeApplication/NodeApplication_Impl.cpp b/TAO/CIAO/DAnCE/NodeApplication/NodeApplication_Impl.cpp
index 40c96f3095d..d7ec74d3b02 100644
--- a/TAO/CIAO/DAnCE/NodeApplication/NodeApplication_Impl.cpp
+++ b/TAO/CIAO/DAnCE/NodeApplication/NodeApplication_Impl.cpp
@@ -3,6 +3,7 @@
#include "NodeApplication_Impl.h"
#include "ace/SString.h"
#include "Container_Impl.h"
+#include "Deployment_EventsC.h"
#if !defined (__ACE_INLINE__)
# include "NodeApplication_Impl.inl"
@@ -990,6 +991,26 @@ handle_es_consumer_connection (
consumer_config->consumer_id (cid.c_str ());
consumer_config->consumer (consumer.in ());
+ // Need to setup a filter, if it's specified in the descriptor
+ for (CORBA::ULong i = 0; i < connection.config.length (); ++i)
+ {
+ if (ACE_OS::strcmp (connection.config[i].name.in (),
+ "RtecFilter") != 0)
+ continue;
+
+ // Extract the filter information
+ CIAO::DAnCE::EventFilter *filter = 0;
+ connection.config[i].value >>= filter;
+
+ CORBA::ULong size = (*filter).sources.length ();
+ consumer_config->start_disjunction_group (size);
+
+ for (CORBA::ULong j = 0; j < size; ++j)
+ {
+ consumer_config->insert_source ((*filter).sources[j].in ());
+ }
+ }
+
event_service->connect_event_consumer (consumer_config.in ());
consumer_config->destroy ();
diff --git a/TAO/CIAO/DAnCE/NodeApplication/NodeApplication_Impl.h b/TAO/CIAO/DAnCE/NodeApplication/NodeApplication_Impl.h
index b59209ccb7e..fa4275973a9 100644
--- a/TAO/CIAO/DAnCE/NodeApplication/NodeApplication_Impl.h
+++ b/TAO/CIAO/DAnCE/NodeApplication/NodeApplication_Impl.h
@@ -356,6 +356,16 @@ namespace CIAO
/// A factory to create CIAO event services
EventService_Factory_impl es_factory_;
+ /// Cache the (NA specific) installation info of all the
+ /// CIAO_Event_Services
+ typedef ACE_Hash_Map_Manager_Ex<ACE_CString,
+ ::Deployment::ESInstallationInfos_var,
+ ACE_Hash<ACE_CString>,
+ ACE_Equal_To<ACE_CString>,
+ ACE_Null_Mutex> ES_Installation_Map;
+ typedef ES_Installation_Map::iterator ES_Installation_Map_Iterator;
+ ES_Installation_Map es_info_map_;
+
const Static_Config_EntryPoints_Maps* static_entrypts_maps_;
private:
/// Default constructor, noop
diff --git a/TAO/CIAO/ciao/Deployment_Core.idl b/TAO/CIAO/ciao/Deployment_Core.idl
index a49164b487a..7cf55574ab0 100644
--- a/TAO/CIAO/ciao/Deployment_Core.idl
+++ b/TAO/CIAO/ciao/Deployment_Core.idl
@@ -102,6 +102,10 @@ module Deployment
// A wrapper facade interface to provision different event
// communication mechanisms, including RTEC, etc.
CIAO::CIAO_Event_Service event_service;
+
+ // The properties of this connection, particularly useful
+ // to speicfy QoS properties of pub/sub service connections.
+ Properties config;
};
typedef sequence < Connection > Connections;
diff --git a/TAO/CIAO/ciao/Deployment_Events.idl b/TAO/CIAO/ciao/Deployment_Events.idl
index 496196ea514..6f69541f66f 100644
--- a/TAO/CIAO/ciao/Deployment_Events.idl
+++ b/TAO/CIAO/ciao/Deployment_Events.idl
@@ -31,6 +31,15 @@ module CIAO
typedef sequence<EventSourceId> EventSourceSet;
+ /// Event Filters
+ enum FilterType
+ {
+ CONJUNCTION,
+ DISJUNCTION,
+ LOGICAL_AND,
+ NEGATE
+ };
+
struct EventFilter
{
FilterType type;
@@ -52,15 +61,6 @@ module CIAO
typedef sequence < EventServiceDeploymentDescription >
EventServiceDeploymentDescriptions;
-
- /// Event Filters
- enum FilterType
- {
- CONJUNCTION,
- DISJUNCTION,
- LOGICAL_AND,
- NEGATE
- };
};
};
diff --git a/TAO/CIAO/ciaosvcs/Events/CIAO_EventServiceBase.h b/TAO/CIAO/ciaosvcs/Events/CIAO_EventServiceBase.h
index ea9fe669704..45990bf72ce 100644
--- a/TAO/CIAO/ciaosvcs/Events/CIAO_EventServiceBase.h
+++ b/TAO/CIAO/ciaosvcs/Events/CIAO_EventServiceBase.h
@@ -110,6 +110,31 @@ namespace CIAO
ACE_THROW_SPEC ((
CORBA::SystemException)) = 0;
};
+
+ class Event_Consumer_Config_Base :
+ public virtual POA_CIAO::Consumer_Config
+ {
+ public:
+ virtual void start_conjunction_group (
+ ::CORBA::Long size
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC ((::CORBA::SystemException)) = 0;
+
+ virtual void start_disjunction_group (
+ ::CORBA::Long size
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC ((::CORBA::SystemException)) = 0;
+
+ virtual void insert_source (
+ const char * source_id
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC ((::CORBA::SystemException)) = 0;
+
+ virtual void insert_type (
+ ::CORBA::Long event_type
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC ((::CORBA::SystemException)) = 0;
+ };
}
#include /**/ "ace/post.h"
diff --git a/TAO/CIAO/ciaosvcs/Events/CIAO_EventService_Factory_impl.cpp b/TAO/CIAO/ciaosvcs/Events/CIAO_EventService_Factory_impl.cpp
index 26b0ea6d94b..3c9119ec3b2 100644
--- a/TAO/CIAO/ciaosvcs/Events/CIAO_EventService_Factory_impl.cpp
+++ b/TAO/CIAO/ciaosvcs/Events/CIAO_EventService_Factory_impl.cpp
@@ -41,15 +41,6 @@ namespace CIAO
switch (type)
{
- case DIRECT:
- {
- ACE_NEW_RETURN (event_service,
- DirectEventService (this->orb_.in (),
- this->poa_.in ()),
- 0);
- break;
- }
-
case RTEC:
{
ACE_NEW_RETURN (event_service,
diff --git a/TAO/CIAO/ciaosvcs/Events/CIAO_Events.idl b/TAO/CIAO/ciaosvcs/Events/CIAO_Events.idl
index b946437095f..8b84415b6cc 100644
--- a/TAO/CIAO/ciaosvcs/Events/CIAO_Events.idl
+++ b/TAO/CIAO/ciaosvcs/Events/CIAO_Events.idl
@@ -38,6 +38,14 @@ module CIAO
{
attribute CONNECTION_ID consumer_id;
attribute Components::EventConsumerBase consumer;
+
+ void start_conjunction_group (in long size);
+
+ void start_disjunction_group (in long size);
+
+ void insert_source (in CONNECTION_ID source_id);
+
+ void insert_type (in long event_type);
};
interface CIAO_Event_Service
diff --git a/TAO/CIAO/ciaosvcs/Events/CIAO_RTEC/CIAO_RTEvent.h b/TAO/CIAO/ciaosvcs/Events/CIAO_RTEC/CIAO_RTEvent.h
index 0dfcff1d36d..83f1f0196a7 100644
--- a/TAO/CIAO/ciaosvcs/Events/CIAO_RTEC/CIAO_RTEvent.h
+++ b/TAO/CIAO/ciaosvcs/Events/CIAO_RTEC/CIAO_RTEvent.h
@@ -215,7 +215,8 @@ namespace CIAO
* specified as the event service type.
*/
class RTEvent_Consumer_Config_impl :
- public virtual POA_CIAO::RTEvent_Consumer_Config
+ public virtual POA_CIAO::RTEvent_Consumer_Config,
+ public virtual Event_Consumer_Config_Base
{
public: