summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorthrall <thrall@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2004-09-07 00:14:37 +0000
committerthrall <thrall@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2004-09-07 00:14:37 +0000
commitc9605148c7d13306bebcc02d6b66f7af5eda51b7 (patch)
treef385488b3435bc1284a4293ae02cf99e755afe53
parentbc6ed2ea02b003d5fd9ff0846ab96416af819961 (diff)
downloadATCD-c9605148c7d13306bebcc02d6b66f7af5eda51b7.tar.gz
Copy of examples/RtEC/Federated_Kokyu/chain_test modified to use the ECConfigurator for debugging purposes; initial commit
-rw-r--r--TAO/orbsvcs/examples/RtEC/ECConfigurator/chain_test/Consumer_EC.cpp136
-rw-r--r--TAO/orbsvcs/examples/RtEC/ECConfigurator/chain_test/Consumer_Supplier_EC.cpp136
-rw-r--r--TAO/orbsvcs/examples/RtEC/ECConfigurator/chain_test/Supplier_EC.cpp136
-rw-r--r--TAO/orbsvcs/examples/RtEC/ECConfigurator/chain_test/chain_test.mpc35
-rw-r--r--TAO/orbsvcs/examples/RtEC/ECConfigurator/chain_test/conssuppec.xml57
-rw-r--r--TAO/orbsvcs/examples/RtEC/ECConfigurator/chain_test/consumerec.xml36
-rw-r--r--TAO/orbsvcs/examples/RtEC/ECConfigurator/chain_test/ecconfig.dtd79
-rw-r--r--TAO/orbsvcs/examples/RtEC/ECConfigurator/chain_test/supplierec.xml71
-rw-r--r--TAO/orbsvcs/examples/RtEC/ECConfigurator/chain_test/svc.conf3
-rw-r--r--TAO/orbsvcs/examples/RtEC/ECConfigurator/chain_test/svc.conf.xml9
10 files changed, 698 insertions, 0 deletions
diff --git a/TAO/orbsvcs/examples/RtEC/ECConfigurator/chain_test/Consumer_EC.cpp b/TAO/orbsvcs/examples/RtEC/ECConfigurator/chain_test/Consumer_EC.cpp
new file mode 100644
index 00000000000..a1913f2e83a
--- /dev/null
+++ b/TAO/orbsvcs/examples/RtEC/ECConfigurator/chain_test/Consumer_EC.cpp
@@ -0,0 +1,136 @@
+// $Id$
+
+#include "ace/Get_Opt.h"
+#include "ACEXML/parser/parser/Parser.h"
+#include "ACEXML/common/InputSource.h"
+#include "ACEXML/common/FileCharStream.h"
+#include "ACEXML/common/DefaultHandler.h"
+
+#include "tao/ORB.h"
+
+#include "orbsvcs/Event/EC_Gateway_IIOP_Factory.h"
+#include "orbsvcs/Event/EC_Kokyu_Factory.h"
+
+#include "Configurator_ParseHandler.h"
+#include "Configurator_SyntaxHandler.h"
+#include "ECDriver.h"
+
+struct Arguments
+{
+ ACE_CString filename_;
+};
+
+int parse_args (int argc, char *argv[],Arguments &args);
+
+int
+main (int argc, char *argv[])
+{
+ int retval;
+
+ TAO_EC_Kokyu_Factory::init_svcs ();
+ TAO_EC_Gateway_IIOP_Factory::init_svcs ();
+
+ ACEXML_TRY_NEW_ENV
+ {
+ ACEXML_Parser parser;
+ Arguments args;
+ args.filename_.set(ACE_TEXT("consumerec.xml"));
+
+ // parse args for config filename
+ if (parse_args(argc,argv,args) == -1)
+ {
+ return 1;
+ }
+
+ // ORB initialization boiler plate...
+ CORBA::ORB_var orb =
+ CORBA::ORB_init (argc, argv, "" ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ CORBA::Object_var object =
+ orb->resolve_initial_references ("RootPOA" ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+ PortableServer::POA_var poa =
+ PortableServer::POA::_narrow (object.in () ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+ PortableServer::POAManager_var poa_manager =
+ poa->the_POAManager (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+ poa_manager->activate (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ ACEXML_FileCharStream *fcs = new ACEXML_FileCharStream();
+ if ((retval = fcs->open(args.filename_.c_str())) != 0) {
+ //ACE_DEBUG ((LM_DEBUG, "Could not open file %s\n",args.filename_.c_str()));
+ return retval;
+ }
+
+ ACEXML_InputSource is (fcs); //takes responsibility of fcs
+
+ Configurator_ParseHandler xmlhandler (args.filename_.c_str());
+ ACEXML_DefaultHandler dflt;
+
+ parser.setContentHandler (&xmlhandler);
+ parser.setDTDHandler (&dflt);
+ parser.setErrorHandler (&xmlhandler);
+ parser.setEntityResolver (&dflt);
+
+ parser.parse(&is);
+ ACEXML_TRY_CHECK;
+
+ if ((retval = fcs->close()) != 0) {
+ //ACE_DEBUG ((LM_DEBUG, "Could not close file %s\n",args.filename_.c_str()));
+ return retval;
+ }
+
+ ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("Finished parsing\n")));
+
+ Configurator_SyntaxHandler cfgtor;
+ cfgtor.init(orb.in(),poa.in());
+ cfgtor.setRootNode(xmlhandler.getRootNode());
+ cfgtor.setNameTable(xmlhandler.getNameTable());
+ cfgtor.parse();
+
+ ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("Finished configuring\n")));
+
+ ECDriver *drv = cfgtor.getDriver();
+ drv->run();
+
+ }
+ ACEXML_CATCH (ACEXML_SAXException, ex)
+ {
+ ACE_DEBUG ((LM_ERROR, ACE_TEXT ("Exception occurred: %s. Exiting...\n"),
+ ex.message()));
+ return 1;
+ }
+ ACEXML_ENDTRY;
+
+ ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("Finished successfully\n")));
+
+ return retval;
+}
+
+int parse_args (int argc, char *argv[], Arguments &args)
+{
+ ACE_Get_Opt get_opts (argc, argv, "f:");
+ int c;
+
+ while ((c = get_opts ()) != -1)
+ switch (c)
+ {
+ case 'f':
+ args.filename_.set(get_opts.opt_arg());
+ //ACE_DEBUG((LM_DEBUG,ACE_TEXT("Filename argument: %s\n"),args.filename_.c_str()));
+ break;
+ case '?':
+ default:
+ ACE_ERROR_RETURN ((LM_ERROR,
+ "usage: %s "
+ "[-f <filename>] "
+ "\n",
+ argv [0]),
+ -1);
+ }
+ // Indicates sucessful parsing of the command line
+ return 0;
+}
diff --git a/TAO/orbsvcs/examples/RtEC/ECConfigurator/chain_test/Consumer_Supplier_EC.cpp b/TAO/orbsvcs/examples/RtEC/ECConfigurator/chain_test/Consumer_Supplier_EC.cpp
new file mode 100644
index 00000000000..906e3c21f3d
--- /dev/null
+++ b/TAO/orbsvcs/examples/RtEC/ECConfigurator/chain_test/Consumer_Supplier_EC.cpp
@@ -0,0 +1,136 @@
+// $Id$
+
+#include "ace/Get_Opt.h"
+#include "ACEXML/parser/parser/Parser.h"
+#include "ACEXML/common/InputSource.h"
+#include "ACEXML/common/FileCharStream.h"
+#include "ACEXML/common/DefaultHandler.h"
+
+#include "tao/ORB.h"
+
+#include "orbsvcs/Event/EC_Gateway_IIOP_Factory.h"
+#include "orbsvcs/Event/EC_Kokyu_Factory.h"
+
+#include "Configurator_ParseHandler.h"
+#include "Configurator_SyntaxHandler.h"
+#include "ECDriver.h"
+
+struct Arguments
+{
+ ACE_CString filename_;
+};
+
+int parse_args (int argc, char *argv[],Arguments &args);
+
+int
+main (int argc, char *argv[])
+{
+ int retval;
+
+ TAO_EC_Kokyu_Factory::init_svcs ();
+ TAO_EC_Gateway_IIOP_Factory::init_svcs ();
+
+ ACEXML_TRY_NEW_ENV
+ {
+ ACEXML_Parser parser;
+ Arguments args;
+ args.filename_.set(ACE_TEXT("conssuppec.xml"));
+
+ // parse args for config filename
+ if (parse_args(argc,argv,args) == -1)
+ {
+ return 1;
+ }
+
+ // ORB initialization boiler plate...
+ CORBA::ORB_var orb =
+ CORBA::ORB_init (argc, argv, "" ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ CORBA::Object_var object =
+ orb->resolve_initial_references ("RootPOA" ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+ PortableServer::POA_var poa =
+ PortableServer::POA::_narrow (object.in () ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+ PortableServer::POAManager_var poa_manager =
+ poa->the_POAManager (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+ poa_manager->activate (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ ACEXML_FileCharStream *fcs = new ACEXML_FileCharStream();
+ if ((retval = fcs->open(args.filename_.c_str())) != 0) {
+ //ACE_DEBUG ((LM_DEBUG, "Could not open file %s\n",args.filename_.c_str()));
+ return retval;
+ }
+
+ ACEXML_InputSource is (fcs); //takes responsibility of fcs
+
+ Configurator_ParseHandler xmlhandler (args.filename_.c_str());
+ ACEXML_DefaultHandler dflt;
+
+ parser.setContentHandler (&xmlhandler);
+ parser.setDTDHandler (&dflt);
+ parser.setErrorHandler (&xmlhandler);
+ parser.setEntityResolver (&dflt);
+
+ parser.parse(&is);
+ ACEXML_TRY_CHECK;
+
+ if ((retval = fcs->close()) != 0) {
+ //ACE_DEBUG ((LM_DEBUG, "Could not close file %s\n",args.filename_.c_str()));
+ return retval;
+ }
+
+ ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("Finished parsing\n")));
+
+ Configurator_SyntaxHandler cfgtor;
+ cfgtor.init(orb.in(),poa.in());
+ cfgtor.setRootNode(xmlhandler.getRootNode());
+ cfgtor.setNameTable(xmlhandler.getNameTable());
+ cfgtor.parse();
+
+ ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("Finished configuring\n")));
+
+ ECDriver *drv = cfgtor.getDriver();
+ drv->run();
+
+ }
+ ACEXML_CATCH (ACEXML_SAXException, ex)
+ {
+ ACE_DEBUG ((LM_ERROR, ACE_TEXT ("Exception occurred: %s. Exiting...\n"),
+ ex.message()));
+ return 1;
+ }
+ ACEXML_ENDTRY;
+
+ ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("Finished successfully\n")));
+
+ return retval;
+}
+
+int parse_args (int argc, char *argv[], Arguments &args)
+{
+ ACE_Get_Opt get_opts (argc, argv, "f:");
+ int c;
+
+ while ((c = get_opts ()) != -1)
+ switch (c)
+ {
+ case 'f':
+ args.filename_.set(get_opts.opt_arg());
+ //ACE_DEBUG((LM_DEBUG,ACE_TEXT("Filename argument: %s\n"),args.filename_.c_str()));
+ break;
+ case '?':
+ default:
+ ACE_ERROR_RETURN ((LM_ERROR,
+ "usage: %s "
+ "[-f <filename>] "
+ "\n",
+ argv [0]),
+ -1);
+ }
+ // Indicates sucessful parsing of the command line
+ return 0;
+}
diff --git a/TAO/orbsvcs/examples/RtEC/ECConfigurator/chain_test/Supplier_EC.cpp b/TAO/orbsvcs/examples/RtEC/ECConfigurator/chain_test/Supplier_EC.cpp
new file mode 100644
index 00000000000..62b507e4339
--- /dev/null
+++ b/TAO/orbsvcs/examples/RtEC/ECConfigurator/chain_test/Supplier_EC.cpp
@@ -0,0 +1,136 @@
+// $Id$
+
+#include "ace/Get_Opt.h"
+#include "ACEXML/parser/parser/Parser.h"
+#include "ACEXML/common/InputSource.h"
+#include "ACEXML/common/FileCharStream.h"
+#include "ACEXML/common/DefaultHandler.h"
+
+#include "tao/ORB.h"
+
+#include "orbsvcs/Event/EC_Gateway_IIOP_Factory.h"
+#include "orbsvcs/Event/EC_Kokyu_Factory.h"
+
+#include "Configurator_ParseHandler.h"
+#include "Configurator_SyntaxHandler.h"
+#include "ECDriver.h"
+
+struct Arguments
+{
+ ACE_CString filename_;
+};
+
+int parse_args (int argc, char *argv[],Arguments &args);
+
+int
+main (int argc, char *argv[])
+{
+ int retval;
+
+ TAO_EC_Kokyu_Factory::init_svcs ();
+ TAO_EC_Gateway_IIOP_Factory::init_svcs ();
+
+ ACEXML_TRY_NEW_ENV
+ {
+ ACEXML_Parser parser;
+ Arguments args;
+ args.filename_.set(ACE_TEXT("supplierec.xml"));
+
+ // parse args for config filename
+ if (parse_args(argc,argv,args) == -1)
+ {
+ return 1;
+ }
+
+ // ORB initialization boiler plate...
+ CORBA::ORB_var orb =
+ CORBA::ORB_init (argc, argv, "" ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ CORBA::Object_var object =
+ orb->resolve_initial_references ("RootPOA" ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+ PortableServer::POA_var poa =
+ PortableServer::POA::_narrow (object.in () ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+ PortableServer::POAManager_var poa_manager =
+ poa->the_POAManager (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+ poa_manager->activate (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ ACEXML_FileCharStream *fcs = new ACEXML_FileCharStream();
+ if ((retval = fcs->open(args.filename_.c_str())) != 0) {
+ //ACE_DEBUG ((LM_DEBUG, "Could not open file %s\n",args.filename_.c_str()));
+ return retval;
+ }
+
+ ACEXML_InputSource is (fcs); //takes responsibility of fcs
+
+ Configurator_ParseHandler xmlhandler (args.filename_.c_str());
+ ACEXML_DefaultHandler dflt;
+
+ parser.setContentHandler (&xmlhandler);
+ parser.setDTDHandler (&dflt);
+ parser.setErrorHandler (&xmlhandler);
+ parser.setEntityResolver (&dflt);
+
+ parser.parse(&is);
+ ACEXML_TRY_CHECK;
+
+ if ((retval = fcs->close()) != 0) {
+ //ACE_DEBUG ((LM_DEBUG, "Could not close file %s\n",args.filename_.c_str()));
+ return retval;
+ }
+
+ ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("Finished parsing\n")));
+
+ Configurator_SyntaxHandler cfgtor;
+ cfgtor.init(orb.in(),poa.in());
+ cfgtor.setRootNode(xmlhandler.getRootNode());
+ cfgtor.setNameTable(xmlhandler.getNameTable());
+ cfgtor.parse();
+
+ ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("Finished configuring\n")));
+
+ ECDriver *drv = cfgtor.getDriver();
+ drv->run();
+
+ }
+ ACEXML_CATCH (ACEXML_SAXException, ex)
+ {
+ ACE_DEBUG ((LM_ERROR, ACE_TEXT ("Exception occurred: %s. Exiting...\n"),
+ ex.message()));
+ return 1;
+ }
+ ACEXML_ENDTRY;
+
+ ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("Finished successfully\n")));
+
+ return retval;
+}
+
+int parse_args (int argc, char *argv[], Arguments &args)
+{
+ ACE_Get_Opt get_opts (argc, argv, "f:");
+ int c;
+
+ while ((c = get_opts ()) != -1)
+ switch (c)
+ {
+ case 'f':
+ args.filename_.set(get_opts.opt_arg());
+ //ACE_DEBUG((LM_DEBUG,ACE_TEXT("Filename argument: %s\n"),args.filename_.c_str()));
+ break;
+ case '?':
+ default:
+ ACE_ERROR_RETURN ((LM_ERROR,
+ "usage: %s "
+ "[-f <filename>] "
+ "\n",
+ argv [0]),
+ -1);
+ }
+ // Indicates sucessful parsing of the command line
+ return 0;
+}
diff --git a/TAO/orbsvcs/examples/RtEC/ECConfigurator/chain_test/chain_test.mpc b/TAO/orbsvcs/examples/RtEC/ECConfigurator/chain_test/chain_test.mpc
new file mode 100644
index 00000000000..92e3f28cec5
--- /dev/null
+++ b/TAO/orbsvcs/examples/RtEC/ECConfigurator/chain_test/chain_test.mpc
@@ -0,0 +1,35 @@
+project(Consumer_Chain): orbsvcsexe, rtevent, rtsched, rtschedevent, rtkokyuevent, kokyu {
+ exename = Consumer_EC
+ idlflags += -I$(TAO_ROOT) -I$(TAO_ROOT)/orbsvcs -Ge 1 -Wb,pre_include=ace/pre.h -Wb,post_include=ace/post.h
+ includes += $(TAO_ROOT)/orbsvcs $(TAO_ROOT)/orbsvcs/orbsvcs ..
+ libs += ConfigurableEC
+ libpaths += ..
+
+ Source_Files {
+ Consumer_EC.cpp
+ }
+}
+
+project(Consumer_Supplier_Chain): orbsvcsexe, rtevent, rtsched, rtschedevent, rtkokyuevent, kokyu {
+ exename = Consumer_Supplier_EC
+ idlflags += -I$(TAO_ROOT) -I$(TAO_ROOT)/orbsvcs -Ge 1 -Wb,pre_include=ace/pre.h -Wb,post_include=ace/post.h
+ includes += $(TAO_ROOT)/orbsvcs $(TAO_ROOT)/orbsvcs/orbsvcs ..
+ libs += ConfigurableEC
+ libpaths += ..
+
+ Source_Files {
+ Consumer_Supplier_EC.cpp
+ }
+}
+
+project(Supplier_Chain): orbsvcsexe, rtevent, rtsched, rtschedevent, rtkokyuevent, kokyu {
+ exename = Supplier_EC
+ idlflags += -I$(TAO_ROOT) -I$(TAO_ROOT)/orbsvcs -Ge 1 -Wb,pre_include=ace/pre.h -Wb,post_include=ace/post.h
+ includes += $(TAO_ROOT)/orbsvcs $(TAO_ROOT)/orbsvcs/orbsvcs ..
+ libs += ConfigurableEC
+ libpaths += ..
+
+ Source_Files {
+ Supplier_EC.cpp
+ }
+}
diff --git a/TAO/orbsvcs/examples/RtEC/ECConfigurator/chain_test/conssuppec.xml b/TAO/orbsvcs/examples/RtEC/ECConfigurator/chain_test/conssuppec.xml
new file mode 100644
index 00000000000..21e7563fcb6
--- /dev/null
+++ b/TAO/orbsvcs/examples/RtEC/ECConfigurator/chain_test/conssuppec.xml
@@ -0,0 +1,57 @@
+<?xml version="1.0"?>
+<!DOCTYPE ECConfiguration SYSTEM "ecconfig.dtd">
+
+<ECConfiguration>
+
+<!-- Define the events -->
+<Event name="Subtask2 Trigger" type="17">
+ <Period>200</Period> <!-- in msec -->
+ <Phase>0</Phase> <!-- in msec -->
+ <Criticality value="VERY_LOW" />
+ <Importance value="VERY_LOW" />
+ <WorstExecution>50</WorstExecution> <!-- in msec -->
+ <TypicalExecution>50</TypicalExecution> <!-- in msec -->
+</Event>
+
+<Event name="Subtask3 Trigger" type="18">
+ <Period>200</Period> <!-- in msec -->
+ <Phase>0</Phase> <!-- in msec -->
+ <Criticality value="VERY_HIGH" />
+ <Importance value="VERY_HIGH" />
+ <WorstExecution>50</WorstExecution> <!-- in msec -->
+ <TypicalExecution>50</TypicalExecution> <!-- in msec -->
+</Event>
+
+<!-- Configure the ECs -->
+<RemoteEventChannel name="Client" >
+ <IORFile>client.ior</IORFile>
+</RemoteEventChannel>
+
+<LocalEventChannel name="Middle" >
+ <SchedulingStrategy type="EDF" enableRG="true" />
+ <Supplier name="Subtask3 Notifier" id="3">
+ <Publications>
+ <EventName>Subtask3 Trigger</EventName>
+ </Publications>
+ </Supplier>
+ <Consumer name="Subtask2 Executor" >
+ <Subscriptions>
+ <EventName>Subtask2 Trigger</EventName>
+ </Subscriptions>
+ <Dependants>
+ <SupplierName>Substack3 Notifier</SupplierName>
+ </Dependants>
+ </Consumer>
+</LocalEventChannel>
+
+<!-- Configure the driver -->
+<TestDriver>
+ <StartCondition type="DelayAfterConnect" >
+ <Time>30000</Time> <!-- in msecs -->
+ </StartCondition>
+ <StopCondition type="Duration" >
+ <Value>340000</Value> <!-- duration in msecs -->
+ </StopCondition>
+</TestDriver>
+
+</ECConfiguration> \ No newline at end of file
diff --git a/TAO/orbsvcs/examples/RtEC/ECConfigurator/chain_test/consumerec.xml b/TAO/orbsvcs/examples/RtEC/ECConfigurator/chain_test/consumerec.xml
new file mode 100644
index 00000000000..fae6c9161e5
--- /dev/null
+++ b/TAO/orbsvcs/examples/RtEC/ECConfigurator/chain_test/consumerec.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0"?>
+<!DOCTYPE ECConfiguration SYSTEM "ecconfig.dtd">
+
+<ECConfiguration>
+
+<Event name="Subtask3 Trigger" type="18">
+ <Period>200</Period> <!-- in msec -->
+ <Phase>0</Phase> <!-- in msec -->
+ <Criticality value="VERY_HIGH" />
+ <Importance value="VERY_HIGH" />
+ <WorstExecution>50</WorstExecution> <!-- in msec -->
+ <TypicalExecution>50</TypicalExecution> <!-- in msec -->
+</Event>
+
+<!-- Configure the ECs -->
+<LocalEventChannel name="Client" >
+ <SchedulingStrategy type="EDF" enableRG="true" />
+ <Consumer name="Subtask3 Executor" >
+ <Subscriptions>
+ <EventName>Subtask3 Trigger</EventName>
+ </Subscriptions>
+ </Consumer>
+</LocalEventChannel>
+
+<!-- Configure the driver -->
+<!-- there should only be one Driver -->
+<TestDriver>
+ <StartCondition type="DelayAfterConnect">
+ <Time>30000</Time> <!-- in msecs -->
+ </StartCondition>
+ <StopCondition type="Duration" >
+ <Value>340000</Value> <!-- duration in msecs -->
+ </StopCondition>
+</TestDriver>
+
+</ECConfiguration> \ No newline at end of file
diff --git a/TAO/orbsvcs/examples/RtEC/ECConfigurator/chain_test/ecconfig.dtd b/TAO/orbsvcs/examples/RtEC/ECConfigurator/chain_test/ecconfig.dtd
new file mode 100644
index 00000000000..172b9187419
--- /dev/null
+++ b/TAO/orbsvcs/examples/RtEC/ECConfigurator/chain_test/ecconfig.dtd
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+
+<!-- ECCONFIGURATION -->
+ <!ELEMENT ECConfiguration ((Event|Timeout)*,(LocalEventChannel|RemoteEventChannel)*,TestDriver) >
+
+<!-- EVENT -->
+ <!ELEMENT Event (Period,Phase,Criticality,Importance,WorstExecution,TypicalExecution) >
+ <!ATTLIST Event name CDATA #REQUIRED >
+ <!ATTLIST Event type CDATA #REQUIRED >
+
+ <!ELEMENT Criticality (EMPTY) >
+ <!ATTLIST Criticality value (VERY_LOW|LOW|MEDIUM|HIGH|VERY_HIGH) #REQUIRED >
+
+ <!ELEMENT Importance (EMPTY) >
+ <!ATTLIST Importance value (VERY_LOW|LOW|MEDIUM|HIGH|VERY_HIGH) #REQUIRED >
+
+ <!ELEMENT WorstExecution (#PCDATA) >
+
+ <!ELEMENT TypicalExecution (#PCDATA) >
+
+<!-- TIMEOUT -->
+ <!ELEMENT Timeout (Period,Phase?) >
+ <!ATTLIST Timeout name CDATA #REQUIRED >
+
+ <!ELEMENT Period (#PCDATA) >
+
+ <!ELEMENT Phase (#PCDATA) >
+
+<!-- LOCALEVENTCHANNEL -->
+ <!ELEMENT LocalEventChannel (SchedulingStrategy,(Consumer,Supplier)*) >
+ <!ATTLIST LocalEventChannel name CDATA #REQUIRED >
+
+ <!ELEMENT SchedulingStrategy (EMPTY) >
+ <!ATTLIST SchedulingStrategy type (EDF|MUF|RMS) #REQUIRED >
+ <!ATTLIST SchedulingStrategy enableRG (yes|no) #REQUIRED >
+
+ <!ELEMENT Consumer (Subscriptions,Dependants?) >
+ <!ATTLIST Consumer name CDATA #REQUIRED >
+
+ <!ELEMENT Subscriptions (EventName*) >
+
+ <!ELEMENT EventName (#PCDATA) >
+
+ <!ELEMENT Dependants (SupplierName*) >
+
+ <!ELEMENT SupplierName (#PCDATA) >
+
+ <!-- If no Triggers is supplied (or it is empty), the Supplier is assumed to be self-triggered -->
+ <!ELEMENT Supplier (Publications,Triggers?) >
+ <!ATTLIST Supplier name CDATA #REQUIRED >
+ <!ATTLIST Supplier id CDATA #REQUIRED >
+
+ <!ELEMENT Publications (EventName*) >
+
+ <!ELEMENT Triggers (TimeoutName*) >
+
+ <!ELEMENT TimeoutName (#PCDATA) >
+
+<!-- REMOTEEVENTCHANNEL -->
+ <!-- Consumer/Supplier on remote are local but subscribe/publish remotely -->
+ <!ELEMENT RemoteEventChannel (IORFile, (Consumer,Supplier)*) >
+ <!ATTLIST RemoteEventChannel name CDATA #REQUIRED >
+
+ <!ELEMENT IORFile (#PCDATA) >
+
+<!-- There should only be one Driver for each process-->
+<!-- TESTDRIVER -->
+ <!ELEMENT TestDriver (StartCondition,StopCondition) >
+
+ <!ELEMENT StartCondition (Time) >
+ <!ATTLIST StartCondition type (GlobalTime|DelayAfterStart|DelayAfterConnect) #REQUIRED >
+ <!ATTLIST StartCondition master (yes|no) "no" >
+
+ <!ELEMENT Time (#PCDATA) >
+
+ <!ELEMENT StopCondition (Value) >
+ <!ATTLIST StopCondition type (Duration|EventNumber) #REQUIRED >
+
+ <!ELEMENT Value (#PCDATA) >
diff --git a/TAO/orbsvcs/examples/RtEC/ECConfigurator/chain_test/supplierec.xml b/TAO/orbsvcs/examples/RtEC/ECConfigurator/chain_test/supplierec.xml
new file mode 100644
index 00000000000..c172db96541
--- /dev/null
+++ b/TAO/orbsvcs/examples/RtEC/ECConfigurator/chain_test/supplierec.xml
@@ -0,0 +1,71 @@
+<?xml version="1.0"?>
+<!DOCTYPE ECConfiguration SYSTEM "ecconfig.dtd">
+
+<ECConfiguration>
+
+<!-- Define the events -->
+<!-- THESE NEED TO BE THE SAME AS DEFINED IN THE CLIENT XML! -->
+<Timeout name="Subtask1 Timeout" >
+ <Period>200</Period> <!-- in msec -->
+ <Phase>0</Phase> <!-- in msec -->
+</Timeout>
+
+<Event name="Subtask1 Trigger" type="16">
+ <Period>200</Period> <!-- in msec -->
+ <Phase>0</Phase> <!-- in msec -->
+ <Criticality value="VERY_LOW" />
+ <Importance value="VERY_LOW" />
+ <WorstExecution>50</WorstExecution> <!-- in msec -->
+ <TypicalExecution>50</TypicalExecution> <!-- in msec -->
+</Event>
+
+<Event name="Subtask2 Trigger" type="17">
+ <Period>200</Period> <!-- in msec -->
+ <Phase>0</Phase> <!-- in msec -->
+ <Criticality value="VERY_LOW" />
+ <Importance value="VERY_LOW" />
+ <WorstExecution>50</WorstExecution> <!-- in msec -->
+ <TypicalExecution>50</TypicalExecution> <!-- in msec -->
+</Event>
+
+<!-- Configure the ECs -->
+<RemoteEventChannel name="Middle" >
+ <IORFile>middle.ior</IORFile>
+</RemoteEventChannel>
+
+<LocalEventChannel name="Server" >
+ <SchedulingStrategy type="EDF" enableRG="true" />
+ <Supplier name="Subtask1 Notifier" id="1">
+ <Publications>
+ <EventName>Subtask1 Trigger</EventName>
+ </Publications>
+ <Triggers>
+ <TimeoutName>Subtask1 Timeout</TimeoutName>
+ </Triggers>
+ </Supplier>
+ <Supplier name="Subtask2 Notifier" id="2">
+ <Publications>
+ <EventName>Subtask2 Trigger</EventName>
+ </Publications>
+ </Supplier>
+ <Consumer name="Subtask1 Executor" >
+ <Subscriptions>
+ <EventName>Subtask1 Trigger</EventName>
+ </Subscriptions>
+ <Dependants>
+ <SupplierName>Subtask2 Notifier</SupplierName>
+ </Dependants>
+ </Consumer>
+</LocalEventChannel>
+
+<!-- Configure the driver -->
+<TestDriver>
+ <StartCondition type="DelayAfterConnect" master="yes" >
+ <Time>30000</Time> <!-- in msecs -->
+ </StartCondition>
+ <StopCondition type="Duration" >
+ <Value>340000</Value> <!-- duration in msecs -->
+ </StopCondition>
+</TestDriver>
+
+</ECConfiguration> \ No newline at end of file
diff --git a/TAO/orbsvcs/examples/RtEC/ECConfigurator/chain_test/svc.conf b/TAO/orbsvcs/examples/RtEC/ECConfigurator/chain_test/svc.conf
new file mode 100644
index 00000000000..5e29db8c817
--- /dev/null
+++ b/TAO/orbsvcs/examples/RtEC/ECConfigurator/chain_test/svc.conf
@@ -0,0 +1,3 @@
+# $Id$
+#change SCHED_OTHER to SCHED_FIFO or SCHED_RR to run in Real time class
+static EC_Factory "-ECProxyPushConsumerCollection mt:immediate:list -ECProxyPushSupplierCollection mt:immediate:list -ECdispatching kokyu SCHED_OTHER -ECscheduling kokyu -ECfiltering kokyu -ECproxyconsumerlock thread -ECproxysupplierlock thread -ECsupplierfiltering per-supplier -ECobserver basic"
diff --git a/TAO/orbsvcs/examples/RtEC/ECConfigurator/chain_test/svc.conf.xml b/TAO/orbsvcs/examples/RtEC/ECConfigurator/chain_test/svc.conf.xml
new file mode 100644
index 00000000000..30049fd60cc
--- /dev/null
+++ b/TAO/orbsvcs/examples/RtEC/ECConfigurator/chain_test/svc.conf.xml
@@ -0,0 +1,9 @@
+<?xml version='1.0'?>
+<!-- Converted from svc.conf by svcconf-convert.pl -->
+<ACE_Svc_Conf>
+ <!-- $Id$
+ -->
+ <!-- change SCHED_OTHER to SCHED_FIFO or SCHED_RR to run in Real time class
+ -->
+ <static id="EC_Factory" params="-ECProxyPushConsumerCollection mt:immediate:list -ECProxyPushSupplierCollection mt:immediate:list -ECdispatching kokyu SCHED_OTHER -ECscheduling kokyu -ECfiltering kokyu -ECproxyconsumerlock thread -ECproxysupplierlock thread -ECsupplierfiltering per-supplier -ECobserver basic"/>
+</ACE_Svc_Conf>