diff options
author | dengg <dengg@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2006-03-28 01:04:00 +0000 |
---|---|---|
committer | dengg <dengg@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2006-03-28 01:04:00 +0000 |
commit | e83111f5f50c162603c5984c179e784971d00e4a (patch) | |
tree | 7e4fde1f1216332fbc597881e8d51697e75dec50 | |
parent | 843d2c548e7ba3f46bfcd0455c81950847e49644 (diff) | |
download | ATCD-e83111f5f50c162603c5984c179e784971d00e4a.tar.gz |
.
-rw-r--r-- | TAO/CIAO/DAnCE/DomainApplicationManager/DomainApplicationManager_Impl.cpp | 16 | ||||
-rw-r--r-- | TAO/CIAO/DAnCE/NodeApplication/NodeApplication_Impl.cpp | 21 | ||||
-rw-r--r-- | TAO/CIAO/DAnCE/NodeApplication/NodeApplication_Impl.h | 10 | ||||
-rw-r--r-- | TAO/CIAO/ciao/Deployment_Core.idl | 4 | ||||
-rw-r--r-- | TAO/CIAO/ciao/Deployment_Events.idl | 18 | ||||
-rw-r--r-- | TAO/CIAO/ciaosvcs/Events/CIAO_EventServiceBase.h | 25 | ||||
-rw-r--r-- | TAO/CIAO/ciaosvcs/Events/CIAO_EventService_Factory_impl.cpp | 9 | ||||
-rw-r--r-- | TAO/CIAO/ciaosvcs/Events/CIAO_Events.idl | 8 | ||||
-rw-r--r-- | TAO/CIAO/ciaosvcs/Events/CIAO_RTEC/CIAO_RTEvent.h | 3 |
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: |