diff options
Diffstat (limited to 'modules/CIAO/docs')
168 files changed, 22238 insertions, 0 deletions
diff --git a/modules/CIAO/docs/ConfigValues.html b/modules/CIAO/docs/ConfigValues.html new file mode 100644 index 00000000000..70ade5ca68d --- /dev/null +++ b/modules/CIAO/docs/ConfigValues.html @@ -0,0 +1,270 @@ +<!-- $Id$ --> +<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN"> +<html> <head> +<title>ConfigValues Index</title> +</head> + +<body> + +<h1>Index of ConfigValues</h1> + +<font size="+1" color="red">This page is currently a placeholder for +all the configuration values we will support when creating various CCM +deployment mechanisms, such as ComponentServers and Containers. The +ConfigValues listed here are currently only partially supported in +CIAO. <p> + +Note from self: There are discrepancy in this document. Most +significantly, (RT)ComponentServer's don't get their ConfigValues +directly from that passed in thru +ServerActivator::create_component_server but rather, using some sort +of pre-defined command line flags. +</font> + +<h2>ComponentServer</h2> +The <code>ConfigValues</code> for a <code>ComponentServer</code> are +passed in via <code>ServerActivator::create_component_server</code> +operation. CIAO accepts the following feature names:<p> + +<table border="3" spacing="2" cellpadding="3"> + <tr> + <th>FeatureName</th> + <th>type</th> + <th>Requirement</th> + <th>Remarks</th> + </tr> + <tr> + <td>CIAO-svcconf-id</td> + <td>string</td> + <td> + Optional + </td> + <td> + Specify the canonical svc.conf id. This id should only serve + as a hint for the deployment framework in determining the + actual svc.conf file used to start up the component server. + Currently, CIAO's ServerActivator maintains a set of svc.conf + files and use this id value to map to the exact svc.conf file + name. + </td> + </tr> + <tr> + <td>CIAO-ORB[option]</td> + <td>string</td> + <td> + Optional + </td> + <td> + Specify an ORB option that you want to pass to the + ComponentServer ORB. + </td> + </tr> +</table> + +<h2>RTComponentServer (Real-time ComponentServer)</h2> + +Like a regular <code>ComponentServer</code>, the +<code>ConfigValues</code> for a <code>RTComponentServer</code> are +passed in via <code>ServerActivator::create_component_server</code> +operation. On top of the <code>ConfigValues</code> accepted by the +regular <code>ComponentServer</code>, a real-time ComponentServer also +accepts the following feature names:<p> + +<table border="3" spacing="2" cellpadding="3"> + <tr> + <th>FeatureName</th> + <th>type</th> + <th>Requirement</th> + <th>Remarks</th> + </tr> + <tr> + <td>CIAO-rtcad-filename</td> + <td>string</td> + <td> + Optional + </td> + <td> + Specify the filename of RTCAD extension XML file. + The component server will invoke the XML parser and translate + the content of the file into the following two ConfigValues + (CIAO-RTresources and CIAO-RTPolicySets) to + RTComponentServer implementation. + </td> + </tr> + <tr> + <td>CIAO-RTresources</td> + <td><code>CIAO::RTConfiguration::RTORB_Resources_Info</code></td> + <td> + Optional + </td> + <td> + <code>CIAO::RTConfiguration::RTORB_Resources_Info</code> as + defined in + <code>$CIAO_ROOT/tools/XML_Helpers/RTConfiguration.idl</code> + defines the system wise resources an RT ORB should allocate. + These resources then can be used to define the RT policies in + the RTPolicySet described subsequently. + </td> + </tr> + <tr> + <td>CIAO-RTPolicySets</td> + <td><code>CIAO::RTConfiguration::Policy_Sets</code></td> + <td> + Optional + </td> + <td> + <code>CIAO::RTConfiguration::Policy_Sets</code>, also + defined in + <code>$CIAO_ROOT/tools/XML_Helpers/RTConfiguration.idl</code>, + defines a list of policy sets, which are named sequences of + policies. These policies often refer to the global resources + defined in the previous CIAO-RTresource via names. Likewise, + an <b>RT-container</b> also specifies the RTPolicySet its POA + uses via the name defined here. + </td> + </tr> +</table> + +<h2>Container</h2> +The <code>ConfigValues</code> for a <code>Container</code> are +passed in via <code>ComponentServer::create_container</code> +operation. CIAO accepts the following feature names:<p> + +<table border="3" spacing="2" cellpadding="3"> + <tr> + <th>FeatureName</th> + <th>type</th> + <th>Requirement</th> + <th>Remarks</th> + </tr> + <tr> + <td> + CIAO-Container-Type + </td> + <td> + <code>string</code> + </td> + <td> + currently not supported. + </td> + <td> + Possible value: <code>session</code>, <code>rt-session</code>, + <code>unclassified</code>, <code>rt-unclassified</code>. + </td> + </tr> + + <tr> + <td> + CIAO-POAPolicies + </td> + <td> + <code>CORBA::PolicyList</code> + </td> + <td> + Currently not supported. + </td> + <td> + Must not conflict with CIAO-Container-Type setting. + (Certain containers assume several POA policies.) + </td> + </tr> + + <tr> + <td> + CIAO-RTPolicySet + </td> + <td> + <code>string</code> + </td> + <td> + Optional + </td> + <td> + Name, as defined in RTCompoenentServer's CIAO-RTPolicySets, of + the PolicySet this container uses. + </td> + </tr> +</table> + + +<h2>CCMHome</h2> +The <code>ConfigValues</code> for a <code>CCMHome</code> are +passed in via <code>Container::install_home</code> +operation. CIAO accepts the following feature names:<p> + +<table border="3" spacing="2" cellpadding="3"> + <tr> + <th>FeatureName</th> + <th>type</th> + <th>Requirement</th> + <th>Remarks</th> + </tr> + <tr> + <td>CIAO-executor-path</td> + <td><code>string</code></td> + <td> + REQUIRED + </td> + <td> + This string value specifies the location of the executor DLL. + In the future, we should use UUIDs to identify the component + executors and query the ComponentInstallation interface for + the actual location of the DLL. + </td> + </tr> + <tr> + <td>CIAO-executor-entrypt</td> + <td><code>string</code></td> + <td> + REQUIRED + </td> + <td> + This string value specifies the entry point of the executor + DLL. It points to a factory function for the component executor. + </td> + </tr> + <tr> + <td>CIAO-servant-path</td> + <td><code>string</code></td> + <td> + REQUIRED + </td> + <td> + This string value specifies the location of the servant DLL. + In the future, we should use UUIDs to identify the component + servants and query the ComponentInstallation interface for + the actual location of the DLL. <p> + + Servant are part of the Container framework and we can use + type checking to ensure servant and container match with each + other. + </td> + </tr> + <tr> + <td>CIAO-executor-entrypt</td> + <td><code>string</code></td> + <td> + REQUIRED + </td> + <td> + This string value specifies the entry point of the servant + DLL. It points to a factory function for the compnent servant. + </td> + </tr> +</table> + +<!-- + <tr> + <td> + a + </td> + <td> + b + </td> + <td> + c + </td> + </tr> +--> +<!--#include virtual="/~nanbor/signature.html" --> +</body> </html> diff --git a/modules/CIAO/docs/EnvVars.html b/modules/CIAO/docs/EnvVars.html new file mode 100644 index 00000000000..a088f793de0 --- /dev/null +++ b/modules/CIAO/docs/EnvVars.html @@ -0,0 +1,35 @@ +<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN"> +<html> +<head> +<!-- $Id$ --> + <title>Environment Variables used by CIAO</title> +</head> +<body> +<h1>Environment Variables used by CIAO</h1> +<ul> +<!-- <li><b><code></code></b><p> --> <li><b><code>CIAO_DEBUG_LEVEL</code></b>: +An interger value accessible using <code>CIAO::debug_level()</code> +call. Currently, CIAO follow the following usage conventions:<br> + <br> + <ul> + <li> 20 < debug_level ≤ 20: Generate CIAO internal debug +messages </li> + <li> 10 < debug_level ≤ 20: Generate CIAO tools debug messages + </li> + <li> 0 < debug_level ≤ 10: Generate component-level debug +messages </li> + </ul> + <p> </p> + </li> + <li><b><code>CIAO_DUMP_SAMPLE_HISTORY</code></b>: This environment +variable was added for lack of component configuration support. Set it +to 1 to turn on the dumping of performance samples to stdout in some +performance test components.</li> +</ul> +<hr> +<address>Nanbor Wang</address> +<!-- hhmts start --> +Last modified: Sun Nov 30 20:29:14 Mountain Standard Time 2003 +<!-- hhmts end --> +</body> +</html> diff --git a/modules/CIAO/docs/Purify.html b/modules/CIAO/docs/Purify.html new file mode 100644 index 00000000000..fff258db120 --- /dev/null +++ b/modules/CIAO/docs/Purify.html @@ -0,0 +1,72 @@ +<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN"> +<html> + <head> + <title>Using Rational Purify with CIAO</title> + <!-- $Id$ --> + </head> + <body> + <h1>Using Rational Purify with CIAO</h1> + <p>This document is about using Purify with Visual Studio 7.1 to track down + memory leaks and other bugs in CIAO applications. For the Linux/Unix + environment, Valgrind is a better-suited tool - see Will Otte's documentation + on using Valgrind with CIAO in this directory.</p> + <p>Purify can be run from within Visual Studio, or standalone. The executable is + c:\Program Files\Rational\PurifyPlus\purifyw.exe. Typing this will bring up the + same Purify window you see if you run it from within Visual Studio. You can + install Purify from the web by going to <A href="file://\\Atlantis\software\RationSuiteEnterprise-v2003-06-12"> + \\Atlantis\software\RationSuiteEnterprise-v2003-06-12</A> and clicking + on <code>C57BPML.zip</code>. This will install a whole bunch of Rational stuff + by default, so you will probaby want to deselect everything but PurifyPlus, + although Quantify is a good bottleneck-finder when you're trying to improve + performance, so that might be worth installing and playing with as well. During + the installation process, you'll be prompted for a mode of licensing. Select + the use of a license server, and then you'll be prompted for its address. Use <code> + rational.vuse.vanderbilt.edu</code>.</p> + <p>The option to exclude all modules in Windows directories will probably be set + by default, but if you notice memory leaks reported for Windows stuff, you + might want to double check this and turn it off. From the PurifyPlus menu bar + item in Visual Studio, it's at <b>PurifyPlus->Purify->Settings->DefaultSettings->PowerCheck</b>. + When run for the first time, Purify will instrument all libraries linked to the + executable. Select <b>PurifyPlus->Purify->Run</b>, and a window will pop + up prompting you for the executable name, command line options, and working + directory.</p> + <p>Purify's output will appear in the Visual Studio text editing window. This + output can be saved to the given filename. The type of error reported is + indicated by a 3-letter code - the most common are UMR (Unitialized Memory + Read), FMM (Freeing Mismatched Memory), and MLK (Memory Leak). Each of these + can be expanded to show the call stack. The depth of the call stack can be + modified in Settings if it's not deep enough. FMM messages will show both + allocation and deallocation call stacks.</p> + Quite often in CIAO, we will want to Purify a process that is spawned by + another process, and therefore not directly runnable in Purify. This is fairly + easy to do, but it must be done from the command line. If the name of the child + process we want to instrument is <code>child.exe</code>, then it can be + instrumented by typing + <br> + <code>purifyw /Run=no /Replace=yes child.exe</code><br> + This will rename the original executable as <code>child.exe.Original</code>, + and the new instrumented executable will be <code>child.exe</code>. Now when + you run the parent process under Purify, you'll see one window opened up in + Visual Studio's text editor for this process, and when the child process is + spawned, a second window will open. A couple of caveats to make this work + smoothly: + <ul> + <li> + Instrumented executables run 2 to 5 times slower than uninstrumented ones, so + any timeouts in the code should be extended accordingly. For example, if an + instrumented NodeApplication is spawned by NodeManager, add <code>-d 15</code> or + <code>-d 20</code> + to NodeManager's command line. + <li> + If an instrumented process is simply killed, there will probably be many + spurious error messages, mostly related to ORB resources that were not cleaned + up by a graceful shutdown. All processes tested with Purify should have a + graceful shutdown built in to eliminate these bogus memory leak messages. + </li> + </ul> + <hr> + <address>Jeff Parsons</address> + <!-- hhmts start --> Last modified: Oct 3 2005 + <!-- hhmts end --> + </body> +</html> diff --git a/modules/CIAO/docs/RT-Extension.html b/modules/CIAO/docs/RT-Extension.html new file mode 100644 index 00000000000..3414a30b78e --- /dev/null +++ b/modules/CIAO/docs/RT-Extension.html @@ -0,0 +1,132 @@ +<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN"> +<!-- $Id$ --> +<html> <head> +<title>Using the Real-time Extension in CIAO</title> +</head> + +<body> +<h1>Using the Real-time Extension in CIAO</h1> + +<!-- ============================================================ --> +<h3>Abstract</H3> + +The real-time extension support in CIAO enables application developers +to deploy real-time applications by specifying real-time +configurations as XML descriptors without modifying the component +implementation. In fact, embedding the real-time configuration +policies in component implementations decrease the reusability of the +software components. + +Different types of real-time policy can be applied at different +stage of the component development lifecycle, e.g., +<ul> + <li>Component implementation + <li>Component packaging + <li>Application composition + <li>Target platform configuration + <li>Deployment configuration +</ul> + +Real-time policies can also be applied to various scope in an +applications, e.g., many real-time policies can be associate with some +or all of the following ORB mechanisms: +<ul> + <li>ORBs + <li>POAs + <li>Threads + <li>Object references +</ul> + +<!-- ============================================================ --> +<h3>CIAO's Real-time Extension</h3> + +CIAO extends CCM's assembly descriptor to support the specifications +of real-time policies. This mechanism allows you to allocate +resources that are global to a RTComponentServer and to define real-time +policies required by a component installation. Currently, CIAO +support configuration of certain real-time policies at the POA level, +i.e., in CCM's terminology, the container level. These policies +include: + +<ol> + <li>Priority Model Policy + <li>Threadpool Policy + <li>Banded Connection Policy +</ol> + +The kind of resources that are global to a RT component server that CIAO +real-time extension specifies include: + +<ol> + <li>Threadpool + <li>Threadpool with lanes + <li>Connection bands +</ol> + +<!-- ============================================================ --> +<h3>Using the CIAO Real-time Extension</h3> + +Application developers can define the aforementioned Real-Time +extension Descriptor (.rtd file) that CIAO defines to allocate +resources and specify real-time policies. The Document Type +Definition (DTD) for the real-time extension description is defined in +this <a href="XML/ciao_rt_cad_ext.dtd">file</a>. Each .RTD file +specifies the required resources and the policy definitions within a +RTComponentServer. + +A RTComponentServer can be associated to a .RTD file. This is done by +using the "extension" element with "class" attributed set to +"RT-CAD-EXT", within a processcollocation or hostcollocation element. +Here is an example: +<code><pre> + + <processcollocation> + . + . + . + <extension class="RT-CAD-EXT" origin="CIAO">somefile.rtd</extension> + . + </processcollocation> +</pre></code> + +Each .RTD file contains the two major subelements: +<ul> + <li><rtresources>: defines all the RT resources the assciating + RTComponentServer should provide. + <li><rtpolicysets>: defines named collections of policies + (<rtpolicyset>) that apply to component installations in + the RTComponentServer. +</ul> + +The <rtpolicyset>'s defined in the .RTD file can be associated +to a component installation, i.e., a component placement within the +RTComponentServer to which the .RTD file is associated. For example, + +<code><pre> + <homeplacement> + . + . + , + <extension class="RT-POLICY-SET" + origin="CIAO">A_POLICY_NAME</extension> + . + </homeplacement> +</pre></code> + +<h3>Future Addition</h3> + +As mentioned earlier, RT policies can be applied at various stages of +component-based deployment lifecycle and at different scope. For +example, applying RTpolicies at the ORB level, or at the object +reference level of a component receptacle. These extensions involve +at least, extending the "appropriate" XML descriptor definition and +extending the CIAO runtime, including core and/or the CIDL generated +code to configure the policies. How other RT-related policies can be +added will be reviewed in my thesis available shortly. + +<hr> +<address>Nanbor Wang</address> +<!-- hhmts start --> +Last modified: Sun Nov 30 19:23:25 Mountain Standard Time 2003 +<!-- hhmts end --> +</body> </html> diff --git a/modules/CIAO/docs/TODO.html b/modules/CIAO/docs/TODO.html new file mode 100644 index 00000000000..0b7ff8fd774 --- /dev/null +++ b/modules/CIAO/docs/TODO.html @@ -0,0 +1,259 @@ +<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN"><p> +<!-- $Id$ --> +<html> <head> +<title>Component-Integrated ACE ORB - TODO list</title> +</head> + +<body> +<h1>Component-Integrated ACE ORB (CIAO) - TODO list</h1> + +The following is a prioritized list of things (with the highest +priority items first) that the DOC group is working on. The expected +date of accomplishments are also added as ETA (expected time of +accomplishment) : + +<h3>Things to do:</h3> +<ul> + <li> Integrate TAO's real-time event channel within the + container. Components can use this feature to communicate using + <CODE>eventtype</CODE>s a pub-sub mode. The code is available in a + branch and it needs to be integrated in to the main-trunk. (ETA - + 2004/08) + </li> <p> + + <li> Allow components (i.e., assemblies) to be connected using the + NameService (ETA - 2004/08) </li> <p> + + <li> Allow non-component enabled clients to access reference to a + component or an assembly using NameService (ETA - 2004/08) </li> <p> + + <li>Allowing components to set attributes, atleast attributes of + basic types. As a first step we need to implement the + <CODE>StandardConfigurator</CODE> interface. The servant for the + <CODE> StandardConfigurator</CODE> interface should be implemented + and activated by the servant for the component. DAnCE can extract + the reference from the servant and use it to set attributes (ETA - + 2004/08)</li><p> + +<li>Now that we have supports for ccm_{activate,passivate,remove}, we + need to rethink how a container manages the lifecycle of all the + components/homes it hosts so all the servants related to a + component get destroyed "properly". The aforementioned + SessionComponent operations will also depend on the proper + lifecycle management. <p> + + This includes making sure all components' appropriate + ccm_passivate and ccm_remove operations are called when the + ComponentServer is closing down.<p> (ETA - 2004/08) </li> + + <li> Migrate RT features from RTComponentServer to DAnCE + (ETA - 2004/10) </li> <p> + + <li> Static configuration of components using DAnCE (ETA - 2004/12) + </li> <p> + + <li>We need a set of tests to make sure most (and later + all) of the data types are function correctly (in term of CIDL + generated code). More importantly, we need to make sure all the + component keywords are supported okay. (ETA - 2004/07)<p> + + <li>The naming convention used in <a + href="new_component.html">creating new component + instructions</a> and that used in <a + href="templates/">templates</a> do not match. (Files containing + glue code are named *_svnt.* and *GS.* respectively.) We need + to address that.(ETA - 07/2004) <p> </li> + + <li> Retire the old assembly and deployment framework (ETA - + 2004/10) </li> + + <li>We need to review the implementation of servant glue code and + container implementations to make sure that they are + thread-safe, if the container calls for it. Currently, these + states are changed only by the deployment framework which always + runs in single thread, so it's not a serious problem. However, + it's perfectly legal to dynamically configure connnections, which + will be the case if we want to add new components or remove + components from the assembly.(ETA - 2004/09)<p> + + <li> Add support for creating a thread pool within the the component + server. We don't have support for this, which has made our users + resort to spawning threads within the components, which breaks + portability of the executor code. (ETA - 2004/09) </li> <p> + + <li> At present components in an assembly have no way of knowing + whether the assembly is complete or not. This becomes important when + there are hierarchical assemblies, and the assembly at a higher + level needs to pass on attrbute information to the assembly at a + lower level. The spec talks about <CODE> configuration_complete () + </CODE> whose semantics are a bit unclear. We may have to use this + to inform the components that the configuration is infact + complete. (ETA - 2004/09)</li><p> + + <li> We have now two proprietary methods in the <CODE> + SessionComponent </CODE> interface called <CODE> ciao_preactivate () + </CODE> and <CODE> ciao_postactivate () </CODE> which has to be + overridden by the executor code irrespective of whether the executor + implements them or not. These were added to help components to know + activation status of other components in the assembly. This could + create problems for interoperability of the executor code. A better + to way is to have the CIDL generate C++ code instead of executor IDL. + The generated C++ code from the CIDL could provide default + implementations which could be overridden by the executor code if so + desired. This would make the executor code more portable. Obviously + we also should retain executor IDL generation using some command line + options. (ETA - 2004/09). </li> <p> + +<li> Need to develop tools that would allow components to be added + dynamically to an existing assembly and remove components + dynamically from an existing assembly (ETA - 2004/12) <li> <p>. + +<li>The CCM_Core libraries need to be refactored so regular CIAO + users no longer need to link to CIAO_Server but to + CIAO_Container library instead. Currently, the session + container implementation is throwing exceptions from the + deployment modules when it fails to install a home. But these + feature should really be implmented in the Deployment::Container + interface instead. (ETA - 2004/12)<p> + +<li>HomeRegistrar related files from the CCM_Core projects have + been removed. We need to move them into a new directory when we + get to a new HomeFinder/HomeRegistrar implementation. Notice + that the deployment framework will need to use the HomeRegistrar + interface to register components/homes. (ETA - 2004/12)<p> + +<li>We should add support for the unclassified container and use the + property file of some sort to configure the empty container.<p> + + Process component (which have 1:1 servant to OID mapping) might + be useful too (no need to support PSS in this case?)<p> + + Persistent object references/IDs can be useful for statically + configured DRE systems as they eliminate the initial handshakes + in a multi-process system and enable each process to start up + independently. (ETA - Not known) <p> + + <li>The new <code>generate_component_mpc.pl</code> script should + invoke the <code>generate_export_file.pl</code> automatically + and created the necessary export files instead of only printing + out the hints on how to do that. (ETA - Not known)<p> + + <li>We need a ConfigValues parser for extracting common name-value + info out of a ConfigValues sequence. This would be needed if + components have to set complex user defined types as attributes. + (ETA - not known). </li><p> + + <li><b>Container Factory</b>: We need to provide a container factory + interface to decide what kind of container we need to use. Hmm, + isn't this the job of <code>ComponentServer</code> interface? + (ETA - not known)</li><p> + + <li><b>ComponentInstallation</b>: This is a simple interface that + provides (UUID, Location) mappings. Both UUID and Location are + of string type. Since ACE supports UUID implementation, we can + probably use that to generate a UUID. Location should be URI, but + let's just map that to locations in filesystem (pathnames) for + now. So we will most likely need to provide more downloading + mechanisms in the future, e.g., http, ftp, etc. <p> + + ComponentInstallation is the interface assembly mechanism used + to interact with the deployment mechanism. We are free to + implement the deployment mechanism (i.e., shipping of code to + various locations of application domains) the way we like but + the assembly mechanism depends on this interface to determine + where to fetch a specific implementation.<p> + + One thing that we really need is an installation tool set which + can be used to manage remote installation, by parsing various + XML descriptors and either push or pull the right implmentation + for a certain host in the list of hosts the component need to be + installed. According to the CCM spec., ComponentInstallation + interface implementation can retrieve a implementation (DLL) on + an on-demand basis. Therefore, there is probably no need to + push the appropriate DLL over right away when we feed some + descriptors into the installation tool. The tool, however, + should accurately extract the correct OS/compiler information + and inform the ComponentInstallation impl which and where to + fetch the right implmentation for the host it is running on. (ETA - not + known)<p> + <li><b>CIDL Compiler</b>: + There are no immediate plans to support the part of CIDL + corresponding to the OMG Persistent State Definition Langauge + (PSDL). For an up-to-date status of the CIDL, please see + $CIAO_ROOT/CCF/Documentation/TODO. + + <li> This is a set of the to-do associated with the DAnCE implementation. + <p> + <ul> + <li>We need to put the ComponentServer layer back in. In the current + implementation we use NodeApplication as both the Session Container + and the ComponentServer. We need to seperate the two + entities so we can hook any Container with the + ComponentServer. This change is essential to the RT + configuration and for the future of CIAO.<p> + + <li>Bala added ciao_[pre|post]_activate to the Session Component to + force the order of actions upon start-up, but this will not + work with the new DnC framework. We need to change the DnC framework + a bit to make this feature available again.<p> + + <li>We need to work on the Resource Management process in + DAnCE. Right now this part of the DnC spec is omitted in our + implementation.<p> + + <li>We need to work on the packaging process more so we can ship + binaries around when the dll/so is not available in the + local node.<p> + </ul> + +</ul> + +<h3>Cool ideas</h3> +<ul> + <li>Currently, developing a component will create 3 DLLs, one for + the client side stuff, one for the servant glue code, and one + for the executors. We need to figure out a way to automate + these stuff. MPC is a good starting point to generate scripts + to create project templates.<p> + + <li>Management of <code>ComponentInstallation</code> can be done + using a CORBAscript of some sort as this involve mostly + registering and unregistering of locations of component + implementations.<p> +</ul> + +<h3>Finished Work</h3> +<ul> + <li>The exception returned from CIAO_Daemon when it fails to + locate a DLL is quite useless to say the least. It needs + fixing.<p> + + CIAO now provides more meaningful error message now.<p> + + <li>We should create a new workspace/target in TAO such as CIAO_ONLY + to simplify the process of using CIAO. Currently, you have to + checkout the README file in CIAO_ROOT to figure out what TAO + modules are required by CIAO.<p> + + A new target "CIAO_Core" is now available in ACE's top level + Makefile.<p> + + <li>We need better debug info and a way to control how different + level of debug info are generated in CIAO.<p> Some preliminary + support using the <a href="EnvVars.html">environment + variable</a> <code>CIAO_DEBUG_LEVEL</code> has been added.<P> + + <li>Miminal implementation of CIDL compiler.<p> + + <li>CCM core workspace now contains 3 different DLLs: + <UL> + <li>CCM_Client - Needed by CCM-awared client + <li>CCM_Container - Needed by executors and servers + <li>CCM_Server - Needed by servers and CIAO tools + </UL><p> + + <li>A SessionContainer implementation.<p> + +</ul> + +</body> </html> diff --git a/modules/CIAO/docs/Trace.html b/modules/CIAO/docs/Trace.html new file mode 100644 index 00000000000..001cddd007e --- /dev/null +++ b/modules/CIAO/docs/Trace.html @@ -0,0 +1,32 @@ +<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN"> +<html> +<head> +<!-- $Id$ --> + <title>CIAO Logging facility</title> +</head> +<body> +<h1>CIAO Logging Facility +</h1> +Based on the various logging techniques provided by ACE mechanism, CIAO +has introduced some new logging macros to assist CIAO developers in +diagnosing CIAO codes.<br> +<ul> + <li><span style="font-weight: bold;">CIAO_TRACE<br> + </span> By placing CIAO_TRACE at the beginning of +a CIAO function or method, you can get the tracing message of when +these functions are entered and when they are exited at runtime. To +enable this feature, however, you need to set CIAO_NTRACE to 0 in +$ACE_ROOT\ace\config.h. CIAO_TRACE works in a identical way as +ACE_TRACE. The only distinction is that CIAO_TRACE will output the the +tracing messages for CIAO projects only while dumping the excessive +messages from ACE on top of which CIAO is built. <br> + </li> +</ul> +<hr> +<address>Ming Xiong<br> +Last modified: Thur Aug 12:50 am 2005 +</address> +<!-- hhmts start --> +<!-- hhmts end --> +</body> +</html> diff --git a/modules/CIAO/docs/XML/ciao_rt_cad_ext.dtd b/modules/CIAO/docs/XML/ciao_rt_cad_ext.dtd new file mode 100644 index 00000000000..7877afe2151 --- /dev/null +++ b/modules/CIAO/docs/XML/ciao_rt_cad_ext.dtd @@ -0,0 +1,93 @@ +<!-- + $Id$ + + DTD for CIAO ComponentAssembly real-time extension. + The extension for this type of XML document should be .RTD + + A component server can be associated to one conforming XML + descriptor file of this DTD via the <extension> tag under + <hostcollocation>, <processcollocation> as + + <extension class="RT-CAD-EXT" + origin="CIAO">pathname_to_xml_file.xml</extension> + + The root element is <rtcad-ext>. + + The <extension> tag under <homeplacement> element can be used to + specify the <rtpolicyset> named in this file (using rtpolicyset's + id attribute.) For example, + + <extension class="RT-POLICY-SET" + origin="CIAO">IDREF_of_some_rtpolicyset</extension> + +--> + +<!ELEMENT rtcad_ext ( rtresources?, rtpolicyset+ ) > + +<!-- RT Resources grammar definitions --> + +<!ELEMENT rtresources (threadpool | threadpoolwithlanes | connectionbands)* > + +<!ELEMENT threadpool EMPTY> +<!ATTLIST threadpool + id ID #REQUIRED + stacksize CDATA #REQUIRED + static_threads CDATA #REQUIRED + dynamic_threads CDATA #REQUIRED + priority CDATA #REQUIRED + buffering (yes | no) #REQUIRED + max_buffer CDATA #REQUIRED + buffer_size CDATA #REQUIRED > + +<!ELEMENT threadpoolwithlanes (lane+) > +<!ATTLIST threadpoolwithlanes + id ID #REQUIRED + stacksize CDATA #REQUIRED + borrowing (yes | no) #REQUIRED + buffering (yes | no) #REQUIRED + max_buffer CDATA #REQUIRED + buffer_size CDATA #REQUIRED > + +<!ELEMENT lane EMPTY> +<!ATTLIST lane + priority CDATA #REQUIRED + static_threads CDATA #REQUIRED + dynamic_threads CDATA #REQUIRED > + +<!ELEMENT connectionbands (band+) > +<!ATTLIST connectionbands + id ID #REQUIRED > + +<!ELEMENT band EMPTY> +<!ATTLIST band + low CDATA #REQUIRED + high CDATA #REQUIRED > + +<!-- RT Policy_Set grammar definitions --> +<!-- Each type of policy in rtpoliyset can only appear once --> +<!ELEMENT rtpolicyset (priority_model_policy, + threadpool_policy, + banded_connection_policy)+ > +<!ATTLIST rtpolicyset + id ID #REQUIRED> + +<!ELEMENT priority_model_policy EMPTY> +<!ATTLIST priority_model_policy + type (server_declared | client_propagated) #REQUIRED + priority CDATA #REQUIRED> + +<!ELEMENT threadpool_policy EMPTY> +<!-- + "idref" must be previously defined by the id attribute of + either <threadpool> or <threadpoollanes> element +--> +<!ATTLIST threadpool_policy + idref IDREF #REQUIRED> + +<!ELEMENT banded_connection_policy EMPTY> +<!-- + "idref" must be previously defined by the id attribute of + <connectionbands> element. +--> +<!ATTLIST banded_connection_policy + idref IDREF #REQUIRED>
\ No newline at end of file diff --git a/modules/CIAO/docs/XML/componentassembly.dtd b/modules/CIAO/docs/XML/componentassembly.dtd new file mode 100644 index 00000000000..d61fb47505f --- /dev/null +++ b/modules/CIAO/docs/XML/componentassembly.dtd @@ -0,0 +1,367 @@ +<!-- DTD for Component Assembly Descriptor. The root element + is <componentassembly>. Elements are listed + alphabetically. + --> + +<!-- Simple xml link attributes based on W3C WD-xlink-19980303. + May change slightly when XLL is finalized. + --> +<!ENTITY % simple-link-attributes " + xml:link CDATA #FIXED 'SIMPLE' + href CDATA #REQUIRED +" > + +<!ELEMENT componentassembly + ( description? + , componentfiles + , partitioning + , connections? + , extension* + ) > +<!ATTLIST componentassembly + id ID #REQUIRED + derivedfrom CDATA #IMPLIED > + +<!-- If file not available locally, then download via codebase link --> +<!ELEMENT codebase EMPTY > +<!ATTLIST codebase + filename CDATA #IMPLIED + %simple-link-attributes; > + +<!ELEMENT componentfile + ( fileinarchive + | codebase + | link + ) > +<!ATTLIST componentfile + id ID #REQUIRED + type CDATA #IMPLIED > + +<!ELEMENT componentfileref EMPTY > +<!ATTLIST componentfileref + idref CDATA #REQUIRED > + +<!ELEMENT componentfiles + ( componentfile+ + ) > + +<!ELEMENT componentimplref EMPTY > +<!ATTLIST componentimplref + idref CDATA #REQUIRED > + +<!ELEMENT componentinstantiation + ( usagename? + , componentproperties? + , registercomponent* + , extension* + ) > +<!ATTLIST componentinstantiation + id ID #REQUIRED > + +<!ELEMENT componentinstantiationref EMPTY > +<!ATTLIST componentinstantiationref + idref CDATA #REQUIRED > + +<!ELEMENT componentproperties + ( fileinarchive + | codebase + ) > + +<!ELEMENT componentsupportedinterface + ( componentinstantiationref + | findby + )> + +<!ELEMENT connectevent + ( ( consumesport + | existinginterface + ) + , ( emitsport + | publishesport + ) + ) > +<!ATTLIST connectevent + id ID #IMPLIED > + +<!ELEMENT connecthomes + ( proxyhome + , destinationhome + ) > +<!ATTLIST connecthomes + id ID #IMPLIED > + +<!ELEMENT connectinterface + ( usesport + , ( providesport + | componentsupportedinterface + | existinginterface + | homeinterface + ) + ) > +<!ATTLIST connectinterface + id ID #IMPLIED > + +<!ELEMENT connections + ( connectinterface + | connectevent + | connecthomes + | extension + )* > + +<!ELEMENT consumesidentifier ( #PCDATA ) > + +<!ELEMENT consumesport + ( consumesidentifier + , ( componentinstantiationref + | findby + ) + )> + +<!ELEMENT description ( #PCDATA ) > + +<!ELEMENT destination ( #PCDATA ) > + +<!ELEMENT destinationhome + ( homeplacementref + | findby + ) > + +<!ELEMENT emitsidentifier ( #PCDATA ) > + +<!ELEMENT emitsport + ( emitsidentifier + , ( componentinstantiationref + | findby + ) + )> + +<!ELEMENT executableplacement + ( usagename? + , componentfileref + , componentimplref? + , invocation? + , destination? + , extension* + ) > +<!ATTLIST executableplacement + id ID #REQUIRED + cardinality CDATA "1" > + +<!ELEMENT existinginterface + ( findby )> + +<!-- The "extension" element is used for vendor-specific extensions --> +<!ELEMENT extension (#PCDATA) > +<!ATTLIST extension + class CDATA #REQUIRED + origin CDATA #REQUIRED + id ID #IMPLIED + extra CDATA #IMPLIED + html-form CDATA #IMPLIED > + +<!-- The "fileinarchive" element is used to specify a file in the archive. + If the file is independent of an archive then link is used to point to + the archive in which the file may be found. + --> +<!ELEMENT fileinarchive + ( link? ) > +<!ATTLIST fileinarchive + name CDATA #REQUIRED > + +<!ELEMENT findby + ( namingservice + | stringifiedobjectref + | traderquery + | homefinder + | extension + ) > + +<!ELEMENT homefinder EMPTY > +<!ATTLIST homefinder + name CDATA #REQUIRED > + +<!ELEMENT homeinterface + ( homeplacementref + | findby + )> + +<!ELEMENT homeplacement + ( usagename? + , componentfileref + , componentimplref? + , homeproperties? + , componentproperties? + , registerwithhomefinder* + , registerwithnaming* + , registerwithtrader* + , componentinstantiation* + , destination? + , extension* + ) > +<!ATTLIST homeplacement + id ID #REQUIRED + cardinality CDATA "1" > + +<!ELEMENT homeplacementref EMPTY > +<!ATTLIST homeplacementref + idref CDATA #REQUIRED > + +<!ELEMENT homeproperties + ( fileinarchive + | codebase + ) > + +<!ELEMENT hostcollocation + ( usagename? + , impltype? + , ( homeplacement + | executableplacement + | processcollocation + | extension + )+ + , destination? + ) > +<!ATTLIST hostcollocation + id ID #IMPLIED + cardinality CDATA "1" > + +<!ELEMENT impltype EMPTY > +<!ATTLIST impltype + language CDATA #REQUIRED + version CDATA #IMPLIED > + +<!ELEMENT invocation EMPTY > +<!ATTLIST invocation + args CDATA #REQUIRED > + +<!ELEMENT link ( #PCDATA ) > +<!ATTLIST link + %simple-link-attributes; > + +<!ELEMENT namingservice EMPTY > +<!ATTLIST namingservice + name CDATA #REQUIRED > + +<!ELEMENT partitioning + ( homeplacement + | executableplacement + | processcollocation + | hostcollocation + | extension + )* > + +<!ELEMENT processcollocation + ( usagename? + , impltype? + , ( homeplacement + | extension + )+ + , destination? + ) > +<!ATTLIST processcollocation + id ID #IMPLIED + cardinality CDATA "1" > + +<!ELEMENT providesidentifier ( #PCDATA ) > + +<!ELEMENT providesport + ( providesidentifier + , ( componentinstantiationref + | findby + ) + ) > + +<!ELEMENT proxyhome + ( homeplacementref + | findby + ) > + +<!ELEMENT publishesidentifier ( #PCDATA ) > + +<!ELEMENT publishesport + ( publishesidentifier + , ( componentinstantiationref + | findby + ) + ) > + +<!ELEMENT registercomponent + ( ( providesidentifier + | consumesidentifier + )? + , ( registerwithnaming + | registerwithtrader + )+ + ) > + +<!ELEMENT registerwithhomefinder EMPTY > +<!ATTLIST registerwithhomefinder + name CDATA #REQUIRED > + +<!ELEMENT registerwithnaming EMPTY > +<!ATTLIST registerwithnaming + name CDATA #IMPLIED > + +<!ELEMENT registerwithtrader + ( traderexport ) > +<!ATTLIST registerwithtrader + tradername CDATA #IMPLIED > + +<!-- DEVNOTE: is tradername necessary? --> +<!-- DEVNOTE: Should trader properties be specified in component file? + And in assembly file? --> + +<!ELEMENT stringifiedobjectref ( #PCDATA ) > + +<!ELEMENT traderconstraint ( #PCDATA ) > + +<!ELEMENT traderexport + ( traderservicetypename + , traderproperties + ) > + +<!ELEMENT traderpolicy + ( traderpolicyname + , traderpolicyvalue + ) > + +<!ELEMENT traderpolicyname ( #PCDATA ) > + +<!ELEMENT traderpolicyvalue ( #PCDATA ) > + +<!ELEMENT traderpreference ( #PCDATA ) > + +<!ELEMENT traderproperties + ( traderproperty+ ) > + +<!ELEMENT traderproperty + ( traderpropertyname + , traderpropertyvalue + ) > + +<!ELEMENT traderpropertyname ( #PCDATA ) > + +<!ELEMENT traderpropertyvalue ( #PCDATA ) > + +<!ELEMENT traderquery + ( traderservicetypename + , traderconstraint + , traderpreference? + , traderpolicy* + , traderspecifiedprop* + ) > + +<!ELEMENT traderservicetypename ( #PCDATA ) > + +<!ELEMENT traderspecifiedprop ( #PCDATA ) > + +<!ELEMENT usagename ( #PCDATA ) > + +<!ELEMENT usesidentifier ( #PCDATA ) > + +<!ELEMENT usesport + ( usesidentifier + , ( componentinstantiationref + | findby + ) + ) > diff --git a/modules/CIAO/docs/XML/corbacomponent.dtd b/modules/CIAO/docs/XML/corbacomponent.dtd new file mode 100644 index 00000000000..fd5ec98f377 --- /dev/null +++ b/modules/CIAO/docs/XML/corbacomponent.dtd @@ -0,0 +1,316 @@ +<!-- DTD for CORBA Component Descriptor. The root element is + <corbacomponent>. Elements are listed alphabetically. +--> + +<!-- Simple xml link attributes based on W3C WD-xlink-19980303. + May change when XLL is finalized. --> + +<!ENTITY % simple-link-attributes " + xml:link CDATA #FIXED 'SIMPLE' + href CDATA #REQUIRED +"> + +<!ELEMENT accessmode EMPTY> +<!ATTLIST accessmode + mode (READ_ONLY|READ_WRITE) #REQUIRED > + +<!ELEMENT componentfeatures + ( inheritscomponent? + , supportsinterface* + , ports + , operationpolicies? + , extension* + ) > +<!ATTLIST componentfeatures + name CDATA #REQUIRED + repid CDATA #REQUIRED > + +<!ELEMENT componentkind + ( service + | session + | process + | entity + | unclassified + ) > + +<!ELEMENT componentproperties + ( fileinarchive + ) > + +<!ELEMENT componentrepid EMPTY > +<!ATTLIST componentrepid + repid CDATA #IMPLIED > + +<!ELEMENT containermanagedpersistence + ( storagehome + , pssimplementation? + , accessmode + , psstransaction + , params? + ) > + +<!ELEMENT configurationcomplete EMPTY > +<!ATTLIST configurationcomplete + set ( true | false ) #REQUIRED > + +<!ELEMENT consumes + ( eventpolicy + , extension* ) > +<!ATTLIST consumes + consumesname CDATA #REQUIRED + eventtype CDATA #REQUIRED > + +<!ELEMENT corbacomponent + ( corbaversion + , cormponentrepid + , homerepid + , componentkind + , interop? + , transaction? + , security? + , threading + , configurationcomplete + , extendedpoapolicy* + , repository? + , segment* + , componentproperties? + , homeproperties? + , homefeatures+ + , componentfeatures+ + , interface* + , extension* + ) > + +<!ELEMENT corbaversion (#PCDATA) > + +<!ELEMENT description ( #PCDATA ) > + +<!ELEMENT emits + ( eventpolicy + , extension* ) > +<!ATTLIST emits + emitsname CDATA #REQUIRED + eventtype CDATA #REQUIRED > + +<!ELEMENT entity + ( servant ) > + +<!ELEMENT eventpolicy EMPTY> +<!ATTLIST eventpolicy + policy ( normal | default | transaction ) #IMPLIED> + +<!ELEMENT extendedpoapolicy EMPTY> +<!ATTLIST extendedpoapolicy + name CDATA #REQUIRED + value CDATA #REQUIRED > + +<!-- The "extension" element is used for vendor-specific extensions --> +<!ELEMENT extension (#PCDATA) > +<!ATTLIST extension + class CDATA #REQUIRED + origin CDATA #REQUIRED + id ID #IMPLIED + extra CDATA #IMPLIED + html-form CDATA #IMPLIED > + +<!-- The "fileinarchive" element is used to specify a file in the + archive. If the file is in another archive then link is used to + point to the archive in which the file may be found. + --> +<!ELEMENT fileinarchive + ( link? ) > +<!ATTLIST fileinarchive + name CDATA #REQUIRED > + +<!ELEMENT homefeatures + ( inheritshome? + , operationpolicies? + , extension* ) > +<!ATTLIST homefeatures + name CDATA #REQUIRED + repid CDATA #REQUIRED > + +<!ELEMENT homeproperties + ( fileinarchive + ) > + +<!ELEMENT homerepid EMPTY > +<!ATTLIST homerepid + repid CDATA #IMPLIED > + +<!ELEMENT inheritscomponent EMPTY> +<!ATTLIST inheritscomponent + repid CDATA #REQUIRED> + +<!ELEMENT inheritshome EMPTY> +<!ATTLIST inheritshome + repid CDATA #REQUIRED> + +<!ELEMENT inheritsinterface EMPTY> +<!ATTLIST inheritsinterface + repid CDATA #REQUIRED> + +<!ELEMENT ins EMPTY> +<!ATTLIST ins + name CDATA #REQUIRED > + +<!ELEMENT interface + ( inheritsinterface* + , operationpolicies? ) > +<!ATTLIST interface + name CDATA #REQUIRED + repid CDATA #REQUIRED > + +<!ELEMENT interop EMPTY> +<!ATTLIST interop + type CDATA #REQUIRED + direction ( hasview | isview ) #REQUIRED + descriptor CDATA #REQUIRED > + +<!ELEMENT link ( #PCDATA ) > +<!ATTLIST link + %simple-link-attributes; > + +<!ELEMENT objref EMPTY> +<!ATTLIST objref + string CDATA #REQUIRED > + +<!ELEMENT operation + ( transaction? + , requiredrights? ) > +<!ATTLIST operation + name CDATA #REQUIRED > + +<!-- an operation name of "*" specifies all operations in the current +scope --> +<!ELEMENT operationpolicies + ( operation+ ) > + +<!ELEMENT param EMPTY > +<!ATTLIST param + name CDATA #REQUIRED + value CDATA #REQUIRED > + +<!ELEMENT params (param+) > + +<!ELEMENT poapolicies EMPTY> +<!ATTLIST poapolicies + thread (ORB_CTRL_MODEL | SINGLE_THREAD_SAFE ) #REQUIRED + lifespan (TRANSIENT | PERSISTENT ) #REQUIRED + iduniqueness (UNIQUE_ID | MULTIPLE_ID) #REQUIRED + idassignment (USER_ID | SYSTEM_ID) #REQUIRED + servantretention (RETAIN | NON_RETAIN) #REQUIRED + requestprocessing (USE_ACTIVE_OBJECT_MAP_ONLY + |USE_DEFAULT_SERVANT + |USE_SERVANT_MANAGER) #REQUIRED + implicitactivation (IMPLICIT_ACTIVATION + |NON_IMPLICIT_ACTIVATION) #REQUIRED > + +<!ELEMENT ports + ( uses + | provides + | emits + | publishes + | consumes + )* > + +<!ELEMENT process + ( servant ) > + +<!ELEMENT provides + ( operationpolicies? + , extension* ) > +<!ATTLIST provides + providesname CDATA #REQUIRED + repid CDATA #REQUIRED + facettag CDATA #REQUIRED > + +<!ELEMENT pssimplementation EMPTY> +<!ATTLIST pssimplementation + id CDATA #REQUIRED > + +<!ELEMENT psstransaction (psstransactionisolationlevel?) > +<!ATTLIST psstransaction + policy (TRANSACTIONAL|NON_TRANSACTIONAL) #REQUIRED > + +<!ELEMENT psstransactionisolationlevel EMPTY> +<!ATTLIST psstransactionisolationlevel + level (READ_UNCOMMITTED|READ_COMMITTED|REPEATABLE_READ|SERIALIZABLE) + #REQUIRED > + +<!ELEMENT publishes + ( eventpolicy + , extension* ) > +<!ATTLIST publishes + publishesname CDATA #REQUIRED + eventtype CDATA #REQUIRED > + +<!ELEMENT repository + ( ins + | objref + | link + ) > +<!ATTLIST repository + type CDATA #IMPLIED > + +<!ELEMENT requiredrights + ( right* ) > + +<!ELEMENT right + ( description? ) > +<!ATTLIST right + name CDATA #REQUIRED > + +<!ELEMENT security + ( requiredrights? ) > +<!ATTLIST security + rightsfamily CDATA #REQUIRED + rightscombinator (secallrights | secanyrights) #REQUIRED > + +<!ELEMENT segment + ( segmentmember+ + , containermanagedpersistence? + , extension* + ) > +<!ATTLIST segment + name CDATA #REQUIRED + segmenttag CDATA #REQUIRED > + +<!ELEMENT segmentmember EMPTY> +<!ATTLIST segmentmember + facettag CDATA #REQUIRED > + +<!ELEMENT servant EMPTY > +<!ATTLIST servant + lifetime (component|method|transaction|container) #REQUIRED > + +<!ELEMENT service EMPTY > + +<!ELEMENT session + ( servant ) > + +<!ELEMENT storagehome EMPTY> +<!ATTLIST storagehome + id CDATA #REQUIRED > + +<!ELEMENT supportsinterface + ( operationpolicies? + , extension* ) > +<!ATTLIST supportsinterface + repid CDATA #REQUIRED > + +<!ELEMENT threading EMPTY> +<!ATTLIST threading + policy ( serialize | multithread ) #REQUIRED > + +<!ELEMENT transaction EMPTY > +<!ATTLIST transaction + use (self-managed|not-supported|required|supports|requiresnew| + mandatory|never) #REQUIRED > +<!ELEMENT unclassified + ( poapolicies ) > + +<!ELEMENT uses ( extension* ) > +<!ATTLIST uses + usesname CDATA #REQUIRED + repid CDATA #REQUIRED > diff --git a/modules/CIAO/docs/XML/properties.dtd b/modules/CIAO/docs/XML/properties.dtd new file mode 100644 index 00000000000..adfe8699fb7 --- /dev/null +++ b/modules/CIAO/docs/XML/properties.dtd @@ -0,0 +1,87 @@ +<!-- DTD for CORBA Component property file. The root element + is <properties>. Elements are listed alphabetically. +--> + +<!ELEMENT choice ( #PCDATA ) > + +<!ELEMENT choices ( choice | range )+ ) > + +<!ELEMENT defaultvalue ( #PCDATA ) > + +<!ELEMENT description ( #PCDATA ) > + +<!ELEMENT value ( #PCDATA ) > + +<!ELEMENT properties + ( description? + , ( simple + | sequence + | struct + | valuetype + )* + ) > + +<!ELEMENT range (value, value) > + +<!ELEMENT simple + ( description? + , value + , choices? + , defaultvalue? + ) > +<!ATTLIST simple + name CDATA #IMPLIED + type ( boolean + | char + | double + | float + | short + | long + | objref + | octet + | string + | ulong + | ushort + | longlong + | ulonglong + | wchar + | wstring + | fixed + ) #REQUIRED > + +<!ELEMENT sequence + ( description? + , ( simple* + | struct* + | sequence* + | valuetype* + ) + ) > +<!ATTLIST sequence + name CDATA #IMPLIED + type CDATA #REQUIRED > + +<!ELEMENT struct + ( description? + , ( simple + | sequence + | struct + | valuetype + )* + ) > +<!ATTLIST struct + name CDATA #IMPLIED + type CDATA #REQUIRED > + +<!ELEMENT valuetype + ( description? + , ( simple + | sequence + | struct + | valuetype + )* + ) > +<!ATTLIST valuetype + name CDATA #IMPLIED + type CDATA #REQUIRED + primarykey (true | false) "false" > diff --git a/modules/CIAO/docs/XML/softpkg.dtd b/modules/CIAO/docs/XML/softpkg.dtd new file mode 100644 index 00000000000..ee87b811cc6 --- /dev/null +++ b/modules/CIAO/docs/XML/softpkg.dtd @@ -0,0 +1,220 @@ +<!-- DTD for softpkg. Used to describe CORBA Component + implementations. The root element is <softpkg>. + Elements are listed alphabetically. + --> +<!-- Revision $Id$ --> +<!-- Simple xml link attributes based on W3C WD-xlink-19980303. + May change when XLL is finalized. --> + +<!ENTITY % simple-link-attributes " + xml:link CDATA #FIXED 'SIMPLE' + href CDATA #REQUIRED +"> + +<!ELEMENT author + ( name + | company + | webpage + )* > + +<!ELEMENT code + ( ( codebase + | fileinarchive + | link + ) + , entrypoint? + , usage? + ) > +<!ATTLIST code + type CDATA #IMPLIED > + +<!-- If file not available locally, then download via codebase link --> +<!ELEMENT codebase EMPTY > +<!ATTLIST codebase + filename CDATA #IMPLIED + %simple-link-attributes; > + +<!ELEMENT compiler EMPTY > +<!ATTLIST compiler + name CDATA #REQUIRED + version CDATA #IMPLIED > + +<!ELEMENT company ( #PCDATA ) > + +<!ELEMENT dependency + ( softpkgref + | codebase + | fileinarchive + | localfile + | name + | valuetypefactory + ) > +<!ATTLIST dependency + type CDATA #IMPLIED + action (assert | install) "assert"> + +<!ELEMENT description ( #PCDATA ) > + +<!ELEMENT descriptor + ( link + | fileinarchive + ) > +<!ATTLIST descriptor + type CDATA #IMPLIED> + +<!ELEMENT entrypoint ( #PCDATA) > + +<!-- The "extension" element is used for vendor-specific extensions --> +<!ELEMENT extension (#PCDATA) > +<!ATTLIST extension + class CDATA #REQUIRED + origin CDATA #REQUIRED + id ID #IMPLIED + extra CDATA #IMPLIED + html-form CDATA #IMPLIED > + +<!-- The "fileinarchive" element is used to specify a file in the archive. + If the file is in another archive then link is used to point to + the archive in which the file may be found. + --> +<!ELEMENT fileinarchive + ( link? ) > +<!ATTLIST fileinarchive + name CDATA #REQUIRED > + +<!ELEMENT idl + ( link + | fileinarchive + | repository + ) > +<!ATTLIST idl + id CDATA #REQUIRED + homeid CDATA #REQUIRED > + +<!ELEMENT implementation + ( description + | code + | compiler + | dependency + | descriptor + | extension + | programminglanguage + | humanlanguage + | os + | propertyfile + | processor + | runtime + )* > +<!ATTLIST implementation + id ID #IMPLIED + variation CDATA #IMPLIED > + +<!ELEMENT implref EMPTY > +<!ATTLIST implref + idref CDATA #REQUIRED > + +<!ELEMENT ins EMPTY > +<!ATTLIST inc + name CDATA #REQUIRED > + +<!ELEMENT humanlanguage EMPTY > +<!ATTLIST humanlanguage + name CDATA #REQUIRED > + +<!ELEMENT license ( #PCDATA ) > +<!ATTLIST license + %simple-link-attributes; > + +<!ELEMENT link ( #PCDATA ) > +<!ATTLIST link + %simple-link-attributes; > + +<!-- A file that should be available in the local environment --> +<!ELEMENT localfile EMPTY > +<!ATTLIST localfile + name CDATA #REQUIRED > + +<!ELEMENT name ( #PCDATA ) > + +<!ELEMENT objref EMPTY > +<!ATTLIST objref + string CDATA #REQUIRED > + +<!ELEMENT os EMPTY > +<!ATTLIST os + name CDATA #REQUIRED + version CDATA #IMPLIED> + +<!ELEMENT pkgtype ( #PCDATA ) > +<!ATTLIST pkgtype + version CDATA #IMPLIED > + +<!ELEMENT processor EMPTY > +<!ATTLIST processor + name CDATA #REQUIRED > + +<!ELEMENT programminglanguage EMPTY> +<!ATTLIST programminglanguage + name CDATA #REQUIRED + version CDATA #IMPLIED > + +<!ELEMENT propertyfile + ( fileinarchive + | link) > +<!ATTLIST propertyfile + type CDATA #IMPLIED > + +<!ELEMENT repository + ( ins + | objref + | link + ) > +<!ATTLIST repository + type CDATA #IMPLIED > + +<!ELEMENT runtime EMPTY > +<!ATTLIST runtime + name CDATA #REQUIRED + version CDATA #IMPLIED> + +<!ELEMENT softpkg + ( title + | pkgtype + | author + | description? + | license + | idl + | propertyfile + | dependency + | descriptor + | implementation + | extension + )* > +<!ATTLIST softpkg + name ID #REQUIRED + version CDATA #IMPLIED > + +<!ELEMENT softpkgref + ( ( fileinarchive + | link + ) + , implref? + ) > + +<!ELEMENT title ( #PCDATA ) > + +<!ELEMENT usage ( #PCDATA ) > + +<!ELEMENT valuetypefactory + ( codebase + | fileinarchive + | link + ) > +<!ATTLIST valuetypefactory + repid CDATA #REQUIRED + valueentrypoint CDATA #IMPLIED + factoryentrypoint CDATA #IMPLIED > + +<!ELEMENT webpage ( #PCDATA ) > +<!ATTLIST webpage + %simple-link-attributes; > diff --git a/modules/CIAO/docs/cidlc.html b/modules/CIAO/docs/cidlc.html new file mode 100644 index 00000000000..3fbc7f80191 --- /dev/null +++ b/modules/CIAO/docs/cidlc.html @@ -0,0 +1,296 @@ +<!-- $Id$ --> +<html> + +<title>CIAO CIDL Compiler Options</title> + +<body> + +<h3>CIAO CIDL Compiler Options</h3> + +<div align="center"> +<table width="0" border="0" cellspacing="0" cellpadding="0"> +<tr> +<td> +<p> +<code> +./cidlc { OPTIONS } <cidl file> +</code> +</p> +<dl> +<dt> +<code> +[--version] +</code> +</dt> +<dd> +<p> +Display version information and exit. +</p> +</dd> +<dt> +<code> +[--help] +</code> +</dt> +<dd> +<p> +Display usage information and exit. +</p> +</dd> +<dt> +<code> +[--help-html] +</code> +</dt> +<dd> +<p> +Dump usage information in html format and exit. +</p> +</dd> +<dt> +<code> +[-I dir] +</code> +</dt> +<dd> +<p> +Add the directory dir to the list of directories to be searched for header files. +</p> +</dd> +<dt> +<code> +[-D name[=definition]] +</code> +</dt> +<dd> +<p> +Predefine name as a macro with the value definition if present, 1 otherwise. +</p> +</dd> +<dt> +<code> +[--gen-exec-impl] +</code> +</dt> +<dd> +<p> +Generate the executor implementation classes. +</p> +</dd> +<dt> +<code> +[--lem-force-all] +</code> +</dt> +<dd> +<p> +Force generation of local executor mapping for all IDL types including those not used (directly or inderectly) by compositions. This option is useful for generating a common portion of local executor mapping used by more than one component or composition. +</p> +</dd> +<dt> +<code> +[--lem-file-suffix suffix] +</code> +</dt> +<dd> +<p> +Use provided suffix instead of default 'E' when constructing name of local executor mapping file. +</p> +</dd> +<dt> +<code> +[--lem-file-regex regex] +</code> +</dt> +<dd> +<p> +Use provided regular expression when constructing name of local executor mapping file. +</p> +</dd> +<dt> +<code> +[--svnt-hdr-file-suffix suffix] +</code> +</dt> +<dd> +<p> +Use provided suffix instead of default '_svnt.h' when constructing name of servant file. +</p> +</dd> +<dt> +<code> +[--svnt-hdr-file-regex regex] +</code> +</dt> +<dd> +<p> +Use provided regular expression when constructing name of servant file. +</p> +</dd> +<dt> +<code> +[--svnt-src-file-suffix suffix] +</code> +</dt> +<dd> +<p> +Use provided suffix instead of default '_svnt.cpp' when constructing name of servant file. +</p> +</dd> +<dt> +<code> +[--svnt-src-file-regex regex] +</code> +</dt> +<dd> +<p> +Use provided regular expression when constructing name of servant file. +</p> +</dd> +<dt> +<code> +[--svnt-export-macro macro] +</code> +</dt> +<dd> +<p> +Replace default servant DLL export macro with provided ,acro. +</p> +</dd> +<dt> +<code> +[--svnt-export-include file] +</code> +</dt> +<dd> +<p> +Replace default servant export include file with provided file. +</p> +</dd> +<dt> +<code> +[--suppress-register-factory] +</code> +</dt> +<dd> +<p> +Suppress generation of code to register eventtype factories for event sinks. +</p> +</dd> +<dt> +<code> +[--custom-container type] +</code> +</dt> +<dd> +<p> +Generate code for custom container of the provided type. +</p> +</dd> +<dt> +<code> +[--desc-file-suffix suffix] +</code> +</dt> +<dd> +<p> +Use provided suffix instead of default '.ccd' when constructing name of descriptor file. +</p> +</dd> +<dt> +<code> +[--desc-file-regex regex] +</code> +</dt> +<dd> +<p> +Use provided regular expression when constructing name of descriptor file. +</p> +</dd> +<dt> +<code> +[--exec-hdr-file-suffix suffix] +</code> +</dt> +<dd> +<p> +Use provided suffix instead of default '_exec.h' when constructing name of executor implementation file. +</p> +</dd> +<dt> +<code> +[--exec-hdr-file-regex regex] +</code> +</dt> +<dd> +<p> +Use provided regular expression when constructing name of executor implementation file. +</p> +</dd> +<dt> +<code> +[--exec-src-file-suffix suffix] +</code> +</dt> +<dd> +<p> +Use provided suffix instead of default '_exec.cpp' when constructing name of executor implementation file. +</p> +</dd> +<dt> +<code> +[--exec-src-file-regex regex] +</code> +</dt> +<dd> +<p> +Use provided regular expression when constructing name of executor implementation file. +</p> +</dd> +<dt> +<code> +[--exec-export-macro macro] +</code> +</dt> +<dd> +<p> +Replace default executor DLL export macro with provided macro. +</p> +</dd> +<dt> +<code> +[--exec-export-include file] +</code> +</dt> +<dd> +<p> +Replace default executor export include file with provided file. +</p> +</dd> +<dt> +<code> +[--trace-semantic-actions] +</code> +</dt> +<dd> +<p> +Turn on semantic actions tracing facility. +</p> +</dd> +<dt> +<code> +[--preprocess-only] +</code> +</dt> +<dd> +<p> +Run preprocessor only and output result to stdout. +</p> +</dd> +</dl> +</td> +</tr> +</table> +</div> +</body> +</html> diff --git a/modules/CIAO/docs/com-impl.html b/modules/CIAO/docs/com-impl.html new file mode 100644 index 00000000000..ed5948ab9cf --- /dev/null +++ b/modules/CIAO/docs/com-impl.html @@ -0,0 +1,60 @@ +<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN"> +<!-- $Id$ --> +<html> <head> +<title>Implementing a CCM Component</title> +</head> + +<body> +<h1>Implementing a CCM Component</h1> + +This document explains how to implement a single component. At this +moment, CIAO lacks a CIDL compiler, and we depends on manually +generating the servant glue code for containers and local executor +interface. Check out this <a href="new_components.html">page</a> to +find how all files are generate4d in CIAO. +The following figure shows how this is done:<p> + + +<img src="imgs/File-Gen-Existing.png"><p> + +And when we have a working CIDL (or, CCIDL "CIAO's Component +Implementation Definition Language") compiler, the file will be +generated using a CIDL file (which is rather simple.) This figure +depicts the "Right Way" [TM] this should be done:<p> + +<img src="imgs/File-Gen-Future.png"><p> + +Checkout a <a href="../tools/CCIDL/README">list of things to do</a> for implementing CIDL compiler.<p> + +I think it is debatable whether we should merge the "Servant DLL" and +"Component Implementation DLL" into one DLL. Me think not. My +approach, however, creates some complication on requireing a mechanism +to locate the servant code (and DLL) from component implementation. + + +<h2>Libraries Dependencies</h2> Implementing a component creates 3 +DLL's as shown in the above figure. Both "Servant DLL" and "Component +Implementation DLL" depend on the "Client DLL". "Servant DLL" and +"Component Implementation DLL" are not mutually dependent, however. +All the generated DLLs depends on other TAO and CIAO common +libraries. Here's a break down of which libraries depends on which +other libraries: + +<ul> + <li><b>Client DLL</b>: ace.lib tao.lib TAO_IFR_Client.lib + CIAO_Clientd.lib + <li><b>Servant DLL</b>: ace.lib tao.lib <b>Client DLL</b> + TAO_IFR_Client.lib TAO_PortableServer.lib TAO_Security.lib + CIAO_Container.lib CIAO_Client.lib + <li><b>Component Implementation DLL</b>: ace.lib tao.lib + <b>Client DLL</b> TAO_IFR_Client.lib TAO_Security.lib + CIAO_Container.lib +</ul> + + <!--#include virtual="/~nanbor/signature.html" --> +<!-- <hr> --> +<!-- <\!-- hhmts start -\-> --> +<!-- Last modified: Tue Dec 10 22:41:50 Central Standard Time 2002 --> +<!-- <\!-- hhmts end -\-> --> +<!-- <address>Nanbor Wang <nanbor@cs.wustl.edu></address> --> +</body> </html> diff --git a/modules/CIAO/docs/generate_component_mpc.html b/modules/CIAO/docs/generate_component_mpc.html new file mode 100644 index 00000000000..3f109e57adc --- /dev/null +++ b/modules/CIAO/docs/generate_component_mpc.html @@ -0,0 +1,105 @@ +<!doctype html public "-//w3c//dtd html 4.0 transitional//en"> +<html> + <head> + <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> + <meta name="GENERATOR" content="Mozilla/4.5 [en] (X11; I; SunOS 5.5.1 sun4u) [Netscape]"> + <title>TAO IDL compiler User's Guide</title> + <!-- $Id$ --> + </head> + <body text="#000000" bgcolor="#FFFFFF" link="#0000FF" vlink="#CC0000"> + <hr> + <h3>Using The generate_component_mpc.pl Script</h3> + This document describes the options and usage of the Perl script <tt>generate_component_mpc.pl</tt> + in the <tt>$(CIAO_ROOT)/bin</tt> directory. + <HR> + <P> + <h4>Assumptions</h4> + This script is useful for generating MPC files for relatively simple component + applications. The string name passed to the script should be the name of the <em>single</em> + IDL file for that build (without the extension) and also the name of the single + CIDL file, if it is a component build. The names of export files, preprocessor + macros, and library names in the generated MPC file will all be constructed + from this string. It is also assumed that the IDL file for a component build + will contain a single component declaration. + <P> + Judicious use of the script options in the table below will generate a build + that keeps to a minimum both the code generated from IDL and the number of + linked libraries from the middleware. + <P> + <HR> + <h4><A NAME="options">Script Options</A></h4> + + <table BORDER="2" CELLSPACING="2" CELLPADDING="0"> + <tr> + <th> + Option</th> + <th> + Description</th> + <th> + Remark</th> + </tr> + <tr> + <a NAME="h"> + <td><tt>-h</tt></td> + <td>The compiler prints out the options that are given below and exits clean + </td> + <td> </td> + </tr> + <tr> + <a NAME="p"> + <td><tt>-p</tt><i> string</i></td> + <td>Indicates another make/project that this one depends on</td> + <td>Used as a project name prefix unless overridden by <tt>-u</tt> option</td> + </tr> + <tr> + <a name="l"> + <td><tt>-l</tt><i> string</i></td> + </td> + <td>Path to the dependent name value of <tt>-p</tt></td> + <td>Needed only if the dependent make/project isn't already in the search path</td> + </tr> + <tr> + <a name="n"> + <td><tt>-n</tt></td> + <td>Non-component make/project</td> + <td>Generates a <tt>*_stub</tt> and <tt>*_skel</tt> pair of builds, instead + of the default <tt>*_stub</tt>, <tt>*_svnt</tt> and <tt>*_exec</tt> + builds. Also specializes the IDL compiler command line options and linked + lib list, depending on the <tt>-e</tt> option, if it exists</td> + </tr> + <tr> + <a name="e"> + <td><tt>-e</tt></td> + <td><tt>eventtype</tt> declaration present in IDL</td> + <td>Has no effect unless the <tt>-n</tt> option is also present, in which + case the IDL compiler command line options and list of linked libs will + change to reflect the fact that IDL eventtypes require typecode support + and depend on libs in CIAO, which for a non-component build would + otherwise not be the case</td> + </tr> + <tr> + <a name="i"> + <td><tt>-i</tt></td> + <td>Use an executor IDL file</td> + <td>Indicates the presence of an IDL file in the executor make/project, + from which the actual executor implementation will inherit. Assumes + the name of this IDL file is of the form <tt>[<i>component_name</i>]EI.idl</tt></td> + </tr> + <tr> + <a name="c"> + <td><tt>-c</tt></td> + <td>Create a client make/project</td> + <td>Generates a build for a "driver" executable. Assumes there is a single + C++ source file named <tt>client.cpp</tt></td> + </tr> + <tr> + <a name="u"> + <td><tt>-u</tt></tt><i> string</i></td> + <td>Unique project name prefix</td> + <td>Occasionally needed since MPC doesn't accept duplicate project names + anywhere in the tree over which it is proecessing. This option + overrides the value of the <tt>-p</tt> option, if present</td> + </tr> + </table> + </body> +</html> diff --git a/modules/CIAO/docs/imgs/CCM-v5.vsd b/modules/CIAO/docs/imgs/CCM-v5.vsd Binary files differnew file mode 100644 index 00000000000..7f4d7539050 --- /dev/null +++ b/modules/CIAO/docs/imgs/CCM-v5.vsd diff --git a/modules/CIAO/docs/imgs/CCM.vsd b/modules/CIAO/docs/imgs/CCM.vsd Binary files differnew file mode 100644 index 00000000000..239a4e7943d --- /dev/null +++ b/modules/CIAO/docs/imgs/CCM.vsd diff --git a/modules/CIAO/docs/imgs/DAnCE-Dynamic.png b/modules/CIAO/docs/imgs/DAnCE-Dynamic.png Binary files differnew file mode 100644 index 00000000000..2e9917e1520 --- /dev/null +++ b/modules/CIAO/docs/imgs/DAnCE-Dynamic.png diff --git a/modules/CIAO/docs/imgs/DAnCE-Dynamic.sxd b/modules/CIAO/docs/imgs/DAnCE-Dynamic.sxd Binary files differnew file mode 100644 index 00000000000..b795c5ae049 --- /dev/null +++ b/modules/CIAO/docs/imgs/DAnCE-Dynamic.sxd diff --git a/modules/CIAO/docs/imgs/File-Gen-Existing.png b/modules/CIAO/docs/imgs/File-Gen-Existing.png Binary files differnew file mode 100644 index 00000000000..8deb5d32fd3 --- /dev/null +++ b/modules/CIAO/docs/imgs/File-Gen-Existing.png diff --git a/modules/CIAO/docs/imgs/File-Gen-Future.png b/modules/CIAO/docs/imgs/File-Gen-Future.png Binary files differnew file mode 100644 index 00000000000..1daef691bdf --- /dev/null +++ b/modules/CIAO/docs/imgs/File-Gen-Future.png diff --git a/modules/CIAO/docs/imgs/File_Generation_Flow.vsd b/modules/CIAO/docs/imgs/File_Generation_Flow.vsd Binary files differnew file mode 100644 index 00000000000..ef6332d49ac --- /dev/null +++ b/modules/CIAO/docs/imgs/File_Generation_Flow.vsd diff --git a/modules/CIAO/docs/imgs/IDL-CIDL-classes.vsd b/modules/CIAO/docs/imgs/IDL-CIDL-classes.vsd Binary files differnew file mode 100644 index 00000000000..0986aa78d70 --- /dev/null +++ b/modules/CIAO/docs/imgs/IDL-CIDL-classes.vsd diff --git a/modules/CIAO/docs/imgs/basic-container.png b/modules/CIAO/docs/imgs/basic-container.png Binary files differnew file mode 100644 index 00000000000..9df767b45a2 --- /dev/null +++ b/modules/CIAO/docs/imgs/basic-container.png diff --git a/modules/CIAO/docs/imgs/ciao-dynamic1.jpg b/modules/CIAO/docs/imgs/ciao-dynamic1.jpg Binary files differnew file mode 100644 index 00000000000..a385ad30848 --- /dev/null +++ b/modules/CIAO/docs/imgs/ciao-dynamic1.jpg diff --git a/modules/CIAO/docs/imgs/ciao-dynamic2.jpg b/modules/CIAO/docs/imgs/ciao-dynamic2.jpg Binary files differnew file mode 100644 index 00000000000..e0a705b9d3a --- /dev/null +++ b/modules/CIAO/docs/imgs/ciao-dynamic2.jpg diff --git a/modules/CIAO/docs/imgs/ciao-static-vs-dynamic.jpg b/modules/CIAO/docs/imgs/ciao-static-vs-dynamic.jpg Binary files differnew file mode 100644 index 00000000000..b876b7a82cb --- /dev/null +++ b/modules/CIAO/docs/imgs/ciao-static-vs-dynamic.jpg diff --git a/modules/CIAO/docs/imgs/ciao-static1.jpg b/modules/CIAO/docs/imgs/ciao-static1.jpg Binary files differnew file mode 100644 index 00000000000..313084ff34d --- /dev/null +++ b/modules/CIAO/docs/imgs/ciao-static1.jpg diff --git a/modules/CIAO/docs/imgs/ciao-static2.jpg b/modules/CIAO/docs/imgs/ciao-static2.jpg Binary files differnew file mode 100644 index 00000000000..86ded87f448 --- /dev/null +++ b/modules/CIAO/docs/imgs/ciao-static2.jpg diff --git a/modules/CIAO/docs/imgs/component-basic.png b/modules/CIAO/docs/imgs/component-basic.png Binary files differnew file mode 100644 index 00000000000..520dc9c4cca --- /dev/null +++ b/modules/CIAO/docs/imgs/component-basic.png diff --git a/modules/CIAO/docs/imgs/dance_arch.jpg b/modules/CIAO/docs/imgs/dance_arch.jpg Binary files differnew file mode 100644 index 00000000000..3c91b912213 --- /dev/null +++ b/modules/CIAO/docs/imgs/dance_arch.jpg diff --git a/modules/CIAO/docs/imgs/dance_arch.vsd b/modules/CIAO/docs/imgs/dance_arch.vsd Binary files differnew file mode 100644 index 00000000000..cfe75fca9c6 --- /dev/null +++ b/modules/CIAO/docs/imgs/dance_arch.vsd diff --git a/modules/CIAO/docs/imgs/deployment.png b/modules/CIAO/docs/imgs/deployment.png Binary files differnew file mode 100644 index 00000000000..4cd8c6be646 --- /dev/null +++ b/modules/CIAO/docs/imgs/deployment.png diff --git a/modules/CIAO/docs/imgs/extended-container.png b/modules/CIAO/docs/imgs/extended-container.png Binary files differnew file mode 100644 index 00000000000..39977e6eb83 --- /dev/null +++ b/modules/CIAO/docs/imgs/extended-container.png diff --git a/modules/CIAO/docs/imgs/home-config.png b/modules/CIAO/docs/imgs/home-config.png Binary files differnew file mode 100644 index 00000000000..aebf5e62751 --- /dev/null +++ b/modules/CIAO/docs/imgs/home-config.png diff --git a/modules/CIAO/docs/imgs/static_dance_arch.jpg b/modules/CIAO/docs/imgs/static_dance_arch.jpg Binary files differnew file mode 100644 index 00000000000..b12694ce348 --- /dev/null +++ b/modules/CIAO/docs/imgs/static_dance_arch.jpg diff --git a/modules/CIAO/docs/imgs/static_dance_arch.vsd b/modules/CIAO/docs/imgs/static_dance_arch.vsd Binary files differnew file mode 100644 index 00000000000..1ca1f50f69d --- /dev/null +++ b/modules/CIAO/docs/imgs/static_dance_arch.vsd diff --git a/modules/CIAO/docs/imgs/static_dance_impl.jpg b/modules/CIAO/docs/imgs/static_dance_impl.jpg Binary files differnew file mode 100644 index 00000000000..cd2f9f0dc81 --- /dev/null +++ b/modules/CIAO/docs/imgs/static_dance_impl.jpg diff --git a/modules/CIAO/docs/imgs/static_dance_impl.vsd b/modules/CIAO/docs/imgs/static_dance_impl.vsd Binary files differnew file mode 100644 index 00000000000..6c21e6139d4 --- /dev/null +++ b/modules/CIAO/docs/imgs/static_dance_impl.vsd diff --git a/modules/CIAO/docs/index.html b/modules/CIAO/docs/index.html new file mode 100644 index 00000000000..438bdf3416e --- /dev/null +++ b/modules/CIAO/docs/index.html @@ -0,0 +1,169 @@ +<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN"> +<html> +<head> +<!-- $Id$ --> + <title>CIAO - Component-Integrated ACE ORB</title> +</head> +<body> +<h1>CIAO - Component-Integrated ACE ORB</h1> +<h2>Introduction</h2> +CIAO is TAO's implementation of <a + href="http://www.omg.org/cgi-bin/doc?formal/02-06-65"> CORBA Component +Model (CCM)</a> specially optimized for distributed real-time embedded +(DRE) systems. +This page contains links to other documents and resources for building +and using CIAO.<br> +<br> +<hr> +<h2>The CIAO Project</h2> +<ul> + <li>The main <a href="http://www.cs.wustl.edu/%7Eschmidt/CIAO.html"> +CIAO project page</a>.</li> + <li><a href="../CIAO-INSTALL.html">Installation instructions</a> for +CIAO<br> + </li> + <li>CIAO <a href="releasenotes/index.html">Status (aka. release +notes.)</a></li> + <li>CIAO <a href="cidlc.html">CIDL Compiler Options</a><br> + <li>CIAO <a href="EnvVars.html">Environment Variables</a> <br> + </li> + <li>CIAO <a href="Trace.html">Logging Facility</a><br> + </li> + <li>CIAO <a href="../NEWS">NEWS</a></li> +</ul> +<hr> +<ul> +</ul> +<ul> + <p><!-- + + <li>This <a href="new_components.html">page on implementing new + + component</a> explains all the user-defined and tool-generated + + files when implementing a component.<p> + + + + <li>The <a href="ConfigValues.html">Configuration Name/Value + + lists</a> lists all the configuration values that CIAO will pass + + into vaious CCM mechanisms. The information shown in this page + + is not visible to CIAO end-users, which include modeling tool + + developers. The information that matters for most users is how + + these configurations are represented in various XML + + descriptors and CIDL specifications.<p> + +--> + </p> +</ul> +<h2>CCM-defined Interface Diagrams</h2> +Here is a set of UML diagrams that we use to figure out the +relationship among all the different interfaces in CCM. You can +browse the related part from the following list: +<ul> + <li><a href="imgs/component-basic.png"> Basic component interfaces </a></li> + <li><a href="imgs/home-config.png"> Home and configuration interfaces + </a></li> + <li><a href="imgs/basic-container.png"> Basic container interfaces </a></li> + <li><a href="imgs/extended-container.png"> Extended container +interfaces </a></li> + <li><a href="imgs/DAnCE-Dynamic.png"> Deployment and configuration +(DAnCE) interfaces </a></li> +</ul> +All these diagrams are generated from the <a href="imgs/CCM.vsd">CCM.vsd +Visio file</a> (The same file in Visio V.5 format is <a + href="imgs/CCM-v5.vsd">here</a>.) and OpenOffice source file + <a href="imgs/DAnCE-Dynamic.sxd">DAnCE-Dynamic.sxd</a> <br> +<br> +<hr> +<h2>CIAO's D&C Framework (<a href="http://www.dre.vanderbilt.edu/Doxygen/Current/html/tao/ciao/dance/index.html">DAnCE</a>) part-by-part</h2> +DAnCE's implementation is based on the OMG's Deployment and Configuration +Specification version [ptc/2003-07-08]. Here is a list of the major +actors of CIAO runtime that a user should be aware of. +<ul> + <li><strong>NodeManager:</strong> +A daemon process responsible for managing NodeApplications that reside +in the same physical node.</li> + <p> </p> + <li><strong>NodeApplicationManager:</strong> +A infrastructure component responsible for deploying +locality-constrained applications onto a node. A NodeApplicationManager +is usually created by NodeManager.<br> + </li> + <p> </p> + <li><strong>NodeApplication:</strong> +A component server instance spawned by NodeApplicationManager. <br> + </li> + <p> </p> + <li><strong>ExecutionManager:</strong> +Infrastructure component responsible for executing an component-based +DRE application based on the information from DeploymentPlan.</li> + <p> </p> + <li><strong>DomainApplicationManager</strong>: +Domain-oriented auxiliary component created and used by +ExecutionManager to deploy the component-based DRE application at the +domain level. <br> + <br> + </li> + <li><strong>PlanLauncher</strong></strong>: +Executor component responsible for parsing the XML-based +deploymentplan and passing the plan to ExecutionManager for execution.<br> + <br> +To understand the runtime inter-relationships of various CIAO actors, +you may click <a href="imgs/DAnCE-Dynamic.png">here</a> to see a +sequence diagram that gives you a clear representation of what's +happening when you start a DAnCE-based DRE application. Special thanks +to <a href="mailto:Friedhelm.wolf@gmx.de">Friedhelm Wolf</a> who +initiated and contributed most part of this +diagram.<br> + <br> + </li> +</ul> +<hr> +<h2>CIAO CCM tutorials</h2> +There are several tutorials to help you understand CIAO and CCM: +<ul> + <li> <a + href="http://www.cs.wustl.edu/%7Eschmidt/OMG-CCM-Tutorial.ppt">Tutorial +on the CORBA Component Model (CCM)</a>. This tutorial presents an +overview of the CORBA Component Model (CCM), +describing its key features and illustrating how to write CCM +applications in C++. + <p> </p> + </li> + <li><a href="../examples/Hello"><code>$(CIAO_ROOT)/DAnCE/examples/Hello.</code></a> +This example illustrates how to build and deploy a CIAO based +application <a href="../examples/Hello/step-by-step.html">step-by-step</a>. +There is +also a detailed documentation explaining this example avalable in both <a + href="http://www.dre.vanderbilt.edu/%7Edengg/CCM/CCM_Hello_example.pdf">PDF</a> +and <a + href="http://www.dre.vanderbilt.edu/%7Edengg/CCM/CCM_Hello_example.ppt"> +PowerPoint</a> format.<br> + <br> + </li> + <li><a href="./tutorials/Quoter/Simple">$(CIAO_ROOT)/docs/tutorials/Quoter/Simple</a>. +This example illustrates the implementation of the "famous" Quoter +example in the CIAO world. Please refer to <a + href="tutorials/Quoter/Simple/README.html">README</a> for more +information. </li> <P> + +<li><a +href="./tutorials/CoSMIC/">$(CIAO_ROOT)/docs/tutorials/COSMIC/</a>. +This is a step-by-step tutorial on how to use CoSMIC to +generate deployment descriptors requied by the above <a +href="./tutorials/Quoter/Simple">Quoter</a> example </li> + +</ul> +<!--#include virtual="/~nanbor/signature.html" --><!-- <hr> --><!-- <\!-- hhmts start -\-> --><!-- Last modified: Mon Nov 04 07:55:22 Central Standard Time 2002 --><!-- <\!-- hhmts end -\-> --> +<!-- <address>Nanbor Wang <nanbor@cs.wustl.edu></address> --><!-- LocalWords: CCM UML vsd Visio + + --> +</body> +</html> diff --git a/modules/CIAO/docs/new_components.html b/modules/CIAO/docs/new_components.html new file mode 100644 index 00000000000..db10fca2103 --- /dev/null +++ b/modules/CIAO/docs/new_components.html @@ -0,0 +1,129 @@ +<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN"> +<!-- $Id$ --> +<html> <head> +<title>Procedures to prepare a new component implementation</title> +</head> + +<body> +<h1>Preparing a new component implementation</h1> + +I am documenting the steps required to prepare a component implementation. +Personally, I prefer to set up a directory to contain only <b>one</b> +component implementation. I believe the procedures outlined below +will work if you have multiple component implementation in the same +IDL files. The purpose of this document is to record the procedures +and steps on how these files relate to each others and how they come +about during the development process.<p> + +Assuming we need to create a new component called +<code><b>Orc</b></code>. Below is the list of files you'll need to +deal with. Our goal is to greatly reduce the number of files you need +to deal with manually... + +<ol> + <li><font color="red"><code><b>Orc</b>.idl</code></font> - This is + the IDL file that contains the component and component home + definitions.<p> + + As you will eventually create 3 DLLs (or shared objects), you + will also need 3 sets of different export macros files as + following.<p> + + <li><code><b>Orc</b>_stub_export.h</code> - This file is generated + using the following command:<p> + + <code>generate_export_file.pl <b>ORC</b>_STUB > <b>Orc</b>_stub_export.h</code><p> + + This file makes macros like <code><b>ORC</b>_STUB_Export</code> + and friends available. They are usually controlled by + <code><b>ORC</b>_STUB_BUILD_DLL</code><p> + + <li><code><b>Orc</b>_svnt_export.h</code> - This file is generated + using the following command:<p> + + <code>generate_export_file.pl <b>ORC</b>_SVNT > <b>Orc</b>_svnt_export.h</code><p> + + This file makes macros like <code><b>ORC</b>_SVNT_Export</code> + and friends available. They are usually controlled by + <code><b>ORC</b>_SVNT_BUILD_DLL</code><p> + + <li><code><b>Orc</b>_exec_export.h</code> - This file is generated + using the following command:<p> + + <code>generate_export_file.pl <b>ORC</b>_EXEC > <b>Orc</b>_exec_export.h</code><p> + + This file makes macros like <code><b>ORC</b>_EXEC_Export</code> + and friends available. They are usually controlled by + <code><b>ORC</b>_EXEC_BUILD_DLL</code><p> + + <li><code><b>Orc</b>E.idl</code> - Component Executor equivalent + interface definitions. This file should be generated + automatically by the CIDL compiler as illustrated in this + <a href="com-impl.html">file</a> but we currently are still + working on the implementation of the CIDL compiler. Therefore, + you still need to create this file manually.<p> + + <li><font color="red"><code><b>Orc</b>EI.idl</code></font> - + Optional Component Executor implementation interface + definitions. Often time, when you implement a non-trivial + monolithic component implementation, you are required to define + the monolithic local executor interface which often inherits + from the component monolithic executor interface and all the + provided interfaces. The actually executor implementation will + inherit from this user defined interface instead of the default + executor mapping defined in <code><b>Orc</b>E.idl</code>. You + will need to do the same when you wish to support non-vanilla + component interface, such as + <code>Components::SessionComponent</code>, and/or + <code>Components::SessionSynchronization</code>.<p> + + Ideally, it would be perfect if we can auto-generate this + optional IDL file using CIDL compiler. However, I'm not sure + the plan CIDL language contains enough information that's + required to generate this file.<p> + + <li><font color="red"><code><b>Orc</b>_exec.*</code></font> - These + are files containing the actually component implementation that + you have to write manually. It, however, depends on the + equivalent executor IDL definition (that will be) generated by + the CIDL files.<p> + + <li><code><b>Orb</b>_svnt.*</code> - These are files containing the + servant glue code that bridge a container to the component + executor that you implement. Like the component executor + mapping IDL file, these files should be generated by the CIDL + compiler but are currently generated manually.<p> + + <li><code><b>Orc</b>.csd</code> - Component Softpkg Descriptor. We + need some kind of tool to generate this file automatically. It + is currently being generated manually, however.<p> + + + <li><code><b>Orc</b>.ssd</code> - Servant Softpkg Descriptor. This + is a CIAO extension descriptor file which uses the same softpkg + DTD as described in CCM spec. CIAO requires this file because + CIAO separates the executors into a completely separate DLL. + Like <code><b>Orc</b>.csd</code>, this file should be generated + automatically through some tool, but it is currently manually + crafted.<p> + + <li><code><b>Orc</b>.ccd</code> - CORBA Component Descriptor. This + file is currently being generated manually thou a template + should really be generated by CIAO's CIDL compiler.<p> + + <li><font color="red"><code><b>Orc</b>.mpc</code></font> - Makefile + Project Creator definition file. There is a perl script to + generate a minimal MPC definition at + <code>$(CIAO_ROOT)/bin/generate_component_mpc.pl</code> so + people can use it to implement the simplest component + implementation outlined in this file.<p> + +</ol> + + +<hr> +<address></address> +<!-- hhmts start --> +Last modified: Fri Mar 21 16:06:48 Central Standard Time 2003 +<!-- hhmts end --> +</body> </html> diff --git a/modules/CIAO/docs/releasenotes/dance.html b/modules/CIAO/docs/releasenotes/dance.html new file mode 100644 index 00000000000..6980860b3c8 --- /dev/null +++ b/modules/CIAO/docs/releasenotes/dance.html @@ -0,0 +1,229 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> +<!-- $Id$ --> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> + <head> + <title>Deployment And Configuration Engine (DAnCE) Release Notes</title> + </head> + + <body> + <h1>Deployment And Configuration Engine (DAnCE) Release Notes</h1> + + <p><b>D</b>eployment <b>An</b>d <b>C</b>onfiguration <b>E</b>ngine + <b>(DAnCE)</b> is an implementation of the run-time infrastructure as + defined by the final adopted <a + href="http://www.omg.org/cgi-bin/doc?ptc/2003-07-08">OMG Deployment & + Configuration (D&C) specification (ptc/2003-07-08)</a>, which deals with the + configuration and deployment of component-based applications. Currently + DAnCE only supports the deployment & configuration of CORBA + Component Model (CCM)-based applications, though we are interested in + generalizing it for other component models in future work. DAnCE uses + XML descriptors to drive the deployment it performs. One way to + generate these descriptors is using the <b>Co</b>mponent + <b>S</b>ynthesis using <b>M</b>odel-<b>I</b>ntegrated <b>C</b>omputing + (<a href="http://www.dre.vanderbilt.edu/cosmic">CoSMIC</a>) tool-suite. + DAnCE currently uses <b>C</b>omponent <b>I</b>ntegrated <b>A</b>CE + <b>O</b>RB (<a href="http://www.dre.vanderbilt.edu/CIAO">CIAO</a>) as + the underlying CCM implementation in the current release, though again + we are interested in generalizing it for other CCM implementations in + future work. + </p> + + <h3>D&C XML Schema Handling</h3> + + <p> The XML handlers shipped with DAnCE are capable of handling almost + all elements that are defined in the D&C schema. In this context, + handling refers to reading the XML tags and converting them to the + equivalent in-memory IDL-based data structures defined by the + specifications. DAnCE supports the following types of descriptors + specified in the D&C specification:</p> + <ul> + <li> + <p> + <b>CORBA Component Descriptor(.ccd)</b> – + Contains information about component interfaces including + component ports. + </p> + </li> + <li> + <p> + <b>Component Implementation Descriptor(.cid)</b> + – Contains information about component implementations + which might be either monolithic or assembly based. In the case + of assembly based implementations, this descriptor also captures + the dependencies and the connections among components + </p> + </li> + <li> + <p> + <b>Implementation Artifact Descriptor(.iad)</b> + – Contains information about implementation artifacts + in-cluding dependencies between such artifacts + </p> + </li> + <li> + <p> + <b>Component Package Descriptor(.cpd)</b> – + Contains information about grouping of multiple imple-mentations + of the same component interface into component packages + </p> + </li> + <li> + <p> + <b>Package Configuration Descriptor(.pcd)</b> + – Contains information about specific configurations of + such component packages + </p> + </li> + <li> + <p> + <b>Component Domain Descriptor(.cdd)</b> – + Contains information about the target environment in which the + component-based application will be deployed + </p> + </li> + <li> + <p> + <b>TopLevel Package Descriptor(.tpd)</b> – Contains + information identifying the top-level element in a component + package descriptor which might include information about multiple + elements + </p> + </li> + + <li> + <p> + <b>Component Deployment Plan(.cdp)</b> – Contains + information that actually drives the deployment including + information about individual components that represent the + leaf-nodes in case of a hierarchical assembly, connections + between components, and assignment of components to nodes etc. + </p> + </li> + </ul> + <p> For all the above elements, DAnCE supports proxying of the elements + as defined by XMI, i.e, DAnCE supports both parsing of the elements + inline and reference through <b><code>href</code></b> attribute. Some + D&C schema elements are however not handled, including:</p> + <ul> + <li> + <p> + <b>Deployment:Any</b> – This is a complex + element that is composed of many sub-elements. Currently, DAnCE + only parses a subset of the sub-elements of + <b><code>Deployment:Any</code></b>. Specifically, DAnCE supports all the + basic data types defined as part of <b><code>Deployment:Any</code></b>, + and doesn't understand any complex types. + </p> + </li> + <li> + <p> + <b>xmi:Extension</b> – This element allows the + augmention of the standard D&C schema with user-defined + elements. Currently DAnCE doesn't support user-defined extensions + to the schema. + </p> + </li> + <li> + <p> + <b>Deployment:Requirement</b> – This element is + allows the description of requirements of component-based + applications. Since handling this description requires interaction + with the <b><code>TargetManager</code></b> interface (which is not yet + supported), support for <b><code>Deployment:Requirement</code></b> is not + present. + </p> + </li> + <li> + <p> + <b>Deployment:ComponentPropertyDescriptioncode></b> – + This element is used to specify default values for attributes of + component. DAnCE doesn't support setting the values for attributes + of components using this tag. + </p> + </li> + <li> + <p> + <b>Deployment:ComponentExternalPortEndpoint, + Deployment:ExternalReferenceEndpoint</b> – These + elements are used to specify connections between ports of + components in one assembly with ports of components in a different + assembly, or connections between component ports and external + connection endpoints. These features are needed to support + assemblies of components. DAnCE doesn't support yet hierarchical + assemblies, i.e., creation of assemblies which can themselves + contain sub-assemblies. + </p> + </li> + <li> + <p> + <b>Deployment:PlanPropertyMapping</b> – This + element is used to delegate property mapping between a component's + external properties to properties of subcomponents that actually + implement the behavior of the larger component. Since DAnCE doesn't + support hierarchical assemblies, this tag is not yet supported. + </p> + </li> + </ul> + <p> We plan to support these features in future versions of DAnCE. + </p> + <hr /> + <h3> D&C Management Interfaces</h3> + + <p> The D&C specification defines a set of standard CORBA + interfaces that are used to perform the deployment of component-based + applications. These interfaces depend on the in-memory IDL data + structures that are built by DAnCE's XML handlers. Below we outline the + list of interfaces defined by the specification and the level of + support for each interface in DAnCE:</p> + <ul> + <li> + <p> + <b>RepositoryManager</b> – Only the + <b><code>installPackage()</code></b> and <b><code>findPackageByName()</code></b> + operations of this interface are implemented. + </p> + </li> + <li> + <p> + <b>TargetManager</b> – This interface has not + been implemented at all. Implementation of this interface is + planned for the future. + </p> + </li> + <li> + <p> + <b>ExecutionManager</b> – All operations defined + in this interface are implemented. + </p> + </li> + <li> + <p> + <b>DomainApplicationManager, DomainApplication</b> + – All operations except <b><code>getApplications()</code></b> + operation of DomainApplicationManager are implemented. + </p> + </li> + <li> + <p> + <b>NodeManager </b>– All operations except <strong><code>joinDomain()</code></strong> and <strong><code>leaveDomain()</code></strong> operations of NodeManager are implemented. </p> + </li> + <li> + <p><b> NodeApplicationManager, NodeApplication</b> – All operations defined in these interfaces are + implemented. </p> + </li> + </ul> + <p> + We plan to finish implementing the unsupported features in future versions of DAnCE. + </p> + <p> + <a href="http://validator.w3.org/check?uri=referer"> + <img src="http://www.w3.org/Icons/valid-xhtml10" alt="Valid XHTML 1.0!" + height="31" width="88" /> + </a> + </p> + <address> + Last modified $Date$ by $Author$ + </address> + </body> +</html> diff --git a/modules/CIAO/docs/releasenotes/index.html b/modules/CIAO/docs/releasenotes/index.html new file mode 100644 index 00000000000..324f1d83c77 --- /dev/null +++ b/modules/CIAO/docs/releasenotes/index.html @@ -0,0 +1,170 @@ +<!doctype html public "-//w3c//dtd html 4.0 transitional//en"> +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> + <meta name="GENERATOR" content="Mozilla/4.79 [en] (Windows NT 5.0; U) [Netscape]"> + <title>CIAO Release Information and TODO List</title> +</head> +<body text="#000000" bgcolor="#FFFFFF"> +<!-- $Id$ --> +<center> +<hr></center> + +<center> +<h3> +Release Information for the Component Integrated ACE ORB (CIAO)</h3></center> +This document contains information on the following topics related to the +<a href="../../VERSION">current +release</a> of <a href="http://www.dre.vanderbilt.edu/CIAO">CIAO</a>: + +<table BORDER=0 CELLSPACING=0 CELLPADDING=10 > +<tr> +<td VALIGN=TOP> +<b></b> +<br> +<ul> +<li> +<a href="../index.html">Introduction</a></li> +<li> +<a href="#status">Current Status of CIAO</a></li> +<li> +<a href="dance.html">Status of DAnCE</a></li> +<li> +<a href="../TODO.html">TODO list</a></li> +</ul> +</td> +</table> + + +<hr> +<h2>Current Status</h2><a name="status"> +<ol> +<li>The first cut of the new <a + href="http://www.omg.org/cgi-bin/doc?ptc/2003-07-02"> DnC </a> + specification implementation, which we call DAnCE is available in + this distribution. DAnCE is housed under <CODE> $CIAO_ROOT + </CODE>. We plan to enhance DAnCE in the next few months. We believe + DAnCE will replace existing tool sets in <CODE> + $CIAO_ROOT/tools</CODE>. There are a few features in + <CODE>$CIAO_ROOT/tools</CODE> that are missing in the DAnCE + implementation. Please see <a href="../TODO.html"> TODO </a> file + for more details. We plan to implement them soon and use DAnCE + continuously. + + <li> The first cut of DAnCE includes two parts: + <ul> + <li> + A modeling tool chain , <a href="http://www.dre.vanderbilt.edu/CoSMIC/"> + CoSMIC</a>, which is capable of describing the Assembly/Component + using <a + href="http://www.isis.vanderbilt.edu/Projects/gme/default.html"> + GME</a> as the development bed. The artifacts generated from the + CoSMIC are a set of XML descriptors. + + <!-- Tao, I realy don't understand what this means - Bala --> + <li>This run-time infrastructure that performs the actual deployment + and configuration, with a superset of the capabilities described in + OMG DnC specification with CIAO extension. </a>.<p><p> + + </ul> + <!-- Tao, can you please see whether this is needed --> + In the new DnC run-time framework we have migrated all the + functionalities present in the old CIAO runtime except the + Real-Time configuration and Static Configuration, which are + developed by Washington University in St. Louis. Currently, + the two CIAO runtime co-exist in our source and the component + implementation could be used with both framework without much + change. (For the change that one has to go through please + read <a href="./switch.html">this</a>.)<p> + + + + <li> Two operations <CODE> ciao_preactivate ()</CODE> and + <CODE>ciao_postactivate ()</CODE> have been added to the + <CODE>SessionComponent</CODE> interface. This implies that component + developers have to implement those operations within the + executor. We plan to get around this, i.e., users having to + implement these two operations, in the next month or so. <p> + + <li> + + Here is a set of updates in the CIDL Compiler.<p> + <ul> + <li>Fixed bugs in generation of inherited: home operations, + attribute operations, port operations, home factory operations, + supported operations.<p> + + <li>Added support for multiplex uses ports. This implies that users + could use "uses multiple" in their component definitions. <p> + + <li>Added automatic registration of value factories for event + consumers. This has been long outstanding. This change alleviates + component developers need to register the valuetype factory of their + eventtypes with the ORB. <p> + + <li>Added support for emits keyword and we now generate navigation + code for this.<p> + + <li>Fixed bug with multiple facets in a build that provide the same + interface.<p> + + <li>Added option <code>--gen-exec-impl</code> to generate executor + impl classes, with no-op versions of each IDL operation.<p> + + <li>Implemented get_all_facets() and get_all_consumers() navigation + methods.<p> + + <li>Added support for the IDL keywords <code>setraises</code> and + <code>getraises</code>, associated with attributes in IDL3.<p> + + <li>Added support for both subscription and event push of event types + that are a base class of the IDL-specified port type. A check is + performed during the subscribe call to make sure the eventtype is + actually an ancestor of the declared port type.<p> + + <li>Problems with generated code when the composition declaration is + nested inside one or more IDL modules has prompted a change. The + 'CIAO_GLUE_' prefix has been eliminated. The composition name is now + mapped to a C++ namespace, prefixed with 'CIDL_'. This new namespace + (as well as namespaces generated from IDL modules enclosing the + composition name, if any) encloses + <ul> + <li>the component servant class</li> + <li>the home servant class</li> + <li>all facet servant classes, if any</li> + <li>the *_Exec interface in the *E.idl file</li> + <li>all executor impl classes, if automatically generated</li> + </ul> + <p> + </ul> + <p> + + + <li> CIAO doesn't yet support features that help integrating CORBA + components with Enterprise Java Beans (EJB).<p> + + <li> Test to demonstrate composition of applications with real-time + behavior using CIAO's real-time extension was added. Please see + ACE_wrappers/TAO/CIAO/tests/RTCCM/Priority_Test.<p> + + <li> The CIAO static configurator tool has been enhanced to support + processing of RTCORBA policy related information. Please see + ACE_wrappers/TAO/CIAO/docs/static_ciao_index.html.<p> + + <li> To further interoperability with non-component-aware clients, there + are files in the $CIAO_ROOT/tools/IDL3_to_IDL2 directory that can be + compiled into an executable called tao_idl3_to_idl2. This executable + takes an IDL file (on the command line) containing IDL3 declarations + and outputs an IDL file with the IDL3 declarations converted to + equivalent IDL2. IDL2 declarations in the input file are unchanged. + See the README file in that directory for more information.<p> + +</ol> + + + +<b>Email: </b><a href="mailto:"</a<ADDRESS>ciao-users@cse.wustl.edu</ADDRESS> +</body> </html> + +<!-- LocalWords: TODOs CCM IDL CCIDL CIDL backend idl + --> diff --git a/modules/CIAO/docs/releasenotes/switch.html b/modules/CIAO/docs/releasenotes/switch.html new file mode 100644 index 00000000000..1120239b6ec --- /dev/null +++ b/modules/CIAO/docs/releasenotes/switch.html @@ -0,0 +1,35 @@ +<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN"> +<!-- $Id$ --> +<html> <head> +<title>Migrating the component implementation</title> +</head> + +<body> +<h3>When switching from the old CIAO runtime to the new one</h1> + +<ul> + There are only one thing needs to be done to migrate the component + implementation from the old runtime to the new runtime. + <br><br> + Find all the component MPC files in your component implementation + source directories and make the following changes. + + for every project in your MPC files which inherites from any of + the following MPC template (base project): <code> ciao_client, ciao_component, + ciao_servant, ciao_server,</code> replace them with <code> ciao_client_dnc, + ciao_component_dnc, ciao_servant_dnc, ciao_server_dnc</code>. Then + generate your makefile/solution/project files using either + <code>mwc.pl</code> or <code>mpc.pl</code> and build (rebuild) your + binaries.<br> + + A couple examples of the component implementation are at: + <code>$CIAO_ROOT/DAnCE/tests</code>. +</ul> + +<h3>When switching from the new CIAO runtime to the old one</h3> + <ul> + Reverse the above changes. + </ul> + + <b>Email: </b><a href="mailto:"</a<ADDRESS>ciao-users@cse.wustl.edu</ADDRESS> +</body> </html> diff --git a/modules/CIAO/docs/schema/Basic_Deployment_Data.xsd b/modules/CIAO/docs/schema/Basic_Deployment_Data.xsd new file mode 100644 index 00000000000..1d386841ea5 --- /dev/null +++ b/modules/CIAO/docs/schema/Basic_Deployment_Data.xsd @@ -0,0 +1,349 @@ +<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.w3.org/2001/XMLSchema XMLSchema.xsd" + xmlns:Deployment="http://www.omg.org/Deployment" + targetNamespace="http://www.omg.org/Deployment"> + + <xsd:simpleType name="TCKind"> + <xsd:restriction base="xsd:NCName"> + <xsd:enumeration value="tk_null"/> + <xsd:enumeration value="tk_void"/> + <xsd:enumeration value="tk_short"/> + <xsd:enumeration value="tk_long"/> + <xsd:enumeration value="tk_ushort"/> + <xsd:enumeration value="tk_ulong"/> + <xsd:enumeration value="tk_float"/> + <xsd:enumeration value="tk_double"/> + <xsd:enumeration value="tk_boolean"/> + <xsd:enumeration value="tk_char"/> + <xsd:enumeration value="tk_octet"/> + <xsd:enumeration value="tk_any"/> + <xsd:enumeration value="tk_TypeCode"/> + <xsd:enumeration value="tk_Principal"/> + <xsd:enumeration value="tk_objref"/> + <xsd:enumeration value="tk_struct"/> + <xsd:enumeration value="tk_union"/> + <xsd:enumeration value="tk_enum"/> + <xsd:enumeration value="tk_string"/> + <xsd:enumeration value="tk_sequence"/> + <xsd:enumeration value="tk_array"/> + <xsd:enumeration value="tk_alias"/> + <xsd:enumeration value="tk_except"/> + <xsd:enumeration value="tk_longlong"/> + <xsd:enumeration value="tk_ulonglong"/> + <xsd:enumeration value="tk_longdouble"/> + <xsd:enumeration value="tk_wchar"/> + <xsd:enumeration value="tk_wstring"/> + <xsd:enumeration value="tk_wfixed"/> + <xsd:enumeration value="tk_value"/> + <xsd:enumeration value="tk_value_box"/> + <xsd:enumeration value="tk_native"/> + <xsd:enumeration value="tk_abstract_interface"/> + <xsd:enumeration value="tk_local_interface"/> + <xsd:enumeration value="tk_component"/> + <xsd:enumeration value="tk_home"/> + <xsd:enumeration value="tk_event"/> + </xsd:restriction> + </xsd:simpleType> + + <xsd:complexType name="DataType"> + <xsd:sequence> + <xsd:element name="kind" type="Deployment:TCKind"/> + <xsd:element name="enum" type="Deployment:EnumType" minOccurs="0"/> +<!-- +@@ not supported now.. + + <xsd:element name="objref" type="Deployment:ObjrefType"/> + <xsd:element name="boundedString" type="Deployment:BoundedStringType"/> + <xsd:element name="fixed" type="Deployment:FixedType"/> + <xsd:element name="array" type="Deployment:ArrayType"/> + <xsd:element name="sequence" type="Deployment:SequenceType"/> + <xsd:element name="alias" type="Deployment:AliasType"/> + <xsd:element name="struct" type="Deployment:StructType"/> + <xsd:element name="value" type="Deployment:ValueType"/> + <xsd:element name="union" type="Deployment:UnionType"/> +--> + </xsd:sequence> + </xsd:complexType> + + <xsd:complexType name="DataValue"> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="short" type="xsd:short"/> + <xsd:element name="long" type="xsd:int"/> + <xsd:element name="ushort" type="xsd:unsignedShort"/> + <xsd:element name="ulong" type="xsd:unsignedInt"/> + <xsd:element name="float" type="xsd:float"/> + <xsd:element name="double" type="xsd:double"/> + <xsd:element name="boolean" type="xsd:boolean"/> + <xsd:element name="octet" type="xsd:unsignedByte"/> + <!-- xsd:element name="opaque" type="xsd:base64Binary"/ --> + <!-- <xsd:element name="objref" type="xsd:string"/> --> + <xsd:element name="enum" type="xsd:string"/> + <xsd:element name="string" type="xsd:string"/> + <xsd:element name="longlong" type="xsd:long"/> + <xsd:element name="ulonglong" type="xsd:unsignedLong"/> + <xsd:element name="longdouble" type="xsd:double"/> + <!-- <xsd:element name="fixed" type="xsd:string"/> --> + <!-- <xsd:element name="any" type="Deployment:Any"/> --> + <!-- <xsd:element name="typecode" type="Deployment:DataType"/> --> + <!-- <xsd:element name="element" type="Deployment:DataValue"/> --> + <!-- <xsd:element name="discriminator" type="Deployment:DataValue"/> --> + <!-- <xsd:element name="value" type="Deployment:DataValue"/> --> + <!-- <xsd:element name="boxedValue" type="Deployment:DataValue"/> --> + <!-- <xsd:element name="member" type="Deployment:NamedValue"/> --> + </xsd:choice> + </xsd:complexType> + + <xsd:complexType name="EnumType"> + <xsd:sequence> + <xsd:element name="name" type="xsd:string"/> + <xsd:element name="typeId" type="xsd:string"/> + <xsd:element name="member" type="xsd:string" maxOccurs="unbounded"/> + </xsd:sequence> + </xsd:complexType> + + <xsd:complexType name="Any"> + <xsd:sequence> + <xsd:element name="type" type="Deployment:DataType"/> + <xsd:element name="value" type="Deployment:DataValue"/> + </xsd:sequence> + </xsd:complexType> + + <xsd:complexType name="Property"> + <xsd:sequence> + <xsd:element name="name" type="xsd:string"/> + <xsd:element name="value" type="Deployment:Any"/> + </xsd:sequence> + </xsd:complexType> + +<!-- End of base definitions. --> + + <xsd:simpleType name="SatisfierPropertyKind"> + <xsd:restriction base="xsd:NCName"> + <xsd:enumeration value="Quantity"/> + <xsd:enumeration value="Capacity"/> + <xsd:enumeration value="Minimum"/> + <xsd:enumeration value="Maximum"/> + <xsd:enumeration value="Attribute"/> + <xsd:enumeration value="Selection"/> + </xsd:restriction> + </xsd:simpleType> + + <xsd:complexType name="SatisfierProperty"> + <xsd:sequence> + <xsd:element name="name" type="xsd:string"/> + <xsd:element name="kind" type="Deployment:SatisfierPropertyKind"/> + <xsd:element name="dynamic" type="xsd:boolean" /> + <xsd:element name="value" type="Deployment:Any"/> + </xsd:sequence> + </xsd:complexType> + + <xsd:complexType name="Resource"> + <xsd:sequence> + <xsd:element name="name" type="xsd:string"/> + <xsd:element name="resourceType" type="xsd:string" maxOccurs="unbounded" /> + <xsd:element name="property" type="Deployment:SatisfierProperty" minOccurs="0" maxOccurs="unbounded" /> + </xsd:sequence> + </xsd:complexType> + + <xsd:complexType name="Requirement"> + <xsd:sequence> + <xsd:element name="resourceType" type="xsd:string"/> + <xsd:element name="name" type="xsd:string"/> + <xsd:element name="property" type="Deployment:Property" minOccurs="0" maxOccurs="unbounded"/> + </xsd:sequence> + </xsd:complexType> + +<!-- Deployment --> + + <xsd:complexType name="ResourceDeploymentDescription"> + <xsd:sequence> + <xsd:element name="requirementName" type="xsd:string"/> + <xsd:element name="resourceName" type="xsd:string"/> + <xsd:element name="property" type="Deployment:Property" minOccurs="0" maxOccurs="unbounded"/> + </xsd:sequence> + </xsd:complexType> + + <xsd:complexType name="ArtifactDeploymentDescription"> + <xsd:sequence> + <xsd:element name="name" type="xsd:string"/> + <xsd:element name="source" type="xsd:string" maxOccurs="unbounded"/> + <xsd:element name="node" type="xsd:string"/> + <xsd:element name="location" type="xsd:string" maxOccurs="unbounded"/> + <xsd:element name="execParameter" type="Deployment:Property" minOccurs="0" maxOccurs="unbounded"/> + <xsd:element name="deployRequirement" type="Deployment:Requirement" minOccurs="0" maxOccurs="unbounded"/> + <xsd:element name="deployedResource" type="Deployment:ResourceDeploymentDescription" minOccurs="0" maxOccurs="unbounded"/> + </xsd:sequence> + <xsd:attribute name="id" type="xsd:ID"/> + </xsd:complexType> + + <xsd:complexType name="MonolithicDeploymentDescription"> + <xsd:sequence> + <xsd:element name="name" type="xsd:string"/> + <xsd:element name="source" type="xsd:string" maxOccurs="unbounded"/> + <xsd:element name="artifact" type="xsd:IDREF" maxOccurs="unbounded"/> <!-- ArtifactDeploymentDescription --> + <xsd:element name="execParameter" type="Deployment:Property" minOccurs="0" maxOccurs="unbounded"/> + <xsd:element name="deployRequirement" type="Deployment:Requirement" minOccurs="0" maxOccurs="unbounded"/> + </xsd:sequence> + <xsd:attribute name="id" type="xsd:ID"/> + </xsd:complexType> + + <xsd:simpleType name="ResourceUsageKind"> + <xsd:restriction base="xsd:NCName"> + <xsd:enumeration value="None"/> + <xsd:enumeration value="InstanceUsesResource"/> + <xsd:enumeration value="ResourceUsesInstance"/> + <xsd:enumeration value="PortUsesResource"/> + <xsd:enumeration value="ResourceUsesPort"/> + </xsd:restriction> + </xsd:simpleType> + + <xsd:complexType name="InstanceResourceDeploymentDescription"> + <xsd:sequence> + <xsd:element name="resourceUsage" type="Deployment:ResourceUsageKind"/> + <xsd:element name="requirementName" type="xsd:string"/> + <xsd:element name="resourceName" type="xsd:string"/> + <xsd:element name="property" type="Deployment:Property" minOccurs="0" maxOccurs="unbounded" /> + </xsd:sequence> + </xsd:complexType> + + <xsd:complexType name="InstanceDeploymentDescription"> + <xsd:sequence> + <xsd:element name="name" type="xsd:string"/> + <xsd:element name="node" type="xsd:string"/> + <xsd:element name="source" type="xsd:string"/> + <xsd:element name="implementation" type="xsd:IDREF"/> <!-- MonolithicDeploymentDescription --> + <xsd:element name="configProperty" type="Deployment:Property" minOccurs="0" maxOccurs="unbounded"/> + <xsd:element name="deployedResource" type="Deployment:InstanceResourceDeploymentDescription" minOccurs="0"/> + <xsd:element name="deployedSharedResource" type="Deployment:InstanceResourceDeploymentDescription" minOccurs="0"/> + </xsd:sequence> + <xsd:attribute name="id" type="xsd:ID"/> + </xsd:complexType> + + <xsd:simpleType name="CCMComponentPortKind"> + <xsd:restriction base="xsd:NCName"> + <xsd:enumeration value="Facet"/> + <xsd:enumeration value="SimplexReceptacle"/> + <xsd:enumeration value="MultiplexReceptacle"/> + <xsd:enumeration value="EventEmitter"/> + <xsd:enumeration value="EventPublisher"/> + <xsd:enumeration value="EventConsumer"/> + </xsd:restriction> + </xsd:simpleType> + + <xsd:complexType name="ComponentPortDescription"> + <xsd:sequence> + <xsd:element name="name" type="xsd:string"/> + <!-- @@MAJO: Hack - specific/supported types should be required. --> + <xsd:element name="specificType" type="xsd:string" minOccurs="0"/> + <xsd:element name="supportedType" type="xsd:string" minOccurs="0" maxOccurs="unbounded"/> + <xsd:element name="provider" type="xsd:boolean"/> + <xsd:element name="exclusiveProvider" type="xsd:boolean"/> + <xsd:element name="exclusiveUser" type="xsd:boolean"/> + <xsd:element name="optional" type="xsd:boolean"/> + <xsd:element name="kind" type="Deployment:CCMComponentPortKind"/> + </xsd:sequence> + </xsd:complexType> + + <xsd:complexType name="ComponentPropertyDescription"> + <xsd:sequence> + <xsd:element name="name" type="xsd:string"/> + <xsd:element name="type" type="Deployment:DataType"/> + </xsd:sequence> + </xsd:complexType> + + <xsd:complexType name="ComponentExternalPortEndpoint"> + <xsd:sequence> + <xsd:element name="portName" type="xsd:string"/> + </xsd:sequence> + </xsd:complexType> + + <xsd:complexType name="PlanSubcomponentPortEndpoint"> + <xsd:sequence> + <xsd:element name="portName" type="xsd:string"/> + <xsd:element name="provider" type="xsd:string" minOccurs="0"/> + <xsd:element name="kind" type="Deployment:CCMComponentPortKind"/> + <xsd:element name="instance" type="xsd:IDREF"/> <!-- InstanceDeploymentDescription --> + </xsd:sequence> + </xsd:complexType> + + <xsd:complexType name="ExternalReferenceEndpoint"> + <xsd:sequence> + <xsd:element name="location" type="xsd:string"/> + </xsd:sequence> + </xsd:complexType> + + <xsd:complexType name="ConnectionResourceDeploymentDescription"> + <xsd:sequence> + <xsd:element name="targetName" type="xsd:string"/> + <xsd:element name="requirementName" type="xsd:string"/> + <xsd:element name="resourceName" type="xsd:string"/> + <xsd:element name="property" type="Deployment:Property" minOccurs="0" maxOccurs="unbounded" /> + </xsd:sequence> + </xsd:complexType> + + <xsd:complexType name="PlanConnectionDescription"> + <xsd:sequence> + <xsd:element name="name" type="xsd:string"/> + <xsd:element name="source" type="xsd:string" minOccurs="0"/> + <xsd:element name="deployRequirement" type="Deployment:Requirement" minOccurs="0" maxOccurs="unbounded"/> + <xsd:element name="externalEndpoint" type="Deployment:ComponentExternalPortEndpoint" minOccurs="0" maxOccurs="unbounded"/> + <xsd:element name="internalEndpoint" type="Deployment:PlanSubcomponentPortEndpoint" minOccurs="0" maxOccurs="unbounded"/> + <xsd:element name="externalReference" type="Deployment:ExternalReferenceEndpoint" minOccurs="0" maxOccurs="unbounded"/> + <xsd:element name="deployedResource" type="Deployment:ConnectionResourceDeploymentDescription" minOccurs="0" maxOccurs="unbounded"/> + </xsd:sequence> + </xsd:complexType> + + <xsd:complexType name="ImplementationDependency"> + <xsd:sequence> + <xsd:element name="requiredType" type="xsd:string"/> + </xsd:sequence> + </xsd:complexType> + +<!-- Implementation --> + + <xsd:complexType name="Capability"> + <xsd:sequence> + <xsd:element name="name" type="xsd:string"/> + <xsd:element name="resourceType" type="xsd:string" maxOccurs="unbounded" /> + <xsd:element name="property" type="Deployment:SatisfierProperty" minOccurs="0" maxOccurs="unbounded" /> + </xsd:sequence> + </xsd:complexType> + + <xsd:complexType name="ImplementationRequirement"> + <xsd:sequence> + <xsd:element name="resourceUsage" type="Deployment:ResourceUsageKind" minOccurs="0"/> + <xsd:element name="resourcePort" type="xsd:string" minOccurs="0" /> + <xsd:element name="componentPort" type="xsd:string" minOccurs="0"/> + <xsd:element name="resourceType" type="xsd:string"/> + <xsd:element name="name" type="xsd:string"/> + <xsd:element name="property" type="Deployment:Property" minOccurs="0" maxOccurs="unbounded" /> + </xsd:sequence> + </xsd:complexType> + + <xsd:complexType name="ComponentPackageReference"> + <xsd:sequence> + <xsd:element name="requiredUUID" type="xsd:string" minOccurs="0" /> + <xsd:element name="requiredName" type="xsd:string" minOccurs="0" /> + <xsd:element name="requiredType" type="xsd:string"/> + </xsd:sequence> + </xsd:complexType> + + <xsd:complexType name="SubcomponentPortEndpoint"> + <xsd:sequence> + <xsd:element name="portName" type="xsd:string"/> + <xsd:element name="instance" type="xsd:IDREF"/> <!-- SubcomponentInstantiationDescription --> + </xsd:sequence> + </xsd:complexType> + + <xsd:complexType name="AssemblyConnectionDescription"> + <xsd:sequence> + <xsd:element name="name" type="xsd:string"/> + <xsd:element name="deployRequirement" type="Deployment:Requirement" minOccurs="0" maxOccurs="unbounded" /> + <xsd:element name="internalEndpoint" type="Deployment:SubcomponentPortEndpoint" minOccurs="0" maxOccurs="unbounded"/> + <xsd:element name="externalEndpoint" type="Deployment:ComponentExternalPortEndpoint" minOccurs="0" maxOccurs="unbounded"/> + <xsd:element name="externalReference" type="Deployment:ExternalReferenceEndpoint" minOccurs="0" maxOccurs="unbounded"/> + </xsd:sequence> + </xsd:complexType> + +</xsd:schema> diff --git a/modules/CIAO/docs/schema/CIAOEvents.xsd b/modules/CIAO/docs/schema/CIAOEvents.xsd new file mode 100644 index 00000000000..645d7a6e530 --- /dev/null +++ b/modules/CIAO/docs/schema/CIAOEvents.xsd @@ -0,0 +1,104 @@ +<?xml version="1.0" encoding="utf-8"?> +<xsd:schema targetNamespace="http://www.dre.vanderbilt.edu/CIAOEvents" + xmlns:CIAO="http://www.dre.vanderbilt.edu/CIAOEvents" + xmlns:xsd="http://www.w3.org/2001/XMLSchema" + attributeFormDefault="unqualified"> + + <xsd:element name="CIAOEvents" type="CIAO:CIAOEventsDef"> + <xsd:annotation> + <xsd:documentation> + Root element for defining all the pub/sub services configuration + used by a DeploymentPlan. + A CIAO:Events document should reside in a separate file. + A DeploymentPlan can refer to one or more CIAO:Events file names + using the "infoProperty" tag. + </xsd:documentation> + </xsd:annotation> + </xsd:element> + +<!-- =============================================================== --> +<!-- CIAO Event Service Deployment Description --> +<!-- =============================================================== --> + + <xsd:simpleType name="EventServiceType"> + <xsd:restriction base="xsd:NCName"> + <xsd:enumeration value="EC"/> + <xsd:enumeration value="RTEC"/> + <xsd:enumeration value="NOTIFY"/> + <xsd:enumeration value="RTNOTIFY"/> + </xsd:restriction> + </xsd:simpleType> + + <xsd:complexType name="CIAOEventsDef"> + <xsd:sequence> + <xsd:element name="eventServiceConfiguration" type="CIAO:EventServiceDescription" maxOccurs="unbounded"/> + </xsd:sequence> + <xsd:attribute name="id" type="xsd:ID"/> + </xsd:complexType> + + <xsd:complexType name="EventServiceDescription"> + <xsd:sequence> + <xsd:element name="name" type="xsd:string"/> + <xsd:element name="node" type="xsd:string"/> + <xsd:element name="type" type="CIAO:EventServiceType"/> + <xsd:element name="svc_cfg_file" type="xsd:string"/> + <xsd:element name="filter" type="CIAO:Filter" minOccurs="0" maxOccurs="unbounded"/> + <xsd:element name="addr_serv" type="CIAO:AddressServerDescription" minOccurs="0" maxOccurs="unbounded"/> + <xsd:element name="udp_sender" type="CIAO:UDPSenderDescription" minOccurs="0" maxOccurs="unbounded"/> + <xsd:element name="udp_receiver" type="CIAO:UDPReceiverDescription" minOccurs="0" maxOccurs="unbounded"/> + </xsd:sequence> + <xsd:attribute name="id" type="xsd:ID"/> + </xsd:complexType> + + +<!-- =============================================================== --> +<!-- CIAO Event Filter Description --> +<!-- =============================================================== --> + + <xsd:simpleType name="FilterType"> + <xsd:restriction base="xsd:NCName"> + <xsd:enumeration value="CONJUNCTION"/> + <xsd:enumeration value="DISJUNCTION"/> + <xsd:enumeration value="LOGICAL_AND"/> + <xsd:enumeration value="NEGATE"/> + </xsd:restriction> + </xsd:simpleType> + + <xsd:complexType name="Filter"> + <xsd:sequence> + <xsd:element name="name" type="xsd:string"/> + <xsd:element name="type" type="CIAO:FilterType"/> + <xsd:element name="source" type="xsd:string" maxOccurs="unbounded"/> + </xsd:sequence> + <xsd:attribute name="id" type="xsd:ID"/> + </xsd:complexType> + +<!-- =============================================================== --> +<!-- CIAO Event Service Federation Description --> +<!-- =============================================================== --> + + <xsd:complexType name="AddressServerDescription"> + <xsd:sequence> + <xsd:element name="name" type="xsd:string"/> + <xsd:element name="port" type="xsd:unsignedShort"/> + <xsd:element name="address" type="xsd:string"/> + </xsd:sequence> + </xsd:complexType> + + <xsd:complexType name="UDPSenderDescription"> + <xsd:sequence> + <xsd:element name="name" type="xsd:string"/> + <xsd:element name="addr_serv_id" type="xsd:string"/> + </xsd:sequence> + </xsd:complexType> + + <xsd:complexType name="UDPReceiverDescription"> + <xsd:sequence> + <xsd:element name="name" type="xsd:string"/> + <xsd:element name="addr_serv_id" type="xsd:string" minOccurs="0" /> + <xsd:element name="is_multicast" type="xsd:boolean"/> + <xsd:element name="listen_port" type="xsd:unsignedShort"/> + </xsd:sequence> + </xsd:complexType> + +</xsd:schema> diff --git a/modules/CIAO/docs/schema/CIAOServerResources.xsd b/modules/CIAO/docs/schema/CIAOServerResources.xsd new file mode 100644 index 00000000000..d9fb63da88f --- /dev/null +++ b/modules/CIAO/docs/schema/CIAOServerResources.xsd @@ -0,0 +1,194 @@ +<?xml version="1.0" encoding="utf-8"?> +<xsd:schema targetNamespace="http://www.dre.vanderbilt.edu/ServerResources" + xmlns:CIAO="http://www.dre.vanderbilt.edu/ServerResources" + xmlns:xsd="http://www.w3.org/2001/XMLSchema" + attributeFormDefault="unqualified"> + + <xsd:element name="ServerResources" type="CIAO:ServerResourcesDef"> + <xsd:annotation> + <xsd:documentation> + Root element for defining all the resources used by a DeploymentPlan. + A CIAO:ServerResources document should reside in a separate file. + A DeploymentPlan can refer to one or more CIAO:ServerResources file names + using the "infoProperty" tag. + </xsd:documentation> + </xsd:annotation> + </xsd:element> + + <xsd:complexType name="ServerResourcesDef"> + <xsd:sequence> + <xsd:element name="cmdline" type="CIAO:ServerCmdlineOptions" minOccurs="0"/> + <xsd:element name="svcconf" type="CIAO:ACESvcConf" minOccurs="0"/> + <xsd:element name="orbConfigs" type="CIAO:ORBConfigs" /> + </xsd:sequence> + <xsd:attribute name="id" type="xsd:ID"/> + </xsd:complexType> + + +<!-- =============================================================== --> + + <xsd:complexType name="ServerCmdlineOptions"> + <xsd:annotation> + <xsd:documentation> + Just a list of argv's that should be appended to the command + line used to start up the NodeApplication. + </xsd:documentation> + </xsd:annotation> + <xsd:sequence> + <xsd:element name="arg" type="xsd:string" maxOccurs="unbounded"/> + </xsd:sequence> + </xsd:complexType> + +<!-- ================================================================ --> + + <xsd:complexType name="ACESvcConf"> + <xsd:annotation> + <xsd:documentation> + Contains either a pointer to a svc.conf file, or the actual + content of the svc.conf file required to configure the + NodeApplication. + </xsd:documentation> + </xsd:annotation> + <xsd:choice> + <!-- Specify the URI of a svc.conf file. --> + <xsd:element name="uri" type="xsd:string"/> + + <!-- If we agree to use only XML based svc.conf "file", we will + support inlined svcconf entries here. If that will be the + case, we still need to convert ACE_Svc_Conf DTD to schema. --> + <!-- + <xsd:element name="inline" type="ACE_Svc_Conf"/> + --> + </xsd:choice> + </xsd:complexType> + +<!-- ========================================================================= --> + + <xsd:complexType name="ORBConfigs"> + <xsd:annotation> + <xsd:documentation> + Contains the shared resources the component ORB must support + and all available policySets that components installed under + the ORB can request. + </xsd:documentation> + </xsd:annotation> + <xsd:sequence> + <xsd:element name="resources" type="CIAO:ORBResources" + minOccurs="0"/> + <xsd:element name="policySet" type="CIAO:PolicySet" + maxOccurs="unbounded"/> + </xsd:sequence> + </xsd:complexType> + +<!-- ========================================================================= --> + + <xsd:complexType name="ORBResources"> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="threadpool" type="CIAO:ThreadpoolDef"/> + <xsd:element name="threadpoolWithLanes" type="CIAO:ThreadpoolWithLanesDef"/> + <xsd:element name="connectionBands" type="CIAO:ConnectionBandsDef"/> + <!-- Other ORB-wide resources that must be allocated by the ORB --> + </xsd:choice> + </xsd:complexType> + + <xsd:simpleType name="Priority"> + <xsd:restriction base="xsd:int"> + <xsd:minInclusive value="0"/> + <xsd:maxInclusive value="32767"/> + </xsd:restriction> + </xsd:simpleType> + + <xsd:complexType name="ThreadpoolDef"> + <xsd:sequence> + <xsd:element name="stacksize" type="xsd:unsignedLong"/> + <xsd:element name="static_threads" type="xsd:unsignedLong"/> + <xsd:element name="dynamic_threads" type="xsd:unsignedLong"/> + <xsd:element name="default_priority" type="CIAO:Priority"/> + <xsd:element name="allow_request_buffering" type="xsd:boolean"/> + <xsd:element name="max_buffered_requests" type="xsd:unsignedLong"/> + <xsd:element name="max_request_buffered_size" type="xsd:unsignedLong"/> + </xsd:sequence> + <xsd:attribute name="id" type="xsd:ID"/> + </xsd:complexType> + + <xsd:complexType name="ThreadpoolWithLanesDef"> + <xsd:sequence> + <xsd:element name="threadpoolLane" type="CIAO:ThreadpoolLaneDef" + maxOccurs="unbounded"/> + <xsd:element name="stacksize" type="xsd:unsignedLong" /> + <xsd:element name="allow_borrowing" type="xsd:boolean"/> + <xsd:element name="allow_request_buffering" type="xsd:boolean"/> + <xsd:element name="max_buffered_requests" type="xsd:unsignedLong"/> + <xsd:element name="max_request_buffered_size" type="xsd:unsignedLong"/> + </xsd:sequence> + <xsd:attribute name="id" type="xsd:ID"/> <!-- Threadpool ID should be + referenced by individual policies + in the policysets below --> + </xsd:complexType> + + <xsd:complexType name="ThreadpoolLaneDef"> + <xsd:sequence> + <xsd:element name="static_threads" type="xsd:unsignedLong"/> + <xsd:element name="dynamic_threads" type="xsd:unsignedLong"/> + <xsd:element name="priority" type="CIAO:Priority"/> + </xsd:sequence> + </xsd:complexType> + + <xsd:complexType name="ConnectionBandsDef"> + <xsd:annotation> + <xsd:documentation> + This is only used to provide a ORB-wide view of all connection bands. + The ORB doesn't really need to "create" this resource. + </xsd:documentation> + </xsd:annotation> + <xsd:sequence> + <xsd:element name="band" type="CIAO:PriorityBandDef" maxOccurs="unbounded"/> + </xsd:sequence> + <xsd:attribute name="id" type="xsd:ID"/> + </xsd:complexType> + + <xsd:complexType name="PriorityBandDef"> + <xsd:sequence> + <xsd:element name="low" type="xsd:int"/> + <xsd:element name="high" type="xsd:int"/> + </xsd:sequence> + </xsd:complexType> + +<!-- ========================================================================= --> + + <xsd:complexType name="PolicySet"> + <xsd:annotation> + <xsd:documentation> + Contains a set of CORBA Policies that can be applied to a + component instance at once. We should eventually expand this + list to incorporate all the policies defined in + ciaopolicy.xs. I'm focusing on the RT aspects for now. + + The ID of a policy set should be referenced by the component + instances in a DeploymentPlan document under the + "deployedResource" tag. + </xsd:documentation> + </xsd:annotation> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="priorityModel" type="CIAO:PriorityModelPolicyDef"/> + <xsd:element name="threadpool" type="xsd:IDREF"/> + <xsd:element name="priorityBandedConnection" type="xsd:IDREF"/> + </xsd:choice> + <xsd:attribute name="id" type="xsd:ID"/> + </xsd:complexType> + + <xsd:simpleType name="PriorityModel"> + <xsd:restriction base="xsd:NCName"> + <xsd:enumeration value="SERVER_DECLARED"/> + <xsd:enumeration value="CLIENT_PROPAGATED"/> + </xsd:restriction> + </xsd:simpleType> + + <xsd:complexType name="PriorityModelPolicyDef"> + <xsd:sequence> + <xsd:element name="priority_model" type="CIAO:PriorityModel"/> + </xsd:sequence> + <xsd:attribute name="server_priority" type="CIAO:Priority"/> + </xsd:complexType> + +</xsd:schema> diff --git a/modules/CIAO/docs/schema/Deployment.xsd b/modules/CIAO/docs/schema/Deployment.xsd new file mode 100644 index 00000000000..fd4ffe5bc7d --- /dev/null +++ b/modules/CIAO/docs/schema/Deployment.xsd @@ -0,0 +1,29 @@ +<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.w3.org/2001/XMLSchema XMLSchema.xsd" + xmlns:Deployment="http://www.omg.org/Deployment" + targetNamespace="http://www.omg.org/Deployment"> + + <xsd:include schemaLocation="Basic_Deployment_Data.xsd"/> + <xsd:include schemaLocation="cpd.xsd"/> + <xsd:include schemaLocation="ccd.xsd"/> + <xsd:include schemaLocation="cdd.xsd"/> + <xsd:include schemaLocation="cdp.xsd"/> + <xsd:include schemaLocation="cid.xsd"/> + <xsd:include schemaLocation="iad.xsd"/> + <xsd:include schemaLocation="pcd.xsd"/> + <xsd:include schemaLocation="toplevel.xsd"/> + + +<!-- Top-level elements. --> + + <xsd:element name="domain" type="Deployment:Domain"/> + <xsd:element name="deploymentPlan" type="Deployment:DeploymentPlan"/> + <xsd:element name="implementationArtifactDescription" type="Deployment:ImplementationArtifactDescription" /> + <xsd:element name="componentInterfaceDescription" type="Deployment:ComponentInterfaceDescription"/> + <xsd:element name="componentImplementationDescription" type="Deployment:ComponentImplementationDescription"/> + <xsd:element name="componentPackageDescription" type="Deployment:ComponentPackageDescription"/> + <xsd:element name="packageConfiguration" type="Deployment:PackageConfiguration"/> + <xsd:element name="topLevelPackageDescription" type="Deployment:TopLevelPackageDescription"/> + +</xsd:schema> diff --git a/modules/CIAO/docs/schema/Modified_Deployment.xsd b/modules/CIAO/docs/schema/Modified_Deployment.xsd new file mode 100644 index 00000000000..65f5eb81d1e --- /dev/null +++ b/modules/CIAO/docs/schema/Modified_Deployment.xsd @@ -0,0 +1,826 @@ +<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.w3.org/2001/XMLSchema XMLSchema.xsd" + xmlns:Deployment="http://www.omg.org/Deployment" + targetNamespace="http://www.omg.org/Deployment"> + + + <xsd:simpleType name="TCKind"> + <xsd:restriction base="xsd:NCName"> + <xsd:enumeration value="tk_null"/> + <xsd:enumeration value="tk_void"/> + <xsd:enumeration value="tk_short"/> + <xsd:enumeration value="tk_long"/> + <xsd:enumeration value="tk_ushort"/> + <xsd:enumeration value="tk_ulong"/> + <xsd:enumeration value="tk_float"/> + <xsd:enumeration value="tk_double"/> + <xsd:enumeration value="tk_boolean"/> + <xsd:enumeration value="tk_char"/> + <xsd:enumeration value="tk_octet"/> + <xsd:enumeration value="tk_any"/> + <xsd:enumeration value="tk_TypeCode"/> + <xsd:enumeration value="tk_Principal"/> + <xsd:enumeration value="tk_objref"/> + <xsd:enumeration value="tk_struct"/> + <xsd:enumeration value="tk_union"/> + <xsd:enumeration value="tk_enum"/> + <xsd:enumeration value="tk_string"/> + <xsd:enumeration value="tk_sequence"/> + <xsd:enumeration value="tk_array"/> + <xsd:enumeration value="tk_alias"/> + <xsd:enumeration value="tk_except"/> + <xsd:enumeration value="tk_longlong"/> + <xsd:enumeration value="tk_ulonglong"/> + <xsd:enumeration value="tk_longdouble"/> + <xsd:enumeration value="tk_wchar"/> + <xsd:enumeration value="tk_wstring"/> + <xsd:enumeration value="tk_wfixed"/> + <xsd:enumeration value="tk_value"/> + <xsd:enumeration value="tk_value_box"/> + <xsd:enumeration value="tk_native"/> + <xsd:enumeration value="tk_abstract_interface"/> + <xsd:enumeration value="tk_local_interface"/> + <xsd:enumeration value="tk_component"/> + <xsd:enumeration value="tk_home"/> + <xsd:enumeration value="tk_event"/> + </xsd:restriction> + </xsd:simpleType> + + <xsd:complexType name="DataType"> + <xsd:choice> + <xsd:element name="kind" type="Deployment:TCKind"/> +<!-- +@@ not used, what for? + + <xsd:element name="enum" type="Deployment:EnumType"/> + <xsd:element name="objref" type="Deployment:ObjrefType"/> + <xsd:element name="boundedString" type="Deployment:BoundedStringType"/> + <xsd:element name="fixed" type="Deployment:FixedType"/> + <xsd:element name="array" type="Deployment:ArrayType"/> + <xsd:element name="sequence" type="Deployment:SequenceType"/> + <xsd:element name="alias" type="Deployment:AliasType"/> + <xsd:element name="struct" type="Deployment:StructType"/> + <xsd:element name="value" type="Deployment:ValueType"/> + <xsd:element name="union" type="Deployment:UnionType"/> +--> + </xsd:choice> + </xsd:complexType> + + + <xsd:complexType name="DataValue"> + <xsd:choice> + <xsd:element name="short" type="xsd:short"/> + <xsd:element name="long" type="xsd:int"/> + <xsd:element name="ushort" type="xsd:unsignedShort"/> + <xsd:element name="ulong" type="xsd:unsignedInt"/> + <xsd:element name="float" type="xsd:float"/> + <xsd:element name="double" type="xsd:double"/> + <xsd:element name="boolean" type="xsd:boolean"/> + <xsd:element name="octet" type="xsd:unsignedByte"/> + <!-- xsd:element name="opaque" type="xsd:base64Binary"/ --> + <xsd:element name="objref" type="xsd:string"/> + <xsd:element name="enum" type="xsd:string"/> + <xsd:element name="string" type="xsd:string"/> + <xsd:element name="longlong" type="xsd:long"/> + <xsd:element name="ulonglong" type="xsd:unsignedLong"/> + <xsd:element name="longdouble" type="xsd:double"/> + <xsd:element name="fixed" type="xsd:string"/> + +<!-- +@@ recursive + <xsd:element name="any" type="Deployment:Any"/> +--> + + <xsd:element name="typecode" type="Deployment:DataType"/> + +<!-- +@@ recursive + <xsd:element name="element" type="Deployment:DataValue"/> + <xsd:element name="discriminator" type="Deployment:DataValue"/> + <xsd:element name="value" type="Deployment:DataValue"/> + <xsd:element name="boxedValue" type="Deployment:DataValue"/> + <xsd:element name="member" type="Deployment:NamedValue"/> +--> + </xsd:choice> + </xsd:complexType> + + + <xsd:complexType name="Any"> + <xsd:sequence> + <xsd:element name="type" type="Deployment:DataType"/> + <xsd:element name="value" type="Deployment:DataValue"/> + </xsd:sequence> + </xsd:complexType> + + + <xsd:complexType name="Property"> + <xsd:sequence> + <xsd:element name="name" type="xsd:string"/> + <xsd:element name="value" type="Deployment:Any"/> + </xsd:sequence> + </xsd:complexType> + + +<!-- End of base definitions. --> + + <xsd:complexType name="Node"> + <xsd:sequence> + <xsd:element name="name" type="xsd:string"/> + <xsd:element name="label" type="xsd:string"/> +<!-- +@@ recursive, not used + <xsd:element name="connection" type="Deployment:Interconnect"/> + <xsd:element name="sharedResource" type="Deployment:SharedResource"/> + <xsd:element name="resource" type="Deployment:Resource"/> +--> + </xsd:sequence> + </xsd:complexType> + + + <xsd:simpleType name="SatisfierPropertyKind"> + <xsd:restriction base="xsd:NCName"> + <xsd:enumeration value="Quantity"/> + <xsd:enumeration value="Capacity"/> + <xsd:enumeration value="Minimum"/> + <xsd:enumeration value="Maximum"/> + <xsd:enumeration value="Attribute"/> + <xsd:enumeration value="Selection"/> + </xsd:restriction> + </xsd:simpleType> + + + <xsd:complexType name="SatisfierProperty"> + <xsd:sequence> + <xsd:element name="name" type="xsd:string"/> + <xsd:element name="kind" type="Deployment:SatisfierPropertyKind"/> + <xsd:element name="value" type="Deployment:Any"/> + </xsd:sequence> + </xsd:complexType> + + + <xsd:complexType name="Resource"> + <xsd:sequence> + <xsd:element name="name" type="xsd:string"/> + <xsd:element name="resourceType" type="xsd:string"/> + <xsd:element name="property" type="Deployment:SatisfierProperty"/> + </xsd:sequence> + </xsd:complexType> + + + <xsd:complexType name="SharedResource"> + <xsd:sequence> + <xsd:element name="name" type="xsd:string"/> + <xsd:element name="resourceType" type="xsd:string"/> + <xsd:element name="node" type="Deployment:Node"/> + <xsd:element name="property" type="Deployment:SatisfierProperty"/> + </xsd:sequence> + </xsd:complexType> + + + <xsd:complexType name="Domain"> + <xsd:sequence> + <xsd:element name="label" type="xsd:string"/> + <xsd:element name="UUID" type="xsd:string"/> + <xsd:element name="sharedResource" type="Deployment:SharedResource" minOccurs="0"/> + <xsd:element name="node" type="Deployment:Node" maxOccurs="unbounded"/> +<!-- +@@ recursive, not used + <xsd:element name="interconnect" type="Deployment:Interconnect"/> + <xsd:element name="bridge" type="Deployment:Bridge"/> +--> + <xsd:element name="infoProperty" type="Deployment:Property" minOccurs="0"/> + </xsd:sequence> + </xsd:complexType> + + + <xsd:complexType name="Requirement"> + <xsd:sequence> + <xsd:element name="resourceType" type="xsd:string"/> + <xsd:element name="name" type="xsd:string"/> + <xsd:element name="property" type="Deployment:Property"/> + </xsd:sequence> + </xsd:complexType> + + +<!-- Deployment --> + + <xsd:complexType name="ResourceDeploymentDescription"> + <xsd:sequence> + <xsd:element name="requirementName" type="xsd:string"/> + <xsd:element name="resourceName" type="xsd:string"/> + <xsd:element name="resourceValue" type="Deployment:Any"/> + </xsd:sequence> + </xsd:complexType> + + + <xsd:complexType name="ArtifactDeploymentDescription"> + <xsd:sequence> + <xsd:element name="name" type="xsd:string"/> + <xsd:element name="source" type="xsd:string"/> + <xsd:element name="node" type="xsd:string" minOccurs="0"/> + <xsd:element name="location" type="xsd:string" maxOccurs="unbounded"/> + <xsd:element name="execParameter" type="Deployment:Property" minOccurs="0"/> + <xsd:element name="deployRequirement" type="Deployment:Requirement" minOccurs="0"/> + <xsd:element name="deployedResource" type="Deployment:ResourceDeploymentDescription" minOccurs="0"/> + </xsd:sequence> + <xsd:attribute name="id" type="xsd:ID"/> + </xsd:complexType> + + + <xsd:complexType name="MonolithicDeploymentDescription"> + <xsd:sequence> + <xsd:element name="name" type="xsd:string"/> + <xsd:element name="source" type="xsd:string"/> + <xsd:element name="artifact" type="xsd:IDREF" maxOccurs="unbounded"/> <!-- ArtifactDeploymentDescription --> + <xsd:element name="execParameter" type="Deployment:Property" minOccurs="0"/> + <xsd:element name="deployRequirement" type="Deployment:Requirement" minOccurs="0"/> + </xsd:sequence> + <xsd:attribute name="id" type="xsd:ID"/> + </xsd:complexType> + + <xsd:simpleType name="ResourceUsageKind"> + <xsd:restriction base="xsd:NCName"> + <xsd:enumeration value="None"/> + <xsd:enumeration value="InstanceUsesResource"/> + <xsd:enumeration value="ResourceUsesInstance"/> + <xsd:enumeration value="PortUsesResource"/> + <xsd:enumeration value="ResourceUsesPort"/> + </xsd:restriction> + </xsd:simpleType> + + + <xsd:complexType name="InstanceResourceDeploymentDescription"> + <xsd:sequence> + <xsd:element name="resourceUsage" type="Deployment:ResourceUsageKind"/> + <xsd:element name="requirementName" type="xsd:string"/> + <xsd:element name="resourceName" type="xsd:string"/> + <xsd:element name="resourceValue" type="Deployment:Any"/> + </xsd:sequence> + </xsd:complexType> + + + <xsd:complexType name="InstanceDeploymentDescription"> + <xsd:sequence> + <xsd:element name="name" type="xsd:string"/> + <xsd:element name="node" type="xsd:string"/> + <xsd:element name="source" type="xsd:string"/> + <xsd:element name="implementation" type="xsd:IDREF"/> <!-- MonolithicDeploymentDescription --> + <xsd:element name="configProperty" type="Deployment:Property" minOccurs="0" maxOccurs="unbounded"/> + <xsd:element name="deployedResource" type="Deployment:InstanceResourceDeploymentDescription" minOccurs="0"/> + <xsd:element name="deployedSharedResource" type="Deployment:InstanceResourceDeploymentDescription" minOccurs="0"/> + </xsd:sequence> + <xsd:attribute name="id" type="xsd:ID"/> + </xsd:complexType> + + + <xsd:simpleType name="CCMComponentPortKind"> + <xsd:restriction base="xsd:NCName"> + <xsd:enumeration value="Facet"/> + <xsd:enumeration value="SimplexReceptacle"/> + <xsd:enumeration value="MultiplexReceptacle"/> + <xsd:enumeration value="EventEmitter"/> + <xsd:enumeration value="EventPublisher"/> + <xsd:enumeration value="EventConsumer"/> + </xsd:restriction> + </xsd:simpleType> + + + <xsd:complexType name="ComponentPortDescription"> + <xsd:sequence> + <xsd:element name="name" type="xsd:string"/> + <xsd:element name="specificType" type="xsd:string"/> + <xsd:element name="supportedType" type="xsd:string"/> + <xsd:element name="provider" type="xsd:string"/> + <xsd:element name="exclusiveProvider" type="xsd:string"/> + <xsd:element name="exclusiveUser" type="xsd:string"/> + <xsd:element name="optional" type="xsd:string"/> + <xsd:element name="kind" type="Deployment:CCMComponentPortKind"/> + </xsd:sequence> + </xsd:complexType> + + + <xsd:complexType name="ComponentPropertyDescription"> + <xsd:sequence> + <xsd:element name="name" type="xsd:string"/> + <xsd:element name="type" type="Deployment:DataType"/> + </xsd:sequence> + </xsd:complexType> + + + <xsd:complexType name="ComponentInterfaceDescription"> + <!-- @@mxiong: added minOccurs="0" maxOccurs="unbounded" + when adding config_handler support + for repoMan + --> + <xsd:choice minOccurs="0" maxOccurs="unbounded"> + <xsd:sequence> + <xsd:element name="label" type="xsd:string"/> + <xsd:element name="UUID" type="xsd:string"/> + <xsd:element name="specificType" type="xsd:string"/> + <xsd:element name="supportedType" type="xsd:string" maxOccurs="unbounded" /> + <xsd:element name="idlFile" type="xsd:string" minOccurs="0"/> + <xsd:element name="configProperty" type="Deployment:Property" minOccurs="0"/> + <xsd:element name="port" type="Deployment:ComponentPortDescription" maxOccurs="unbounded"/> + <xsd:element name="property" type="Deployment:ComponentPropertyDescription" minOccurs="0"/> + <xsd:element name="infoProperty" type="Deployment:Property" minOccurs="0"/> + </xsd:sequence> + <xsd:element name="contentLocation" type="xsd:string"/> + </xsd:choice> + <!-- @@mxiong: added a href attribute + when adding config_handler support + for repoMan + --> + <xsd:attribute name="href" type="xsd:string" use="optional"/> + </xsd:complexType> + + + <xsd:complexType name="ComponentExternalPortEndpoint"> + <xsd:sequence> + <xsd:element name="portName" type="xsd:string"/> + </xsd:sequence> + </xsd:complexType> + + + <xsd:complexType name="PlanSubcomponentPortEndpoint"> + <xsd:sequence> + <xsd:element name="portName" type="xsd:string"/> + <xsd:element name="provider" type="xsd:string" minOccurs="0"/> + <xsd:element name="kind" type="Deployment:CCMComponentPortKind"/> + <xsd:element name="instance" type="xsd:IDREF"/> <!-- InstanceDeploymentDescription --> + </xsd:sequence> + </xsd:complexType> + + + <xsd:complexType name="ExternalReferenceEndpoint"> + <xsd:sequence> + <xsd:element name="location" type="xsd:string"/> + </xsd:sequence> + </xsd:complexType> + + + <xsd:complexType name="ConnectionResourceDeploymentDescription"> + <xsd:sequence> + <xsd:element name="targetName" type="xsd:string"/> + <xsd:element name="requirementName" type="xsd:string"/> + <xsd:element name="resourceName" type="xsd:string"/> + <xsd:element name="resourceValue" type="Deployment:Any"/> + </xsd:sequence> + </xsd:complexType> + + + <xsd:complexType name="PlanConnectionDescription"> + <xsd:sequence> + <xsd:element name="name" type="xsd:string"/> + <xsd:element name="source" type="xsd:string" minOccurs="0"/> + <xsd:element name="deployRequirement" type="Deployment:Requirement" minOccurs="0"/> + <xsd:element name="externalEndpoint" type="Deployment:ComponentExternalPortEndpoint" minOccurs="0" maxOccurs="unbounded"/> + <xsd:element name="internalEndpoint" type="Deployment:PlanSubcomponentPortEndpoint" minOccurs="0" maxOccurs="unbounded"/> + <xsd:element name="externalReference" type="Deployment:ExternalReferenceEndpoint" minOccurs="0" maxOccurs="unbounded"/> + <xsd:element name="deployedResource" type="Deployment:ConnectionResourceDeploymentDescription" minOccurs="0"/> + </xsd:sequence> + </xsd:complexType> + + + <xsd:complexType name="ImplementationDependency"> + <xsd:sequence> + <xsd:element name="requiredType" type="xsd:string"/> + </xsd:sequence> + </xsd:complexType> + + + <xsd:complexType name="DeploymentPlan"> + <xsd:sequence> + <xsd:element name="label" type="xsd:string" minOccurs="0"/> + <xsd:element name="UUID" type="xsd:string" minOccurs="0"/> + <xsd:element name="realizes" type="Deployment:ComponentInterfaceDescription" minOccurs="0" maxOccurs="1"/> + <xsd:element name="implementation" type="Deployment:MonolithicDeploymentDescription" maxOccurs="unbounded" /> + <xsd:element name="instance" type="Deployment:InstanceDeploymentDescription" minOccurs="0" maxOccurs="unbounded"/> + <xsd:element name="connection" type="Deployment:PlanConnectionDescription" minOccurs="0" maxOccurs="unbounded"/> + <!-- potentially recursive, not used + <xsd:element name="externalProperty" type="Deployment:PlanPropertyMapping"/> + --> + <xsd:element name="dependsOn" type="Deployment:ImplementationDependency" minOccurs="0" maxOccurs="unbounded"/> + <xsd:element name="artifact" type="Deployment:ArtifactDeploymentDescription" minOccurs="0" maxOccurs="unbounded"/> + <xsd:element name="infoProperty" type="Deployment:Property" minOccurs="0" maxOccurs="unbounded"/> + </xsd:sequence> + </xsd:complexType> + + + + +<!-- Implementation --> + + + <xsd:complexType name="Capability"> + <xsd:sequence> + <xsd:element name="name" type="xsd:string"/> + <xsd:element name="resourceType" type="xsd:string"/> + <xsd:element name="property" type="Deployment:SatisfierProperty"/> + </xsd:sequence> + </xsd:complexType> + + + <xsd:complexType name="NamedImplementationArtifact"> + <xsd:sequence> + <xsd:element name="name" type="xsd:string"/> + <!-- @@ recursive NIA->IAD->NIA --> + <xsd:element name="referencedArtifact" type="Deployment:ImplementationArtifactDescription"/> + </xsd:sequence> + </xsd:complexType> + + + <xsd:complexType name="ImplementationArtifactDescription"> + <!-- @@mxiong: added minOccurs="0" maxOccurs="1" + when adding config_handler support + for repoMan + --> + <xsd:choice minOccurs="0" maxOccurs="1"> + <xsd:sequence> + <xsd:element name="label" type="xsd:string"/> + <xsd:element name="UUID" type="xsd:string"/> + + <!-- @@ There probably should be only one location? --> + <xsd:element name="location" type="xsd:string" maxOccurs="unbounded"/> + <xsd:element name="execParameter" type="Deployment:Property" minOccurs="0"/> + <xsd:element name="deployRequirement" type="Deployment:Requirement" minOccurs="0"/> + <xsd:element name="dependsOn" type="Deployment:NamedImplementationArtifact" minOccurs="0" maxOccurs="unbounded"/> + <xsd:element name="infoProperty" type="Deployment:Property" minOccurs="0"/> + </xsd:sequence> + <xsd:element name="contentLocation" type="xsd:string"/> + </xsd:choice> + <!-- @@mxiong: added a href attribute + when adding config_handler support + for repoMan + --> + <xsd:attribute name="href" type="xsd:string" use="optional"/> + </xsd:complexType> + + + <xsd:complexType name="ImplementationRequirement"> + <xsd:sequence> + <xsd:element name="resourceUsage" type="Deployment:ResourceUsageKind"/> + <xsd:element name="resourcePort" type="xsd:string"/> + <xsd:element name="componentPort" type="xsd:string"/> + <xsd:element name="resourceType" type="xsd:string"/> + <xsd:element name="name" type="xsd:string"/> + <xsd:element name="property" type="Deployment:Property"/> + </xsd:sequence> + </xsd:complexType> + + + <xsd:complexType name="MonolithicImplementationDescription"> + <xsd:sequence> + <xsd:element name="execParameter" type="Deployment:Property" minOccurs="0"/> + <xsd:element name="primaryArtifact" type="Deployment:NamedImplementationArtifact" maxOccurs="unbounded"/> + <xsd:element name="deployRequirement" type="Deployment:ImplementationRequirement" minOccurs="0"/> + </xsd:sequence> + </xsd:complexType> + + + <xsd:complexType name="PackagedComponentImplementation"> + <xsd:sequence> + <xsd:element name="name" type="xsd:string"/> + <!-- @@ recursive CPD->PCI->CID->CAD->SID->CPD --> + <xsd:element name="referencedImplementation" type="Deployment:ComponentImplementationDescription"/> + </xsd:sequence> + </xsd:complexType> + + + <xsd:complexType name="ComponentPackageDescription"> + <!-- @@mxiong: added minOccurs="0" maxOccurs="1" + when adding config_handler support + for repoMan + --> + <xsd:choice minOccurs="0" maxOccurs="1"> + <xsd:sequence> + <xsd:element name="label" type="xsd:string"/> + <xsd:element name="UUID" type="xsd:string"/> + <xsd:element name="realizes" type="Deployment:ComponentInterfaceDescription" minOccurs="0"/> + <xsd:element name="configProperty" type="Deployment:Property" minOccurs="0"/> + <xsd:element name="implementation" type="Deployment:PackagedComponentImplementation"/> + <xsd:element name="infoProperty" type="Deployment:Property" minOccurs="0"/> + </xsd:sequence> + <xsd:element name="contentLocation" type="xsd:string"/> + </xsd:choice> + <!-- @@mxiong: added href + when adding config_handler support + for repoMan + --> + <xsd:attribute name="href" type="xsd:string" use="optional"/> + </xsd:complexType> + + + <xsd:complexType name="ComponentPackageReference"> + <xsd:sequence> + <xsd:element name="requiredUUID" type="xsd:string"/> + <xsd:element name="requiredName" type="xsd:string"/> + <xsd:element name="requiredType" type="xsd:string"/> + </xsd:sequence> + </xsd:complexType> + + + <xsd:complexType name="SubcomponentInstantiationDescription"> + <xsd:sequence> + <xsd:element name="name" type="xsd:string"/> + <xsd:element name="package" type="Deployment:ComponentPackageDescription"/> + <xsd:element name="configProperty" type="Deployment:Property" minOccurs="0"/> + <xsd:element name="selectRequirement" type="Deployment:Requirement" minOccurs="0"/> + <xsd:element name="reference" type="Deployment:ComponentPackageReference" minOccurs="0"/> + </xsd:sequence> + <xsd:attribute name="id" type="xsd:ID"/> + </xsd:complexType> + + + <xsd:complexType name="SubcomponentPortEndpoint"> + <xsd:sequence> + <xsd:element name="portName" type="xsd:string"/> + <xsd:element name="instance" type="xsd:IDREF"/> <!-- SubcomponentInstantiationDescription --> + </xsd:sequence> + </xsd:complexType> + + + <xsd:complexType name="AssemblyConnectionDescription"> + <xsd:sequence> + <xsd:element name="name" type="xsd:string"/> + <xsd:element name="deployRequirement" type="Deployment:Requirement" minOccurs="0"/> + <xsd:element name="externalEndpoint" type="Deployment:ComponentExternalPortEndpoint" minOccurs="0" maxOccurs="unbounded"/> + <xsd:element name="internalEndpoint" type="Deployment:SubcomponentPortEndpoint" minOccurs="0" maxOccurs="unbounded"/> + <xsd:element name="externalReference" type="Deployment:ExternalReferenceEndpoint" minOccurs="0" maxOccurs="unbounded"/> + </xsd:sequence> + </xsd:complexType> + + + <xsd:complexType name="SubcomponentPropertyReference"> + <xsd:sequence> + <xsd:element name="propertyName" type="xsd:string"/> + <xsd:element name="instance" type="Deployment:SubcomponentInstantiationDescription"/> + </xsd:sequence> + </xsd:complexType> + + + <xsd:complexType name="AssemblyPropertyMapping"> + <xsd:sequence> + <xsd:element name="name" type="xsd:string"/> + <xsd:element name="externalName" type="xsd:string"/> + <xsd:element name="delegatesTo" type="Deployment:SubcomponentPropertyReference"/> + </xsd:sequence> + </xsd:complexType> + + + <xsd:complexType name="ComponentAssemblyDescription"> + <xsd:sequence> + <xsd:element name="instance" type="Deployment:SubcomponentInstantiationDescription" maxOccurs="unbounded"/> + <xsd:element name="connection" type="Deployment:AssemblyConnectionDescription" maxOccurs="unbounded"/> + <xsd:element name="externalProperty" type="Deployment:AssemblyPropertyMapping" minOccurs="0"/> + </xsd:sequence> + </xsd:complexType> + + + <xsd:complexType name="ComponentImplementationDescription"> + <!-- @@mxiong: added minOccurs="0" maxOccurs="unbounded" + when adding config_handler support + for repoMan + --> + <xsd:choice minOccurs="0" maxOccurs="1"> + <xsd:sequence> + <xsd:element name="label" type="xsd:string"/> + <xsd:element name="UUID" type="xsd:string"/> + <xsd:element name="implements" type="Deployment:ComponentInterfaceDescription" minOccurs="0"/> + <xsd:choice> + <xsd:element name="assemblyImpl" type="Deployment:ComponentAssemblyDescription"/> + <xsd:element name="monolithicImpl" type="Deployment:MonolithicImplementationDescription"/> + </xsd:choice> + <xsd:element name="configProperty" type="Deployment:Property" minOccurs="0"/> + <xsd:element name="capability" type="Deployment:Capability" minOccurs="0"/> + <xsd:element name="dependsOn" type="Deployment:ImplementationDependency" minOccurs="0"/> + <xsd:element name="infoProperty" type="Deployment:Property" minOccurs="0"/> + </xsd:sequence> + <xsd:element name="contentLocation" type="xsd:string"/> + </xsd:choice> + <!-- @@mxiong: added href + when adding config_handler support + for repoMan + --> + <xsd:attribute name="href" type="xsd:string" use="optional"/> + </xsd:complexType> + + +<!-- Package --> + + + <xsd:complexType name="PackageConfiguration"> + <xsd:choice> + <xsd:sequence> + <xsd:element name="label" type="xsd:string"/> + <xsd:element name="UUID" type="xsd:string"/> +<!-- +@@ recursive, not used + <xsd:element name="specializedConfig" type="Deployment:PackageConfiguration"/> +--> + + <xsd:element name="basePackage" type="Deployment:ComponentPackageDescription"/> + <xsd:element name="reference" type="Deployment:ComponentPackageReference" minOccurs="0"/> + <xsd:element name="selectRequirement" type="Deployment:Requirement" minOccurs="0"/> + <xsd:element name="configProperty" type="Deployment:Property" minOccurs="0"/> + </xsd:sequence> + <xsd:element name="contentLocation" type="xsd:string"/> + </xsd:choice> + </xsd:complexType> + + + <xsd:complexType name="TopLevelPackageDescription"> + <xsd:sequence> + <xsd:element name="package" type="Deployment:PackageConfiguration" maxOccurs="unbounded"/> + </xsd:sequence> + </xsd:complexType> + + +<!-- Top-level elements. --> + + + <xsd:element name="domain" type="Deployment:Domain"/> + <xsd:element name="deploymentPlan" type="Deployment:DeploymentPlan"/> + <xsd:element name="implementationArtifactDescription" type="Deployment:ImplementationArtifactDescription" /> + <xsd:element name="componentInterfaceDescription" type="Deployment:ComponentInterfaceDescription"/> + <xsd:element name="componentImplementationDescription" type="Deployment:ComponentImplementationDescription"/> + <xsd:element name="componentPackageDescription" type="Deployment:ComponentPackageDescription"/> + <xsd:element name="packageConfiguration" type="Deployment:PackageConfiguration"/> + <xsd:element name="topLevelPackageDescription" type="Deployment:TopLevelPackageDescription"/> + + + +<!-- VAULT + +Place for strange things. Nobody knows what they are for... + +--> + +<!-- + + <xsd:complexType name="EnumType"> + <xsd:sequence> + <xsd:element name="name" type="xsd:string"/> + <xsd:element name="typeId" type="xsd:string"/> + <xsd:element name="member" type="xsd:string" maxOccurs="unbounded"/> + </xsd:sequence> + </xsd:complexType> + + <xsd:complexType name="ObjrefType"> + <xsd:sequence> + <xsd:element name="name" type="xsd:string"/> + <xsd:element name="typeId" type="xsd:string"/> + </xsd:sequence> + </xsd:complexType> + + + <xsd:complexType name="BoundedStringType"> + <xsd:choice minOccurs="0" maxOccurs="unbounded"> + <xsd:element name="bound" type="xsd:string"/> + </xsd:choice> + </xsd:complexType> + + + <xsd:complexType name="FixedType"> + <xsd:choice minOccurs="0" maxOccurs="unbounded"> + <xsd:element name="digits" type="xsd:string"/> + <xsd:element name="scale" type="xsd:string"/> + </xsd:choice> + </xsd:complexType> + + + <xsd:complexType name="ArrayType"> + <xsd:choice minOccurs="0" maxOccurs="unbounded"> + <xsd:element name="length" type="xsd:string"/> + <xsd:element name="elementType" type="Deployment:DataType"/> + </xsd:choice> + </xsd:complexType> + + <xsd:complexType name="SequenceType"> + <xsd:choice minOccurs="0" maxOccurs="unbounded"> + <xsd:element name="bound" type="xsd:string"/> + <xsd:element name="elementType" type="Deployment:DataType"/> + </xsd:choice> + </xsd:complexType> + + <xsd:complexType name="AliasType"> + <xsd:choice minOccurs="0" maxOccurs="unbounded"> + <xsd:element name="name" type="xsd:string"/> + <xsd:element name="typeId" type="xsd:string"/> + <xsd:element name="elementType" type="Deployment:DataType"/> + </xsd:choice> + </xsd:complexType> + + <xsd:complexType name="StructType"> + <xsd:choice minOccurs="0" maxOccurs="unbounded"> + <xsd:element name="name" type="xsd:string"/> + <xsd:element name="typeId" type="xsd:string"/> + <xsd:element name="member" type="Deployment:StructMemberType"/> + </xsd:choice> + </xsd:complexType> + + <xsd:complexType name="StructMemberType"> + <xsd:choice minOccurs="0" maxOccurs="unbounded"> + <xsd:element name="name" type="xsd:string"/> + <xsd:element name="type" type="Deployment:DataType"/> + </xsd:choice> + </xsd:complexType> + + <xsd:complexType name="ValueType"> + <xsd:choice minOccurs="0" maxOccurs="unbounded"> + <xsd:element name="name" type="xsd:string"/> + <xsd:element name="typeId" type="xsd:string"/> + <xsd:element name="modifier" type="xsd:string"/> + <xsd:element name="baseType" type="Deployment:DataType"/> + <xsd:element name="member" type="Deployment:ValueMemberType"/> + </xsd:choice> + </xsd:complexType> + + <xsd:complexType name="ValueMemberType"> + <xsd:choice minOccurs="0" maxOccurs="unbounded"> + <xsd:element name="name" type="xsd:string"/> + <xsd:element name="visibility" type="xsd:string"/> + <xsd:element name="type" type="Deployment:DataType"/> + </xsd:choice> + </xsd:complexType> + + <xsd:complexType name="UnionType"> + <xsd:choice minOccurs="0" maxOccurs="unbounded"> + <xsd:element name="name" type="xsd:string"/> + <xsd:element name="typeId" type="xsd:string"/> + <xsd:element name="default" type="Deployment:UnionMemberType"/> + <xsd:element name="discriminatorType" type="Deployment:DataType"/> + <xsd:element name="member" type="Deployment:UnionMemberType"/> + </xsd:choice> + </xsd:complexType> + + <xsd:complexType name="UnionMemberType"> + <xsd:choice minOccurs="0" maxOccurs="unbounded"> + <xsd:element name="name" type="xsd:string"/> + <xsd:element name="type" type="Deployment:DataType"/> + <xsd:element name="label" type="Deployment:DataValue"/> + </xsd:choice> + </xsd:complexType> + + + <xsd:complexType name="NamedValue"> + <xsd:choice minOccurs="0" maxOccurs="unbounded"> + <xsd:element name="name" type="xsd:string"/> + <xsd:element name="value" type="Deployment:DataValue"/> + </xsd:choice> + </xsd:complexType> + + + <xsd:complexType name="Bridge"> + <xsd:sequence> + <xsd:element name="name" type="xsd:string"/> + <xsd:element name="label" type="xsd:string"/> + <xsd:element name="connect" type="Deployment:Interconnect"/> + <xsd:element name="resource" type="Deployment:Resource"/> + </xsd:sequence> + </xsd:complexType> + + <xsd:complexType name="Interconnect"> + <xsd:choice minOccurs="0" maxOccurs="unbounded"> + <xsd:element name="name" type="xsd:string"/> + <xsd:element name="label" type="xsd:string"/> + <xsd:element name="connection" type="Deployment:Bridge"/> + <xsd:element name="connect" type="Deployment:Node"/> + <xsd:element name="resource" type="Deployment:Resource"/> + </xsd:choice> + </xsd:complexType> + + <xsd:complexType name="PlanPropertyMapping"> + <xsd:choice minOccurs="0" maxOccurs="unbounded"> + <xsd:element name="name" type="xsd:string"/> + <xsd:element name="source" type="xsd:string"/> + <xsd:element name="externalName" type="xsd:string"/> + <xsd:element name="delegatesTo" type="Deployment:PlanSubcomponentPropertyReference"/> + </xsd:choice> + </xsd:complexType> + + + <xsd:complexType name="PlanSubcomponentPropertyReference"> + <xsd:choice minOccurs="0" maxOccurs="unbounded"> + <xsd:element name="propertyName" type="xsd:string"/> + <xsd:element name="instance" type="Deployment:InstanceDeploymentDescription"/> + </xsd:choice> + </xsd:complexType> + +--> + +<!-- + + This type is not referenced anywhere. + + <xsd:complexType name="RequirementSatisfier"> + <xsd:choice minOccurs="0" maxOccurs="unbounded"> + <xsd:element name="name" type="xsd:string"/> + <xsd:element name="resourceType" type="xsd:string"/> + <xsd:element name="property" type="Deployment:SatisfierProperty"/> + </xsd:choice> + </xsd:complexType> + +--> + +</xsd:schema> diff --git a/modules/CIAO/docs/schema/README.html b/modules/CIAO/docs/schema/README.html new file mode 100644 index 00000000000..d810c8a6065 --- /dev/null +++ b/modules/CIAO/docs/schema/README.html @@ -0,0 +1,64 @@ +<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN"> +<!-- $Id$ --> +<html> <head> +<title>Contents of $CIAO_ROOT/docs/schema</title> +</head> + +<body> +<h1>Contents of $CIAO_ROOT/docs/schema</h1> +The schema in this directory are all based on the new Deployment and +Configuration spec. As part of our work on DAnCE we have tried to +subset and normalize the schema so that our developers, and tools +would be able to parse and use the information effectively. + +The following table illustrates the meaning and use of the various +schemata in this directory: +<table width="100%" border=1> + <tr valign=top> + <td><b>Spec_Defined_Deployment.xsd</b></td> + <td>This is the schema file from the spec which is unaltered. This + is just for reference. CIAO and DAnCE will not be using this file + directly. + </td> + </tr> + <tr valign=top> + <td><b>Spec_Defined_XMI.xsd</b></td> + <td>The OMG spec defined schema file uses definitions from another + specification called the XMI spec which is part of the OMG + specification suite. This schema file is again for reference + without any edits. + </td> + </tr> + <tr valign=top> + <td><b>ccd.xsd, cdd.xsd, cdp.xsd, cid.xsd, cpd.xsd, iad.xsd, + pcd.xsd and toplevel.xcd</b></td> + <td> Descriptors that will be used by DAnCE. Section 5.5.3 of the + Deployment and Configuration spec talks about the various + descriptors that are part of the package. The schema files are + broken down in accordance with the suggested descriptor format in + the section mentioned above. + </td> + </tr> + <tr valign=top"> + <td><b>Deployment.xsd</b></td> + <td> The schema file that will be used by the applications in + their descriptors. Applications need not use Deployment.xsd, but + using this is encouraged for portability of their intance + documents.</td> + </tr> + <tr valign=top"> + <td><b>Modified_Deployment.xsd</b></td> + <td> This schema is modified from the original spec defined + schema. It is a bit simplified with different sections that makes + things easier for the developer to read and digest the + information. Not used within DAnCE.</td> + </tr> + <tr valign=top"> + <td><b>unused_elements.xsd</b></td> + <td> Schema elements that are not used within the OMG's schema and + the ones that CIAo and DAnCedoesn't support.</td> + </tr> +</table> +</body> +</html> + diff --git a/modules/CIAO/docs/schema/SANet_Network.xsd b/modules/CIAO/docs/schema/SANet_Network.xsd new file mode 100644 index 00000000000..d614528b481 --- /dev/null +++ b/modules/CIAO/docs/schema/SANet_Network.xsd @@ -0,0 +1,98 @@ +<?xml version="1.0" encoding="utf-8" ?> +<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.vanderbilt.edu/SANet SANet_Network.xsd" xmlns:SANet="http://www.vanderbilt.edu/SANet" + targetNamespace="http://www.vanderbilt.edu/SANet" elementFormDefault="qualified"> + <!-- Simple types. --> + <xs:simpleType name="NodeID"> + <xs:restriction base="xs:int"> + <xs:minInclusive value="1" /> + </xs:restriction> + </xs:simpleType> + <xs:simpleType name="PortID"> + <xs:restriction base="xs:string" /> + </xs:simpleType> + <xs:simpleType name="TaskCost"> + <xs:restriction base="xs:double" /> + </xs:simpleType> + <xs:simpleType name="CondUtil"> + <xs:restriction base="xs:double" /> + </xs:simpleType> + <xs:simpleType name="CondKind"> + <xs:restriction base="xs:string"> + <xs:enumeration value="ENVIRON" /> + <xs:enumeration value="SYSTEM" /> + <xs:enumeration value="DATA" /> + </xs:restriction> + </xs:simpleType> + <xs:simpleType name="Probability"> + <xs:restriction base="xs:double"> + <xs:minInclusive value="0" /> + <xs:maxInclusive value="1" /> + </xs:restriction> + </xs:simpleType> + <xs:simpleType name="LinkWeight"> + <xs:restriction base="xs:double"> + <xs:minInclusive value="-1" /> + <xs:maxInclusive value="1" /> + </xs:restriction> + </xs:simpleType> + <xs:simpleType name="MultFactor"> + <xs:restriction base="xs:double"> + <xs:minInclusive value="0" /> + <xs:maxInclusive value="1" /> + </xs:restriction> + </xs:simpleType> + <!-- Complex types corresponding to IDL structures. + (nodes, links, and network). --> + <xs:complexType name="TaskNode"> + <xs:sequence> + <xs:element name="nodeID" type="SANet:NodeID" /> + <xs:element name="name" type="xs:string" default="" /> + <xs:element name="priorProb" type="SANet:Probability" /> + <xs:element name="attenFactor" type="SANet:MultFactor" default="1" /> + <xs:element name="cost" type="SANet:TaskCost" default="0" /> + </xs:sequence> + </xs:complexType> + <xs:complexType name="CondNode"> + <xs:sequence> + <xs:element name="nodeID" type="SANet:NodeID" /> + <xs:element name="name" type="xs:string" default="" /> + <xs:element name="probTrue" type="SANet:Probability" default="0" /> + <xs:element name="utility" type="SANet:CondUtil" default="0" /> + <xs:element name="kind" type="SANet:CondKind" default="ENVIRON" /> + <xs:element name="attenFactor" type="SANet:MultFactor" default="1" /> + </xs:sequence> + </xs:complexType> + <xs:complexType name="PrecondLink"> + <xs:sequence> + <xs:element name="condID" type="SANet:NodeID" /> + <xs:element name="taskID" type="SANet:NodeID" /> + <xs:element name="portID" type="SANet:PortID" /> + <xs:element name="trueProb" type="SANet:Probability" /> + <xs:element name="falseProb" type="SANet:Probability" /> + </xs:sequence> + </xs:complexType> + <xs:complexType name="EffectLink"> + <xs:sequence> + <xs:element name="taskID" type="SANet:NodeID" /> + <xs:element name="condID" type="SANet:NodeID" /> + <xs:element name="portID" type="SANet:PortID" /> + <xs:element name="weight" type="SANet:LinkWeight" /> + </xs:sequence> + </xs:complexType> + <xs:complexType name="Network"> + <xs:sequence> + <xs:element name="defaultAttenFactor" type="SANet:MultFactor" default="1" /> + <xs:element name="defaultTaskCost" type="SANet:TaskCost" default="0" /> + <xs:element name="defaultCondUtil" type="SANet:CondUtil" default="0" /> + <xs:element name="defaultCondProbTrue" type="SANet:Probability" default="0" /> + <xs:element name="linkThresh" type="SANet:LinkWeight" default="0" /> + <xs:element name="taskNode" type="SANet:TaskNode" maxOccurs="unbounded" /> + <xs:element name="condNode" type="SANet:CondNode" maxOccurs="unbounded" /> + <xs:element name="precondLink" type="SANet:PrecondLink" maxOccurs="unbounded" /> + <xs:element name="effectLink" type="SANet:EffectLink" maxOccurs="unbounded" /> + </xs:sequence> + </xs:complexType> + <!-- Top-level network element. --> + <xs:element name="network" type="SANet:Network" /> +</xs:schema>
\ No newline at end of file diff --git a/modules/CIAO/docs/schema/ServerResourceUsage.txt b/modules/CIAO/docs/schema/ServerResourceUsage.txt new file mode 100644 index 00000000000..061e2cc4422 --- /dev/null +++ b/modules/CIAO/docs/schema/ServerResourceUsage.txt @@ -0,0 +1,79 @@ + How to use CIAOServerResources.xsd + +Assuming we store two CIAO:ServerResources documents in two XML files +called "RTLinuxServerConfig.xml" and "RTwIN32ServerConfig.xml" +respectively. Two things need to happen in order to use the +PolicySet's defined in these files. First, we need to tell the DnC +tools what are all the CIAOServerResources files a DeploymentPlan +needs. This can easily be done by enumerating all these file in the +<infoProperty> element under the <DeploymentPlan>. For example, the +following XML document snippet shows a DeploymentPlan will reference +to two aforementioned CIAO:ServerResources files. The property name +"CIAOServerResourceRef" is a CIAO-specific extension that signifies +this need. The values of these properties simply specify the +filenames. + + + <infoProperty> + <name>CIAOServerResourceRef</name> + <value> + <type> + <kind>tk_string</kind> + </type> + <value> + <string>RTLinuxServerConfig.xml</string> + </value> + </value> + + <name>CIAOServerResourceRef</name> + <value> + <type> + <kind>tk_string</kind> + </type> + <value> + <string>RTWin32ServerConfig.xml</string> + </value> + </value> + </infoProperty> + +Second, we can now use the policy sets defined in these files by +associating a policy set with the entity the policy set will be +applied. Currently, only associations with component instances are +supported. A component instance in deployment plan can specify the +policy set it wishes to be instantiated with. A PolicySet is +referenced by its name and the CIAO:ServerResources name. + + <deploymentplan> + .... + <instance ...> + + + <deployedResource> + <resourceUsage>InstanceUsesResource</resourceUsage> + <requirementName>CIAO:ServerResources</requirementName> + <resourceName>here_we_insert_the_name_defined_in_CIAO:ServerResources</resourcename> + <property> + <name>CIAO:PolicySetName</name> + <value> + <type>tk_string</type> + <value> + <string>here_we_insert_the_PolicySet_name_defined_in_the_ServerResources</string> + </value> + </value> + </property> + </deployedResource> + + </instance> + </deploymentplan> + +If only the name of the CIAO:ServerResources is specified, we are +using it as a collocation constraint. In this case, the +<deployedResource> will contain no <property> sub-element. Component +instances with different <resourceName> values will be deployed to the +same target node with different ServerResources names. DAnCE should +create two differnet NodeApplication on the same node. + +Likewise, specifying different CIAO:PolicySet IDs will force component +instances to be deployed into different containers (if they have the +same target node and ServerResource ID.) + diff --git a/modules/CIAO/docs/schema/Spec_Defined_Deployment.xsd b/modules/CIAO/docs/schema/Spec_Defined_Deployment.xsd new file mode 100644 index 00000000000..a59a47f1360 --- /dev/null +++ b/modules/CIAO/docs/schema/Spec_Defined_Deployment.xsd @@ -0,0 +1,897 @@ +<xsd:schema + xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:xmi="http://www.omg.org/XMI" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xmlns:Deployment="http://www.omg.org/Deployment" + targetNamespace="http://www.omg.org/Deployment" + > + <xsd:import namespace="http://www.omg.org/XMI"/> + <xsd:complexType name="Any"> + <xsd:choice minOccurs="0" maxOccurs="unbounded"> + <xsd:element name="type" type="Deployment:DataType"/> + <xsd:element name="value" type="Deployment:DataValue"/> + <xsd:element ref="xmi:Extension"/> + </xsd:choice> + <xsd:attribute ref="xmi:id" use="optional"/> + <xsd:attributeGroup ref="xmi:ObjectAttribs"/> + </xsd:complexType> + <xsd:element name="Any" type="Deployment:Any"/> + <xsd:complexType name="DataType"> + <xsd:choice minOccurs="0" maxOccurs="unbounded"> + <xsd:element name="kind" type="Deployment:TCKind"/> + <xsd:element name="enum" type="Deployment:EnumType"/> + <xsd:element name="objref" type="Deployment:ObjrefType"/> + <xsd:element name="boundedString" type="Deployment:BoundedStringType"/> + <xsd:element name="fixed" type="Deployment:FixedType"/> + <xsd:element name="array" type="Deployment:ArrayType"/> + <xsd:element name="sequence" type="Deployment:SequenceType"/> + <xsd:element name="alias" type="Deployment:AliasType"/> + <xsd:element name="struct" type="Deployment:StructType"/> + <xsd:element name="value" type="Deployment:ValueType"/> + <xsd:element name="union" type="Deployment:UnionType"/> + <xsd:element ref="xmi:Extension"/> + </xsd:choice> + <xsd:attribute ref="xmi:id" use="optional"/> + <xsd:attributeGroup ref="xmi:ObjectAttribs"/> + </xsd:complexType> + <xsd:element name="DataType" type="Deployment:DataType"/> + <xsd:complexType name="DataValue"> + <xsd:choice minOccurs="0" maxOccurs="unbounded"> + <xsd:element name="short" type="xsd:short"/> + <xsd:element name="long" type="xsd:int"/> + <xsd:element name="ushort" type="xsd:unsignedShort"/> + <xsd:element name="ulong" type="xsd:unsignedInt"/> + <xsd:element name="float" type="xsd:float"/> + <xsd:element name="double" type="xsd:double"/> + <xsd:element name="boolean" type="xsd:boolean"/> + <xsd:element name="octet" type="xsd:unsignedByte"/> + <xsd:element name="opaque" type="xsd:base64Binary"/> + <xsd:element name="objref" type="xsd:string"/> + <xsd:element name="enum" type="xsd:string"/> + <xsd:element name="string" type="xsd:string"/> + <xsd:element name="longlong" type="xsd:long"/> + <xsd:element name="ulonglong" type="xsd:unsignedLong"/> + <xsd:element name="longdouble" type="xsd:double"/> + <xsd:element name="fixed" type="xsd:string"/> + <xsd:element name="any" type="Deployment:Any"/> + <xsd:element name="typecode" type="Deployment:DataType"/> + <xsd:element name="element" type="Deployment:DataValue"/> + <xsd:element name="discriminator" type="Deployment:DataValue"/> + <xsd:element name="value" type="Deployment:DataValue"/> + <xsd:element name="boxedValue" type="Deployment:DataValue"/> + <xsd:element name="member" type="Deployment:NamedValue"/> + <xsd:element ref="xmi:Extension"/> + </xsd:choice> + <xsd:attribute ref="xmi:id" use="optional"/> + <xsd:attributeGroup ref="xmi:ObjectAttribs"/> + </xsd:complexType> + <xsd:element name="DataValue" type="Deployment:DataValue"/> + <xsd:complexType name="EnumType"> + <xsd:choice minOccurs="0" maxOccurs="unbounded"> + <xsd:element name="name" type="xsd:string"/> + <xsd:element name="typeId" type="xsd:string"/> + <xsd:element name="member" type="xsd:string"/> + <xsd:element ref="xmi:Extension"/> + </xsd:choice> + <xsd:attribute ref="xmi:id" use="optional"/> + <xsd:attributeGroup ref="xmi:ObjectAttribs"/> + </xsd:complexType> + <xsd:element name="EnumType" type="Deployment:EnumType"/> + <xsd:complexType name="ObjrefType"> + <xsd:choice minOccurs="0" maxOccurs="unbounded"> + <xsd:element name="name" type="xsd:string"/> + <xsd:element name="typeId" type="xsd:string"/> + <xsd:element ref="xmi:Extension"/> + </xsd:choice> + <xsd:attribute ref="xmi:id" use="optional"/> + <xsd:attributeGroup ref="xmi:ObjectAttribs"/> + </xsd:complexType> + <xsd:element name="ObjrefType" type="Deployment:ObjrefType"/> + <xsd:complexType name="BoundedStringType"> + <xsd:choice minOccurs="0" maxOccurs="unbounded"> + <xsd:element name="bound" type="xsd:string"/> + <xsd:element ref="xmi:Extension"/> + </xsd:choice> + <xsd:attribute ref="xmi:id" use="optional"/> + <xsd:attributeGroup ref="xmi:ObjectAttribs"/> + </xsd:complexType> + <xsd:element name="BoundedStringType" type="Deployment:BoundedStringType"/> + <xsd:complexType name="FixedType"> + <xsd:choice minOccurs="0" maxOccurs="unbounded"> + <xsd:element name="digits" type="xsd:string"/> + <xsd:element name="scale" type="xsd:string"/> + <xsd:element ref="xmi:Extension"/> + </xsd:choice> + <xsd:attribute ref="xmi:id" use="optional"/> + <xsd:attributeGroup ref="xmi:ObjectAttribs"/> + </xsd:complexType> + <xsd:element name="FixedType" type="Deployment:FixedType"/> + <xsd:complexType name="ArrayType"> + <xsd:choice minOccurs="0" maxOccurs="unbounded"> + <xsd:element name="length" type="xsd:string"/> + <xsd:element name="elementType" type="Deployment:DataType"/> + <xsd:element ref="xmi:Extension"/> + </xsd:choice> + <xsd:attribute ref="xmi:id" use="optional"/> + <xsd:attributeGroup ref="xmi:ObjectAttribs"/> + </xsd:complexType> + <xsd:element name="ArrayType" type="Deployment:ArrayType"/> + <xsd:complexType name="SequenceType"> + <xsd:choice minOccurs="0" maxOccurs="unbounded"> + <xsd:element name="bound" type="xsd:string"/> + <xsd:element name="elementType" type="Deployment:DataType"/> + <xsd:element ref="xmi:Extension"/> + </xsd:choice> + <xsd:attribute ref="xmi:id" use="optional"/> + <xsd:attributeGroup ref="xmi:ObjectAttribs"/> + </xsd:complexType> + <xsd:element name="SequenceType" type="Deployment:SequenceType"/> + <xsd:complexType name="AliasType"> + <xsd:choice minOccurs="0" maxOccurs="unbounded"> + <xsd:element name="name" type="xsd:string"/> + <xsd:element name="typeId" type="xsd:string"/> + <xsd:element name="elementType" type="Deployment:DataType"/> + <xsd:element ref="xmi:Extension"/> + </xsd:choice> + <xsd:attribute ref="xmi:id" use="optional"/> + <xsd:attributeGroup ref="xmi:ObjectAttribs"/> + </xsd:complexType> + <xsd:element name="AliasType" type="Deployment:AliasType"/> + <xsd:complexType name="StructType"> + <xsd:choice minOccurs="0" maxOccurs="unbounded"> + <xsd:element name="name" type="xsd:string"/> + <xsd:element name="typeId" type="xsd:string"/> + <xsd:element name="member" type="Deployment:StructMemberType"/> + <xsd:element ref="xmi:Extension"/> + </xsd:choice> + <xsd:attribute ref="xmi:id" use="optional"/> + <xsd:attributeGroup ref="xmi:ObjectAttribs"/> + </xsd:complexType> + <xsd:element name="StructType" type="Deployment:StructType"/> + <xsd:complexType name="StructMemberType"> + <xsd:choice minOccurs="0" maxOccurs="unbounded"> + <xsd:element name="name" type="xsd:string"/> + <xsd:element name="type" type="Deployment:DataType"/> + <xsd:element ref="xmi:Extension"/> + </xsd:choice> + <xsd:attribute ref="xmi:id" use="optional"/> + <xsd:attributeGroup ref="xmi:ObjectAttribs"/> + </xsd:complexType> + <xsd:element name="StructMemberType" type="Deployment:StructMemberType"/> + <xsd:complexType name="ValueType"> + <xsd:choice minOccurs="0" maxOccurs="unbounded"> + <xsd:element name="name" type="xsd:string"/> + <xsd:element name="typeId" type="xsd:string"/> + <xsd:element name="modifier" type="xsd:string"/> + <xsd:element name="baseType" type="Deployment:DataType"/> + <xsd:element name="member" type="Deployment:ValueMemberType"/> + <xsd:element ref="xmi:Extension"/> + </xsd:choice> + <xsd:attribute ref="xmi:id" use="optional"/> + <xsd:attributeGroup ref="xmi:ObjectAttribs"/> + </xsd:complexType> + <xsd:element name="ValueType" type="Deployment:ValueType"/> + <xsd:complexType name="ValueMemberType"> + <xsd:choice minOccurs="0" maxOccurs="unbounded"> + <xsd:element name="name" type="xsd:string"/> + <xsd:element name="visibility" type="xsd:string"/> + <xsd:element name="type" type="Deployment:DataType"/> + <xsd:element ref="xmi:Extension"/> + </xsd:choice> + <xsd:attribute ref="xmi:id" use="optional"/> + <xsd:attributeGroup ref="xmi:ObjectAttribs"/> + </xsd:complexType> + <xsd:element name="ValueMemberType" type="Deployment:ValueMemberType"/> + <xsd:complexType name="UnionType"> + <xsd:choice minOccurs="0" maxOccurs="unbounded"> + <xsd:element name="name" type="xsd:string"/> + <xsd:element name="typeId" type="xsd:string"/> + <xsd:element name="default" type="Deployment:UnionMemberType"/> + <xsd:element name="discriminatorType" type="Deployment:DataType"/> + <xsd:element name="member" type="Deployment:UnionMemberType"/> + <xsd:element ref="xmi:Extension"/> + </xsd:choice> + <xsd:attribute ref="xmi:id" use="optional"/> + <xsd:attributeGroup ref="xmi:ObjectAttribs"/> + </xsd:complexType> + <xsd:element name="UnionType" type="Deployment:UnionType"/> + <xsd:complexType name="UnionMemberType"> + <xsd:choice minOccurs="0" maxOccurs="unbounded"> + <xsd:element name="name" type="xsd:string"/> + <xsd:element name="type" type="Deployment:DataType"/> + <xsd:element name="label" type="Deployment:DataValue"/> + <xsd:element ref="xmi:Extension"/> + </xsd:choice> + <xsd:attribute ref="xmi:id" use="optional"/> + <xsd:attributeGroup ref="xmi:ObjectAttribs"/> + </xsd:complexType> + <xsd:element name="UnionMemberType" type="Deployment:UnionMemberType"/> + <xsd:complexType name="NamedValue"> + <xsd:choice minOccurs="0" maxOccurs="unbounded"> + <xsd:element name="name" type="xsd:string"/> + <xsd:element name="value" type="Deployment:DataValue"/> + <xsd:element ref="xmi:Extension"/> + </xsd:choice> + <xsd:attribute ref="xmi:id" use="optional"/> + <xsd:attributeGroup ref="xmi:ObjectAttribs"/> + </xsd:complexType> + <xsd:element name="NamedValue" type="Deployment:NamedValue"/> + <xsd:complexType name="Bridge"> + <xsd:choice minOccurs="0" maxOccurs="unbounded"> + <xsd:element name="name" type="xsd:string"/> + <xsd:element name="label" type="xsd:string"/> + <xsd:element name="connect" type="Deployment:Interconnect"/> + <xsd:element name="resource" type="Deployment:Resource"/> + <xsd:element ref="xmi:Extension"/> + </xsd:choice> + <xsd:attribute ref="xmi:id" use="optional"/> + <xsd:attributeGroup ref="xmi:ObjectAttribs"/> + </xsd:complexType> + <xsd:element name="Bridge" type="Deployment:Bridge"/> + <xsd:complexType name="Interconnect"> + <xsd:choice minOccurs="0" maxOccurs="unbounded"> + <xsd:element name="name" type="xsd:string"/> + <xsd:element name="label" type="xsd:string"/> + <xsd:element name="connection" type="Deployment:Bridge"/> + <xsd:element name="connect" type="Deployment:Node"/> + <xsd:element name="resource" type="Deployment:Resource"/> + <xsd:element ref="xmi:Extension"/> + </xsd:choice> + <xsd:attribute ref="xmi:id" use="optional"/> + <xsd:attributeGroup ref="xmi:ObjectAttribs"/> + </xsd:complexType> + <xsd:element name="Interconnect" type="Deployment:Interconnect"/> + <xsd:complexType name="Node"> + <xsd:choice minOccurs="0" maxOccurs="unbounded"> + <xsd:element name="name" type="xsd:string"/> + <xsd:element name="label" type="xsd:string"/> + <xsd:element name="connection" type="Deployment:Interconnect"/> + <xsd:element name="sharedResource" type="Deployment:SharedResource"/> + <xsd:element name="resource" type="Deployment:Resource"/> + <xsd:element ref="xmi:Extension"/> + </xsd:choice> + <xsd:attribute ref="xmi:id" use="optional"/> + <xsd:attributeGroup ref="xmi:ObjectAttribs"/> + </xsd:complexType> + <xsd:element name="Node" type="Deployment:Node"/> + <xsd:complexType name="Resource"> + <xsd:choice minOccurs="0" maxOccurs="unbounded"> + <xsd:element name="name" type="xsd:string"/> + <xsd:element name="resourceType" type="xsd:string"/> + <xsd:element name="property" type="Deployment:SatisfierProperty"/> + <xsd:element ref="xmi:Extension"/> + </xsd:choice> + <xsd:attribute ref="xmi:id" use="optional"/> + <xsd:attributeGroup ref="xmi:ObjectAttribs"/> + </xsd:complexType> + <xsd:element name="Resource" type="Deployment:Resource"/> + <xsd:complexType name="SharedResource"> + <xsd:choice minOccurs="0" maxOccurs="unbounded"> + <xsd:element name="name" type="xsd:string"/> + <xsd:element name="resourceType" type="xsd:string"/> + <xsd:element name="node" type="Deployment:Node"/> + <xsd:element name="property" type="Deployment:SatisfierProperty"/> + <xsd:element ref="xmi:Extension"/> + </xsd:choice> + <xsd:attribute ref="xmi:id" use="optional"/> + <xsd:attributeGroup ref="xmi:ObjectAttribs"/> + </xsd:complexType> + <xsd:element name="SharedResource" type="Deployment:SharedResource"/> + <xsd:complexType name="Domain"> + <xsd:choice minOccurs="0" maxOccurs="unbounded"> + <xsd:element name="UUID" type="xsd:string"/> + <xsd:element name="label" type="xsd:string"/> + <xsd:element name="sharedResource" type="Deployment:SharedResource"/> + <xsd:element name="node" type="Deployment:Node"/> + <xsd:element name="interconnect" type="Deployment:Interconnect"/> + <xsd:element name="bridge" type="Deployment:Bridge"/> + <xsd:element name="infoProperty" type="Deployment:Property"/> + <xsd:element ref="xmi:Extension"/> + </xsd:choice> + <xsd:attribute ref="xmi:id" use="optional"/> + <xsd:attributeGroup ref="xmi:ObjectAttribs"/> + </xsd:complexType> + <xsd:element name="Domain" type="Deployment:Domain"/> + <xsd:complexType name="PlanPropertyMapping"> + <xsd:choice minOccurs="0" maxOccurs="unbounded"> + <xsd:element name="name" type="xsd:string"/> + <xsd:element name="source" type="xsd:string"/> + <xsd:element name="externalName" type="xsd:string"/> + <xsd:element name="delegatesTo" type="Deployment:PlanSubcomponentPropertyReference"/> + <xsd:element ref="xmi:Extension"/> + </xsd:choice> + <xsd:attribute ref="xmi:id" use="optional"/> + <xsd:attributeGroup ref="xmi:ObjectAttribs"/> + </xsd:complexType> + <xsd:element name="PlanPropertyMapping" type="Deployment:PlanPropertyMapping"/> + <xsd:complexType name="PlanSubcomponentPropertyReference"> + <xsd:choice minOccurs="0" maxOccurs="unbounded"> + <xsd:element name="propertyName" type="xsd:string"/> + <xsd:element name="instance" type="Deployment:InstanceDeploymentDescription"/> + <xsd:element ref="xmi:Extension"/> + </xsd:choice> + <xsd:attribute ref="xmi:id" use="optional"/> + <xsd:attributeGroup ref="xmi:ObjectAttribs"/> + </xsd:complexType> + <xsd:element name="PlanSubcomponentPropertyReference" type="Deployment:PlanSubcomponentPropertyReference"/> + <xsd:complexType name="PlanSubcomponentPortEndpoint"> + <xsd:choice minOccurs="0" maxOccurs="unbounded"> + <xsd:element name="portName" type="xsd:string"/> + <xsd:element name="provider" type="xsd:string"/> + <xsd:element name="kind" type="Deployment:CCMComponentPortKind"/> + <xsd:element name="instance" type="Deployment:InstanceDeploymentDescription"/> + <xsd:element ref="xmi:Extension"/> + </xsd:choice> + <xsd:attribute ref="xmi:id" use="optional"/> + <xsd:attributeGroup ref="xmi:ObjectAttribs"/> + </xsd:complexType> + <xsd:element name="PlanSubcomponentPortEndpoint" type="Deployment:PlanSubcomponentPortEndpoint"/> + <xsd:complexType name="PlanConnectionDescription"> + <xsd:choice minOccurs="0" maxOccurs="unbounded"> + <xsd:element name="name" type="xsd:string"/> + <xsd:element name="source" type="xsd:string"/> + <xsd:element name="deployRequirement" type="Deployment:Requirement"/> + <xsd:element name="externalEndpoint" type="Deployment:ComponentExternalPortEndpoint"/> + <xsd:element name="internalEndpoint" type="Deployment:PlanSubcomponentPortEndpoint"/> + <xsd:element name="externalReference" type="Deployment:ExternalReferenceEndpoint"/> + <xsd:element name="deployedResource" type="Deployment:ConnectionResourceDeploymentDescription"/> + <xsd:element ref="xmi:Extension"/> + </xsd:choice> + <xsd:attribute ref="xmi:id" use="optional"/> + <xsd:attributeGroup ref="xmi:ObjectAttribs"/> + </xsd:complexType> + <xsd:element name="PlanConnectionDescription" type="Deployment:PlanConnectionDescription"/> + <xsd:complexType name="InstanceDeploymentDescription"> + <xsd:choice minOccurs="0" maxOccurs="unbounded"> + <xsd:element name="name" type="xsd:string"/> + <xsd:element name="node" type="xsd:string"/> + <xsd:element name="source" type="xsd:string"/> + <xsd:element name="implementation" type="Deployment:MonolithicDeploymentDescription"/> + <xsd:element name="configProperty" type="Deployment:Property"/> + <xsd:element name="deployedResource" type="Deployment:InstanceResourceDeploymentDescription"/> + <xsd:element name="deployedSharedResource" type="Deployment:InstanceResourceDeploymentDescription"/> + <xsd:element ref="xmi:Extension"/> + </xsd:choice> + <xsd:attribute ref="xmi:id" use="optional"/> + <xsd:attributeGroup ref="xmi:ObjectAttribs"/> + </xsd:complexType> + <xsd:element name="InstanceDeploymentDescription" type="Deployment:InstanceDeploymentDescription"/> + <xsd:complexType name="MonolithicDeploymentDescription"> + <xsd:choice minOccurs="0" maxOccurs="unbounded"> + <xsd:element name="name" type="xsd:string"/> + <xsd:element name="source" type="xsd:string"/> + <xsd:element name="artifact" type="Deployment:ArtifactDeploymentDescription"/> + <xsd:element name="execParameter" type="Deployment:Property"/> + <xsd:element name="deployRequirement" type="Deployment:Requirement"/> + <xsd:element ref="xmi:Extension"/> + </xsd:choice> + <xsd:attribute ref="xmi:id" use="optional"/> + <xsd:attributeGroup ref="xmi:ObjectAttribs"/> + </xsd:complexType> + <xsd:element name="MonolithicDeploymentDescription" type="Deployment:MonolithicDeploymentDescription"/> + <xsd:complexType name="ArtifactDeploymentDescription"> + <xsd:choice minOccurs="0" maxOccurs="unbounded"> + <xsd:element name="name" type="xsd:string"/> + <xsd:element name="location" type="xsd:string"/> + <xsd:element name="node" type="xsd:string"/> + <xsd:element name="source" type="xsd:string"/> + <xsd:element name="execParameter" type="Deployment:Property"/> + <xsd:element name="deployRequirement" type="Deployment:Requirement"/> + <xsd:element name="deployedResource" type="Deployment:ResourceDeploymentDescription"/> + <xsd:element ref="xmi:Extension"/> + </xsd:choice> + <xsd:attribute ref="xmi:id" use="optional"/> + <xsd:attributeGroup ref="xmi:ObjectAttribs"/> + </xsd:complexType> + <xsd:element name="ArtifactDeploymentDescription" type="Deployment:ArtifactDeploymentDescription"/> + <xsd:complexType name="DeploymentPlan"> + <xsd:choice minOccurs="0" maxOccurs="unbounded"> + <xsd:element name="label" type="xsd:string"/> + <xsd:element name="realizes" type="Deployment:ComponentInterfaceDescription"/> + <xsd:element name="implementation" type="Deployment:MonolithicDeploymentDescription"/> + <xsd:element name="instance" type="Deployment:InstanceDeploymentDescription"/> + <xsd:element name="connection" type="Deployment:PlanConnectionDescription"/> + <xsd:element name="externalProperty" type="Deployment:PlanPropertyMapping"/> + <xsd:element name="dependsOn" type="Deployment:ImplementationDependency"/> + <xsd:element name="artifact" type="Deployment:ArtifactDeploymentDescription"/> + <xsd:element name="infoProperty" type="Deployment:Property"/> + <xsd:element ref="xmi:Extension"/> + </xsd:choice> + <xsd:attribute ref="xmi:id" use="optional"/> + <xsd:attributeGroup ref="xmi:ObjectAttribs"/> + </xsd:complexType> + <xsd:element name="DeploymentPlan" type="Deployment:DeploymentPlan"/> + <xsd:complexType name="ResourceDeploymentDescription"> + <xsd:choice minOccurs="0" maxOccurs="unbounded"> + <xsd:element name="requirementName" type="xsd:string"/> + <xsd:element name="resourceName" type="xsd:string"/> + <xsd:element name="resourceValue" type="Deployment:Any"/> + <xsd:element ref="xmi:Extension"/> + </xsd:choice> + <xsd:attribute ref="xmi:id" use="optional"/> + <xsd:attributeGroup ref="xmi:ObjectAttribs"/> + </xsd:complexType> + <xsd:element name="ResourceDeploymentDescription" type="Deployment:ResourceDeploymentDescription"/> + <xsd:complexType name="InstanceResourceDeploymentDescription"> + <xsd:choice minOccurs="0" maxOccurs="unbounded"> + <xsd:element name="resourceUsage" type="Deployment:ResourceUsageKind"/> + <xsd:element name="requirementName" type="xsd:string"/> + <xsd:element name="resourceName" type="xsd:string"/> + <xsd:element name="resourceValue" type="Deployment:Any"/> + <xsd:element ref="xmi:Extension"/> + </xsd:choice> + <xsd:attribute ref="xmi:id" use="optional"/> + <xsd:attributeGroup ref="xmi:ObjectAttribs"/> + </xsd:complexType> + <xsd:element name="InstanceResourceDeploymentDescription" type="Deployment:InstanceResourceDeploymentDescription"/> + <xsd:complexType name="ConnectionResourceDeploymentDescription"> + <xsd:choice minOccurs="0" maxOccurs="unbounded"> + <xsd:element name="targetName" type="xsd:string"/> + <xsd:element name="requirementName" type="xsd:string"/> + <xsd:element name="resourceName" type="xsd:string"/> + <xsd:element name="resourceValue" type="Deployment:Any"/> + <xsd:element ref="xmi:Extension"/> + </xsd:choice> + <xsd:attribute ref="xmi:id" use="optional"/> + <xsd:attributeGroup ref="xmi:ObjectAttribs"/> + </xsd:complexType> + <xsd:element name="ConnectionResourceDeploymentDescription" type="Deployment:ConnectionResourceDeploymentDescription"/> + <xsd:complexType name="Capability"> + <xsd:choice minOccurs="0" maxOccurs="unbounded"> + <xsd:element name="name" type="xsd:string"/> + <xsd:element name="resourceType" type="xsd:string"/> + <xsd:element name="property" type="Deployment:SatisfierProperty"/> + <xsd:element ref="xmi:Extension"/> + </xsd:choice> + <xsd:attribute ref="xmi:id" use="optional"/> + <xsd:attributeGroup ref="xmi:ObjectAttribs"/> + </xsd:complexType> + <xsd:element name="Capability" type="Deployment:Capability"/> + <xsd:complexType name="ComponentPropertyDescription"> + <xsd:choice minOccurs="0" maxOccurs="unbounded"> + <xsd:element name="name" type="xsd:string"/> + <xsd:element name="type" type="Deployment:DataType"/> + <xsd:element ref="xmi:Extension"/> + </xsd:choice> + <xsd:attribute ref="xmi:id" use="optional"/> + <xsd:attributeGroup ref="xmi:ObjectAttribs"/> + </xsd:complexType> + <xsd:element name="ComponentPropertyDescription" type="Deployment:ComponentPropertyDescription"/> + <xsd:complexType name="ComponentPortDescription"> + <xsd:choice minOccurs="0" maxOccurs="unbounded"> + <xsd:element name="name" type="xsd:string"/> + <xsd:element name="specificType" type="xsd:string"/> + <xsd:element name="supportedType" type="xsd:string"/> + <xsd:element name="provider" type="xsd:string"/> + <xsd:element name="exclusiveProvider" type="xsd:string"/> + <xsd:element name="exclusiveUser" type="xsd:string"/> + <xsd:element name="optional" type="xsd:string"/> + <xsd:element name="kind" type="Deployment:CCMComponentPortKind"/> + <xsd:element ref="xmi:Extension"/> + </xsd:choice> + <xsd:attribute ref="xmi:id" use="optional"/> + <xsd:attributeGroup ref="xmi:ObjectAttribs"/> + </xsd:complexType> + <xsd:element name="ComponentPortDescription" type="Deployment:ComponentPortDescription"/> + <xsd:complexType name="ComponentInterfaceDescription"> + <xsd:choice minOccurs="0" maxOccurs="unbounded"> + <xsd:element name="label" type="xsd:string"/> + <xsd:element name="UUID" type="xsd:string"/> + <xsd:element name="specificType" type="xsd:string"/> + <xsd:element name="supportedType" type="xsd:string"/> + <xsd:element name="idlFile" type="xsd:string"/> + <xsd:element name="configProperty" type="Deployment:Property"/> + <xsd:element name="port" type="Deployment:ComponentPortDescription"/> + <xsd:element name="property" type="Deployment:ComponentPropertyDescription"/> + <xsd:element name="infoProperty" type="Deployment:Property"/> + <xsd:element ref="xmi:Extension"/> + </xsd:choice> + <xsd:attribute ref="xmi:id" use="optional"/> + <xsd:attributeGroup ref="xmi:ObjectAttribs"/> + </xsd:complexType> + <xsd:element name="ComponentInterfaceDescription" type="Deployment:ComponentInterfaceDescription"/> + <xsd:complexType name="ImplementationArtifactDescription"> + <xsd:choice minOccurs="0" maxOccurs="unbounded"> + <xsd:element name="label" type="xsd:string"/> + <xsd:element name="UUID" type="xsd:string"/> + <xsd:element name="location" type="xsd:string"/> + <xsd:element name="execParameter" type="Deployment:Property"/> + <xsd:element name="deployRequirement" type="Deployment:Requirement"/> + <xsd:element name="dependsOn" type="Deployment:NamedImplementationArtifact"/> + <xsd:element name="infoProperty" type="Deployment:Property"/> + <xsd:element ref="xmi:Extension"/> + </xsd:choice> + <xsd:attribute ref="xmi:id" use="optional"/> + <xsd:attributeGroup ref="xmi:ObjectAttribs"/> + </xsd:complexType> + <xsd:element name="ImplementationArtifactDescription" type="Deployment:ImplementationArtifactDescription"/> + <xsd:complexType name="MonolithicImplementationDescription"> + <xsd:choice minOccurs="0" maxOccurs="unbounded"> + <xsd:element name="execParameter" type="Deployment:Property"/> + <xsd:element name="primaryArtifact" type="Deployment:NamedImplementationArtifact"/> + <xsd:element name="deployRequirement" type="Deployment:ImplementationRequirement"/> + <xsd:element ref="xmi:Extension"/> + </xsd:choice> + <xsd:attribute ref="xmi:id" use="optional"/> + <xsd:attributeGroup ref="xmi:ObjectAttribs"/> + </xsd:complexType> + <xsd:element name="MonolithicImplementationDescription" type="Deployment:MonolithicImplementationDescription"/> + <xsd:complexType name="AssemblyPropertyMapping"> + <xsd:choice minOccurs="0" maxOccurs="unbounded"> + <xsd:element name="name" type="xsd:string"/> + <xsd:element name="externalName" type="xsd:string"/> + <xsd:element name="delegatesTo" type="Deployment:SubcomponentPropertyReference"/> + <xsd:element ref="xmi:Extension"/> + </xsd:choice> + <xsd:attribute ref="xmi:id" use="optional"/> + <xsd:attributeGroup ref="xmi:ObjectAttribs"/> + </xsd:complexType> + <xsd:element name="AssemblyPropertyMapping" type="Deployment:AssemblyPropertyMapping"/> + <xsd:complexType name="SubcomponentPropertyReference"> + <xsd:choice minOccurs="0" maxOccurs="unbounded"> + <xsd:element name="propertyName" type="xsd:string"/> + <xsd:element name="instance" type="Deployment:SubcomponentInstantiationDescription"/> + <xsd:element ref="xmi:Extension"/> + </xsd:choice> + <xsd:attribute ref="xmi:id" use="optional"/> + <xsd:attributeGroup ref="xmi:ObjectAttribs"/> + </xsd:complexType> + <xsd:element name="SubcomponentPropertyReference" type="Deployment:SubcomponentPropertyReference"/> + <xsd:complexType name="SubcomponentPortEndpoint"> + <xsd:choice minOccurs="0" maxOccurs="unbounded"> + <xsd:element name="portName" type="xsd:string"/> + <xsd:element name="instance" type="Deployment:SubcomponentInstantiationDescription"/> + <xsd:element ref="xmi:Extension"/> + </xsd:choice> + <xsd:attribute ref="xmi:id" use="optional"/> + <xsd:attributeGroup ref="xmi:ObjectAttribs"/> + </xsd:complexType> + <xsd:element name="SubcomponentPortEndpoint" type="Deployment:SubcomponentPortEndpoint"/> + <xsd:complexType name="AssemblyConnectionDescription"> + <xsd:choice minOccurs="0" maxOccurs="unbounded"> + <xsd:element name="name" type="xsd:string"/> + <xsd:element name="deployRequirement" type="Deployment:Requirement"/> + <xsd:element name="externalEndpoint" type="Deployment:ComponentExternalPortEndpoint"/> + <xsd:element name="internalEndpoint" type="Deployment:SubcomponentPortEndpoint"/> + <xsd:element name="externalReference" type="Deployment:ExternalReferenceEndpoint"/> + <xsd:element ref="xmi:Extension"/> + </xsd:choice> + <xsd:attribute ref="xmi:id" use="optional"/> + <xsd:attributeGroup ref="xmi:ObjectAttribs"/> + </xsd:complexType> + <xsd:element name="AssemblyConnectionDescription" type="Deployment:AssemblyConnectionDescription"/> + <xsd:complexType name="SubcomponentInstantiationDescription"> + <xsd:choice minOccurs="0" maxOccurs="unbounded"> + <xsd:element name="name" type="xsd:string"/> + <xsd:element name="package" type="Deployment:ComponentPackageDescription"/> + <xsd:element name="configProperty" type="Deployment:Property"/> + <xsd:element name="selectRequirement" type="Deployment:Requirement"/> + <xsd:element name="reference" type="Deployment:ComponentPackageReference"/> + <xsd:element ref="xmi:Extension"/> + </xsd:choice> + <xsd:attribute ref="xmi:id" use="optional"/> + <xsd:attributeGroup ref="xmi:ObjectAttribs"/> + </xsd:complexType> + <xsd:element name="SubcomponentInstantiationDescription" type="Deployment:SubcomponentInstantiationDescription"/> + <xsd:complexType name="ComponentAssemblyDescription"> + <xsd:choice minOccurs="0" maxOccurs="unbounded"> + <xsd:element name="instance" type="Deployment:SubcomponentInstantiationDescription"/> + <xsd:element name="connection" type="Deployment:AssemblyConnectionDescription"/> + <xsd:element name="externalProperty" type="Deployment:AssemblyPropertyMapping"/> + <xsd:element ref="xmi:Extension"/> + </xsd:choice> + <xsd:attribute ref="xmi:id" use="optional"/> + <xsd:attributeGroup ref="xmi:ObjectAttribs"/> + </xsd:complexType> + <xsd:element name="ComponentAssemblyDescription" type="Deployment:ComponentAssemblyDescription"/> + <xsd:complexType name="ComponentImplementationDescription"> + <xsd:choice minOccurs="0" maxOccurs="unbounded"> + <xsd:element name="label" type="xsd:string"/> + <xsd:element name="UUID" type="xsd:string"/> + <xsd:element name="implements" type="Deployment:ComponentInterfaceDescription"/> + <xsd:element name="assemblyImpl" type="Deployment:ComponentAssemblyDescription"/> + <xsd:element name="monolithicImpl" type="Deployment:MonolithicImplementationDescription"/> + <xsd:element name="configProperty" type="Deployment:Property"/> + <xsd:element name="capability" type="Deployment:Capability"/> + <xsd:element name="dependsOn" type="Deployment:ImplementationDependency"/> + <xsd:element name="infoProperty" type="Deployment:Property"/> + <xsd:element ref="xmi:Extension"/> + </xsd:choice> + <xsd:attribute ref="xmi:id" use="optional"/> + <xsd:attributeGroup ref="xmi:ObjectAttribs"/> + </xsd:complexType> + <xsd:element name="ComponentImplementationDescription" type="Deployment:ComponentImplementationDescription"/> + <xsd:complexType name="ComponentPackageReference"> + <xsd:choice minOccurs="0" maxOccurs="unbounded"> + <xsd:element name="requiredUUID" type="xsd:string"/> + <xsd:element name="requiredName" type="xsd:string"/> + <xsd:element name="requiredType" type="xsd:string"/> + <xsd:element ref="xmi:Extension"/> + </xsd:choice> + <xsd:attribute ref="xmi:id" use="optional"/> + <xsd:attributeGroup ref="xmi:ObjectAttribs"/> + </xsd:complexType> + <xsd:element name="ComponentPackageReference" type="Deployment:ComponentPackageReference"/> + <xsd:complexType name="ComponentPackageDescription"> + <xsd:choice minOccurs="0" maxOccurs="unbounded"> + <xsd:element name="label" type="xsd:string"/> + <xsd:element name="UUID" type="xsd:string"/> + <xsd:element name="realizes" type="Deployment:ComponentInterfaceDescription"/> + <xsd:element name="configProperty" type="Deployment:Property"/> + <xsd:element name="implementation" type="Deployment:PackagedComponentImplementation"/> + <xsd:element name="infoProperty" type="Deployment:Property"/> + <xsd:element ref="xmi:Extension"/> + </xsd:choice> + <xsd:attribute ref="xmi:id" use="optional"/> + <xsd:attributeGroup ref="xmi:ObjectAttribs"/> + </xsd:complexType> + <xsd:element name="ComponentPackageDescription" type="Deployment:ComponentPackageDescription"/> + <xsd:complexType name="PackageConfiguration"> + <xsd:choice minOccurs="0" maxOccurs="unbounded"> + <xsd:element name="label" type="xsd:string"/> + <xsd:element name="UUID" type="xsd:string"/> + <xsd:element name="specializedConfig" type="Deployment:PackageConfiguration"/> + <xsd:element name="basePackage" type="Deployment:ComponentPackageDescription"/> + <xsd:element name="reference" type="Deployment:ComponentPackageReference"/> + <xsd:element name="selectRequirement" type="Deployment:Requirement"/> + <xsd:element name="configProperty" type="Deployment:Property"/> + <xsd:element ref="xmi:Extension"/> + </xsd:choice> + <xsd:attribute ref="xmi:id" use="optional"/> + <xsd:attributeGroup ref="xmi:ObjectAttribs"/> + </xsd:complexType> + <xsd:element name="PackageConfiguration" type="Deployment:PackageConfiguration"/> + <xsd:complexType name="PackagedComponentImplementation"> + <xsd:choice minOccurs="0" maxOccurs="unbounded"> + <xsd:element name="name" type="xsd:string"/> + <xsd:element name="referencedImplementation" type="Deployment:ComponentImplementationDescription"/> + <xsd:element ref="xmi:Extension"/> + </xsd:choice> + <xsd:attribute ref="xmi:id" use="optional"/> + <xsd:attributeGroup ref="xmi:ObjectAttribs"/> + </xsd:complexType> + <xsd:element name="PackagedComponentImplementation" type="Deployment:PackagedComponentImplementation"/> + <xsd:complexType name="NamedImplementationArtifact"> + <xsd:choice minOccurs="0" maxOccurs="unbounded"> + <xsd:element name="name" type="xsd:string"/> + <xsd:element name="referencedArtifact" type="Deployment:ImplementationArtifactDescription"/> + <xsd:element ref="xmi:Extension"/> + </xsd:choice> + <xsd:attribute ref="xmi:id" use="optional"/> + <xsd:attributeGroup ref="xmi:ObjectAttribs"/> + </xsd:complexType> + <xsd:element name="NamedImplementationArtifact" type="Deployment:NamedImplementationArtifact"/> + <xsd:complexType name="ImplementationRequirement"> + <xsd:choice minOccurs="0" maxOccurs="unbounded"> + <xsd:element name="resourceUsage" type="Deployment:ResourceUsageKind"/> + <xsd:element name="resourcePort" type="xsd:string"/> + <xsd:element name="componentPort" type="xsd:string"/> + <xsd:element name="resourceType" type="xsd:string"/> + <xsd:element name="name" type="xsd:string"/> + <xsd:element name="property" type="Deployment:Property"/> + <xsd:element ref="xmi:Extension"/> + </xsd:choice> + <xsd:attribute ref="xmi:id" use="optional"/> + <xsd:attributeGroup ref="xmi:ObjectAttribs"/> + </xsd:complexType> + <xsd:element name="ImplementationRequirement" type="Deployment:ImplementationRequirement"/> + <xsd:complexType name="RequirementSatisfier"> + <xsd:choice minOccurs="0" maxOccurs="unbounded"> + <xsd:element name="name" type="xsd:string"/> + <xsd:element name="resourceType" type="xsd:string"/> + <xsd:element name="property" type="Deployment:SatisfierProperty"/> + <xsd:element ref="xmi:Extension"/> + </xsd:choice> + <xsd:attribute ref="xmi:id" use="optional"/> + <xsd:attributeGroup ref="xmi:ObjectAttribs"/> + </xsd:complexType> + <xsd:element name="RequirementSatisfier" type="Deployment:RequirementSatisfier"/> + <xsd:complexType name="SatisfierProperty"> + <xsd:choice minOccurs="0" maxOccurs="unbounded"> + <xsd:element name="name" type="xsd:string"/> + <xsd:element name="kind" type="Deployment:SatisfierPropertyKind"/> + <xsd:element name="value" type="Deployment:Any"/> + <xsd:element ref="xmi:Extension"/> + </xsd:choice> + <xsd:attribute ref="xmi:id" use="optional"/> + <xsd:attributeGroup ref="xmi:ObjectAttribs"/> + </xsd:complexType> + <xsd:element name="SatisfierProperty" type="Deployment:SatisfierProperty"/> + <xsd:complexType name="Requirement"> + <xsd:choice minOccurs="0" maxOccurs="unbounded"> + <xsd:element name="resourceType" type="xsd:string"/> + <xsd:element name="name" type="xsd:string"/> + <xsd:element name="property" type="Deployment:Property"/> + <xsd:element ref="xmi:Extension"/> + </xsd:choice> + <xsd:attribute ref="xmi:id" use="optional"/> + <xsd:attributeGroup ref="xmi:ObjectAttribs"/> + </xsd:complexType> + <xsd:element name="Requirement" type="Deployment:Requirement"/> + <xsd:complexType name="Property"> + <xsd:choice minOccurs="0" maxOccurs="unbounded"> + <xsd:element name="name" type="xsd:string"/> + <xsd:element name="value" type="Deployment:Any"/> + <xsd:element ref="xmi:Extension"/> + </xsd:choice> + <xsd:attribute ref="xmi:id" use="optional"/> + <xsd:attributeGroup ref="xmi:ObjectAttribs"/> + </xsd:complexType> + <xsd:element name="Property" type="Deployment:Property"/> + <xsd:complexType name="ExternalReferenceEndpoint"> + <xsd:choice minOccurs="0" maxOccurs="unbounded"> + <xsd:element name="location" type="xsd:string"/> + <xsd:element ref="xmi:Extension"/> + </xsd:choice> + <xsd:attribute ref="xmi:id" use="optional"/> + <xsd:attributeGroup ref="xmi:ObjectAttribs"/> + </xsd:complexType> + <xsd:element name="ExternalReferenceEndpoint" type="Deployment:ExternalReferenceEndpoint"/> + <xsd:complexType name="ComponentExternalPortEndpoint"> + <xsd:choice minOccurs="0" maxOccurs="unbounded"> + <xsd:element name="portName" type="xsd:string"/> + <xsd:element ref="xmi:Extension"/> + </xsd:choice> + <xsd:attribute ref="xmi:id" use="optional"/> + <xsd:attributeGroup ref="xmi:ObjectAttribs"/> + </xsd:complexType> + <xsd:element name="ComponentExternalPortEndpoint" type="Deployment:ComponentExternalPortEndpoint"/> + <xsd:complexType name="ImplementationDependency"> + <xsd:choice minOccurs="0" maxOccurs="unbounded"> + <xsd:element name="requiredType" type="xsd:string"/> + <xsd:element ref="xmi:Extension"/> + </xsd:choice> + <xsd:attribute ref="xmi:id" use="optional"/> + <xsd:attributeGroup ref="xmi:ObjectAttribs"/> + </xsd:complexType> + <xsd:element name="ImplementationDependency" type="Deployment:ImplementationDependency"/> + <xsd:complexType name="TopLevelPackageDescription"> + <xsd:choice minOccurs="0" maxOccurs="unbounded"> + <xsd:element name="package" type="Deployment:PackageConfiguration"/> + <xsd:element ref="xmi:Extension"/> + </xsd:choice> + <xsd:attribute ref="xmi:id" use="optional"/> + <xsd:attributeGroup ref="xmi:ObjectAttribs"/> + </xsd:complexType> + <xsd:element name="TopLevelPackageDescription" type="Deployment:TopLevelPackageDescription"/> + <xsd:simpleType name="TCKind"> + <xsd:restriction base="xsd:string"> + <xsd:enumeration value="tk_null"/> + <xsd:enumeration value="tk_void"/> + <xsd:enumeration value="tk_short"/> + <xsd:enumeration value="tk_long"/> + <xsd:enumeration value="tk_ushort"/> + <xsd:enumeration value="tk_ulong"/> + <xsd:enumeration value="tk_float"/> + <xsd:enumeration value="tk_double"/> + <xsd:enumeration value="tk_boolean"/> + <xsd:enumeration value="tk_char"/> + <xsd:enumeration value="tk_octet"/> + <xsd:enumeration value="tk_any"/> + <xsd:enumeration value="tk_TypeCode"/> + <xsd:enumeration value="tk_Principal"/> + <xsd:enumeration value="tk_objref"/> + <xsd:enumeration value="tk_struct"/> + <xsd:enumeration value="tk_union"/> + <xsd:enumeration value="tk_enum"/> + <xsd:enumeration value="tk_string"/> + <xsd:enumeration value="tk_sequence"/> + <xsd:enumeration value="tk_array"/> + <xsd:enumeration value="tk_alias"/> + <xsd:enumeration value="tk_except"/> + <xsd:enumeration value="tk_longlong"/> + <xsd:enumeration value="tk_ulonglong"/> + <xsd:enumeration value="tk_longdouble"/> + <xsd:enumeration value="tk_wchar"/> + <xsd:enumeration value="tk_wstring"/> + <xsd:enumeration value="tk_wfixed"/> + <xsd:enumeration value="tk_value"/> + <xsd:enumeration value="tk_value_box"/> + <xsd:enumeration value="tk_native"/> + <xsd:enumeration value="tk_abstract_interface"/> + <xsd:enumeration value="tk_local_interface"/> + <xsd:enumeration value="tk_component"/> + <xsd:enumeration value="tk_home"/> + <xsd:enumeration value="tk_event"/> + </xsd:restriction> + </xsd:simpleType> + <xsd:simpleType name="ResourceUsageKind"> + <xsd:restriction base="xsd:string"> + <xsd:enumeration value="None"/> + <xsd:enumeration value="InstanceUsesResource"/> + <xsd:enumeration value="ResourceUsesInstance"/> + <xsd:enumeration value="PortUsesResource"/> + <xsd:enumeration value="ResourceUsesPort"/> + </xsd:restriction> + </xsd:simpleType> + <xsd:simpleType name="CCMComponentPortKind"> + <xsd:restriction base="xsd:string"> + <xsd:enumeration value="Facet"/> + <xsd:enumeration value="SimplexReceptacle"/> + <xsd:enumeration value="MultiplexReceptacle"/> + <xsd:enumeration value="EventEmitter"/> + <xsd:enumeration value="EventPublisher"/> + <xsd:enumeration value="EventConsumer"/> + </xsd:restriction> + </xsd:simpleType> + <xsd:simpleType name="SatisfierPropertyKind"> + <xsd:restriction base="xsd:string"> + <xsd:enumeration value="Quantity"/> + <xsd:enumeration value="Capacity"/> + <xsd:enumeration value="Minimum"/> + <xsd:enumeration value="Maximum"/> + <xsd:enumeration value="Attribute"/> + <xsd:enumeration value="Selection"/> + </xsd:restriction> + </xsd:simpleType> + <xsd:element name="Deployment"> + <xsd:complexType> + <xsd:choice minOccurs="0" maxOccurs="unbounded"> + <xsd:element ref="Deployment:Any"/> + <xsd:element ref="Deployment:DataType"/> + <xsd:element ref="Deployment:DataValue"/> + <xsd:element ref="Deployment:EnumType"/> + <xsd:element ref="Deployment:ObjrefType"/> + <xsd:element ref="Deployment:BoundedStringType"/> + <xsd:element ref="Deployment:FixedType"/> + <xsd:element ref="Deployment:ArrayType"/> + <xsd:element ref="Deployment:SequenceType"/> + <xsd:element ref="Deployment:AliasType"/> + <xsd:element ref="Deployment:StructType"/> + <xsd:element ref="Deployment:StructMemberType"/> + <xsd:element ref="Deployment:ValueType"/> + <xsd:element ref="Deployment:ValueMemberType"/> + <xsd:element ref="Deployment:UnionType"/> + <xsd:element ref="Deployment:UnionMemberType"/> + <xsd:element ref="Deployment:NamedValue"/> + <xsd:element ref="Deployment:Bridge"/> + <xsd:element ref="Deployment:Interconnect"/> + <xsd:element ref="Deployment:Node"/> + <xsd:element ref="Deployment:Resource"/> + <xsd:element ref="Deployment:SharedResource"/> + <xsd:element ref="Deployment:Domain"/> + <xsd:element ref="Deployment:PlanPropertyMapping"/> + <xsd:element ref="Deployment:PlanSubcomponentPropertyReference"/> + <xsd:element ref="Deployment:PlanSubcomponentPortEndpoint"/> + <xsd:element ref="Deployment:PlanConnectionDescription"/> + <xsd:element ref="Deployment:InstanceDeploymentDescription"/> + <xsd:element ref="Deployment:MonolithicDeploymentDescription"/> + <xsd:element ref="Deployment:ArtifactDeploymentDescription"/> + <xsd:element ref="Deployment:DeploymentPlan"/> + <xsd:element ref="Deployment:ResourceDeploymentDescription"/> + <xsd:element ref="Deployment:InstanceResourceDeploymentDescription"/> + <xsd:element ref="Deployment:ConnectionResourceDeploymentDescription"/> + <xsd:element ref="Deployment:Capability"/> + <xsd:element ref="Deployment:ComponentPropertyDescription"/> + <xsd:element ref="Deployment:ComponentPortDescription"/> + <xsd:element ref="Deployment:ComponentInterfaceDescription"/> + <xsd:element ref="Deployment:ImplementationArtifactDescription"/> + <xsd:element ref="Deployment:MonolithicImplementationDescription"/> + <xsd:element ref="Deployment:AssemblyPropertyMapping"/> + <xsd:element ref="Deployment:SubcomponentPropertyReference"/> + <xsd:element ref="Deployment:SubcomponentPortEndpoint"/> + <xsd:element ref="Deployment:AssemblyConnectionDescription"/> + <xsd:element ref="Deployment:SubcomponentInstantiationDescription"/> + <xsd:element ref="Deployment:ComponentAssemblyDescription"/> + <xsd:element ref="Deployment:ComponentImplementationDescription"/> + <xsd:element ref="Deployment:ComponentPackageReference"/> + <xsd:element ref="Deployment:ComponentPackageDescription"/> + <xsd:element ref="Deployment:PackageConfiguration"/> + <xsd:element ref="Deployment:PackagedComponentImplementation"/> + <xsd:element ref="Deployment:NamedImplementationArtifact"/> + <xsd:element ref="Deployment:ImplementationRequirement"/> + <xsd:element ref="Deployment:RequirementSatisfier"/> + <xsd:element ref="Deployment:SatisfierProperty"/> + <xsd:element ref="Deployment:Requirement"/> + <xsd:element ref="Deployment:Property"/> + <xsd:element ref="Deployment:ExternalReferenceEndpoint"/> + <xsd:element ref="Deployment:ComponentExternalPortEndpoint"/> + <xsd:element ref="Deployment:ImplementationDependency"/> + <xsd:element ref="Deployment:TopLevelPackageDescription"/> + <xsd:element ref="xmi:Extension"/> + </xsd:choice> + <xsd:attribute ref="xmi:id" use="optional"/> + <xsd:attributeGroup ref="xmi:ObjectAttribs"/> + </xsd:complexType> + </xsd:element> +</xsd:schema> diff --git a/modules/CIAO/docs/schema/Spec_Defined_XMI.xsd b/modules/CIAO/docs/schema/Spec_Defined_XMI.xsd new file mode 100644 index 00000000000..f4adac91934 --- /dev/null +++ b/modules/CIAO/docs/schema/Spec_Defined_XMI.xsd @@ -0,0 +1,35 @@ +<?xml version="1.0" ?> +<xsd:schema targetNamespace="http://www.omg.org/XMI" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation='http://www.w3.org/2001/XMLSchema XMLSchema.xsd'> + <xsd:attribute name="id" type="xsd:ID" /> + <xsd:attributeGroup name="IdentityAttribs"> + <xsd:attribute form="qualified" name="label" type="xsd:string" use="optional" /> + <xsd:attribute form="qualified" name="uuid" type="xsd:string" use="optional" /> + </xsd:attributeGroup> + <xsd:attributeGroup name="LinkAttribs"> + <xsd:attribute name="href" type="xsd:string" use="optional" /> + <xsd:attribute form="qualified" name="idref" type="xsd:IDREF" use="optional" /> + </xsd:attributeGroup> + <xsd:attributeGroup name="ObjectAttribs"> + <xsd:attributeGroup ref="xmi:IdentityAttribs" /> + <xsd:attributeGroup ref="xmi:LinkAttribs" /> + <xsd:attribute fixed="2.0" form="qualified" name="version" type="xsd:string" use="optional" /> + <xsd:attribute form="qualified" name="type" type="xsd:QName" use="optional" /> + </xsd:attributeGroup> + <xsd:complexType name="Extension"> + <xsd:choice maxOccurs="unbounded" minOccurs="0"> + <xsd:any processContents="lax" /> + </xsd:choice> + <xsd:attribute ref="xmi:id" /> + <xsd:attributeGroup ref="xmi:ObjectAttribs" /> + <xsd:attribute name="extender" type="xsd:string" use="optional" /> + <xsd:attribute name="extenderID" type="xsd:string" use="optional" /> + </xsd:complexType> + <xsd:element name="Extension" type="xmi:Extension" /> + <xsd:complexType name="Any"> + <xsd:choice maxOccurs="unbounded" minOccurs="0"> + <xsd:any processContents="skip" /> + </xsd:choice> + <xsd:anyAttribute processContents="skip" /> + </xsd:complexType> +</xsd:schema> diff --git a/modules/CIAO/docs/schema/Task_Map.xsd b/modules/CIAO/docs/schema/Task_Map.xsd new file mode 100644 index 00000000000..2138f082d48 --- /dev/null +++ b/modules/CIAO/docs/schema/Task_Map.xsd @@ -0,0 +1,90 @@ +<?xml version="1.0" encoding="utf-8" ?> +<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.vanderbilt.edu/SA-POP Task_Map.xsd" xmlns:SA-POP="http://www.vanderbilt.edu/SA-POP" + targetNamespace="http://www.vanderbilt.edu/SA-POP" elementFormDefault="qualified"> + <!-- Simple types. --> + <xs:simpleType name="TaskID"> + <xs:restriction base="xs:int"> + <xs:minInclusive value="1" /> + </xs:restriction> + </xs:simpleType> + <xs:simpleType name="TaskImplID"> + <xs:restriction base="xs:string" /> + </xs:simpleType> + <xs:simpleType name="ResourceID"> + <xs:restriction base="xs:string" /> + </xs:simpleType> + <xs:simpleType name="ResourceKind"> + <xs:restriction base="xs:string"> + <xs:enumeration value="UNARY" /> + <xs:enumeration value="DISCRETE" /> + <xs:enumeration value="RESERVOIR" /> + </xs:restriction> + </xs:simpleType> + <xs:simpleType name="ResourceValue"> + <xs:restriction base="xs:int"> + <xs:minInclusive value="0" /> + </xs:restriction> + </xs:simpleType> + <xs:simpleType name="ImplParamID"> + <xs:restriction base="xs:string" /> + </xs:simpleType> + <xs:simpleType name="ImplParamKind"> + <xs:restriction base="xs:string" /> + </xs:simpleType> + <xs:simpleType name="ImplParamValue"> + <xs:restriction base="xs:string" /> + </xs:simpleType> + <xs:simpleType name="TimeValue"> + <xs:restriction base="xs:int"> + <!-- -1 indicates unknown/unconstrained time --> + <xs:minInclusive value="-1" /> + </xs:restriction> + </xs:simpleType> + <!-- Complex types corresponding to IDL structures. + (resources, parameters, implementations, associations, and task map) --> + <xs:complexType name="Resource"> + <xs:sequence> + <xs:element name="resourceID" type="SA-POP:ResourceID" /> + <xs:element name="kind" type="SA-POP:ResourceKind" default="DISCRETE" /> + <xs:element name="capacity" type="SA-POP:ResourceValue" default="100" /> + </xs:sequence> + </xs:complexType> + <xs:complexType name="ImplParam"> + <xs:sequence> + <xs:element name="paramID" type="SA-POP:ImplParamID" /> + <xs:element name="kind" type="SA-POP:ImplParamKind" /> + <xs:element name="value" type="SA-POP:ImplParamValue" /> + </xs:sequence> + </xs:complexType> + <xs:complexType name="TaskImpl"> + <xs:sequence> + <xs:element name="implID" type="SA-POP:TaskImplID" /> + <xs:element name="param" type="SA-POP:ImplParam" maxOccurs="unbounded" /> + </xs:sequence> + </xs:complexType> + <xs:complexType name="TaskToImpl"> + <xs:sequence> + <xs:element name="taskID" type="SA-POP:TaskID" /> + <xs:element name="implID" type="SA-POP:TaskImplID" /> + <xs:element name="duration" type="SA-POP:TimeValue" default="-1" /> + </xs:sequence> + </xs:complexType> + <xs:complexType name="ImplToResource"> + <xs:sequence> + <xs:element name="implID" type="SA-POP:TaskImplID" /> + <xs:element name="resourceID" type="SA-POP:ResourceID" /> + <xs:element name="utilization" type="SA-POP:ResourceValue" /> + </xs:sequence> + </xs:complexType> + <xs:complexType name="TaskMap"> + <xs:sequence> + <xs:element name="taskImpl" type="SA-POP:TaskImpl" maxOccurs="unbounded" /> + <xs:element name="resource" type="SA-POP:Resource" maxOccurs="unbounded" /> + <xs:element name="taskToImpl" type="SA-POP:TaskToImpl" maxOccurs="unbounded" /> + <xs:element name="implToResource" type="SA-POP:ImplToResource" maxOccurs="unbounded" /> + </xs:sequence> + </xs:complexType> + <!-- Top-level task map element. --> + <xs:element name="taskMap" type="SA-POP:TaskMap"></xs:element> +</xs:schema>
\ No newline at end of file diff --git a/modules/CIAO/docs/schema/ccd.xsd b/modules/CIAO/docs/schema/ccd.xsd new file mode 100644 index 00000000000..fcdac711b5a --- /dev/null +++ b/modules/CIAO/docs/schema/ccd.xsd @@ -0,0 +1,27 @@ +<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.w3.org/2001/XMLSchema XMLSchema.xsd" + xmlns:Deployment="http://www.omg.org/Deployment" + targetNamespace="http://www.omg.org/Deployment"> + + <xsd:include schemaLocation="Basic_Deployment_Data.xsd" /> + + <xsd:complexType name="ComponentInterfaceDescription"> + <xsd:choice minOccurs="0" maxOccurs="1"> + <xsd:sequence> + <xsd:element name="label" type="xsd:string" minOccurs="0"/> + <xsd:element name="UUID" type="xsd:string" minOccurs="0"/> + <!-- @@ MAJO : HACK - SpecificType and SupportedType should be required! --> + <xsd:element name="specificType" type="xsd:string" minOccurs="0" /> + <xsd:element name="supportedType" type="xsd:string" minOccurs="0" maxOccurs="unbounded"/> + <xsd:element name="idlFile" type="xsd:string" minOccurs="0" maxOccurs="unbounded"/> + <xsd:element name="configProperty" type="Deployment:Property" minOccurs="0" maxOccurs="unbounded"/> + <xsd:element name="port" type="Deployment:ComponentPortDescription" minOccurs="0" maxOccurs="unbounded"/> + <xsd:element name="property" type="Deployment:ComponentPropertyDescription" minOccurs="0" maxOccurs="unbounded"/> + <xsd:element name="infoProperty" type="Deployment:Property" minOccurs="0" maxOccurs="unbounded"/> + </xsd:sequence> + <xsd:element name="contentLocation" type="xsd:string"/> + </xsd:choice> + <xsd:attribute name="href" type="xsd:string" /> + </xsd:complexType> +</xsd:schema> diff --git a/modules/CIAO/docs/schema/cdd.xsd b/modules/CIAO/docs/schema/cdd.xsd new file mode 100644 index 00000000000..3fe64120bfd --- /dev/null +++ b/modules/CIAO/docs/schema/cdd.xsd @@ -0,0 +1,60 @@ +<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.w3.org/2001/XMLSchema XMLSchema.xsd" + xmlns:Deployment="http://www.omg.org/Deployment" + targetNamespace="http://www.omg.org/Deployment"> + +<xsd:include schemaLocation="Basic_Deployment_Data.xsd" /> + + <xsd:complexType name="Domain"> + <xsd:sequence> + <xsd:element name="UUID" type="xsd:string" minOccurs="0" /> + <xsd:element name="label" type="xsd:string" minOccurs="0" /> + <xsd:element name="node" type="Deployment:Node" maxOccurs="unbounded"/> + <xsd:element name="interconnect" type="Deployment:Interconnect" minOccurs="0" maxOccurs="unbounded"/> + <xsd:element name="bridge" type="Deployment:Bridge" minOccurs="0" maxOccurs="unbounded"/> + <xsd:element name="sharedResource" type="Deployment:SharedResource" minOccurs="0" maxOccurs="unbounded"/> + <xsd:element name="infoProperty" type="Deployment:Property" minOccurs="0" maxOccurs="unbounded"/> + </xsd:sequence> + </xsd:complexType> + + <xsd:complexType name="Bridge"> + <xsd:sequence> + <xsd:element name="name" type="xsd:string"/> + <xsd:element name="label" type="xsd:string" minOccurs="0" /> + <xsd:element name="connect" type="Deployment:Interconnect" maxOccurs="unbounded" /> + <xsd:element name="resource" type="Deployment:Resource" minOccurs="0" maxOccurs="unbounded" /> + </xsd:sequence> + </xsd:complexType> + + <xsd:complexType name="Interconnect"> + <xsd:sequence> + <xsd:element name="name" type="xsd:string"/> + <xsd:element name="label" type="xsd:string" minOccurs="0" /> + <xsd:element name="connection" type="Deployment:Bridge" minOccurs="0" maxOccurs="unbounded" /> + <xsd:element name="connect" type="Deployment:Node" maxOccurs="unbounded" /> + <xsd:element name="resource" type="Deployment:Resource" minOccurs="0" maxOccurs="unbounded" /> + </xsd:sequence> + </xsd:complexType> + + <xsd:complexType name="Node"> + <xsd:sequence> + <xsd:element name="name" type="xsd:string"/> + <xsd:element name="label" type="xsd:string" minOccurs="0" /> + <xsd:element name="connection" type="Deployment:Interconnect" minOccurs="0" maxOccurs="unbounded" /> + <xsd:element name="sharedResource" type="Deployment:SharedResource" minOccurs="0" maxOccurs="unbounded" /> + <xsd:element name="resource" type="Deployment:Resource" minOccurs="0" maxOccurs="unbounded" /> + </xsd:sequence> + </xsd:complexType> + + + <xsd:complexType name="SharedResource"> + <xsd:sequence> + <xsd:element name="name" type="xsd:string"/> + <xsd:element name="resourceType" type="xsd:string"/> + <xsd:element name="node" type="Deployment:Node"/> + <xsd:element name="property" type="Deployment:SatisfierProperty"/> + </xsd:sequence> + </xsd:complexType> + +</xsd:schema>
\ No newline at end of file diff --git a/modules/CIAO/docs/schema/cdp.xsd b/modules/CIAO/docs/schema/cdp.xsd new file mode 100644 index 00000000000..4fa69acd3fe --- /dev/null +++ b/modules/CIAO/docs/schema/cdp.xsd @@ -0,0 +1,27 @@ +<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.w3.org/2001/XMLSchema XMLSchema.xsd" + xmlns:Deployment="http://www.omg.org/Deployment" + targetNamespace="http://www.omg.org/Deployment"> + +<xsd:include schemaLocation="ccd.xsd" /> + + <xsd:complexType name="DeploymentPlan"> + <xsd:sequence> + <xsd:element name="label" type="xsd:string" minOccurs="0"/> + <xsd:element name="UUID" type="xsd:string" minOccurs="0"/> + <xsd:element name="realizes" type="Deployment:ComponentInterfaceDescription" minOccurs="0" /> + <xsd:element name="implementation" type="Deployment:MonolithicDeploymentDescription" maxOccurs="unbounded" /> + <xsd:element name="instance" type="Deployment:InstanceDeploymentDescription" minOccurs="0" maxOccurs="unbounded"/> + <xsd:element name="connection" type="Deployment:PlanConnectionDescription" minOccurs="0" maxOccurs="unbounded"/> + <!-- potentially recursive, not used + <xsd:element name="externalProperty" type="Deployment:PlanPropertyMapping"/> + --> + <xsd:element name="dependsOn" type="Deployment:ImplementationDependency" minOccurs="0" maxOccurs="unbounded"/> + <xsd:element name="artifact" type="Deployment:ArtifactDeploymentDescription" minOccurs="0" maxOccurs="unbounded"/> + <xsd:element name="infoProperty" type="Deployment:Property" minOccurs="0" maxOccurs="unbounded"/> + </xsd:sequence> +</xsd:complexType> + + +</xsd:schema> diff --git a/modules/CIAO/docs/schema/ciaopolicy.xsd b/modules/CIAO/docs/schema/ciaopolicy.xsd new file mode 100644 index 00000000000..93a7415c4b4 --- /dev/null +++ b/modules/CIAO/docs/schema/ciaopolicy.xsd @@ -0,0 +1,607 @@ +<?xml version="1.0" encoding="utf-8"?> +<xs:schema targetNamespace="www.dre.vanderbilt.edu" + xmlns:ciao="www.dre.vanderbilt.edu" + xmlns:xs="http://www.w3.org/2001/XMLSchema" + elementFormDefault="qualified" + attributeFormDefault="unqualified"> + + <xs:element name="orbPolicies"> + <xs:annotation> + <xs:documentation> + The root element of the schema. Contains zero or more policies. + </xs:documentation> + </xs:annotation> + <xs:complexType> + <xs:sequence> + <xs:element name="policy" type="ciao:policyType" maxOccurs="unbounded" /> + </xs:sequence> + </xs:complexType> + </xs:element> + + <xs:complexType name="policyType"> + <xs:sequence> + <xs:choice> + <xs:element name="rebindPolicy" type="ciao:rebindPolicyType" /> + <xs:element name="syncScopePolicy" type="ciao:syncScopePolicyType" /> + <xs:element name="requestPriorityPolicy" type="ciao:requestPriorityPolicyType" /> + <xs:element name="replyPriorityPolicy" type="ciao:replyPriorityPolicyType" /> + <xs:element name="requestStartTimePolicy" type="ciao:requestStartTimePolicyType" /> + <xs:element name="requestEndTimePolicy" type="ciao:requestEndTimePolicyType" /> + <xs:element name="replyStartTimePolicy" type="ciao:replyStartTimePolicyType" /> + <xs:element name="replyEndTimePolicy" type="ciao:replyEndTimePolicyType" /> + <xs:element name="relativeRequestTimeoutPolicy" type="ciao:relativeRequestTimeoutPolicyType" /> + <xs:element name="relativeRoundtripPolicy" type="ciao:relativeRoundtripPolicyType" /> + <xs:element name="routingPolicy" type="ciao:routingPolicyType" /> + <xs:element name="maxHopsPolicy" type="ciao:maxHopsPolicyType" /> + <xs:element name="queueOrderPolicy" type="ciao:queueOrderPolicyType" /> + <xs:element name="priorityModelPolicy" type="ciao:priorityModelPolicyType" /> + <xs:element name="threadPoolPolicy" type="ciao:threadPoolPolicyType" /> + <xs:element name="serverProtocolPolicy" type="ciao:serverProtocolPolicyType" /> + <xs:element name="clientProtocolPolicy" type="ciao:clientProtocolPolicyType" /> + <xs:element name="privateConnectionPolicy" type="ciao:privateConnectionPolicyType" /> + <xs:element name="priorityBandedPolicy" type="ciao:priorityBandedPolicyType" /> + </xs:choice> + </xs:sequence> + </xs:complexType> + + <xs:complexType name="policyBase" abstract="true"> + <xs:annotation> + <xs:documentation> + This is the base policy type. All policies + should be an extension of this type. + </xs:documentation> + </xs:annotation> + <xs:sequence> + <xs:element name="override" type="ciao:overrideType" /> + <xs:element name="scope" type="ciao:scopeType" /> + </xs:sequence> + </xs:complexType> + + <xs:simpleType name="scopeType"> + <xs:restriction base="xs:string"> + <xs:enumeration value="ORB" /> + <xs:enumeration value="THREAD" /> + <xs:enumeration value="OBJECT" /> + <xs:enumeration value="POA" /> + </xs:restriction> + </xs:simpleType> + + <xs:simpleType name="policyIDType"> + <xs:annotation> + <xs:documentation> + This type represents the policy ID. + Need to add a restriction. + </xs:documentation> + </xs:annotation> + <xs:restriction base="xs:integer"> + </xs:restriction> + </xs:simpleType> + + <xs:simpleType name="overrideType"> + <xs:restriction base="xs:string"> + <xs:enumeration value="SET_OVERRIDE" /> + <xs:enumeration value="ADD_OVERRIDE" /> + </xs:restriction> + </xs:simpleType> + + + + <!-- The following are extensions of policyBase, one each for each policy + we may want to group these into seperate schema documents, for our + own sanity. + --> + <!-- Policies 23 - 35 are defined in Messaging_No_Impl.pidl, + with the exception of policy 32, defined in Messaging_RT_Policy.pidl + and policy 24, defined in Messaging_SyncScope_Policy.pidl --> + + <xs:complexType name="rebindPolicyType"> + <xs:annotation> + <xs:documentation> + Represents the RebindPolicy type, ID 23 + </xs:documentation> + </xs:annotation> + <xs:complexContent> + <xs:extension base="ciao:policyBase"> + <xs:sequence> + <xs:element name="rebindMode" type="ciao:rebindModeType" /> + </xs:sequence> + <xs:attribute name="typeID" type="xs:integer" use="required" fixed="23" /> + </xs:extension> + </xs:complexContent> + </xs:complexType> + + <xs:simpleType name="rebindModeType"> + <xs:annotation> + <xs:documentation> + Note: This is not strictly represented in the pidl as an enum, + but that appears to be the intent of the way it is declared. + </xs:documentation> + </xs:annotation> + <xs:restriction base="xs:string"> + <xs:enumeration value="TRANSPARENT" /> + <xs:enumeration value="NO_REBIND" /> + <xs:enumeration value="NO_RECONNECT" /> + </xs:restriction> + </xs:simpleType> + + <xs:complexType name="syncScopePolicyType"> + <xs:annotation> + <xs:documentation> + Represents a SyncScopePolicyType, ID 24 + </xs:documentation> + </xs:annotation> + <xs:complexContent> + <xs:extension base="ciao:policyBase"> + <xs:sequence> + <xs:element name="synchronization" type="ciao:syncScopeType" /> + </xs:sequence> + <xs:attribute name="typeID" type="xs:integer" use="required" fixed="25" /> + </xs:extension> + </xs:complexContent> + </xs:complexType> + + <xs:simpleType name="syncScopeType"> + <xs:annotation> + <xs:documentation> + Note: This was not declared an enum in Messaging_SyncScope_Policy.pidl, + but from the declaration, that appears to be the intent. + </xs:documentation> + </xs:annotation> + <xs:restriction base="xs:string"> + <xs:enumeration value="SYNC_NONE" /> + <xs:enumeration value="SYNC_WITH_TRANSPORT" /> + <xs:enumeration value="SYNC_WITH_SERVER" /> + <xs:enumeration value="SYNC_WITH_TARGET" /> + </xs:restriction> + </xs:simpleType> + + <xs:complexType name="requestPriorityPolicyType"> + <xs:annotation> + <xs:documentation> + Represents a RequestPriorityPolicy, ID 25 + </xs:documentation> + </xs:annotation> + <xs:complexContent> + <xs:extension base="ciao:policyBase"> + <xs:sequence> + <xs:element name="priorityRange" type="ciao:priorityRangeType" /> + </xs:sequence> + <xs:attribute name="typeID" type="xs:integer" use="required" fixed="25" /> + </xs:extension> + </xs:complexContent> + </xs:complexType> + + <xs:complexType name="replyPriorityPolicyType"> + <xs:annotation> + <xs:documentation> + Represents a ReplyPriorityPolicy, ID 26 + </xs:documentation> + </xs:annotation> + <xs:complexContent> + <xs:extension base="ciao:policyBase"> + <xs:sequence> + <xs:element name="priorityRange" type="ciao:priorityRangeType" /> + </xs:sequence> + <xs:attribute name="typeID" type="xs:integer" use="required" fixed="26" /> + </xs:extension> + </xs:complexContent> + </xs:complexType> + + <xs:complexType name="priorityRangeType"> + <xs:annotation> + <xs:documentation> + Represents a PriorityRange struct defined in Messaging_No_Impl.pidl + </xs:documentation> + </xs:annotation> + <xs:sequence> + <xs:element name="min" type="xs:integer" /> + <xs:element name="max" type="xs:integer" /> + </xs:sequence> + </xs:complexType> + + + <xs:complexType name="requestStartTimePolicyType"> + <xs:annotation> + <xs:documentation> + Represents a RequestStartTimePolicy, ID 27 + </xs:documentation> + </xs:annotation> + <xs:complexContent> + <xs:extension base="ciao:policyBase"> + <xs:sequence> + <xs:element name="startTime" type="ciao:utcTime" /> + </xs:sequence> + <xs:attribute name="typeID" type="xs:integer" use="required" fixed="27" /> + </xs:extension> + </xs:complexContent> + </xs:complexType> + + + <xs:complexType name="requestEndTimePolicyType"> + <xs:annotation> + <xs:documentation> + Represents a RequestEndTimePolicy, ID 28 + </xs:documentation> + </xs:annotation> + <xs:complexContent> + <xs:extension base="ciao:policyBase"> + <xs:sequence> + <xs:element name="endTime" type="ciao:utcTime" /> + </xs:sequence> + <xs:attribute name="typeID" type="xs:integer" use="required" fixed="28" /> + </xs:extension> + </xs:complexContent> + </xs:complexType> + + + <xs:complexType name="replyStartTimePolicyType"> + <xs:annotation> + <xs:documentation> + Represents a ReplyStartTimePolicy, ID 29 + </xs:documentation> + </xs:annotation> + <xs:complexContent> + <xs:extension base="ciao:policyBase"> + <xs:sequence> + <xs:element name="startTime" type="ciao:utcTime" /> + </xs:sequence> + <xs:attribute name="typeID" type="xs:integer" use="required" fixed="29" /> + </xs:extension> + </xs:complexContent> + </xs:complexType> + + + <xs:complexType name="replyEndTimePolicyType"> + <xs:annotation> + <xs:documentation> + Represents a ReplyEndTimePolicy, ID 30 + </xs:documentation> + </xs:annotation> + <xs:complexContent> + <xs:extension base="ciao:policyBase"> + <xs:sequence> + <xs:element name="endTime" type="ciao:utcTime" /> + </xs:sequence> + <xs:attribute name="typeID" type="xs:integer" use="required" fixed="30" /> + </xs:extension> + </xs:complexContent> + </xs:complexType> + + <xs:complexType name="utcTime"> + <xs:annotation> + <xs:documentation> + Represents a TimeBase::UtcT struct, defined in tao/TimeBase.pidl + </xs:documentation> + </xs:annotation> + <xs:sequence> + <xs:element name="time" type="xs:integer" /> + <xs:element name="inaccLo" type="xs:integer" /> + <xs:element name="inaccHi" type="xs:integer" /> + <xs:element name="tdf" type="xs:integer" /> + </xs:sequence> + </xs:complexType> + + <xs:complexType name="relativeRequestTimeoutPolicyType"> + <xs:annotation> + <xs:documentation> + Represents a RelativeRequestTimeoutPolicy, ID 31. + </xs:documentation> + </xs:annotation> + <xs:complexContent> + <xs:extension base="ciao:policyBase"> + <xs:sequence> + <xs:element name="relativeExpiry" type="xs:integer" /> + </xs:sequence> + <xs:attribute name="typeID" type="xs:integer" use="required" fixed="31" /> + </xs:extension> + </xs:complexContent> + </xs:complexType> + + <xs:complexType name="relativeRoundtripPolicyType"> + <xs:annotation> + <xs:documentation> + Represents a RelativeRoundtripPolicy, ID 32 + </xs:documentation> + </xs:annotation> + <xs:complexContent> + <xs:extension base="ciao:policyBase"> + <xs:sequence> + <xs:element name="relativeExpiry" type="xs:integer" /> + </xs:sequence> + <xs:attribute name="typeID" type="xs:integer" use="required" fixed="32" /> + </xs:extension> + </xs:complexContent> + </xs:complexType> + + <xs:complexType name="routingPolicyType"> + <xs:annotation> + <xs:documentation> + Represents a RoutingPolicy, ID 33 + </xs:documentation> + </xs:annotation> + <xs:complexContent> + <xs:extension base="ciao:policyBase"> + <xs:sequence> + <xs:element name="routingTypeRangeMin" type="ciao:routingType" /> + <xs:element name="routingTypeRangeMax" type="ciao:routingType" /> + </xs:sequence> + <xs:attribute name="typeID" type="xs:integer" use="required" fixed="33" /> + </xs:extension> + </xs:complexContent> + </xs:complexType> + + <xs:simpleType name="routingType"> + <xs:annotation> + <xs:documentation> + Note: This is not explicitly set up as an enum in Messaging_No_Impl.pidl, + but that appears to be the intent from the declaration. + </xs:documentation> + </xs:annotation> + <xs:restriction base="xs:string"> + <xs:enumeration value="ROUTE_NONE" /> + <xs:enumeration value="ROUTE_FORWARD" /> + <xs:enumeration value="ROUTE_STORE_AND_FORWARD" /> + </xs:restriction> + </xs:simpleType> + + <xs:complexType name="maxHopsPolicyType"> + <xs:annotation> + <xs:documentation> + Represents a MaxHopsPolicy, ID 34 + </xs:documentation> + </xs:annotation> + <xs:complexContent> + <xs:extension base="ciao:policyBase"> + <xs:sequence> + <xs:element name="maxHops" type="xs:integer" /> + </xs:sequence> + <xs:attribute name="typeID" type="xs:integer" use="required" fixed="34" /> + </xs:extension> + </xs:complexContent> + </xs:complexType> + + <xs:complexType name="queueOrderPolicyType"> + <xs:annotation> + <xs:documentation> + Represents a QueueOrderPolicy, ID 35 + </xs:documentation> + </xs:annotation> + <xs:complexContent> + <xs:extension base="ciao:policyBase"> + <xs:sequence> + <xs:element name="allowedOrders" type="ciao:ordersType" /> + </xs:sequence> + <xs:attribute name="typeID" type="xs:integer" use="required" fixed="35" /> + </xs:extension> + </xs:complexContent> + </xs:complexType> + + <xs:simpleType name="ordersType"> + <xs:annotation> + <xs:documentation> + Note: This is not explicitly declared to be an enum in Messaging_No_Impl.pidl, + but that appears to be the intent from the declaration. + </xs:documentation> + </xs:annotation> + <xs:restriction base="xs:string"> + <xs:enumeration value="ORDER_ANY" /> + <xs:enumeration value="ORDER_TEMPORAL" /> + <xs:enumeration value="ORDER_PRIORITY" /> + <xs:enumeration value="ORDER_DEADLINE" /> + </xs:restriction> + </xs:simpleType> + + <!-- Policies 40 - 45 are defined in RTCORBA.pidl --> + <!-- priorityModelPolicy --> + <xs:complexType name="priorityModelPolicyType"> + <xs:annotation> + <xs:documentation> + Represents the Priority Model Policy, ID 40 + </xs:documentation> + </xs:annotation> + + <xs:complexContent> + <xs:extension base="ciao:policyBase"> + <xs:sequence> + <xs:element name="priorityModel" type="ciao:priorityModelType" /> + <xs:element name="serverPriority" type="xs:integer" /> + </xs:sequence> + <xs:attribute name="typeID" type="xs:integer" use="required" fixed="40" /> + </xs:extension> + </xs:complexContent> + </xs:complexType> + + <xs:simpleType name="priorityModelType"> + <xs:restriction base="xs:string"> + <xs:enumeration value="CLIENT_PROPAGATED" /> + <xs:enumeration value="SERVER_DECLARED" /> + </xs:restriction> + </xs:simpleType> + + <!-- threadPoolPolicy --> + + <xs:complexType name="threadPoolPolicyType"> + <xs:annotation> + <xs:documentation> + Represents the ThreadPool policy, ID 41 + </xs:documentation> + </xs:annotation> + + <xs:complexContent> + <xs:extension base="ciao:policyBase"> + <xs:sequence> + <xs:element name="threadPoolID" type="xs:integer" /> + </xs:sequence> + <xs:attribute name="typeID" type="xs:integer" use="required" fixed="41" /> + </xs:extension> + </xs:complexContent> + </xs:complexType> + + + <!-- serverProtocolPolicy --> + + <xs:complexType name="serverProtocolPolicyType"> + <xs:annotation> + <xs:documentation> + Represents the Server Protocol policy, ID 42 + </xs:documentation> + </xs:annotation> + + <xs:complexContent> + <xs:extension base="ciao:policyBase"> + <xs:sequence> + <xs:element name="protocol" type="ciao:protocolType" + minOccurs="0" maxOccurs="unbounded" /> + </xs:sequence> + <xs:attribute name="typeID" type="xs:integer" use="required" fixed="42" /> + </xs:extension> + </xs:complexContent> + </xs:complexType> + + + <!-- clientProtocolPolicy --> + <xs:complexType name="clientProtocolPolicyType"> + <xs:annotation> + <xs:documentation> + Represents the Client Protocol policy, ID 43 + </xs:documentation> + </xs:annotation> + + <xs:complexContent> + <xs:extension base="ciao:policyBase"> + <xs:sequence> + <xs:element name="protocol" type="ciao:protocolType" + minOccurs="0" maxOccurs="unbounded" /> + </xs:sequence> + <xs:attribute name="typeID" type="xs:integer" use="required" fixed="43" /> + </xs:extension> + </xs:complexContent> + </xs:complexType> + + + <!-- Protocol definitions for client and server Protocol properties types. --> + <xs:complexType name="protocolType"> + <xs:sequence> + <xs:element name="protocolType" type="xs:integer" /> + <xs:element name="orbProtocolProperties" type="ciao:protocolPropertyType" /> + <xs:element name="transportProtocolProperties" type="ciao:protocolPropertyType" /> + </xs:sequence> + </xs:complexType> + + <xs:complexType name="protocolPropertyType"> + <xs:sequence> + <xs:choice> + <xs:element name="tcpProtocolProperties" type="ciao:tcpProtocolPropertiesType" /> + <xs:element name="giopProtocolProperties" type="ciao:giopProtocolPropertiesType" /> + <xs:element name="unixDomainProtocolProperties" type="ciao:unixDomainProtocolPropertiesType" /> + <xs:element name="sharedMemoryProtocolProperties" type="ciao:sharedMemoryProtocolPropertiesType" /> + </xs:choice> + </xs:sequence> + </xs:complexType> + + <xs:complexType name="protocolPropertyBase" abstract="true"> + <xs:annotation> + <xs:documentation> + Base type for all protocol properties. + </xs:documentation> + </xs:annotation> + <xs:attribute name="type" type="xs:string" use="required" /> + </xs:complexType> + + <xs:complexType name="tcpProtocolPropertiesType"> + <xs:complexContent> + <xs:extension base="ciao:protocolPropertyBase"> + <xs:sequence> + <xs:element name="sendBufferSize" type="xs:integer" /> + <xs:element name="recvBufferSize" type="xs:integer" /> + <xs:element name="keepAlive" type="xs:boolean" /> + <xs:element name="dontRoute" type="xs:boolean" /> + <xs:element name="noDelay" type="xs:boolean" /> + <xs:element name="enableNetworkPriority" type="xs:boolean" /> + </xs:sequence> + </xs:extension> + </xs:complexContent> + </xs:complexType> + + <xs:complexType name="giopProtocolPropertiesType"> + <xs:complexContent> + <xs:extension base="ciao:protocolPropertyBase" /> + </xs:complexContent> + </xs:complexType> + + <xs:complexType name="unixDomainProtocolPropertiesType"> + <xs:complexContent> + <xs:extension base="ciao:protocolPropertyBase"> + <xs:sequence> + <xs:element name="sendBufferSize" type="xs:integer" /> + <xs:element name="recvBufferSize" type="xs:integer" /> + </xs:sequence> + </xs:extension> + </xs:complexContent> + </xs:complexType> + + <xs:complexType name="sharedMemoryProtocolPropertiesType"> + <xs:complexContent> + <xs:extension base="ciao:protocolPropertyBase"> + <xs:sequence> + <xs:element name="preallocateBufferSize" type="xs:integer" /> + <xs:element name="mmapFilename" type="xs:string" /> + <xs:element name="mmapLockname" type="xs:string" /> + </xs:sequence> + </xs:extension> + </xs:complexContent> + </xs:complexType> + + <!-- TODO: Provide other protocolProperties types --> + + <!-- privateConnectionPolicy --> + <xs:complexType name="privateConnectionPolicyType"> + <xs:annotation> + <xs:documentation> + privateConnectionPolicy extension of policyBase, ID 44 + </xs:documentation> + </xs:annotation> + <xs:complexContent> + <xs:extension base="ciao:policyBase"> + <!-- empty --> + <xs:attribute name="typeID" type="xs:integer" use="required" fixed="44" /> + </xs:extension> + </xs:complexContent> + </xs:complexType> + + + <!-- priorityBandedPolicy --> + <xs:complexType name="priorityBandedPolicyType"> + <xs:annotation> + <xs:documentation> + priorityBandedPolicy extension of policyBase, ID 45 + </xs:documentation> + </xs:annotation> + + <xs:complexContent> + <xs:extension base="ciao:policyBase"> + <xs:sequence> + <xs:element name="priorityBand" type="ciao:priorityBandType" + minOccurs="0" maxOccurs="unbounded" /> + </xs:sequence> + <xs:attribute name="typeID" type="xs:integer" use="required" fixed="45" /> + </xs:extension> + </xs:complexContent> + </xs:complexType> + + + <xs:complexType name="priorityBandType"> + <xs:annotation> + <xs:documentation> + Represents the PriorityBand struct for the priorityBandedPolicy element. + </xs:documentation> + </xs:annotation> + <xs:sequence> + <xs:element name="low" type="xs:integer" /> + <xs:element name="high" type="xs:integer" /> + </xs:sequence> + </xs:complexType> + + + +</xs:schema>
\ No newline at end of file diff --git a/modules/CIAO/docs/schema/cid.xsd b/modules/CIAO/docs/schema/cid.xsd new file mode 100644 index 00000000000..7e5233d770f --- /dev/null +++ b/modules/CIAO/docs/schema/cid.xsd @@ -0,0 +1,80 @@ +<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.w3.org/2001/XMLSchema XMLSchema.xsd" + xmlns:Deployment="http://www.omg.org/Deployment" + targetNamespace="http://www.omg.org/Deployment"> + + <xsd:include schemaLocation="Basic_Deployment_Data.xsd" /> + <xsd:include schemaLocation="cpd.xsd" /> + <xsd:include schemaLocation="iad.xsd" /> + <xsd:include schemaLocation="pcd.xsd" /> + + <xsd:complexType name="SubcomponentInstantiationDescription"> + <xsd:sequence> + <xsd:element name="name" type="xsd:string"/> + <xsd:element name="basePackage" type="Deployment:ComponentPackageDescription" minOccurs="0" /> + <xsd:element name="specializedConfig" type="Deployment:PackageConfiguration" minOccurs="0" /> + <xsd:element name="selectRequirement" type="Deployment:Requirement" minOccurs="0" maxOccurs="unbounded" /> + <xsd:element name="configProperty" type="Deployment:Property" minOccurs="0" maxOccurs="unbounded" /> + <xsd:element name="referencedPackage" type="Deployment:ComponentPackageReference" minOccurs="0"/> + <xsd:element name="importedPackage" type="Deployment:ComponentPackageImport" minOccurs="0"/> + </xsd:sequence> + <xsd:attribute name="id" type="xsd:ID"/> + </xsd:complexType> + + <xsd:complexType name="SubcomponentPropertyReference"> + <xsd:sequence> + <xsd:element name="propertyName" type="xsd:string"/> + <xsd:element name="instance" type="xsd:IDREF"/> + </xsd:sequence> + </xsd:complexType> + + <xsd:complexType name="AssemblyPropertyMapping"> + <xsd:sequence> + <xsd:element name="name" type="xsd:string"/> + <xsd:element name="externalName" type="xsd:string"/> + <xsd:element name="delegatesTo" type="Deployment:SubcomponentPropertyReference" maxOccurs="unbounded" /> + </xsd:sequence> + </xsd:complexType> + + <xsd:complexType name="ComponentAssemblyDescription"> + <xsd:sequence> + <xsd:element name="instance" type="Deployment:SubcomponentInstantiationDescription" maxOccurs="unbounded"/> + <xsd:element name="connection" type="Deployment:AssemblyConnectionDescription" minOccurs="0" maxOccurs="unbounded"/> + <!-- <xsd:element name="locality" type="Deployment:Locality" minOccurs="0" maxOccurs="unbounded" /> --> + <xsd:element name="externalProperty" type="Deployment:AssemblyPropertyMapping" minOccurs="0" maxOccurs="unbounded" /> + </xsd:sequence> + </xsd:complexType> + + <xsd:complexType name="MonolithicImplementationDescription"> + <xsd:sequence> + <xsd:element name="nodeExecParameter" type="Deployment:Property" minOccurs="0" maxOccurs="unbounded" /> + <xsd:element name="componentExecParameter" type="Deployment:Property" minOccurs="0" maxOccurs="unbounded" /> + <xsd:element name="deployRequirement" type="Deployment:ImplementationRequirement" minOccurs="0" maxOccurs="unbounded" /> + <xsd:element name="primaryArtifact" type="Deployment:NamedImplementationArtifact" maxOccurs="unbounded"/> + </xsd:sequence> + </xsd:complexType> + + <xsd:complexType name="ComponentImplementationDescription"> + <xsd:choice minOccurs="0" maxOccurs="1"> + <xsd:sequence> + <xsd:element name="label" type="xsd:string" minOccurs="0" /> + <xsd:element name="UUID" type="xsd:string" minOccurs="0" /> + <!-- @@ MAJO : Hack: Implements should be required. --> + <xsd:element name="implements" type="Deployment:ComponentInterfaceDescription" minOccurs="0" /> + <xsd:choice> + <xsd:element name="assemblyImpl" type="Deployment:ComponentAssemblyDescription"/> + <xsd:element name="monolithicImpl" type="Deployment:MonolithicImplementationDescription"/> + </xsd:choice> + <xsd:element name="configProperty" type="Deployment:Property" minOccurs="0" maxOccurs="unbounded" /> + <xsd:element name="capability" type="Deployment:Capability" minOccurs="0" maxOccurs="unbounded" /> + <xsd:element name="dependsOn" type="Deployment:ImplementationDependency" minOccurs="0" maxOccurs="unbounded" /> + <xsd:element name="infoProperty" type="Deployment:Property" minOccurs="0" maxOccurs="unbounded" /> + </xsd:sequence> + <xsd:element name="contentLocation" type="xsd:string"/> + </xsd:choice> + <xsd:attribute name="href" type="xsd:string" use="optional"/> + </xsd:complexType> + + +</xsd:schema> diff --git a/modules/CIAO/docs/schema/cpd.xsd b/modules/CIAO/docs/schema/cpd.xsd new file mode 100644 index 00000000000..6f049fa839b --- /dev/null +++ b/modules/CIAO/docs/schema/cpd.xsd @@ -0,0 +1,35 @@ +<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.w3.org/2001/XMLSchema XMLSchema.xsd" + xmlns:Deployment="http://www.omg.org/Deployment" + targetNamespace="http://www.omg.org/Deployment"> + + <xsd:include schemaLocation="ccd.xsd" /> + <xsd:include schemaLocation="cid.xsd" /> + + <xsd:complexType name="PackagedComponentImplementation"> + <xsd:sequence> + <xsd:element name="name" type="xsd:string"/> + <!-- @@ recursive CPD->PCI->CID->CAD->SID->CPD --> + <xsd:element name="referencedImplementation" type="Deployment:ComponentImplementationDescription"/> + </xsd:sequence> + </xsd:complexType> + + <xsd:complexType name="ComponentPackageDescription"> + <xsd:choice minOccurs="0" maxOccurs="1"> + <xsd:sequence> + <xsd:element name="label" type="xsd:string" minOccurs="0" /> + <xsd:element name="UUID" type="xsd:string" minOccurs="0" /> + <!-- @@MAJO - This is a hack, realizes is required. --> + <xsd:element name="realizes" type="Deployment:ComponentInterfaceDescription" minOccurs="0" /> + <xsd:element name="configProperty" type="Deployment:Property" minOccurs="0" maxOccurs="unbounded" /> + <xsd:element name="implementation" type="Deployment:PackagedComponentImplementation" maxOccurs="unbounded" /> + <xsd:element name="infoProperty" type="Deployment:Property" minOccurs="0" maxOccurs="unbounded" /> + </xsd:sequence> + <xsd:element name="contentLocation" type="xsd:string"/> + </xsd:choice> + <xsd:attribute name="href" type="xsd:string" use="optional"/> + </xsd:complexType> + +</xsd:schema> + diff --git a/modules/CIAO/docs/schema/iad.xsd b/modules/CIAO/docs/schema/iad.xsd new file mode 100644 index 00000000000..2f910b5d333 --- /dev/null +++ b/modules/CIAO/docs/schema/iad.xsd @@ -0,0 +1,32 @@ +<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.w3.org/2001/XMLSchema XMLSchema.xsd" + xmlns:Deployment="http://www.omg.org/Deployment" + targetNamespace="http://www.omg.org/Deployment"> + +<xsd:include schemaLocation="Basic_Deployment_Data.xsd" /> + + <xsd:complexType name="NamedImplementationArtifact"> + <xsd:sequence> + <xsd:element name="name" type="xsd:string"/> + <!-- @@ recursive NIA->IAD->NIA --> + <xsd:element name="referencedArtifact" type="Deployment:ImplementationArtifactDescription"/> + </xsd:sequence> + </xsd:complexType> + + <xsd:complexType name="ImplementationArtifactDescription"> + <xsd:choice minOccurs="0" maxOccurs="1"> + <xsd:sequence> + <xsd:element name="label" type="xsd:string" minOccurs="0" /> + <xsd:element name="UUID" type="xsd:string" minOccurs="0" /> + <xsd:element name="location" type="xsd:string" maxOccurs="unbounded"/> + <xsd:element name="dependsOn" type="Deployment:NamedImplementationArtifact" minOccurs="0" maxOccurs="unbounded"/> + <xsd:element name="execParameter" type="Deployment:Property" minOccurs="0" maxOccurs="unbounded" /> + <xsd:element name="infoProperty" type="Deployment:Property" minOccurs="0" maxOccurs="unbounded" /> + <xsd:element name="deployRequirement" type="Deployment:Requirement" minOccurs="0" maxOccurs="unbounded" /> + </xsd:sequence> + <xsd:element name="contentLocation" type="xsd:string"/> + </xsd:choice> + <xsd:attribute name="href" type="xsd:string" use="optional"/> + </xsd:complexType> +</xsd:schema>
\ No newline at end of file diff --git a/modules/CIAO/docs/schema/pcd.xsd b/modules/CIAO/docs/schema/pcd.xsd new file mode 100644 index 00000000000..05b10e1bb79 --- /dev/null +++ b/modules/CIAO/docs/schema/pcd.xsd @@ -0,0 +1,32 @@ +<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.w3.org/2001/XMLSchema XMLSchema.xsd" + xmlns:Deployment="http://www.omg.org/Deployment" + targetNamespace="http://www.omg.org/Deployment"> + + <xsd:include schemaLocation="Basic_Deployment_Data.xsd" /> + <xsd:include schemaLocation="cpd.xsd" /> + + <xsd:complexType name="ComponentPackageImport"> + <xsd:sequence> + <xsd:element name="location" type="xsd:string" maxOccurs="unbounded" /> + </xsd:sequence> + </xsd:complexType> + + <xsd:complexType name="PackageConfiguration"> + <xsd:choice> + <xsd:sequence> + <xsd:element name="label" type="xsd:string" minOccurs="0" /> + <xsd:element name="UUID" type="xsd:string" minOccurs="0" /> + <xsd:element name="basePackage" type="Deployment:ComponentPackageDescription" minOccurs="0" /> + <xsd:element name="specializedConfig" type="Deployment:PackageConfiguration" minOccurs="0" /> + <xsd:element name="importedPackage" type="Deployment:ComponentPackageImport" minOccurs="0" /> + <xsd:element name="referencedPackage" type="Deployment:ComponentPackageReference" minOccurs="0"/> + <xsd:element name="selectRequirement" type="Deployment:Requirement" minOccurs="0" maxOccurs="unbounded" /> + <xsd:element name="configProperty" type="Deployment:Property" minOccurs="0" maxOccurs="unbounded" /> + </xsd:sequence> + <xsd:element name="contentLocation" type="xsd:string"/> + </xsd:choice> + </xsd:complexType> + +</xsd:schema>
\ No newline at end of file diff --git a/modules/CIAO/docs/schema/toplevel.xsd b/modules/CIAO/docs/schema/toplevel.xsd new file mode 100644 index 00000000000..0c67f5fb7a9 --- /dev/null +++ b/modules/CIAO/docs/schema/toplevel.xsd @@ -0,0 +1,15 @@ +<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.w3.org/2001/XMLSchema XMLSchema.xsd" + xmlns:Deployment="http://www.omg.org/Deployment" + targetNamespace="http://www.omg.org/Deployment"> + + <xsd:include schemaLocation="pcd.xsd" /> + + <xsd:complexType name="TopLevelPackageDescription"> + <xsd:sequence> + <xsd:element name="basePackage" type="Deployment:PackageConfiguration" maxOccurs="unbounded"/> + </xsd:sequence> + </xsd:complexType> + +</xsd:schema> diff --git a/modules/CIAO/docs/schema/unused_elements.xsd b/modules/CIAO/docs/schema/unused_elements.xsd new file mode 100644 index 00000000000..c1200b088e9 --- /dev/null +++ b/modules/CIAO/docs/schema/unused_elements.xsd @@ -0,0 +1,161 @@ +<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.w3.org/2001/XMLSchema XMLSchema.xsd" + xmlns:Deployment="http://www.omg.org/Deployment" + targetNamespace="http://www.omg.org/Deployment"> + +<!-- VAULT + +Place for strange things. Nobody knows what they are for... + +--> + +<!-- + + <xsd:complexType name="EnumType"> + <xsd:sequence> + <xsd:element name="name" type="xsd:string"/> + <xsd:element name="typeId" type="xsd:string"/> + <xsd:element name="member" type="xsd:string" maxOccurs="unbounded"/> + </xsd:sequence> + </xsd:complexType> + + <xsd:complexType name="ObjrefType"> + <xsd:sequence> + <xsd:element name="name" type="xsd:string"/> + <xsd:element name="typeId" type="xsd:string"/> + </xsd:sequence> + </xsd:complexType> + + + <xsd:complexType name="BoundedStringType"> + <xsd:choice minOccurs="0" maxOccurs="unbounded"> + <xsd:element name="bound" type="xsd:string"/> + </xsd:choice> + </xsd:complexType> + + + <xsd:complexType name="FixedType"> + <xsd:choice minOccurs="0" maxOccurs="unbounded"> + <xsd:element name="digits" type="xsd:string"/> + <xsd:element name="scale" type="xsd:string"/> + </xsd:choice> + </xsd:complexType> + + + <xsd:complexType name="ArrayType"> + <xsd:choice minOccurs="0" maxOccurs="unbounded"> + <xsd:element name="length" type="xsd:string"/> + <xsd:element name="elementType" type="Deployment:DataType"/> + </xsd:choice> + </xsd:complexType> + + <xsd:complexType name="SequenceType"> + <xsd:choice minOccurs="0" maxOccurs="unbounded"> + <xsd:element name="bound" type="xsd:string"/> + <xsd:element name="elementType" type="Deployment:DataType"/> + </xsd:choice> + </xsd:complexType> + + <xsd:complexType name="AliasType"> + <xsd:choice minOccurs="0" maxOccurs="unbounded"> + <xsd:element name="name" type="xsd:string"/> + <xsd:element name="typeId" type="xsd:string"/> + <xsd:element name="elementType" type="Deployment:DataType"/> + </xsd:choice> + </xsd:complexType> + + <xsd:complexType name="StructType"> + <xsd:choice minOccurs="0" maxOccurs="unbounded"> + <xsd:element name="name" type="xsd:string"/> + <xsd:element name="typeId" type="xsd:string"/> + <xsd:element name="member" type="Deployment:StructMemberType"/> + </xsd:choice> + </xsd:complexType> + + <xsd:complexType name="StructMemberType"> + <xsd:choice minOccurs="0" maxOccurs="unbounded"> + <xsd:element name="name" type="xsd:string"/> + <xsd:element name="type" type="Deployment:DataType"/> + </xsd:choice> + </xsd:complexType> + + <xsd:complexType name="ValueType"> + <xsd:choice minOccurs="0" maxOccurs="unbounded"> + <xsd:element name="name" type="xsd:string"/> + <xsd:element name="typeId" type="xsd:string"/> + <xsd:element name="modifier" type="xsd:string"/> + <xsd:element name="baseType" type="Deployment:DataType"/> + <xsd:element name="member" type="Deployment:ValueMemberType"/> + </xsd:choice> + </xsd:complexType> + + <xsd:complexType name="ValueMemberType"> + <xsd:choice minOccurs="0" maxOccurs="unbounded"> + <xsd:element name="name" type="xsd:string"/> + <xsd:element name="visibility" type="xsd:string"/> + <xsd:element name="type" type="Deployment:DataType"/> + </xsd:choice> + </xsd:complexType> + + <xsd:complexType name="UnionType"> + <xsd:choice minOccurs="0" maxOccurs="unbounded"> + <xsd:element name="name" type="xsd:string"/> + <xsd:element name="typeId" type="xsd:string"/> + <xsd:element name="default" type="Deployment:UnionMemberType"/> + <xsd:element name="discriminatorType" type="Deployment:DataType"/> + <xsd:element name="member" type="Deployment:UnionMemberType"/> + </xsd:choice> + </xsd:complexType> + + <xsd:complexType name="UnionMemberType"> + <xsd:choice minOccurs="0" maxOccurs="unbounded"> + <xsd:element name="name" type="xsd:string"/> + <xsd:element name="type" type="Deployment:DataType"/> + <xsd:element name="label" type="Deployment:DataValue"/> + </xsd:choice> + </xsd:complexType> + + + <xsd:complexType name="NamedValue"> + <xsd:choice minOccurs="0" maxOccurs="unbounded"> + <xsd:element name="name" type="xsd:string"/> + <xsd:element name="value" type="Deployment:DataValue"/> + </xsd:choice> + </xsd:complexType> + + + <xsd:complexType name="PlanPropertyMapping"> + <xsd:choice minOccurs="0" maxOccurs="unbounded"> + <xsd:element name="name" type="xsd:string"/> + <xsd:element name="source" type="xsd:string"/> + <xsd:element name="externalName" type="xsd:string"/> + <xsd:element name="delegatesTo" type="Deployment:PlanSubcomponentPropertyReference"/> + </xsd:choice> + </xsd:complexType> + + + <xsd:complexType name="PlanSubcomponentPropertyReference"> + <xsd:choice minOccurs="0" maxOccurs="unbounded"> + <xsd:element name="propertyName" type="xsd:string"/> + <xsd:element name="instance" type="Deployment:InstanceDeploymentDescription"/> + </xsd:choice> + </xsd:complexType> + +--> + +<!-- + + This type is not referenced anywhere. + + <xsd:complexType name="RequirementSatisfier"> + <xsd:choice minOccurs="0" maxOccurs="unbounded"> + <xsd:element name="name" type="xsd:string"/> + <xsd:element name="resourceType" type="xsd:string"/> + <xsd:element name="property" type="Deployment:SatisfierProperty"/> + </xsd:choice> + </xsd:complexType> + +--> + +</xsd:schema> diff --git a/modules/CIAO/docs/schema/xsc-banner.cpp b/modules/CIAO/docs/schema/xsc-banner.cpp new file mode 100644 index 00000000000..ecd90a877a6 --- /dev/null +++ b/modules/CIAO/docs/schema/xsc-banner.cpp @@ -0,0 +1,11 @@ +/* $Id$ + * This code was generated by the XML Schema Compiler. + * + * Changes made to this code will most likely be overwritten + * when the handlers are recompiled. + * + * If you find errors or feel that there are bugfixes to be made, + * please contact the current XSC maintainer: + * Will Otte <wotte@dre.vanderbilt.edu> + */ + diff --git a/modules/CIAO/docs/schema/xsc-banner.h b/modules/CIAO/docs/schema/xsc-banner.h new file mode 100644 index 00000000000..9f433e2a68a --- /dev/null +++ b/modules/CIAO/docs/schema/xsc-banner.h @@ -0,0 +1,18 @@ +/* $Id$ + * This code was generated by the XML Schema Compiler. + * + * Changes made to this code will most likely be overwritten + * when the handlers are recompiled. + * + * If you find errors or feel that there are bugfixes to be made, + * please contact the current XSC maintainer: + * Will Otte <wotte@dre.vanderbilt.edu> + */ + +// Fix for Borland compilers, which seem to have a broken +// <string> include. +#ifdef __BORLANDC__ +# include <string.h> +#endif + +#include "XSC_XML_Handlers_Export.h" diff --git a/modules/CIAO/docs/static_ciao_contents.html b/modules/CIAO/docs/static_ciao_contents.html new file mode 100755 index 00000000000..d043e4c0aee --- /dev/null +++ b/modules/CIAO/docs/static_ciao_contents.html @@ -0,0 +1,359 @@ +<!DOCTYPE html PUBLIC "-//w3c//dtd html 4.0 transitional//en"> +<html> +<head> + <meta http-equiv="Content-Type" + content="text/html; charset=iso-8859-1"> + <meta name="Author" content="Venkita Subramonian"> + <meta name="GENERATOR" + content="Mozilla/4.76 [en] (Windows NT 5.0; U) [Netscape]"> + <title>CIAO Static Configuration</title> + <base target="main"><!-- $Id$ --> +</head> +<body> +<center> +<h2>CIAO Static Configuration Support for Real-Time Platforms</h2> +</center> +<h3> +<a name="intro"></a>1. Introduction</h3> +The dynamic packaging, assembly, and deployment mechanisms currently +available +in CIAO are useful for application domains where component metadata is +less likely to be known a priori, where implementation upgrades may +need +to be performed on-line, and where platform features like loading and +unloading +dynamic libraries are both available and useful. Furthermore, the +new CCM Deployment and Configuration specification describes a wider +range +of configuration capabilities, opening up the question of alternative +component +configuration strategies more generally and requiring that any solution +we devise can be migrated to that new configuration approach. +<p>Therefore, we have incorporated support for component configuration +in CIAO on platforms like VxWorks, as a set of optional strategies and +optimizations to the existing CIAO configuration capabilities. By +supporting both dynamic and static styles of configuration in CIAO, we +will both (1) be able to realize our short term goals in making CIAO +available +on VxWorks for use in the Boeing PCES/MoBIES OEP, and (2) set a +precedent +for availability of static configuration capabilities more generally, +so +that DRE systems are well-supported within the new Deployment and +Configuration +specification implementation for CIAO as well. +</p> +<p>The fundamental intuition in understanding our approach is that in +DRE +systems the stages of the overall system lifecycle are similar to those +in more dynamic conventional component-oriented client-server +applications. +However, in DRE systems several phases of the system lifecycle are +compressed +into the compile-time and system-initialization phases, so that (1) for +testing and verification purposes the set of components in an +application +can be identified and analyzed before run-time, and (2) overheads for +run-time +operation following initialization are reduced and made more +predictable. +Furthermore, due to the nuances of the platforms traditionally used for +deploying DRE systems, not all features of conventional platforms are +available. +Our approach therefore avoids certain mechanisms that are either +unavailable +or too costly in terms of performance. +</p> +<p>We follow these intuitions in our approach, taking the existing +configuration +phases in CIAO and pushing several of them earlier in the configuration +lifecycle. We ensure that our approach can be realized in the +context +of the platforms on which the Boeing PCES/MoBIES OEP will be deployed, +notably VxWorks, by re-factoring the configuration mechanisms and +retargeting +them to use only the services available on the target real-time +platforms. +<br> + +</p> +<h3><a name="currentarch"></a>2. Current CIAO Configuration Architecture</h3> +<center> +<p><br> +<img src="imgs/ciao-dynamic1.jpg" height="462" width="774"></p> +<p><b>Figure 1. Current configuration process in CIAO</b></p> +</center> +<p>The first stage of the CIAO system lifecycle occurs off-line, when +component +package (.csd) and assembly (.cad) files are generated by a modeling +tool +or other prior stage of the tool chain. These files contain an +abstract +specification of the configuration that is to be achieved by CIAO in +each +particular deployment environment . +</p> +<p>CIAO interprets these .csd and .cad files, and creates and +configures +the components, their run-time server environments, and QoS properties +within the supporting ORB and other related infrastructure. +Currently, +CIAO runs several daemon processes for each deployment environment: one +or more Component Installation / Server Activation (CISA) daemons on +each +machine where components can be deployed, an additional Assembly +Manager +daemon and an Assembly Deployer process used by the system developer. +</p> +<p>The Assembly Manager stores an internal table with the target +platform +availability information . The Assembly Deployer +tells +the Assembly Manager which assemblies of components (each assembly is +defined +in a separate .cad file) should be deployed on which target +machines. +The Assembly Manager parses the XML structures in the .cad file, and +generates +its own internal data structure (<b>Figure 2</b>) as an intermediate +representation +of that assembly. +</p> +<p>The Assembly Manager then traverses (<b>Figure 2</b>) this +intermediate +representation, instructing each CISA daemon to install and configure +specific +component servers and containers, to create specific homes, and to +instantiate +specific component instances. Each CISA daemon has +additional +information about the component implementations available on that +endsystem +– each component UUID is mapped to a disk path for the .dll or .so file +within which a factory method for its home factory is defined. +</p> +<center> +<p><img src="imgs/ciao-dynamic2.jpg" height="384" width="699"></p> +<p><b>Figure 2. Intermediate representation of configuration information</b></p> +</center> +<p>The following steps are optional, and will only be performed if they +are explicitly specified in the assembly definition itself. For +the +sake of discussion, we consider the case where all the steps are in +fact +specified. The Assembly Manager will tell the CISA daemon the +UUIDs +of the components to be installed in that component server, and the +CISA +daemon will look up and load the appropriate dynamic library, invoke +the +home factory method to create the home, and then invoke the home’s +component +creation method. After all the component instances and homes have +been created and references to them have been obtained, the assembly +manager +will then make all the connections between ports and receptacles, +facets, +and event sources and sinks by invoking connect and subscribe methods +on +the receiving end component. +</p> +<p>QoS-specific metadata like priorities can be configured by a .cad +file +extension called a real-time descriptor (.rtcad) file. The +Assembly +Manager will read the .rtcad file and will parse and associate +real-time +policies with the appropriate component instances. One +implication +of this mechanism is that the Assembly Manager will maintain QoS +meta-data +within its intermediate representation, alongside the conventional CCM +meta-data. +</p> +<p>Furthermore, when the Assembly Manager interacts with the CISA +daemon(s) +on each endsystem, commands to configure particular component and +component +server run-time infrastructure QoS properties are passed from the +Assembly +Manager to the CISA daemon. The ORB (and as a future extension +the +ORB Services) of the endsystem on which the components are installed is +currently configured via the ACE Service Configurator. The CISA +daemon +maps different service configurations (as defined in particular +svc.conf +files) to logical names used in the component assembly descriptors. +</p> +<p>The logical configuration names are encoded within the .cad file as +an extension of the conventional .cad file format using the “extension” +element of the existing .cad file XML DTD. The Assembly Manager +passes +a component server creation command, containing a logical configuration +name, which the CISA daemon maps to a particular svc.conf file when it +creates a new component server. The CISA daemon adds a command +line +flag to the execution command line used to spawn the new component +server, +which causes that configuration file to be parsed and applied during +startup +of the component server itself. +</p> +<h3><a name="staticapproach"></a>3. Static Configuration Approach</h3> +In the static configuration approach (<b>Figure 3</b>), +configurations +XML files are translated in a code generation step just before compile +time (managed by the same project/Makefile processes that do the +compilation) +into C++ header and source files that are then compiled and linked with +the main application. +<center> +<p><img src="imgs/ciao-static1.jpg" height="523" width="800"></p> +<p><b>Figure 3. Static Configuration in CIAO</b></p> +</center> +<p>First, one of the generated files is a C++ header file, so that it +can +be included directly by C++ source files. There is no additional +parsing required to import a number of static constants and identifiers +it declares and defines, so that those constants end up being compiled +directly into C++ code. Second, where enumeration of information +is needed, the header file contains simple homogeneous C++ arrays so +that +C++ source code can iterate over those arrays with minimal +overhead. +Third, it declares information so that later information depends on +earlier +information (<b>Figure 4</b>), and the components are directly +configured +within that header file. +</p> +<center> +<p><img src="imgs/ciao-static2.jpg" height="476" width="816"></p> +<p><b>Figure 4. All XML files are parsed offline and stored as +cross-referenced +tables in Static_Assembly_Config.h</b></p> +</center> +<p>The major issues that we addressed in developing a re-factored +version +of the CIAO configuration mechanisms are as follows: +</p> +<p>1. XML parsing is too expensive to be performed during system +initialization, +so that all such parsing has been moved off-line to before +compile-time, +and the resulting information is linked statically into the application +itself. +</p> +<p>2. Each endsystem boots and initializes in a single process address +space, so that any remaining inter-process communication between +daemons +is replaced by direct interactions between objects, or at most between +threads. +</p> +<p>3. Dynamic link libraries are unavailable on VxWorks, so an +alternative +mechanism for obtaining the home factory method entry point is needed. +We gather this information from the XML files and statically generate a +map containing the entry point function names and the entry point +function pointers. This information will be used by the CIAO container +implementation instead of trying to load a dll and then finding the +entry +point in the dll. +</p> +<h4>Moving XML Parsing Earlier</h4> +We first focused on taking the XML parsing stage off-line. Since +the time required to do this by CIAO is currently reasonable as an +off-line +activity, we simply created (<b>Figure 4</b>) a stripped-down version +of +the Assembly Manager (reusing the existing class libraries the Assembly +Manager uses) that after it performs the XML parsing and generation of +its intermediate representation, emits a C++ header file containing +that +intermediate representation. +<h4>Combining Configuration Daemons at Run-Time</h4> +The intermediate representation is included in a configuration engine +(CIAO::Static_Configurator) +that consists of a simple reader for the intermediate representation, +again +derived from the code currently used in the Assembly Manager, which +will +dispatch to the configuration code used by the CISA daemons in the +dynamic +case. The configuration engine will be invoked from the +application’s +main entry point prior to starting execution of the application itself. +<h4>Eliminating Dynamic Library Loading</h4> +All code will need to be known a priori, and linked statically into the +application. If alternative configurations must be supported +statically, +then those separate configurations can be alternative selections chosen +during the build process. If alternative configurations must be +selected +adaptively at run-time then all the code for each possible +configuration +must be linked in statically, and appropriate mechanisms used to +re-target +a logical name dynamically to each particular configuration (e.g., +different +configurations for different system modes). +<br> + +<br> + +<br> +<br> +<center> +<p><img src="imgs/ciao-static-vs-dynamic.jpg" height="384" width="735"><br> +<b>Figure 5. CIAO Dynamic vs Static Configuration</b></p> +</center> +<h3> +<a name="status"></a><b>4. Status of CIAO Static Configuration</b></h3> +The initial version of the CIAO static configurator is available under +$CIAO_ROOT/tools/static_configurator. +<p>To run the static configurator, +</p> +<p><b><tt>Static_Assembly_Parser -a <.cad file></tt></b> +</p> +<p>This will generate three files - +</p> +<p><b><tt>Static_CCM_App.cpp</tt></b> - this file contains the main +program +which instantiates the component server and invokes the static +configuration +engine to create containers, homes, etc. +</p> +<p><b><tt>Static_CCM_App.mpc</tt></b> - this file contains the +necessary +files for building the static application. You have to manually change +this file so as to include files that are not known to the static +configurator. +</p> +<p><b><tt>Static_Assembly_Config.h</tt></b> - this file contains the +C++ +intermediate representation of all the information in the .cad, .csd +and +.ssd XML files. +</p> +<p><a name="Example"></a><b>Example</b> - An <a + href="static_config_example.html">example</a> +run is shown using the <a href="../examples/OEP/BasicSP">BasicSP</a> +scenario. +</p> +<h3><a name="futurework"></a><b>5. Future work</b></h3> +<p>The current implementation does not have support for multiple +component +servers running on multiple processors. Multiprocessor scenario +involves +coordination and synchronization among the component servers running on +different processors. There has to be some kind of a mediator which +determines +that all components are instantiated before connections can be made +among +them.<br> +<br> + +</p> +</body> +</html> diff --git a/modules/CIAO/docs/static_ciao_index.html b/modules/CIAO/docs/static_ciao_index.html new file mode 100755 index 00000000000..627e07c65ca --- /dev/null +++ b/modules/CIAO/docs/static_ciao_index.html @@ -0,0 +1,23 @@ +<html> + +<head> +<meta name="GENERATOR" content="Microsoft FrontPage 5.0"> +<meta name="ProgId" content="FrontPage.Editor.Document"> +<title>New Page 1</title> +<!-- $Id$ --> + +</head> + +<frameset cols="294,*"> + <frame name="contents" target="main" src="static_ciao_toc.html"> + <frame name="main" src="static_ciao_contents.html" target="main"> + <noframes> + <body> + + <p>This page uses frames, but your browser doesn't support them.</p> + + </body> + </noframes> +</frameset> + +</html> diff --git a/modules/CIAO/docs/static_ciao_toc.html b/modules/CIAO/docs/static_ciao_toc.html new file mode 100755 index 00000000000..35adb51ec1c --- /dev/null +++ b/modules/CIAO/docs/static_ciao_toc.html @@ -0,0 +1,26 @@ +<!doctype html public "-//w3c//dtd html 4.0 transitional//en"> +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> + <meta name="Author" content="Venkita Subramonian"> + <meta name="GENERATOR" content="Microsoft FrontPage 5.0"> + <title>CIAO Static Configuration</title> + <base target="contents"> +<!-- $Id$ --> +</head> +<body> +<h3 align="center">CIAO Static Configuration Documentation </h3> + +<ol> + +<li><a target="main" href="static_ciao_contents.html#intro">Introduction</a></li> +<li><a target="main" href="static_ciao_contents.html#currentarch">Current CIAO Configuration +Architecture</a></li> +<li><a target="main" href="static_ciao_contents.html#staticapproach">Static Configuration +Approach</a></li> +<li><a target="main" href="static_ciao_contents.html#status">Status of CIAO Static Configuration</a><br> +<a target="main" href="static_ciao_contents.html#Example">Example</a></li> +<li><a target="main" href="static_ciao_contents.html#futurework">Future work</a></li> +</ol> +</body> +</html> diff --git a/modules/CIAO/docs/static_config_example.html b/modules/CIAO/docs/static_config_example.html new file mode 100644 index 00000000000..5e8c806e2cd --- /dev/null +++ b/modules/CIAO/docs/static_config_example.html @@ -0,0 +1,1353 @@ +<!DOCTYPE html PUBLIC "-//w3c//dtd html 4.0 transitional//en"> +<html> +<head> + <meta http-equiv="Content-Type" + content="text/html; charset=iso-8859-1"> + <meta name="Author" content="Venkita Subramonian"> + <meta name="GENERATOR" + content="Mozilla/4.76 [en] (Windows NT 5.0; U) [Netscape]"> + <title>BasicSP example using CIAO Static Configurator</title> +<!-- $Id$ --> +</head> +<body> +This example illustrates +how to use the CIAO static configurator for building applications +statically. +For an example using RTCORBA policies, see <a + href="static_config_rtexample.html">BasicSP with RTCORBA extensions</a>. +From the <a href="../examples/OEP/BasicSP">BasicSP</a> directory do +the +following. +<p><b><tt>> cd descriptors</tt></b> +<br> +<b><tt>> $CIAO_ROOT/tools/static_configurator/Static_Assembly_Parser +-a BasicSP.cad</tt></b> +</p> +<p>The following files are generated - +</p> +<p><a href="#Static_Assembly_Config.h">Static_Assembly_Config.h</a> +<br> +<a href="#Static_CCM_App.cpp">Static_CCM_App.cpp</a> +<br> +<a href="#Static_CCM_App.mpc">Static_CCM_App.mpc</a> +</p> +<p><a href="#Static_Assembly_Config.h">Static_Assembly_Config.h</a> +contains +the intermediate representation of all the parsed component and +assembly +information obtained from the XML files. <a href="#Static_CCM_App.cpp">Static_CCM_App.cpp</a> +contains the main driver application. Here a runtime <a + href="#static%20config%20engine">static +configuration engine</a> is used to create containers, homes, +components, +etc and then establish necessary connections between the components. In +the BasicSP example, an external controller (see <tt><a + href="../examples/OEP/BasicSP/README">$CIAO_ROOT/examples/OEP/BasicSP/README</a></tt>) +is used to start or stop a pulser. The generated main driver +application +(Static_CCM_App.cpp) is <a href="#Modified%20Static_CCM_App.cpp">modified</a> +to add code to trigger the pulser object on. The generated .mpc file is +<a href="#Modified%20Static_CCM_App.mpc">modified</a> +to add all other necessary files so that the application can be built +statically. +Note that the static configurator only generates only certain file +names +in the .mpc file. These filenames are obtained from the XML descriptor +files. All other necessary files have to be added manually as +indicated. +</p> +<p>Now the static build files can be generated by running the mpc +utility. +</p> +<p><b><tt>> cd ..</tt></b> +<br> +<b><tt>> $ACE_ROOT/bin/mpc -static Static_CCM_App.mpc</tt></b> +</p> +<p><a name="Static_Assembly_Config.h"></a><b><u>Static_Assembly_Config.h</u></b> +<br> +<tt><font color="#3333ff">#include "Static_Assembly.h"</font></tt> +</p> +<p><tt><font color="#3333ff">#include "CCM_ContainerC.h"</font></tt> +<br> +<tt><font color="#3333ff">#include "Container_Base.h"</font></tt> +</p> +<p><tt><font color="#3333ff">//Containers</font></tt> +<br> +<tt><font color="#3333ff">CIAO::Static_Config::ContainerAttributes +containers_table_[]=</font></tt> +<br> +<tt><font color="#3333ff">{</font></tt> +<br> +<tt><font color="#3333ff"> {"", 0}</font></tt> +<br> +<tt><font color="#3333ff">};</font></tt> +<br> + +</p> +<p><tt><font color="#3333ff">extern "C" +::Components::HomeExecutorBase_ptr +createECHome_Impl (void);</font></tt> +<br> +<tt><font color="#3333ff">extern "C" ::PortableServer::Servant +createECHome_Servant</font></tt> +<br> +<tt><font color="#3333ff"> (::Components::HomeExecutorBase_ptr +p,</font></tt> +<br> +<tt><font color="#3333ff"> ::CIAO::Session_Container *c</font></tt> +<br> +<tt><font color="#3333ff"> ACE_ENV_ARG_DECL_WITH_DEFAULTS);</font></tt> +<br> +<tt><font color="#3333ff">extern "C" ::Components::HomeExecutorBase_ptr +createBMDeviceHome_Impl (void);</font></tt> +<br> +<tt><font color="#3333ff">extern "C" ::PortableServer::Servant +createBMDeviceHome_Servant</font></tt> +<br> +<tt><font color="#3333ff"> (::Components::HomeExecutorBase_ptr +p,</font></tt> +<br> +<tt><font color="#3333ff"> ::CIAO::Session_Container *c</font></tt> +<br> +<tt><font color="#3333ff"> ACE_ENV_ARG_DECL_WITH_DEFAULTS);</font></tt> +<br> +<tt><font color="#3333ff">extern "C" ::Components::HomeExecutorBase_ptr +createBMClosedEDHome_Impl (void);</font></tt> +<br> +<tt><font color="#3333ff">extern "C" ::PortableServer::Servant +createBMClosedEDHome_Servant</font></tt> +<br> +<tt><font color="#3333ff"> (::Components::HomeExecutorBase_ptr +p,</font></tt> +<br> +<tt><font color="#3333ff"> ::CIAO::Session_Container *c</font></tt> +<br> +<tt><font color="#3333ff"> ACE_ENV_ARG_DECL_WITH_DEFAULTS);</font></tt> +<br> +<tt><font color="#3333ff">extern "C" ::Components::HomeExecutorBase_ptr +createBMDisplayHome_Impl (void);</font></tt> +<br> +<tt><font color="#3333ff">extern "C" ::PortableServer::Servant +createBMDisplayHome_Servant</font></tt> +<br> +<tt><font color="#3333ff"> (::Components::HomeExecutorBase_ptr +p,</font></tt> +<br> +<tt><font color="#3333ff"> ::CIAO::Session_Container *c</font></tt> +<br> +<tt><font color="#3333ff"> ACE_ENV_ARG_DECL_WITH_DEFAULTS);</font></tt> +<br> +<tt><font color="#3333ff">//Homes</font></tt> +<br> +<tt><font color="#3333ff">CIAO::Static_Config::HomeAttributes +homes_table_[]=</font></tt> +<br> +<tt><font color="#3333ff">{</font></tt> +<br> +<tt><font color="#3333ff"> {"a_ECHome", +"DCE:3148F760-F2ED-4204-A775-6B972C10E8CB", +"createECHome_Impl", createECHome_Impl, +"DCE:75309233-0E0A-4cfb-B186-3E99F69B1D40", +"createECHome_Servant", createECHome_Servant, 0, 0 },</font></tt> +<br> +<tt><font color="#3333ff"> {"a_BMDeviceHome", +"DCE:82C2B032-37F0-4315-A59F-7020D3264E4D", +"createBMDeviceHome_Impl", createBMDeviceHome_Impl, +"DCE:93D254CF-9538-44e8-BB98-AABCD134ADD3", +"createBMDeviceHome_Servant", createBMDeviceHome_Servant, 0, 0 },</font></tt> +<br> +<tt><font color="#3333ff"> {"a_BMClosedEDHome", +"DCE:8E6C468D-A39F-46b4-962B-265F1AA8D538", +"createBMClosedEDHome_Impl", createBMClosedEDHome_Impl, +"DCE:CDC06FCA-50FC-43ca-8ECC-BEFBD33FEE78", +"createBMClosedEDHome_Servant", createBMClosedEDHome_Servant, 0, 0 },</font></tt> +<br> +<tt><font color="#3333ff"> {"a_BMDisplayHome", +"DCE:8E92655E-CA07-46C8-B127-0F0872A8CC29", +"createBMDisplayHome_Impl", createBMDisplayHome_Impl, +"DCE:D7984625-8561-431d-9927-4E498B317C02", +"createBMDisplayHome_Servant", createBMDisplayHome_Servant, 0, 0 }</font></tt> +<br> +<tt><font color="#3333ff">};</font></tt> +<br> + +</p> +<p><tt><font color="#3333ff">//Components</font></tt> +<br> +<tt><font color="#3333ff">CIAO::Static_Config::ComponentAttributes +components_table_[]=</font></tt> +<br> +<tt><font color="#3333ff">{</font></tt> +<br> +<tt><font color="#3333ff"> {"a_EC", 0, 0, 0 },</font></tt> +<br> +<tt><font color="#3333ff"> {"a_BMDevice", -1, -1, 1 },</font></tt> +<br> +<tt><font color="#3333ff"> {"a_BMClosedED", -1, -1, 2 },</font></tt> +<br> +<tt><font color="#3333ff"> {"a_BMDisplay", -1, -1, 3 }</font></tt> +<br> +<tt><font color="#3333ff">};</font></tt> +<br> + +</p> +<p><tt><font color="#3333ff">//Component Registrations</font></tt> +<br> +<tt><font color="#3333ff">CIAO::Assembly_Placement::componentinstantiation::Register_Info +component_registrations_table_[]=</font></tt> +<br> +<tt><font color="#3333ff">{</font></tt> +<br> +<tt><font color="#3333ff"> {CIAO::Assembly_Placement::componentinstantiation::COMPONENT, +CIAO::Assembly_Placement::componentinstantiation::IORFILE, "", "ec.ior" +}</font></tt> +<br> +<tt><font color="#3333ff">};</font></tt> +<br> + +</p> +<p><tt><font color="#3333ff">//Connections</font></tt> +<br> +<tt><font color="#3333ff">CIAO::Static_Config::ConnectionAttributes +connections_table_[]=</font></tt> +<br> +<tt><font color="#3333ff">{</font></tt> +<br> +<tt><font color="#3333ff"> {CIAO::Assembly_Connection::PUBLISHER_CONSUMER, +"", "timeout", 0, 1, 0, 0 },</font></tt> +<br> +<tt><font color="#3333ff"> {CIAO::Assembly_Connection::PUBLISHER_CONSUMER, +"", "data_available", 3, 4, 0, 0 },</font></tt> +<br> +<tt><font color="#3333ff"> {CIAO::Assembly_Connection::PUBLISHER_CONSUMER, +"", "out_avail", 6, 7, 0, 0 },</font></tt> +<br> +<tt><font color="#3333ff"> {CIAO::Assembly_Connection::INTERFACE, +"", "datain", 9, 10, 0, 0 },</font></tt> +<br> +<tt><font color="#3333ff"> {CIAO::Assembly_Connection::INTERFACE, +"", "comp_data", 12, 13, 0, 0 }</font></tt> +<br> +<tt><font color="#3333ff">};</font></tt> +<br> + +</p> +<p><tt><font color="#3333ff">//Resolver Infos</font></tt> +<br> +<tt><font color="#3333ff">CIAO::Static_Config::ResolveInfoAttributes +resolvers_table_[]=</font></tt> +<br> +<tt><font color="#3333ff">{</font></tt> +<br> +<tt><font color="#3333ff"> {CIAO::Assembly_Connection::COMP_IDREF, +"a_EC", -1, 0 },</font></tt> +<br> +<tt><font color="#3333ff"> {CIAO::Assembly_Connection::CONSUMER, +"timeout", 2, 0 },</font></tt> +<br> +<tt><font color="#3333ff"> {CIAO::Assembly_Connection::COMP_IDREF, +"a_BMDevice", -1, 0 },</font></tt> +<br> +<tt><font color="#3333ff"> {CIAO::Assembly_Connection::COMP_IDREF, +"a_BMDevice", -1, 0 },</font></tt> +<br> +<tt><font color="#3333ff"> {CIAO::Assembly_Connection::CONSUMER, +"in_avail", 5, 0 },</font></tt> +<br> +<tt><font color="#3333ff"> {CIAO::Assembly_Connection::COMP_IDREF, +"a_BMClosedED", -1, 0 },</font></tt> +<br> +<tt><font color="#3333ff"> {CIAO::Assembly_Connection::COMP_IDREF, +"a_BMClosedED", -1, 0 },</font></tt> +<br> +<tt><font color="#3333ff"> {CIAO::Assembly_Connection::CONSUMER, +"data_ready", 8, 0 },</font></tt> +<br> +<tt><font color="#3333ff"> {CIAO::Assembly_Connection::COMP_IDREF, +"a_BMDisplay", -1, 0 },</font></tt> +<br> +<tt><font color="#3333ff"> {CIAO::Assembly_Connection::COMP_IDREF, +"a_BMClosedED", -1, 0 },</font></tt> +<br> +<tt><font color="#3333ff"> {CIAO::Assembly_Connection::PROVIDER, +"data_read", 11, 0 },</font></tt> +<br> +<tt><font color="#3333ff"> {CIAO::Assembly_Connection::COMP_IDREF, +"a_BMDevice", -1, 0 },</font></tt> +<br> +<tt><font color="#3333ff"> {CIAO::Assembly_Connection::COMP_IDREF, +"a_BMDisplay", -1, 0 },</font></tt> +<br> +<tt><font color="#3333ff"> {CIAO::Assembly_Connection::PROVIDER, +"dataout", 14, 0 },</font></tt> +<br> +<tt><font color="#3333ff"> {CIAO::Assembly_Connection::COMP_IDREF, +"a_BMClosedED", -1, 0 }</font></tt> +<br> +<tt><font color="#3333ff">};</font></tt> +</p> +<p><a name="Static_CCM_App.cpp"></a><b><u>Static_CCM_App.cpp</u></b> +<br> +<tt><font color="#3333ff">#include "ComponentServer_Impl.h"</font></tt> +<br> +<tt><font color="#3333ff">#include "CIAO_ServersC.h"</font></tt> +<br> +<tt><font color="#3333ff">#include "Server_init.h"</font></tt> +<br> +<tt><font color="#3333ff">#include "Static_Configurator.h"</font></tt> +<br> +<tt><font color="#3333ff">#include "ace/SString.h"</font></tt> +<br> +<tt><font color="#3333ff">#include "ace/Get_Opt.h"</font></tt> +</p> +<p><tt><font color="#3333ff">#include "Static_Assembly_Config.h"</font></tt> +</p> +<p><tt><font color="#3333ff">char *ior_file_name_ = "comp_serv.ior";</font></tt> +</p> +<p><tt><font color="#3333ff">int</font></tt> +<br> +<tt><font color="#3333ff">parse_args (int argc, char *argv[])</font></tt> +<br> +<tt><font color="#3333ff">{</font></tt> +<br> +<tt><font color="#3333ff"> ACE_Get_Opt get_opts (argc, argv, +"k:o:");</font></tt> +<br> +<tt><font color="#3333ff"> int c;</font></tt> +</p> +<p><tt><font color="#3333ff"> while ((c = get_opts ()) != -1)</font></tt> +<br> +<tt><font color="#3333ff"> switch (c)</font></tt> +<br> +<tt><font color="#3333ff"> {</font></tt> +<br> +<tt><font color="#3333ff"> case +'o': +// get the file name to write to</font></tt> +<br> +<tt><font color="#3333ff"> +ior_file_name_ += get_opts.opt_arg ();</font></tt> +<br> +<tt><font color="#3333ff"> break;</font></tt> +</p> +<p><tt><font color="#3333ff"> case +'?': +// display help for use of the server.</font></tt> +<br> +<tt><font color="#3333ff"> default:</font></tt> +<br> +<tt><font color="#3333ff"> +ACE_ERROR_RETURN ((LM_ERROR,</font></tt> +<br> +<tt><font color="#3333ff"> +"usage: %s\n"</font></tt> +<br> +<tt><font color="#3333ff"> +"-o <ior_output_file>\n"</font></tt> +<br> +<tt><font color="#3333ff"> +"\n",</font></tt> +<br> +<tt><font color="#3333ff"> +argv [0]),</font></tt> +<br> +<tt><font color="#3333ff"> +-1);</font></tt> +<br> +<tt><font color="#3333ff"> }</font></tt> +</p> +<p><tt><font color="#3333ff"> return 0;</font></tt> +<br> +<tt><font color="#3333ff">}</font></tt> +<br> + +</p> +<p><tt><font color="#3333ff">int</font></tt> +<br> +<tt><font color="#3333ff">main (int argc, char *argv[])</font></tt> +<br> +<tt><font color="#3333ff">{</font></tt> +<br> +<tt><font color="#3333ff"> ACE_TRY_NEW_ENV</font></tt> +<br> +<tt><font color="#3333ff"> {</font></tt> +<br> +<tt><font color="#3333ff"> // Initialize +orb</font></tt> +<br> +<tt><font color="#3333ff"> CORBA::ORB_var +orb = CORBA::ORB_init (argc,</font></tt> +<br> +<tt><font color="#3333ff"> +argv,</font></tt> +<br> +<tt><font color="#3333ff"> +0</font></tt> +<br> +<tt><font color="#3333ff"> +ACE_ENV_ARG_PARAMETER);</font></tt> +<br> +<tt><font color="#3333ff"> ACE_TRY_CHECK;</font></tt> +</p> +<p><tt><font color="#3333ff"> +CIAO::Server_init +(orb.in ());</font></tt> +</p> +<p><tt><font color="#3333ff"> if +(parse_args +(argc, argv) != 0)</font></tt> +<br> +<tt><font color="#3333ff"> +return -1;</font></tt> +</p> +<p><tt><font color="#3333ff"> // Get +reference +to Root POA.</font></tt> +<br> +<tt><font color="#3333ff"> +CORBA::Object_var +obj</font></tt> +<br> +<tt><font color="#3333ff"> += orb->resolve_initial_references ("RootPOA"</font></tt> +<br> +<tt><font color="#3333ff"> +ACE_ENV_ARG_PARAMETER);</font></tt> +<br> +<tt><font color="#3333ff"> ACE_TRY_CHECK;</font></tt> +</p> +<p><tt><font color="#3333ff"> +PortableServer::POA_var +poa</font></tt> +<br> +<tt><font color="#3333ff"> += PortableServer::POA::_narrow (obj.in ()</font></tt> +<br> +<tt><font color="#3333ff"> +ACE_ENV_ARG_PARAMETER);</font></tt> +<br> +<tt><font color="#3333ff"> ACE_TRY_CHECK;</font></tt> +</p> +<p><tt><font color="#3333ff"> // Activate +POA manager</font></tt> +<br> +<tt><font color="#3333ff"> +PortableServer::POAManager_var +mgr</font></tt> +<br> +<tt><font color="#3333ff"> += poa->the_POAManager (ACE_ENV_SINGLE_ARG_PARAMETER);</font></tt> +<br> +<tt><font color="#3333ff"> ACE_TRY_CHECK;</font></tt> +</p> +<p><tt><font color="#3333ff"> +mgr->activate +(ACE_ENV_SINGLE_ARG_PARAMETER);</font></tt> +<br> +<tt><font color="#3333ff"> ACE_TRY_CHECK;</font></tt> +</p> +<p><tt><font color="#3333ff"> +CIAO::ComponentServer_Impl +*comserv_servant;</font></tt> +</p> +<p><tt><font color="#3333ff"> +CIAO::Static_Configurator +configurator;</font></tt> +<br> +<tt><font color="#3333ff"> int +containers_table_size +=</font></tt> +<br> +<tt><font color="#3333ff"> +sizeof +(containers_table_)/sizeof(CIAO::Static_Config::ContainerAttributes);</font></tt> +<br> +<tt><font color="#3333ff"> int +homes_table_size +=</font></tt> +<br> +<tt><font color="#3333ff"> +sizeof (homes_table_)/sizeof(CIAO::Static_Config::HomeAttributes);</font></tt> +<br> +<tt><font color="#3333ff"> int +components_table_size +=</font></tt> +<br> +<tt><font color="#3333ff"> +sizeof +(components_table_)/sizeof(CIAO::Static_Config::ComponentAttributes);</font></tt> +<br> +<tt><font color="#3333ff"> int +component_registrations_table_size +=</font></tt> +<br> +<tt><font color="#3333ff"> +sizeof +(component_registrations_table_)/sizeof(CIAO::Assembly_Placement::componentinstantiation::Register_Info);</font></tt> +<br> +<tt><font color="#3333ff"> int +connections_table_size +=</font></tt> +<br> +<tt><font color="#3333ff"> +sizeof +(connections_table_)/sizeof(CIAO::Static_Config::ConnectionAttributes);</font></tt> +<br> +<tt><font color="#3333ff"> int +resolvers_table_size +=</font></tt> +<br> +<tt><font color="#3333ff"> +sizeof +(resolvers_table_)/sizeof(CIAO::Static_Config::ResolveInfoAttributes);</font></tt> +</p> +<p><tt><font color="#3333ff"> +CIAO::HOMECREATOR_FUNCPTR_MAP +home_creator_fptr_map;</font></tt> +<br> +<tt><font color="#3333ff"> +CIAO::HOMESERVANTCREATOR_FUNCPTR_MAP +homesvnt_creator_fptr_map;</font></tt> +<br> +<tt><font color="#3333ff"> +CIAO::Static_Config_EntryPoints_Maps +maps;</font></tt> +<br> +<tt><font color="#3333ff"> +maps.home_creator_funcptr_map_ += &home_creator_fptr_map;</font></tt> +<br> +<tt><font color="#3333ff"> +maps.home_servant_creator_funcptr_map_ += &homesvnt_creator_fptr_map;</font></tt> +</p> +<p><tt><font color="#3333ff"> int i=0;</font></tt> +<br> +<tt><font color="#3333ff"> for (i=0; +i<homes_table_size; ++i)</font></tt> +<br> +<tt><font color="#3333ff"> +{</font></tt> +<br> +<tt><font color="#3333ff"> +home_creator_fptr_map.bind (homes_table_[i].executor_entrypt_,</font></tt> +<br> +<tt><font color="#3333ff"> +homes_table_[i].executor_fptr_);</font></tt> +</p> +<p><tt><font color="#3333ff"> +homesvnt_creator_fptr_map.bind (homes_table_[i].servant_entrypt_,</font></tt> +<br> +<tt><font color="#3333ff"> +homes_table_[i].servant_fptr_);</font></tt> +<br> +<tt><font color="#3333ff"> +}</font></tt> +</p> +<p><tt><font color="#3333ff"> +ACE_NEW_RETURN +(comserv_servant,</font></tt> +<br> +<tt><font color="#3333ff"> +CIAO::ComponentServer_Impl (orb.in (),</font></tt> +<br> +<tt><font color="#3333ff"> +poa.in (),</font></tt> +<br> +<tt><font color="#3333ff"> +1,</font></tt> +<br> +<tt><font color="#3333ff"> +&maps),</font></tt> +<br> +<tt><font color="#3333ff"> +-1);</font></tt> +</p> +<p><tt><font color="#3333ff"> +PortableServer::ServantBase_var +safe_servant (comserv_servant);</font></tt> +</p> +<p><tt><font color="#3333ff"> +Components::ConfigValues +configs;</font></tt> +</p> +<p><tt><font color="#3333ff"> +comserv_servant->init +(configs</font></tt> +<br> +<tt><font color="#3333ff"> +ACE_ENV_ARG_PARAMETER);</font></tt> +<br> +<tt><font color="#3333ff"> ACE_TRY_CHECK;</font></tt> +</p> +<p><tt><font color="#3333ff"> // +Configuring +ComponentServer.</font></tt> +<br> +<tt><font color="#3333ff"> +PortableServer::ObjectId_var +cs_oid</font></tt> +<br> +<tt><font color="#3333ff"> += poa->activate_object (comserv_servant</font></tt> +<br> +<tt><font color="#3333ff"> +ACE_ENV_ARG_PARAMETER);</font></tt> +<br> +<tt><font color="#3333ff"> ACE_TRY_CHECK;</font></tt> +</p> +<p><tt><font color="#3333ff"> obj = +poa->id_to_reference +(cs_oid.in ()</font></tt> +<br> +<tt><font color="#3333ff"> +ACE_ENV_ARG_PARAMETER);</font></tt> +<br> +<tt><font color="#3333ff"> ACE_TRY_CHECK;</font></tt> +</p> +<p><tt><font color="#3333ff"> +Components::Deployment::ComponentServer_var +comserv_obj =</font></tt> +<br> +<tt><font color="#3333ff"> +Components::Deployment::ComponentServer::_narrow (obj.in ()</font></tt> +<br> +<tt><font color="#3333ff"> +ACE_ENV_ARG_PARAMETER);</font></tt> +<br> +<tt><font color="#3333ff"> ACE_TRY_CHECK;</font></tt> +</p> +<p><tt><font color="#3333ff"> if +(CORBA::is_nil +(comserv_obj.in ()))</font></tt> +<br> +<tt><font color="#3333ff"> +ACE_ERROR_RETURN ((LM_ERROR, "Unable to activate ComponentServer +object\n"), +-1);</font></tt> +<br> + +</p> +<p><tt><font color="#3333ff"> +Components::Deployment::ServerActivator_var +activator;</font></tt> +<br> +<tt><font color="#3333ff"> +Components::ConfigValues_var +config = new Components::ConfigValues;</font></tt> +</p> +<p><tt><font color="#3333ff"> +comserv_servant->set_objref +(activator.in (),</font></tt> +<br> +<tt><font color="#3333ff"> +config,</font></tt> +<br> +<tt><font color="#3333ff"> +comserv_obj.in ()</font></tt> +<br> +<tt><font color="#3333ff"> +ACE_ENV_ARG_PARAMETER);</font></tt> +<br> +<tt><font color="#3333ff"> ACE_TRY_CHECK;</font></tt> +</p> +<p><a name="static config engine"></a><tt><font color="#ff0000">configurator.configure +(orb.in (),</font></tt> +<br> +<tt><font color="#ff0000"> +comserv_obj.in (),</font></tt> +<br> +<tt><font color="#ff0000"> +containers_table_,</font></tt> +<br> +<tt><font color="#ff0000"> +containers_table_size,</font></tt> +<br> +<tt><font color="#ff0000"> +homes_table_,</font></tt> +<br> +<tt><font color="#ff0000"> +homes_table_size,</font></tt> +<br> +<tt><font color="#ff0000"> +components_table_,</font></tt> +<br> +<tt><font color="#ff0000"> +components_table_size,</font></tt> +<br> +<tt><font color="#ff0000"> +component_registrations_table_,</font></tt> +<br> +<tt><font color="#ff0000"> +component_registrations_table_size,</font></tt> +<br> +<tt><font color="#ff0000"> +connections_table_,</font></tt> +<br> +<tt><font color="#ff0000"> +connections_table_size,</font></tt> +<br> +<tt><font color="#ff0000"> +resolvers_table_,</font></tt> +<br> +<tt><font color="#ff0000"> +resolvers_table_size);</font></tt> +</p> +<p><tt><font color="#3333ff"> +CORBA::String_var +str = orb->object_to_string (comserv_obj.in ()</font></tt> +<br> +<tt><font color="#3333ff"> +ACE_ENV_ARG_PARAMETER);</font></tt> +</p> +<p><tt><font color="#3333ff"> +CIAO::Utility::write_IOR +(ior_file_name_, str.in ());</font></tt> +<br> +<tt><font color="#3333ff"> ACE_DEBUG +((LM_INFO, "ComponentServer IOR: %s\n", str.in ()));</font></tt> +</p> +<p><tt><font color="#3333ff"> ACE_DEBUG +((LM_DEBUG,</font></tt> +<br> +<tt><font color="#3333ff"> +"Running ComponentServer...\n"));</font></tt> +</p> +<p><tt><font color="#3333ff"> // Run the +main event loop for the ORB.</font></tt> +<br> +<tt><font color="#3333ff"> orb->run +(ACE_ENV_SINGLE_ARG_PARAMETER);</font></tt> +<br> +<tt><font color="#3333ff"> ACE_TRY_CHECK</font></tt> +<br> +<tt><font color="#3333ff"> }</font></tt> +<br> +<tt><font color="#3333ff"> ACE_CATCHANY</font></tt> +<br> +<tt><font color="#3333ff"> {</font></tt> +<br> +<tt><font color="#3333ff"> +ACE_PRINT_EXCEPTION +(ACE_ANY_EXCEPTION,</font></tt> +<br> +<tt><font color="#3333ff"> +"server::main \n");</font></tt> +<br> +<tt><font color="#3333ff"> return 1;</font></tt> +<br> +<tt><font color="#3333ff"> }</font></tt> +<br> +<tt><font color="#3333ff"> ACE_ENDTRY;</font></tt> +</p> +<p><tt><font color="#3333ff"> return 0;</font></tt> +<br> +<tt><font color="#3333ff">}</font></tt> +</p> +<p><a name="Static_CCM_App.mpc"></a><b><u>Static_CCM_App.mpc</u></b> +<br> +<tt><font color="#3333ff">project(Static_CCM_App) : ciao_server, +ciao_client, +rtcorba, rtportableserver, iortable, acexml {</font></tt> +<br> +<tt><font color="#3333ff">includes += +$(ACE_ROOT)/TAO/CIAO/tools/Assembly_Deployer</font></tt> +<br> +<tt><font color="#3333ff">includes += +$(ACE_ROOT)/TAO/CIAO/tools/static_configurator</font></tt> +<br> +<tt><font color="#3333ff">libs += CIAO_XML_Helpers Static_Configurator</font></tt> +<br> +<tt><font color="#3333ff">after += CIAO_XML_Helpers Static_Configurator</font></tt> +<br> + +</p> +<p><tt><font color="#3333ff">libs += EC_exec</font></tt> +<br> +<tt><font color="#3333ff">after += EC_exec</font></tt> +<br> +<tt><font color="#3333ff">libs += EC_svnt</font></tt> +<br> +<tt><font color="#3333ff">after += EC_svnt</font></tt> +<br> +<tt><font color="#3333ff">libs += BMDevice_exec</font></tt> +<br> +<tt><font color="#3333ff">after += BMDevice_exec</font></tt> +<br> +<tt><font color="#3333ff">libs += BMDevice_svnt</font></tt> +<br> +<tt><font color="#3333ff">after += BMDevice_svnt</font></tt> +<br> +<tt><font color="#3333ff">libs += BMClosedED_exec</font></tt> +<br> +<tt><font color="#3333ff">after += BMClosedED_exec</font></tt> +<br> +<tt><font color="#3333ff">libs += BMClosedED_svnt</font></tt> +<br> +<tt><font color="#3333ff">after += BMClosedED_svnt</font></tt> +<br> +<tt><font color="#3333ff">libs += BMDisplay_exec</font></tt> +<br> +<tt><font color="#3333ff">after += BMDisplay_exec</font></tt> +<br> +<tt><font color="#3333ff">libs += BMDisplay_svnt</font></tt> +<br> +<tt><font color="#3333ff">after += BMDisplay_svnt</font></tt> +<br> +<tt><font color="#3333ff"> Source_Files {</font></tt> +<br> +<tt><font color="#3333ff"> +Static_CCM_App.cpp</font></tt> +<br> +<tt><font color="#3333ff"> }</font></tt> +</p> +<p><tt><font color="#3333ff"> IDL_Files {</font></tt> +<br> +<tt><font color="#3333ff"> }</font></tt> +<br> +<tt><font color="#3333ff">}</font></tt> +</p> +<p><a name="Modified Static_CCM_App.cpp"></a><b><u>Modified +Static_CCM_App.cpp</u></b> <br> +</p> +<p><small><span style="font-weight: bold;">(Highlighted text is +manually added to the +generated .cpp file)<br> +<br> +</span></small><tt>#include "ComponentServer_Impl.h"</tt> +<br> +<tt>#include "CIAO_ServersC.h"</tt> +<br> +<tt>#include "Server_init.h"</tt> +<br> +<tt>#include "Static_Configurator.h"</tt> +<br> +<tt>#include "ace/SString.h"</tt> +<br> +<tt>#include "ace/Get_Opt.h"</tt> +</p> +<p><tt>#include "Static_Assembly_Config.h"</tt> +</p> +<p><tt>char *ior_file_name_ = "comp_serv.ior";</tt> +<br> +<b><tt><font color="#990000">int rate = 2;</font></tt></b> +</p> +<p><tt>int</tt> +<br> +<tt>parse_args (int argc, char *argv[])</tt> +<br> +<tt>{</tt> +<br> +<tt> ACE_Get_Opt get_opts (argc, argv, "k:o:");</tt> +<br> +<tt> int c;</tt> +</p> +<p><tt> while ((c = get_opts ()) != -1)</tt> +<br> +<tt> switch (c)</tt> +<br> +<tt> {</tt> +<br> +<tt> case 'o': // get the file +name to write to</tt> +<br> +<tt> ior_file_name_ = +get_opts.opt_arg +();</tt> +<br> +<tt> break;</tt> +</p> +<p><tt> case '?': // display help +for +use of the server.</tt> +<br> +<tt> default:</tt> +<br> +<tt> ACE_ERROR_RETURN +((LM_ERROR,</tt> +<br> +<tt> +"usage: %s\n"</tt> +<br> +<tt> +"-o <ior_output_file>\n"</tt> +<br> +<tt> +"\n",</tt> +<br> +<tt> +argv [0]),</tt> +<br> +<tt> +-1);</tt> +<br> +<tt> }</tt> +</p> +<p><tt> return 0;</tt> +<br> +<tt>}</tt> +<br> + +</p> +<p><tt>int</tt> +<br> +<tt>main (int argc, char *argv[])</tt> +<br> +<tt>{</tt> +<br> +<tt> ACE_TRY_NEW_ENV</tt> +<br> +<tt> {</tt> +<br> +<tt> // Initialize orb</tt> +<br> +<tt> CORBA::ORB_var orb = CORBA::ORB_init +(argc,</tt> +<br> +<tt> +argv,</tt> +<br> +<tt> +0</tt> +<br> +<tt> +ACE_ENV_ARG_PARAMETER);</tt> +<br> +<tt> ACE_TRY_CHECK;</tt> +</p> +<p><tt> CIAO::Server_init (orb.in ());</tt> +</p> +<p><tt> if (parse_args (argc, argv) != 0)</tt> +<br> +<tt> return -1;</tt> +</p> +<p><tt> // Get reference to Root POA.</tt> +<br> +<tt> CORBA::Object_var obj</tt> +<br> +<tt> = +orb->resolve_initial_references +("RootPOA"</tt> +<br> +<tt> +ACE_ENV_ARG_PARAMETER);</tt> +<br> +<tt> ACE_TRY_CHECK;</tt> +</p> +<p><tt> PortableServer::POA_var poa</tt> +<br> +<tt> = +PortableServer::POA::_narrow +(obj.in ()</tt> +<br> +<tt> +ACE_ENV_ARG_PARAMETER);</tt> +<br> +<tt> ACE_TRY_CHECK;</tt> +</p> +<p><tt> // Activate POA manager</tt> +<br> +<tt> PortableServer::POAManager_var mgr</tt> +<br> +<tt> = poa->the_POAManager +(ACE_ENV_SINGLE_ARG_PARAMETER);</tt> +<br> +<tt> ACE_TRY_CHECK;</tt> +</p> +<p><tt> mgr->activate +(ACE_ENV_SINGLE_ARG_PARAMETER);</tt> +<br> +<tt> ACE_TRY_CHECK;</tt> +</p> +<p><tt> CIAO::ComponentServer_Impl +*comserv_servant;</tt> +</p> +<p><tt> CIAO::Static_Configurator +configurator;</tt> +<br> +<tt> int containers_table_size =</tt> +<br> +<tt> sizeof +(containers_table_)/sizeof(CIAO::Static_Config::ContainerAttributes);</tt> +<br> +<tt> int homes_table_size =</tt> +<br> +<tt> sizeof +(homes_table_)/sizeof(CIAO::Static_Config::HomeAttributes);</tt> +<br> +<tt> int components_table_size =</tt> +<br> +<tt> sizeof +(components_table_)/sizeof(CIAO::Static_Config::ComponentAttributes);</tt> +<br> +<tt> int +component_registrations_table_size +=</tt> +<br> +<tt> sizeof +(component_registrations_table_)/sizeof(CIAO::Assembly_Placement::componentinstantiation::Register_Info);</tt> +<br> +<tt> int connections_table_size =</tt> +<br> +<tt> sizeof +(connections_table_)/sizeof(CIAO::Static_Config::ConnectionAttributes);</tt> +<br> +<tt> int resolvers_table_size =</tt> +<br> +<tt> sizeof +(resolvers_table_)/sizeof(CIAO::Static_Config::ResolveInfoAttributes);</tt> +</p> +<p><tt> CIAO::HOMECREATOR_FUNCPTR_MAP +home_creator_fptr_map;</tt> +<br> +<tt> CIAO::HOMESERVANTCREATOR_FUNCPTR_MAP +homesvnt_creator_fptr_map;</tt> +<br> +<tt> CIAO::Static_Config_EntryPoints_Maps +maps;</tt> +<br> +<tt> maps.home_creator_funcptr_map_ = +&home_creator_fptr_map;</tt> +<br> +<tt> +maps.home_servant_creator_funcptr_map_ += &homesvnt_creator_fptr_map;</tt> +</p> +<p><tt> int i=0;</tt> +<br> +<tt> for (i=0; i<homes_table_size; +++i)</tt> +<br> +<tt> {</tt> +<br> +<tt> +home_creator_fptr_map.bind +(homes_table_[i].executor_entrypt_,</tt> +<br> +<tt> +homes_table_[i].executor_fptr_);</tt> +</p> +<p><tt> +homesvnt_creator_fptr_map.bind +(homes_table_[i].servant_entrypt_,</tt> +<br> +<tt> +homes_table_[i].servant_fptr_);</tt> +<br> +<tt> }</tt> +</p> +<p><tt> ACE_NEW_RETURN (comserv_servant,</tt> +<br> +<tt> +CIAO::ComponentServer_Impl (orb.in (),</tt> +<br> +<tt> +poa.in (),</tt> +<br> +<tt> +1,</tt> +<br> +<tt> +&maps),</tt> +<br> +<tt> +-1);</tt> +</p> +<p><tt> PortableServer::ServantBase_var +safe_servant +(comserv_servant);</tt> +</p> +<p><tt> Components::ConfigValues configs;</tt> +</p> +<p><tt> comserv_servant->init (configs</tt> +<br> +<tt> +ACE_ENV_ARG_PARAMETER);</tt> +<br> +<tt> ACE_TRY_CHECK;</tt> +</p> +<p><tt> // Configuring ComponentServer.</tt> +<br> +<tt> PortableServer::ObjectId_var cs_oid</tt> +<br> +<tt> = +poa->activate_object +(comserv_servant</tt> +<br> +<tt> +ACE_ENV_ARG_PARAMETER);</tt> +<br> +<tt> ACE_TRY_CHECK;</tt> +</p> +<p><tt> obj = poa->id_to_reference +(cs_oid.in +()</tt> +<br> +<tt> +ACE_ENV_ARG_PARAMETER);</tt> +<br> +<tt> ACE_TRY_CHECK;</tt> +</p> +<p><tt> +Components::Deployment::ComponentServer_var +comserv_obj =</tt> +<br> +<tt> +Components::Deployment::ComponentServer::_narrow +(obj.in ()</tt> +<br> +<tt> +ACE_ENV_ARG_PARAMETER);</tt> +<br> +<tt> ACE_TRY_CHECK;</tt> +</p> +<p><tt> if (CORBA::is_nil (comserv_obj.in +()))</tt> +<br> +<tt> ACE_ERROR_RETURN +((LM_ERROR, +"Unable to activate ComponentServer object\n"), -1);</tt> +<br> + +</p> +<p><tt> +Components::Deployment::ServerActivator_var +activator;</tt> +<br> +<tt> Components::ConfigValues_var config += new Components::ConfigValues;</tt> +</p> +<p><tt> comserv_servant->set_objref +(activator.in +(),</tt> +<br> +<tt> +config,</tt> +<br> +<tt> +comserv_obj.in ()</tt> +<br> +<tt> +ACE_ENV_ARG_PARAMETER);</tt> +<br> +<tt> ACE_TRY_CHECK;</tt> +</p> +<p><tt> configurator.configure (orb.in (),</tt> +<br> +<tt> +comserv_obj.in (),</tt> +<br> +<tt> +containers_table_,</tt> +<br> +<tt> +containers_table_size,</tt> +<br> +<tt> +homes_table_,</tt> +<br> +<tt> +homes_table_size,</tt> +<br> +<tt> +components_table_,</tt> +<br> +<tt> +components_table_size,</tt> +<br> +<tt> +component_registrations_table_,</tt> +<br> +<tt> +component_registrations_table_size,</tt> +<br> +<tt> +connections_table_,</tt> +<br> +<tt> +connections_table_size,</tt> +<br> +<tt> +resolvers_table_,</tt> +<br> +<tt> +resolvers_table_size);</tt> +</p> +<p><tt> CORBA::String_var str = +orb->object_to_string +(comserv_obj.in ()</tt> +<br> +<tt> +ACE_ENV_ARG_PARAMETER);</tt> +</p> +<p><tt> CIAO::Utility::write_IOR +(ior_file_name_, +str.in ());</tt> +<br> +<tt> ACE_DEBUG ((LM_INFO, +"ComponentServer +IOR: %s\n", str.in ()));</tt> +</p> +<p><tt> ACE_DEBUG ((LM_DEBUG,</tt> +<br> +<tt> +"Running ComponentServer...\n"));</tt> +</p> +<p><b><tt><font color="#990000"> +CORBA::Object_var +pulser_obj</font></tt></b> +<br> +<b><tt><font color="#990000"> += orb->string_to_object ("file://ec.ior"</font></tt></b> +<br> +<b><tt><font color="#990000"> +ACE_ENV_ARG_PARAMETER);</font></tt></b> +<br> +<b><tt><font color="#990000"> +ACE_TRY_CHECK;</font></tt></b> +</p> +<p><b><tt><font color="#990000"> +BasicSP::EC_var +pulser</font></tt></b> +<br> +<b><tt><font color="#990000"> += BasicSP::EC::_narrow (pulser_obj.in ()</font></tt></b> +<br> +<b><tt><font color="#990000"> +ACE_ENV_ARG_PARAMETER);</font></tt></b> +<br> +<b><tt><font color="#990000"> +ACE_TRY_CHECK;</font></tt></b> +</p> +<p><b><tt><font color="#990000"> if +(CORBA::is_nil +(pulser.in ()))</font></tt></b> +<br> +<b><tt><font color="#990000"> +ACE_ERROR_RETURN ((LM_ERROR, "Unable to acquire 'EC' objref\n"), -1);</font></tt></b> +</p> +<p><b><tt><font color="#990000"> +pulser->hertz +(rate</font></tt></b> +<br> +<b><tt><font color="#990000"> +ACE_ENV_ARG_PARAMETER);</font></tt></b> +<br> +<b><tt><font color="#990000"> +ACE_TRY_CHECK;</font></tt></b> +</p> +<p><b><tt><font color="#990000"> +ACE_DEBUG +((LM_DEBUG, "Start up the Event services\n"));</font></tt></b> +</p> +<p><b><tt><font color="#990000"> +pulser->start +(ACE_ENV_SINGLE_ARG_PARAMETER);</font></tt></b> +<br> +<b><tt><font color="#990000"> +ACE_TRY_CHECK;</font></tt></b> +</p> +<p><tt> // Run the main event loop for +the +ORB.</tt> +<br> +<tt> orb->run +(ACE_ENV_SINGLE_ARG_PARAMETER);</tt> +<br> +<tt> ACE_TRY_CHECK</tt> +<br> +<tt> }</tt> +<br> +<tt> ACE_CATCHANY</tt> +<br> +<tt> {</tt> +<br> +<tt> ACE_PRINT_EXCEPTION +(ACE_ANY_EXCEPTION,</tt> +<br> +<tt> +"server::main \n");</tt> +<br> +<tt> return 1;</tt> +<br> +<tt> }</tt> +<br> +<tt> ACE_ENDTRY;</tt> +</p> +<p><tt> return 0;</tt> +<br> +<tt>}</tt> +</p> +<p><a name="Modified Static_CCM_App.mpc"></a><b><u>Modified +Static_CCM_App.mpc</u></b> <br> +</p> +<p><small><span style="font-weight: bold;">(Highlighted text is +manually added to the +generated .cpp file)<br> +<br> +</span></small><tt>project(Static_CCM_App) : ciao_server, ciao_client, +rtcorba, +rtportableserver, +iortable, acexml {</tt> +<br> +<tt>includes += $(ACE_ROOT)/TAO/CIAO/tools/Assembly_Deployer</tt> +<br> +<tt>includes += $(ACE_ROOT)/TAO/CIAO/tools/static_configurator</tt> +<br> +<tt>libs += CIAO_XML_Helpers Static_Configurator</tt> +<br> +<tt>after += CIAO_XML_Helpers Static_Configurator</tt> +</p> +<p><b><tt><font color="#990000">libs += BasicSP_stub BasicSP_svnt</font></tt></b> +<br> +<b><tt><font color="#990000">after += BasicSP_stub BasicSP_svnt</font></tt></b> +<br> +<tt>libs += EC_exec</tt> +<br> +<tt>after += EC_exec</tt> +<br> +<tt>libs += EC_svnt <b><font color="#990000">EC_stub</font></b></tt> +<br> +<tt>after += EC_svnt <b><font color="#990000">EC_stub</font></b></tt> +<br> +<tt>libs += BMDevice_exec</tt> +<br> +<tt>after += BMDevice_exec</tt> +<br> +<tt>libs += BMDevice_svnt <b><font color="#990000">BMDevice_stub</font></b></tt> +<br> +<tt>after += BMDevice_svnt <b><font color="#990000">BMDevice_stub</font></b></tt> +<br> +<tt>libs += BMClosedED_exec</tt> +<br> +<tt>after += BMClosedED_exec</tt> +<br> +<tt>libs += BMClosedED_svnt <b><font color="#990000">BMClosedED_stub</font></b></tt> +<br> +<tt>after += BMClosedED_svnt <b><font color="#990000">BMClosedED_stub</font></b></tt> +<br> +<tt>libs += BMDisplay_exec</tt> +<br> +<tt>after += BMDisplay_exec</tt> +<br> +<tt>libs += BMDisplay_svnt <b><font color="#990000">BMDisplay_stub</font></b></tt> +<br> +<tt>after += BMDisplay_svnt <b><font color="#990000">BMDisplay_stub</font></b></tt> +</p> +<p><tt> Source_Files {</tt> +<br> +<tt> Static_CCM_App.cpp</tt> +<br> +<tt> }</tt> +</p> +<p><tt> IDL_Files {</tt> +<br> +<tt> }</tt> +<br> +<tt>}</tt> +<br> + +</p> +</body> +</html> diff --git a/modules/CIAO/docs/static_config_rtexample.html b/modules/CIAO/docs/static_config_rtexample.html new file mode 100644 index 00000000000..2e87e5aabe1 --- /dev/null +++ b/modules/CIAO/docs/static_config_rtexample.html @@ -0,0 +1,1079 @@ +<!DOCTYPE html PUBLIC "-//w3c//dtd html 4.0 transitional//en"> +<html> +<head> + <meta http-equiv="Content-Type" + content="text/html; charset=iso-8859-1"> + <meta name="Author" content="Venkita Subramonian"> + <meta name="GENERATOR" + content="Mozilla/4.76 [en] (Windows NT 5.0; U) [Netscape]"> + <title>BasicSP example using CIAO Static Configurator</title> +<!-- $Id$ --> +</head> +<body> +This example illustrates +how to use the CIAO static configurator to build applications using +RTCORBA policies statically. +From the <a href="../examples/OEP/BasicSP">BasicSP</a> directory do +the +following. +<p><b><tt>> cd descriptors</tt></b> +<br> +<b><tt>> $CIAO_ROOT/tools/static_configurator/Static_Assembly_Parser +-a BasicSP-rt.cad</tt></b> +</p> +<p>The following files are generated - +</p> +<p><a href="#Static_Assembly_Config.h">Static_Assembly_Config.h</a> +<br> +<a href="#Modified%20Static_CCM_App.cpp">Static_CCM_App.cpp</a> +<br> +<a href="#Modified%20Static_CCM_App.mpc">Static_CCM_App.mpc</a> +</p> +<p><a href="#Static_Assembly_Config.h">Static_Assembly_Config.h</a> +contains +the intermediate representation of all the parsed component and +assembly +information obtained from the XML files. <a href="#Static_CCM_App.cpp">Static_CCM_App.cpp</a> +contains the main driver application. Here a runtime <a + href="#static_config_engine">static +configuration engine</a> is used to create containers, homes, +components, +etc and then establish necessary connections between the components. +The configuration engine is also used to <a href="#rtconfig">configure</a> +the containers and RTORB with the appropriate RTCORBA policies +specified declaratively in the .rtcad file. In +the BasicSP example, an external controller (see <tt><a + href="../examples/OEP/BasicSP/README">$CIAO_ROOT/examples/OEP/BasicSP/README</a></tt>) +is used to start or stop a pulser. The generated main driver +application +(Static_CCM_App.cpp) is <a href="#Modified%20Static_CCM_App.cpp">modified</a> +to add code to trigger the pulser object on. The generated .mpc file is +<a href="#Modified%20Static_CCM_App.mpc">modified</a> +to add all other necessary files so that the application can be built +statically. +Note that the static configurator only generates only certain file +names +in the .mpc file. These filenames are obtained from the XML descriptor +files. All other necessary files have to be added manually as +indicated. +</p> +<p>Now the static build files can be generated by running the mpc +utility. +</p> +<p><b><tt>> cd ..</tt></b> +<br> +<b><tt>> $ACE_ROOT/bin/mpc -static Static_CCM_App.mpc</tt></b> +</p> +<p><a name="Static_Assembly_Config.h"></a><b><u>Static_Assembly_Config.h</u></b> +<br> +<span style="font-family: monospace;">#include "Static_Assembly.h"</span><br + style="font-family: monospace;"> +<br style="font-family: monospace;"> +<span style="font-family: monospace;">#include "CCM_ContainerC.h"</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;">#include "Container_Base.h"</span><br + style="font-family: monospace;"> +<br style="font-family: monospace;"> +<span style="font-family: monospace;">//Containers</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;">CIAO::Static_Config::ContainerAttributes +containers_table_[]= </span><br style="font-family: monospace;"> +<span style="font-family: monospace;">{</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;"> {"POLICY_1", +0},</span><br style="font-family: monospace;"> +<span style="font-family: monospace;"> {"", 0}</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;">};</span><br + style="font-family: monospace;"> +<br style="font-family: monospace;"> +<br style="font-family: monospace;"> +<span style="font-family: monospace;">extern "C" +::Components::HomeExecutorBase_ptr createECHome_Impl (void);</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;">extern "C" +::PortableServer::Servant createECHome_Servant </span><br + style="font-family: monospace;"> +<span style="font-family: monospace;"> + (::Components::HomeExecutorBase_ptr p,</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;"> + ::CIAO::Session_Container *c</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;"> + ACE_ENV_ARG_DECL_WITH_DEFAULTS);</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;">extern "C" +::Components::HomeExecutorBase_ptr createBMDeviceHome_Impl (void);</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;">extern "C" +::PortableServer::Servant createBMDeviceHome_Servant </span><br + style="font-family: monospace;"> +<span style="font-family: monospace;"> + (::Components::HomeExecutorBase_ptr p,</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;"> + ::CIAO::Session_Container *c</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;"> + ACE_ENV_ARG_DECL_WITH_DEFAULTS);</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;">extern "C" +::Components::HomeExecutorBase_ptr createBMClosedEDHome_Impl (void);</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;">extern "C" +::PortableServer::Servant createBMClosedEDHome_Servant </span><br + style="font-family: monospace;"> +<span style="font-family: monospace;"> + (::Components::HomeExecutorBase_ptr p,</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;"> + ::CIAO::Session_Container *c</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;"> + ACE_ENV_ARG_DECL_WITH_DEFAULTS);</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;">extern "C" +::Components::HomeExecutorBase_ptr createBMDisplayHome_Impl (void);</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;">extern "C" +::PortableServer::Servant createBMDisplayHome_Servant </span><br + style="font-family: monospace;"> +<span style="font-family: monospace;"> + (::Components::HomeExecutorBase_ptr p,</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;"> + ::CIAO::Session_Container *c</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;"> + ACE_ENV_ARG_DECL_WITH_DEFAULTS);</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;">//Homes</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;">CIAO::Static_Config::HomeAttributes +homes_table_[]= </span><br style="font-family: monospace;"> +<span style="font-family: monospace;">{</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;"> {"a_ECHome", +"DCE:3148F760-F2ED-4204-A775-6B972C10E8CB", "createECHome_Impl", +createECHome_Impl, "DCE:75309233-0E0A-4cfb-B186-3E99F69B1D40", +"createECHome_Servant", createECHome_Servant, 0, 0 },</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;"> +{"a_BMDeviceHome", "DCE:82C2B032-37F0-4315-A59F-7020D3264E4D", +"createBMDeviceHome_Impl", createBMDeviceHome_Impl, +"DCE:93D254CF-9538-44e8-BB98-AABCD134ADD3", +"createBMDeviceHome_Servant", createBMDeviceHome_Servant, 0, 0 },</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;"> +{"a_BMClosedEDHome", "DCE:8E6C468D-A39F-46b4-962B-265F1AA8D538", +"createBMClosedEDHome_Impl", createBMClosedEDHome_Impl, +"DCE:CDC06FCA-50FC-43ca-8ECC-BEFBD33FEE78", +"createBMClosedEDHome_Servant", createBMClosedEDHome_Servant, 0, 0 },</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;"> +{"a_BMDisplayHome", "DCE:8E92655E-CA07-46C8-B127-0F0872A8CC29", +"createBMDisplayHome_Impl", createBMDisplayHome_Impl, +"DCE:D7984625-8561-431d-9927-4E498B317C02", +"createBMDisplayHome_Servant", createBMDisplayHome_Servant, 1, 0 }</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;">};</span><br + style="font-family: monospace;"> +<br style="font-family: monospace;"> +<br style="font-family: monospace;"> +<span style="font-family: monospace;">//Components</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;">CIAO::Static_Config::ComponentAttributes +components_table_[]= </span><br style="font-family: monospace;"> +<span style="font-family: monospace;">{</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;"> {"a_EC", 0, 0, +0 },</span><br style="font-family: monospace;"> +<span style="font-family: monospace;"> {"a_BMDevice", +-1, -1, 1 },</span><br style="font-family: monospace;"> +<span style="font-family: monospace;"> +{"a_BMClosedED", -1, -1, 2 },</span><br style="font-family: monospace;"> +<span style="font-family: monospace;"> +{"a_BMDisplay", -1, -1, 3 }</span><br style="font-family: monospace;"> +<span style="font-family: monospace;">};</span><br + style="font-family: monospace;"> +<br style="font-family: monospace;"> +<br style="font-family: monospace;"> +<span style="font-family: monospace;">//Component Registrations</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;">CIAO::Assembly_Placement::componentinstantiation::Register_Info +component_registrations_table_[]= </span><br + style="font-family: monospace;"> +<span style="font-family: monospace;">{</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;"> +{CIAO::Assembly_Placement::componentinstantiation::COMPONENT, +CIAO::Assembly_Placement::componentinstantiation::IORFILE, "", "ec.ior" +}</span><br style="font-family: monospace;"> +<span style="font-family: monospace;">};</span><br + style="font-family: monospace;"> +<br style="font-family: monospace;"> +<br style="font-family: monospace;"> +<span style="font-family: monospace;">//Connections</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;">CIAO::Static_Config::ConnectionAttributes +connections_table_[]= </span><br style="font-family: monospace;"> +<span style="font-family: monospace;">{</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;"> +{CIAO::Assembly_Connection::PUBLISHER_CONSUMER, "", "timeout", 0, 1, 0, +0 },</span><br style="font-family: monospace;"> +<span style="font-family: monospace;"> +{CIAO::Assembly_Connection::PUBLISHER_CONSUMER, "", "data_available", +3, 4, 0, 0 },</span><br style="font-family: monospace;"> +<span style="font-family: monospace;"> +{CIAO::Assembly_Connection::PUBLISHER_CONSUMER, "", "out_avail", 6, 7, +0, 0 },</span><br style="font-family: monospace;"> +<span style="font-family: monospace;"> +{CIAO::Assembly_Connection::INTERFACE, "", "datain", 9, 10, 0, 0 },</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;"> +{CIAO::Assembly_Connection::INTERFACE, "", "comp_data", 12, 13, 0, 0 }</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;">};</span><br + style="font-family: monospace;"> +<br style="font-family: monospace;"> +<br style="font-family: monospace;"> +<span style="font-family: monospace;">//Resolver Infos</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;">CIAO::Static_Config::ResolveInfoAttributes +resolvers_table_[]= </span><br style="font-family: monospace;"> +<span style="font-family: monospace;">{</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;"> +{CIAO::Assembly_Connection::COMP_IDREF, "a_EC", -1, 0 },</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;"> +{CIAO::Assembly_Connection::CONSUMER, "timeout", 2, 0 },</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;"> +{CIAO::Assembly_Connection::COMP_IDREF, "a_BMDevice", -1, 0 },</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;"> +{CIAO::Assembly_Connection::COMP_IDREF, "a_BMDevice", -1, 0 },</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;"> +{CIAO::Assembly_Connection::CONSUMER, "in_avail", 5, 0 },</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;"> +{CIAO::Assembly_Connection::COMP_IDREF, "a_BMClosedED", -1, 0 },</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;"> +{CIAO::Assembly_Connection::COMP_IDREF, "a_BMClosedED", -1, 0 },</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;"> +{CIAO::Assembly_Connection::CONSUMER, "data_ready", 8, 0 },</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;"> +{CIAO::Assembly_Connection::COMP_IDREF, "a_BMDisplay", -1, 0 },</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;"> +{CIAO::Assembly_Connection::COMP_IDREF, "a_BMClosedED", -1, 0 },</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;"> +{CIAO::Assembly_Connection::PROVIDER, "data_read", 11, 0 },</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;"> +{CIAO::Assembly_Connection::COMP_IDREF, "a_BMDevice", -1, 0 },</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;"> +{CIAO::Assembly_Connection::COMP_IDREF, "a_BMDisplay", -1, 0 },</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;"> +{CIAO::Assembly_Connection::PROVIDER, "dataout", 14, 0 },</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;"> +{CIAO::Assembly_Connection::COMP_IDREF, "a_BMClosedED", -1, 0 }</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;">};</span><br + style="font-family: monospace;"> +<br style="font-family: monospace;"> +<br style="font-family: monospace;"> +<span style="font-family: monospace;">//Thread Pool</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;">CIAO::Static_Config::ThreadPoolAttributes +thread_pool_table_[]= </span><br style="font-family: monospace;"> +<span style="font-family: monospace;">{</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;"> +{"common_pool", 0, 10, 20, 1, 0, 0, 0},</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;"> +{"high_prio_pool", 0, 2, 2, 3, 0, 0, 0}</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;">};</span><br + style="font-family: monospace;"> +<br style="font-family: monospace;"> +<br style="font-family: monospace;"> +<span style="font-family: monospace;">//Lanes</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;">CIAO::Static_Config::LaneAttributes +lane_table_[]= </span><br style="font-family: monospace;"> +<span style="font-family: monospace;">{</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;"> {1, 100, 300},</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;"> {2, 2, 2},</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;"> {3, 1, 2},</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;"> {1, 10, 30},</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;"> {2, 3, 3},</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;"> {3, 1, 2}</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;">};</span><br + style="font-family: monospace;"> +<br style="font-family: monospace;"> +<br style="font-family: monospace;"> +<span style="font-family: monospace;">//ThreadPoolLanes</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;">CIAO::Static_Config::ThreadPoolLanesAttributes +thread_pool_lanes_table_[]= </span><br style="font-family: monospace;"> +<span style="font-family: monospace;">{</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;"> +{"shared_pool", 0, 0, 2, 0, 0, 0, 0},</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;"> {"laned_pool", +0, 3, 5, 0, 0, 0, 0}</span><br style="font-family: monospace;"> +<span style="font-family: monospace;">};</span><br + style="font-family: monospace;"> +<br style="font-family: monospace;"> +<br style="font-family: monospace;"> +<span style="font-family: monospace;">//Bands</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;">CIAO::Static_Config::BandAttributes +band_table_[]= </span><br style="font-family: monospace;"> +<span style="font-family: monospace;">{</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;"> {1, 1},</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;"> {2, 2},</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;"> {3, 3000}</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;">};</span><br + style="font-family: monospace;"> +<br style="font-family: monospace;"> +<br style="font-family: monospace;"> +<span style="font-family: monospace;">//PriorityBands</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;">CIAO::Static_Config::PriorityBandsAttributes +priority_band_table_[]= </span><br style="font-family: monospace;"> +<span style="font-family: monospace;">{</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;"> +{"common_conn", 0, 2}</span><br style="font-family: monospace;"> +<span style="font-family: monospace;">};</span><br + style="font-family: monospace;"> +<br style="font-family: monospace;"> +<br style="font-family: monospace;"> +<span style="font-family: monospace;">//Policy Configs</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;">CIAO::Static_Config::PolicyConfigAttributes +policy_config_table_[]= </span><br style="font-family: monospace;"> +<span style="font-family: monospace;">{</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;"> +{RTCORBA::PRIORITY_MODEL_POLICY_TYPE, "", RTCORBA::SERVER_DECLARED, 2},</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;"> +{RTCORBA::THREADPOOL_POLICY_TYPE, "shared_pool", /*dummy variable*/ +RTCORBA::CLIENT_PROPAGATED, 0},</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;"> +{RTCORBA::PRIORITY_BANDED_CONNECTION_POLICY_TYPE, "common_conn", +/*dummy variable*/ RTCORBA::CLIENT_PROPAGATED, 0},</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;"> +{RTCORBA::THREADPOOL_POLICY_TYPE, "common_pool", /*dummy variable*/ +RTCORBA::CLIENT_PROPAGATED, 0},</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;"> +{RTCORBA::PRIORITY_MODEL_POLICY_TYPE, "", RTCORBA::CLIENT_PROPAGATED, 2}</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;">};</span><br + style="font-family: monospace;"> +<br style="font-family: monospace;"> +<br style="font-family: monospace;"> +<span style="font-family: monospace;">//Policy Set</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;">CIAO::Static_Config::PolicySetAttributes +policy_set_table_[]= </span><br style="font-family: monospace;"> +<span style="font-family: monospace;">{</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;"> {"POLICY_1", +0, 2},</span><br style="font-family: monospace;"> +<span style="font-family: monospace;"> {"POLICY_2", +3, 4}</span><br style="font-family: monospace;"> +<span style="font-family: monospace;">};</span><br> +<br> +<tt><font color="#3333ff"></font></tt></p> +<tt><font color="#3333ff"></font></tt><a + name="Modified Static_CCM_App.cpp"></a><b><u>Modified +Static_CCM_App.cpp</u></b> <br> +<p><span style="font-family: monospace;"></span><small><span + style="font-weight: bold;">(Highlighted text is manually added to the +generated .cpp file)</span></small></p> +<p><span style="font-family: monospace;">#include "RTServer_Impl.h"</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;">#include "CIAO_ServersC.h"</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;">#include "Server_init.h"</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;">#include "Static_Configurator.h"</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;">#include "ace/SString.h"</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;">#include "ace/Get_Opt.h"</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;">#include +"Static_Assembly_Config.h"</span><br style="font-family: monospace;"> +<span style="font-family: monospace;">#include +"tao/RTPortableServer/RTPortableServer.h"</span><br + style="font-family: monospace;"> +<span + style="font-family: monospace; color: rgb(153, 0, 0); font-weight: bold;">#include +"EC/ECC.h"</span><br + style="font-family: monospace; color: rgb(153, 0, 0); font-weight: bold;"> +<br style="font-family: monospace;"> +<span style="font-family: monospace;">char *ior_file_name_ = +"comp_serv.ior"; </span><br style="font-family: monospace;"> +<span + style="font-family: monospace; color: rgb(153, 0, 0); font-weight: bold;">int +rate = 2;</span><br style="font-family: monospace;"> +<span style="font-family: monospace;">int</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;">parse_args (int argc, char +*argv[])</span><br style="font-family: monospace;"> +<span style="font-family: monospace;">{</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;"> ACE_Get_Opt get_opts +(argc, argv, "k:o:");</span><br style="font-family: monospace;"> +<span style="font-family: monospace;"> int c;</span><br + style="font-family: monospace;"> +<br style="font-family: monospace;"> +<span style="font-family: monospace;"> while ((c = get_opts ()) +!= -1)</span><br style="font-family: monospace;"> +<span style="font-family: monospace;"> switch (c)</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;"> {</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;"> case +'o': // get the file name to write to</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;"> +ior_file_name_ = get_opts.opt_arg ();</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;"> break;</span><br + style="font-family: monospace;"> +<br style="font-family: monospace;"> +<span style="font-family: monospace;"> case +'?': // display help for use of the server.</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;"> default:</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;"> +ACE_ERROR_RETURN ((LM_ERROR,</span><br style="font-family: monospace;"> +<span style="font-family: monospace;"> +"usage: %s\n"</span><br style="font-family: monospace;"> +<span style="font-family: monospace;"> +"-o <ior_output_file>\n"</span><br style="font-family: monospace;"> +<span style="font-family: monospace;"> +"\n",</span><br style="font-family: monospace;"> +<span style="font-family: monospace;"> +argv [0]),</span><br style="font-family: monospace;"> +<span style="font-family: monospace;"> +-1);</span><br style="font-family: monospace;"> +<span style="font-family: monospace;"> }</span><br + style="font-family: monospace;"> +<br style="font-family: monospace;"> +<span style="font-family: monospace;"> return 0;</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;">}</span><br + style="font-family: monospace;"> +<br style="font-family: monospace;"> +<span style="font-family: monospace;">int</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;">main (int argc, char *argv[])</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;">{</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;"> ACE_TRY_NEW_ENV</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;"> {</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;"> // +Initialize orb</span><br style="font-family: monospace;"> +<span style="font-family: monospace;"> +CORBA::ORB_var orb = CORBA::ORB_init (argc,</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;"> +argv</span><br style="font-family: monospace;"> +<span style="font-family: monospace;"> +ACE_ENV_ARG_PARAMETER);</span><br style="font-family: monospace;"> +<br style="font-family: monospace;"> +<span style="font-family: monospace;"> +ACE_TRY_CHECK;</span><br style="font-family: monospace;"> +<br style="font-family: monospace;"> +<span style="font-family: monospace;"> +CIAO::Server_init (orb.in ());</span><br style="font-family: monospace;"> +<br style="font-family: monospace;"> +<span style="font-family: monospace;"> if +(parse_args (argc, argv) != 0)</span><br style="font-family: monospace;"> +<span style="font-family: monospace;"> +return -1;</span><br style="font-family: monospace;"> +<br style="font-family: monospace;"> +<span style="font-family: monospace;"> // +Get reference to Root POA.</span><br style="font-family: monospace;"> +<span style="font-family: monospace;"> +CORBA::Object_var object =</span><br style="font-family: monospace;"> +<span style="font-family: monospace;"> +orb->resolve_initial_references ("RootPOA"</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;"> +ACE_ENV_ARG_PARAMETER);</span><br style="font-family: monospace;"> +<span style="font-family: monospace;"> +ACE_TRY_CHECK;</span><br style="font-family: monospace;"> +<span style="font-family: monospace;"> +PortableServer::POA_var root_poa =</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;"> +PortableServer::POA::_narrow (object.in ()</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;"> + + ACE_ENV_ARG_PARAMETER);</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;"> // Get +reference to RTORB.</span><br style="font-family: monospace;"> +<span style="font-family: monospace;"> +object =</span><br style="font-family: monospace;"> +<span style="font-family: monospace;"> +orb->resolve_initial_references ("RTORB"</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;"> +ACE_ENV_ARG_PARAMETER);</span><br style="font-family: monospace;"> +<span style="font-family: monospace;"> +ACE_TRY_CHECK;</span><br style="font-family: monospace;"> +<br style="font-family: monospace;"> +<span style="font-family: monospace;"> +RTCORBA::RTORB_var rt_orb =</span><br style="font-family: monospace;"> +<span style="font-family: monospace;"> +RTCORBA::RTORB::_narrow (object.in ()</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;"> +ACE_ENV_ARG_PARAMETER);</span><br style="font-family: monospace;"> +<span style="font-family: monospace;"> +ACE_TRY_CHECK;</span><br style="font-family: monospace;"> +<br style="font-family: monospace;"> +<span style="font-family: monospace;"> // +Activate POA manager</span><br style="font-family: monospace;"> +<span style="font-family: monospace;"> +PortableServer::POAManager_var poa_manager =</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;"> +root_poa->the_POAManager (ACE_ENV_SINGLE_ARG_PARAMETER);</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;"> +ACE_TRY_CHECK;</span><small><span style="font-weight: bold;">(Highlighted +files are manually added to the generated mpc file)</span></small><br + style="font-family: monospace;"> +<br style="font-family: monospace;"> +<span style="font-family: monospace;"> +poa_manager->activate (ACE_ENV_SINGLE_ARG_PARAMETER);</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;"> +ACE_TRY_CHECK;</span><br style="font-family: monospace;"> +<br style="font-family: monospace;"> +<span style="font-family: monospace;"> +CIAO::RTServer::RTComponentServer_Impl *comserv_servant;</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;"> +CIAO::Static_Configurator configurator;</span><br + style="font-family: monospace;"> +<br style="font-family: monospace;"> +<span style="font-family: monospace;"> +int containers_table_size =</span><br style="font-family: monospace;"> +<span style="font-family: monospace;"> +sizeof +(containers_table_)/sizeof(CIAO::Static_Config::ContainerAttributes);</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;"> +int homes_table_size =</span><br style="font-family: monospace;"> +<span style="font-family: monospace;"> +sizeof (homes_table_)/sizeof(CIAO::Static_Config::HomeAttributes);</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;"> +int components_table_size =</span><br style="font-family: monospace;"> +<span style="font-family: monospace;"> +sizeof +(components_table_)/sizeof(CIAO::Static_Config::ComponentAttributes);</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;"> +int component_registrations_table_size =</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;"> +sizeof +(component_registrations_table_)/sizeof(CIAO::Assembly_Placement::componentinstantiation::Register_Info);</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;"> +int connections_table_size =</span><br style="font-family: monospace;"> +<span style="font-family: monospace;"> +sizeof +(connections_table_)/sizeof(CIAO::Static_Config::ConnectionAttributes);</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;"> +int resolvers_table_size =</span><br style="font-family: monospace;"> +<span style="font-family: monospace;"> +sizeof +(resolvers_table_)/sizeof(CIAO::Static_Config::ResolveInfoAttributes);</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;"> +int thread_pool_table_size=</span><br style="font-family: monospace;"> +<span style="font-family: monospace;"> +sizeof(thread_pool_table_)/sizeof(CIAO::Static_Config::ThreadPoolAttributes);</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;"> +int thread_pool_lanes_table_size=</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;"> +sizeof(thread_pool_lanes_table_)/sizeof(CIAO::Static_Config::ThreadPoolLanesAttributes);</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;"> +int priority_band_table_size=</span><br style="font-family: monospace;"> +<span style="font-family: monospace;"> +sizeof(priority_band_table_)/sizeof(CIAO::Static_Config::PriorityBandsAttributes);</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;"> +int policy_set_table_size=</span><br style="font-family: monospace;"> +<span style="font-family: monospace;"> +sizeof(policy_set_table_)/sizeof(CIAO::Static_Config::PolicySetAttributes);</span><br + style="font-family: monospace;"> +<br style="font-family: monospace;"> +<span style="font-family: monospace;"> +CIAO::HOMECREATOR_FUNCPTR_MAP home_creator_fptr_map;</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;"> +CIAO::HOMESERVANTCREATOR_FUNCPTR_MAP homesvnt_creator_fptr_map;</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;"> +CIAO::Static_Config_EntryPoints_Maps maps;</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;"> +maps.home_creator_funcptr_map_ = &home_creator_fptr_map;</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;"> +maps.home_servant_creator_funcptr_map_ = &homesvnt_creator_fptr_map;</span><br + style="font-family: monospace;"> +<br style="font-family: monospace;"> +<span style="font-family: monospace;"> +int i=0;</span><br style="font-family: monospace;"> +<span style="font-family: monospace;"> +for (i=0; i<homes_table_size; ++i)</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;"> +{</span><br style="font-family: monospace;"> +<span style="font-family: monospace;"> +home_creator_fptr_map.bind (homes_table_[i].executor_entrypt_,</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;"> +homes_table_[i].executor_fptr_);</span><br + style="font-family: monospace;"> +<br style="font-family: monospace;"> +<span style="font-family: monospace;"> +homesvnt_creator_fptr_map.bind (homes_table_[i].servant_entrypt_,</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;"> +homes_table_[i].servant_fptr_);</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;"> +}</span><br style="font-family: monospace;"> +<br style="font-family: monospace;"> +<span style="font-family: monospace;"> +ACE_NEW_RETURN (comserv_servant,</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;"> +CIAO::RTServer::RTComponentServer_Impl (orb.in (),</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;"> +rt_orb.in (),</span><br style="font-family: monospace;"> +<span style="font-family: monospace;"> +root_poa.in (),</span><br style="font-family: monospace;"> +<span style="font-family: monospace;"> +1, </span><br style="font-family: monospace;"> +<span style="font-family: monospace;"> +&maps), </span><br style="font-family: monospace;"> +<span style="font-family: monospace;"> +-1);</span><br style="font-family: monospace;"> +<br style="font-family: monospace;"> +<span style="font-family: monospace;"> +PortableServer::ServantBase_var safe_servant +(comserv_servant); </span><br + style="font-family: monospace;"> +<br style="font-family: monospace;"> +<span style="font-family: monospace;"> +Components::ConfigValues configs;</span><br + style="font-family: monospace;"> +<br style="font-family: monospace;"> +<span style="font-family: monospace;"> +<span style="color: rgb(255, 0, 0);"><a name="rtconfig"></a>configurator.config_rt_info(configs, +</span></span><br style="font-family: monospace; color: rgb(255, 0, 0);"> +<span style="font-family: monospace; color: rgb(255, 0, 0);"> +thread_pool_table_, </span><br + style="font-family: monospace; color: rgb(255, 0, 0);"> +<span style="font-family: monospace; color: rgb(255, 0, 0);"> +thread_pool_table_size,</span><br + style="font-family: monospace; color: rgb(255, 0, 0);"> +<span style="font-family: monospace; color: rgb(255, 0, 0);"> +lane_table_,</span><br + style="font-family: monospace; color: rgb(255, 0, 0);"> +<span style="font-family: monospace; color: rgb(255, 0, 0);"> +thread_pool_lanes_table_,</span><br + style="font-family: monospace; color: rgb(255, 0, 0);"> +<span style="font-family: monospace; color: rgb(255, 0, 0);"> +thread_pool_lanes_table_size,</span><br + style="font-family: monospace; color: rgb(255, 0, 0);"> +<span style="font-family: monospace; color: rgb(255, 0, 0);"> +band_table_,</span><br + style="font-family: monospace; color: rgb(255, 0, 0);"> +<span style="font-family: monospace; color: rgb(255, 0, 0);"> +priority_band_table_,</span><br + style="font-family: monospace; color: rgb(255, 0, 0);"> +<span style="font-family: monospace; color: rgb(255, 0, 0);"> +priority_band_table_size,</span><br + style="font-family: monospace; color: rgb(255, 0, 0);"> +<span style="font-family: monospace; color: rgb(255, 0, 0);"> +policy_config_table_,</span><br + style="font-family: monospace; color: rgb(255, 0, 0);"> +<span style="font-family: monospace; color: rgb(255, 0, 0);"> +policy_set_table_,</span><br + style="font-family: monospace; color: rgb(255, 0, 0);"> +<span style="font-family: monospace; color: rgb(255, 0, 0);"> +policy_set_table_size);</span><br + style="font-family: monospace; color: rgb(255, 0, 0);"> +<br style="font-family: monospace;"> +<span style="font-family: monospace;"> +comserv_servant->init (configs</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;"> +ACE_ENV_ARG_PARAMETER);</span><br style="font-family: monospace;"> +<span style="font-family: monospace;"> +ACE_TRY_CHECK;</span><br style="font-family: monospace;"> +<span style="font-family: monospace;"> // +Configuring ComponentServer.</span><br style="font-family: monospace;"> +<span style="font-family: monospace;"> +PortableServer::ObjectId_var cs_oid</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;"> += root_poa->activate_object (comserv_servant</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;"> +ACE_ENV_ARG_PARAMETER);</span><br style="font-family: monospace;"> +<span style="font-family: monospace;"> +ACE_TRY_CHECK; </span><br style="font-family: monospace;"> +<br style="font-family: monospace;"> +<span style="font-family: monospace;"> object = +root_poa->id_to_reference (cs_oid.in ()</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;"> +ACE_ENV_ARG_PARAMETER);</span><br style="font-family: monospace;"> +<span style="font-family: monospace;"> +ACE_TRY_CHECK;</span><br style="font-family: monospace;"> +<br style="font-family: monospace;"> +<span style="font-family: monospace;"> +Components::Deployment::ComponentServer_var comserv_obj =</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;"> +Components::Deployment::ComponentServer::_narrow (object.in ()</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;"> +ACE_ENV_ARG_PARAMETER);</span><br style="font-family: monospace;"> +<span style="font-family: monospace;"> +ACE_TRY_CHECK;</span><br style="font-family: monospace;"> +<br style="font-family: monospace;"> +<span style="font-family: monospace;"> if +(CORBA::is_nil (comserv_obj.in ()))</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;"> +ACE_ERROR_RETURN ((LM_ERROR,</span><br style="font-family: monospace;"> +<span style="font-family: monospace;"> +"Unable to activate RTComponentServer object\n"),</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;"> +-1);</span><br style="font-family: monospace;"> +<br style="font-family: monospace;"> +<span style="font-family: monospace;"> +Components::Deployment::ServerActivator_var activator;</span><br + style="font-family: monospace;"> +<br style="font-family: monospace;"> +<span style="font-family: monospace;"> // +We are just storing the original configuration here.</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;"> // +Currently, we don't really use this ConfigValues direclty.</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;"> +Components::ConfigValues_var more_config = new Components::ConfigValues;</span><br + style="font-family: monospace;"> +<br style="font-family: monospace;"> +<span style="font-family: monospace;"> +comserv_servant->set_objref (activator.in (),</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;"> +more_config.in (),</span><br style="font-family: monospace;"> +<span style="font-family: monospace;"> +comserv_obj.in ()</span><br style="font-family: monospace;"> +<span style="font-family: monospace;"> +ACE_ENV_ARG_PARAMETER);</span><br style="font-family: monospace;"> +<br style="font-family: monospace;"> +<span style="font-family: monospace;"> +ACE_TRY_CHECK;</span><br style="font-family: monospace;"> +<br style="font-family: monospace;"> +<span style="font-family: monospace;"> +<a name="static_config_engine"></a><span style="color: rgb(255, 0, 0);">configurator.configure +(orb.in (),</span></span><br + style="font-family: monospace; color: rgb(255, 0, 0);"> +<span style="font-family: monospace; color: rgb(255, 0, 0);"> +comserv_obj.in (),</span><br + style="font-family: monospace; color: rgb(255, 0, 0);"> +<span style="font-family: monospace; color: rgb(255, 0, 0);"> +containers_table_,</span><br + style="font-family: monospace; color: rgb(255, 0, 0);"> +<span style="font-family: monospace; color: rgb(255, 0, 0);"> +containers_table_size,</span><br + style="font-family: monospace; color: rgb(255, 0, 0);"> +<span style="font-family: monospace; color: rgb(255, 0, 0);"> +homes_table_,</span><br + style="font-family: monospace; color: rgb(255, 0, 0);"> +<span style="font-family: monospace; color: rgb(255, 0, 0);"> +homes_table_size,</span><br + style="font-family: monospace; color: rgb(255, 0, 0);"> +<span style="font-family: monospace; color: rgb(255, 0, 0);"> +components_table_,</span><br + style="font-family: monospace; color: rgb(255, 0, 0);"> +<span style="font-family: monospace; color: rgb(255, 0, 0);"> +components_table_size,</span><br + style="font-family: monospace; color: rgb(255, 0, 0);"> +<span style="font-family: monospace; color: rgb(255, 0, 0);"> +component_registrations_table_,</span><br + style="font-family: monospace; color: rgb(255, 0, 0);"> +<span style="font-family: monospace; color: rgb(255, 0, 0);"> +component_registrations_table_size,</span><br + style="font-family: monospace; color: rgb(255, 0, 0);"> +<span style="font-family: monospace; color: rgb(255, 0, 0);"> +connections_table_,</span><br + style="font-family: monospace; color: rgb(255, 0, 0);"> +<span style="font-family: monospace; color: rgb(255, 0, 0);"> +connections_table_size,</span><br + style="font-family: monospace; color: rgb(255, 0, 0);"> +<span style="font-family: monospace; color: rgb(255, 0, 0);"> +resolvers_table_,</span><br + style="font-family: monospace; color: rgb(255, 0, 0);"> +<span style="font-family: monospace; color: rgb(255, 0, 0);"> +resolvers_table_size);</span><br style="font-family: monospace;"> +<br style="font-family: monospace;"> +<span style="font-family: monospace;"> +CORBA::String_var str = orb->object_to_string (comserv_obj.in ()</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;"> +ACE_ENV_ARG_PARAMETER);</span><br style="font-family: monospace;"> +<br style="font-family: monospace;"> +<span style="font-family: monospace;"> +CIAO::Utility::write_IOR (ior_file_name_, str.in ());</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;"> +ACE_DEBUG ((LM_INFO, "RTComponentServer IOR: %s\n", str.in ()));</span><br + style="font-family: monospace;"> +<br style="font-family: monospace;"> +<span style="font-family: monospace;"> +ACE_DEBUG ((LM_DEBUG,</span><br style="font-family: monospace;"> +<span style="font-family: monospace;"> +"Running RTComponentServer...\n"));</span><br + style="font-family: monospace;"> +</p> +<p><b><tt><font color="#990000"> +CORBA::Object_var +pulser_obj</font></tt></b> +<br> +<b><tt><font color="#990000"> += orb->string_to_object ("file://ec.ior"</font></tt></b> +<br> +<b><tt><font color="#990000"> +ACE_ENV_ARG_PARAMETER);</font></tt></b> +<br> +<b><tt><font color="#990000"> +ACE_TRY_CHECK;</font></tt></b> +</p> +<p><b><tt><font color="#990000"> +BasicSP::EC_var +pulser</font></tt></b> +<br> +<b><tt><font color="#990000"> += BasicSP::EC::_narrow (pulser_obj.in ()</font></tt></b> +<br> +<b><tt><font color="#990000"> +ACE_ENV_ARG_PARAMETER);</font></tt></b> +<br> +<b><tt><font color="#990000"> +ACE_TRY_CHECK;</font></tt></b> +</p> +<p><b><tt><font color="#990000"> if +(CORBA::is_nil +(pulser.in ()))</font></tt></b> +<br> +<b><tt><font color="#990000"> +ACE_ERROR_RETURN ((LM_ERROR, "Unable to acquire 'EC' objref\n"), -1);</font></tt></b> +</p> +<p><b><tt><font color="#990000"> +pulser->hertz +(rate</font></tt></b> +<br> +<b><tt><font color="#990000"> +ACE_ENV_ARG_PARAMETER);</font></tt></b> +<br> +<b><tt><font color="#990000"> +ACE_TRY_CHECK;</font></tt></b> +</p> +<p><b><tt><font color="#990000"> +ACE_DEBUG +((LM_DEBUG, "Start up the Event services\n"));</font></tt></b> +</p> +<p><b><tt><font color="#990000"> +pulser->start +(ACE_ENV_SINGLE_ARG_PARAMETER);</font></tt></b> +<br> +<b><tt><font color="#990000"> +ACE_TRY_CHECK;</font></tt></b> +</p> +<p><br style="font-family: monospace;"> +<span style="font-family: monospace;"> // +Run the main event loop for the ORB.</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;"> +orb->run (ACE_ENV_SINGLE_ARG_PARAMETER);</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;"> +ACE_TRY_CHECK</span><br style="font-family: monospace;"> +<span style="font-family: monospace;"> }</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;"> ACE_CATCHANY</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;"> {</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;"> +ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION,</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;"> +"server::main \n");</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;"> +return 1;</span><br style="font-family: monospace;"> +<span style="font-family: monospace;"> }</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;"> ACE_ENDTRY;</span><br + style="font-family: monospace;"> +<br style="font-family: monospace;"> +<span style="font-family: monospace;"> return 0;</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;">}</span><br> +<tt></tt></p> +<a name="Modified Static_CCM_App.mpc"></a><b><u>Modified +Static_CCM_App.mpc</u></b> +<br> +<small><span style="font-weight: bold;"><br> +(Highlighted files are manually added to the generated mpc file)</span></small><br> +<tt></tt><span style="font-family: monospace;"><br> +project(Static_CCM_App) : ciao_server, ciao_client, rtcorba, +rtportableserver, iortable, acexml{</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;">includes += +$(ACE_ROOT)/TAO/CIAO/tools/Assembly_Deployer</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;">includes += +$(ACE_ROOT)/TAO/CIAO/tools/static_configurator</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;">includes += +$(ACE_ROOT)/TAO/CIAO/tools/RTComponentServer</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;">libs += RTComponent_Server +CIAO_XML_Helpers Static_Configurator</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;">after += RTComponent_Server +CIAO_XML_Helpers Static_Configurator</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;"> </span><br + style="font-family: monospace;"> +<span + style="font-family: monospace; color: rgb(153, 0, 0); font-weight: bold;">libs ++= BasicSP_stub BasicSP_svnt</span><br + style="font-family: monospace; color: rgb(153, 0, 0); font-weight: bold;"> +<span + style="font-family: monospace; color: rgb(153, 0, 0); font-weight: bold;">after ++= BasicSP_stub BasicSP_svnt</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;">libs += EC_exec</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;">after += EC_exec</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;">libs += EC_svnt <span + style="font-weight: bold; color: rgb(153, 0, 0);">EC_stub</span></span><br + style="font-family: monospace; font-weight: bold; color: rgb(153, 0, 0);"> +<span style="font-family: monospace;">after += EC_svnt<span + style="font-weight: bold; color: rgb(153, 0, 0);"> EC_stub</span></span><br + style="font-family: monospace;"> +<span style="font-family: monospace;">libs += BMDevice_exec</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;">after += BMDevice_exec</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;">libs += BMDevice_svnt <span + style="font-weight: bold; color: rgb(153, 0, 0);">BMDevice_stub</span></span><br + style="font-family: monospace;"> +<span style="font-family: monospace;">after += BMDevice_svnt <span + style="font-weight: bold; color: rgb(153, 0, 0);">BMDevice_stub</span></span><br + style="font-family: monospace;"> +<span style="font-family: monospace;">libs += BMClosedED_exec</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;">after += BMClosedED_exec</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;">libs += BMClosedED_svnt <span + style="font-weight: bold; color: rgb(153, 0, 0);">BMClosedED_stub</span></span><br + style="font-family: monospace;"> +<span style="font-family: monospace;">after += BMClosedED_svnt <span + style="font-weight: bold; color: rgb(153, 0, 0);">BMClosedED_stub</span></span><br + style="font-family: monospace;"> +<span style="font-family: monospace;">libs += BMDisplay_exec</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;">after += BMDisplay_exec</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;">libs += BMDisplay_svnt <span + style="font-weight: bold; color: rgb(153, 0, 0);">BMDisplay_stub</span></span><br + style="font-family: monospace;"> +<span style="font-family: monospace;">after += BMDisplay_svnt <span + style="font-weight: bold; color: rgb(153, 0, 0);">BMDisplay_stub</span></span><br + style="font-family: monospace;"> +<span style="font-family: monospace;"> </span><br + style="font-family: monospace;"> +<span style="font-family: monospace;"> Source_Files {</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;"> +Static_CCM_App.cpp</span><br style="font-family: monospace;"> +<span style="font-family: monospace;"> }</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;"> </span><br + style="font-family: monospace;"> +<span style="font-family: monospace;"> IDL_Files {</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;"> }</span><br + style="font-family: monospace;"> +<span style="font-family: monospace;">}</span><br> +<br> +</body> +</html> diff --git a/modules/CIAO/docs/static_dance.html b/modules/CIAO/docs/static_dance.html new file mode 100644 index 00000000000..3bd6433e133 --- /dev/null +++ b/modules/CIAO/docs/static_dance.html @@ -0,0 +1,214 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> +<html> +<head> + <meta http-equiv="CONTENT-TYPE" content="text/html; charset=utf-8"> + <title></title> +<!-- $Id$ --> + <meta name="GENERATOR" content="OpenOffice.org 1.1.2 (Linux)"> + <meta name="CREATED" content="20041128;11452700"> + <meta name="CHANGED" content="20041210;11524200"> + <style> + <!-- + @page { size: 8.5in 11in; margin-left: 1.25in; margin-right: 1.25in; margin-top: 1in; margin-bottom: 1in } + P { margin-bottom: 0.08in } + H2.western { font-family: "Times New Roman", serif } + H2.cjk { font-family: "Arial Unicode MS" } + H2.ctl { font-family: "Tahoma" } + H3.western { font-family: "Times New Roman", serif } + H3.cjk { font-family: "Arial Unicode MS" } + H3.ctl { font-family: "Tahoma" } + --> + </style> +</head> +<body dir="ltr" lang="en-US"> +<h2 class="western" align="center">CIAO Static Configuration Support +with DanCE for Real-Time Platforms </h2> +<h3 class="western">1. Introduction</h3> +<p>The dynamic packaging, assembly, and deployment mechanisms +currently available in CIAO are useful for application domains where +component metadata is less likely to be known a priori, where +implementation upgrades may need to be performed on-line, and where +platform features like loading and unloading dynamic libraries are +both available and useful. We have already incorporated <a + href="http://www.cs.wustl.edu/%7Eschmidt/ACE_wrappers/TAO/CIAO/docs/static_ciao_index.html">static +configuration support</a> for component configuration in CIAO on +platforms like VxWorks, as a set of optional strategies and +optimizations to the existing CIAO configuration capabilities (). In +this white paper, we discuss implementation details for extending the +static configuration capabilities as part of the new DanCE (D&C +support available with CIAO) framework.</p> +<p>The fundamental intuition in understanding our approach is that in +DRE systems the stages of the overall system lifecycle are similar to +those in more dynamic conventional component-oriented client-server +applications.However, in DRE systems several phases of the system +lifecycle are compressed into the compile-time and +system-initialization phases, so that (1) for testing and +verification purposes the set of components in an application can be +identified and analyzed before run-time, and (2) overheads for +run-time operation following initialization are reduced and made more +predictable. Furthermore, due to the nuances of the platforms +traditionally used for deploying DRE systems, not all features of +conventional platforms are available. Our approach therefore avoids +certain mechanisms that are either unavailable or too costly in terms +of performance. We follow these intuitions in our approach, taking +the existing configuration phases in CIAO and pushing several of them +earlier in the configuration lifecycle.</p> +<h3 class="western">2. Current D&C in CIAO with DanCE</h3> +<p><img src="imgs/dance_arch.jpg" name="Graphic2" + style="border: 0px solid ; width: 600px; height: 400px;" alt="" + align="left"><br> +</p> +<p><br> +</p> +<p><br> +</p> +<p><br> +</p> +<p><br> +</p> +<p><br> +</p> +<p><br> +</p> +<p><br> +</p> +<p><br> +</p> +<p><br> +</p> +<p><br> +</p> +<p><br><b>Figure 1.</b> <b>Current D&C process using DAnCE</b></p> +One of the key concerns while supporting the static configuration +within the DAnCE framework is to reuse the existing components in the +DAnCE framework as much as possible. Figure 1 shows the current D&C +process using the DAnCE framework. This is the standard D&C +process as specified in the CCM D&C specification.As seen from +the figure, there are multiple processes (Executor, ExecutionManager, +NodeManagers and NodeApplications) that are involved. +<h3 class="western">3. Static Configuration with DanCE</h3> +<p><img src="imgs/static_dance_arch.jpg" name="Graphic3" + style="border: 0px solid ; width: 800px; height: 800px;" alt="" + align="left"><br> +</p> +<p><br> +</p> +<p><br> +</p> +<p><br> +</p> +<p><br> +</p> +<p><br> +</p> +<p><br> +</p> +<p><br> +</p> +<p><br> +</p> +<p><br> +</p> +<p><br> +</p> +<p><br> +</p> +<p><br> +</p> +<p><br> +</p> +<p><br> +</p> +<p><br> +</p> +<p><br> +</p> +<p><br> +</p> +</p> +<p><br> +</p> +<p><br> +</p> +<p><br> +</p> +<p><br> +</p> +<p><br> +</p> +<p><br><b>Figure 2.</b> <b>Static D&C in DAnCE</b></p> +<p>Figure 2 shows the static configuration approach in DAnCE. Here, +the flattened deployment plan (.cdp) is parsed offline by an offline +parser ($CIAO_ROOT/StaticConfigurator/StaticDAnCEParser) using the +same XML parser classes that the dynamic configuration uses. The +output of the parser is a C++ plan.h file, which contains the function +entry points for home and home servant creation. The assumption here +is that all the necessary (component implementations and other) +libraries are statically linked to the driver application (see a +template in +$CIAO_ROOT/DAnCE/StaticConfigurator/StaticDAnCEApp.cpp.tmpl). </p> +<p>The driver application is essentially a NodeManager which can be +used to do deployment just the same as in DAnCE. To achieve maximum +reusability of the existing classes in the DAnCE framework, we use +the class hierarchy shown in Figure 3. </p> +<br> +<b></b> +<p style="page-break-before: always;" align="left"><img + src="imgs/static_dance_impl.jpg" name="Graphic1" + style="border: 0px solid ; width: 700px; height: 700px;" alt="" + align="left"><br clear="left"> +<b>Figure 3. New class hierarchy to accommodate static configuration +within DAnCE<br> +</b></p> +<h3 class="western">3.Example</h3> +<p>To run the static version of Hello example, do the following,<br> +</p> +<ol> + <li>Build ACE+TAO+CIAO statically</li> + <li>Build $CIAO_ROOT/examples/Hello </li> + <li>Generate the static function entrypoints (plan.h)<br> + <span style="font-family: monospace;">> cd +$CIAO_ROOT/examples/Hello/descriptors</span><span + style="font-family: monospace;"><br> +> <span style="font-family: "times new roman",serif;"><span + style="font-weight: bold;"></span></span>$CIAO_ROOT/DAnCE/StaticConfigurator/StaticDAnCEParser +-p flattened_deploymentplan_without_ns.cdp</span><br> + <span style="font-family: monospace;">> cp plan.h <span + style="font-weight: bold;"></span>$CIAO_ROOT/DAnCE/StaticConfigurator/</span><br> + </li> + <li>Build the static NodeManager for Hello example<span + style="font-family: monospace;"><br> +> cd $CIAO_ROOT/DAnCE/StaticConfigurator</span><br + style="font-family: monospace;"> + <span style="font-family: monospace;"></span><span + style="font-family: monospace;">> cp StaticDAnCEApp.cpp.tmpl +StaticDAnCEApp.cpp</span><br style="font-family: monospace;"> + <span style="font-family: monospace;">> cp +StaticDAnCEApp.mpc.tmpl StaticDAnCEApp.mpc<br> +> $ACE_ROOT/bin/mwc.pl<br> +> make<br> + </span></li> + <li>Run the static node managers. Note that the <span + style="font-family: monospace;">ORBEndpoint</span> values should +correspond to the ones in <span style="font-family: monospace;"> +$CIAO_ROOT/examples/Hello/descriptors/TestNodeManagerMap.dat </span><br> +> <span style="font-family: monospace;">cd +$CIAO_ROOT/DAnCE/StaticConfigurator<br> +> ./StaticDAnCEApp -ORBEndpoint iiop://localhost:60001 &<br> + </span><span style="font-family: monospace;">> ./StaticDAnCEApp +-ORBEndpoint iiop://localhost:60002 &</span><br> + </li> + <li>Do the deployment. This is just the same as the non-static +version of DAnCE except that we have the NodeManagers already running +and need not spawn node managers. To accomplish this, change <span + style="font-family: monospace;">$CIAO_ROOT/examples/Hello/descriptors/run_test_without_ns.pl +to <span style="font-weight: bold;">*not*</span> run the node manager +daemons.<br> + </span><span style="font-family: monospace;">> cd +$CIAO_ROOT/examples/Hello/descriptors<br> +> ./</span><span style="font-family: monospace;">run_test_without_ns.pl</span></li> +</ol> +<br> +<p></p> +</body> +</html> diff --git a/modules/CIAO/docs/templates/CIAO_Glue_Session_Template.cpp b/modules/CIAO/docs/templates/CIAO_Glue_Session_Template.cpp new file mode 100644 index 00000000000..aedbcd3769b --- /dev/null +++ b/modules/CIAO/docs/templates/CIAO_Glue_Session_Template.cpp @@ -0,0 +1,1126 @@ +// $Id$ + +// The generated filename for files using this template shoule be +// [idl-basename]GS.cpp GS --> GlueSession + +// @@ Notice: [ciao module name] can expand to either CIAO_GLUE or +// CIAO_GLUE_[module name] as defined in the header file. + +/// @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ +/// @@@ Notice that all component and interface names need to be +/// fully qualified as we are creating a new namespace for the CIAO's +/// container glue code. +/// @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ + +#include "[idl-basename]_svnt.h" +#include "Cookies.h" + +#if !defined (__ACE_INLINE__) +# include "[idl-basename]_svnt.inl" +#endif /* __ACE_INLINE__ */ + +////////////////////////////////////////////////////////////////// +// Facet Glue Code implementation +// @@ We are assuming that these facets are declared under the same +// module as the component (thus, we are placing this glue code +// here under the same namespace. If they are not, we will +// either be generating them in separate namespaces, or include +// some other CIDL generated files to get the glue code +// implementation. +////////////////////////////////////////////////////////////////// + +##foreach [facet type] in (all facet interface types in the original IDL) + +// get_component implementation. +CORBA::Object_ptr +[ciao module name]::[facet type]_Servant::_get_component () + ACE_THROW_SPEC ((CORBA::SystemException)) +{ + ::Components::SessionContext_var sc = + ::Components::SessionContext::_narrow (this->ctx_.in ()); + + if (! CORBA::is_nil(sc.in ())) + return sc->get_CCM_object (); + + ::Components::EntityContext_var ec = + ::Components::EntityContext::_narrow (this->ctx_.in ()); + + if (! CORBA::is_nil(ec.in ())) + return ec->get_CCM_object (); + + ACE_THROW_RETURN (CORBA::INTERNAL (), 0); +} + +##end foreach [facet type] + + + +////////////////////////////////////////////////////////////////// +// Component specific context implementation +////////////////////////////////////////////////////////////////// + +##foreach [receptacle name] with [uses type] in (list of all 'uses' interfaces) generate: +## if ([receptacle name] is a multiplex ('uses multiple') receptacle) + // [receptacle name]Connections typedef'ed as a sequence of + // struct [receptacle name]Connection. +[receptacle name]Connections * +[ciao module name]::[component name]_Context::get_connections_[receptacle name] () + ACE_THROW_SPEC ((CORBA::SystemException)) +{ + // @@ Strategized locking here. + + [receptacle name]Connections_var retv = + new [receptacle name]Connections (this->ciao_muses_[receptacle name]_.current_size ()); + + CORBA::ULong i = 0; + ACE_Active_Map_Manager<[uses type]_var>::iterator + end = this->ciso_muses_[receptacle name]_.end (); + for (ACE_Active_Map_Manager<[uses type]_var>::iterator + iter = this->ciso_muses_[receptacle name]_.begin (); + iter != end; + ++iter) + { + ACE_Active_Map_Manager<[uses type]_var>::ENTRY &entry = *iter; + retv[i]->objref = [uses type]::_narrow (entry.int_id_.in ()); + retv[i]->ck = new CIAO::Map_Key_Cookie (entry.ext_id_); + ++i; + } + + return retv._retn (); +} +## endif [receptacle name] +##end foreach [receptacle name] with [uses type] + +##foreach [event name] with [eventtype] in (list of all event sources) generate: +void +[ciao module name]::[component name]_Context::push_[event name] ([eventtype] *ev) + ACE_THROW_SPEC ((CORBA::SystemException)) +{ +## if [event name] belongs to an 'emits' port + this->ciao_emits_[event name]_consumer_->push_[event name] (ev); + +## else [event name] belongs to a 'publishes' port + ACE_Active_Map_Manager<[eventtype]Consumer_var>::iterator + end = this->ciao_publishes_[event name]_map_.end (); + for (ACE_Active_Map_Manager<[eventtype]Consumer_var>::iterator + iter = this->ciao_publishes_[event name]_map_.begin (); + iter != end; + ++iter) + { + ACE_Active_Map_Manager<[eventtype]Consumer_var>::ENTRY &entry = *iter; + [eventtype]Consumer_var c + = [eventtype]Consumer::_narrow (entry.int_id_.in ()); + c->push_[eventtype] (ev); + } +## endif [event name] +} + +##end foreach [event name] with [eventtype] + + +// Operations for publishes interfaces. +##foreach [publish name] with [eventtype] in (list of all publishers) generate: +::Components::Cookie * +[ciao module name]::[component name]_Context::subscribe_[publish name] ([eventtype]Consumer_ptr c) + ACE_THROW_SPEC ((CORBA::SystemException, + ::Components::ExceededConnectionLimit)) +{ + if (CORBA::is_nil (c)) + ACE_THROW_RETURN (CORBA::BAD_PARAM (), 0); + + [eventtype]Consumer_var sub + = [eventtype]Consumer::_duplicate (c); + + ACE_Active_Map_Manager_Key key; + this->ciao_publishes_[publish name]_map_.bind (sub.in (), + key); + + sub._retn (); // Release ownership to map. + + ::Components::Cookie_var retv = new CIAO::Map_Key_Cookie (key); + return retv._retn (); +} + +[eventtype]Consumer_ptr +[ciao module name]::[component name]_Context::unsubscribe_[publish name] (::Components::Cookie *ck) + ACE_THROW_SPEC ((CORBA::SystemException, + ::Components::InvalidConnection)) +{ + [eventtype]Consumer_var retv; + + ACE_Active_Map_Manager_Key key; + if (ck == 0 || + CIAO::Map_Key_Cookie::extract (ck, key) == -1) + ACE_THROW_RETURN (::Components::InvalidConnection (), 0); + + if (this->ciao_publishes_[publish name]_map_.unbind (key, + retv) != 0) + ACE_THROW_RETURN (::Components::InvalidConnection (), 0); + + return retv._retn (); +} + +##end foreach [publish name] with [eventtype] + +##foreach [receptacle name] with [uses type] in (list of all 'uses' interfaces) generate: + +## if [receptacle name] is a simplex receptacle ('uses') + +[uses type]_ptr +[ciao module name]::[component name]_Context::get_connection_[receptacle name] () + ACE_THROW_SPEC ((CORBA::SystemException)) +{ + return [uses type]::_duplicate (this->ciao_uses_[receptacle name]_.in ()); +} + +// Simplex [receptacle name] connection management operations +void +[ciao module name]::[component name]_Context::connect_[receptacle name] ([uses type]_ptr c) + ACE_THROW_SPEC ((CORBA::SystemException, + ::Components::AlreadyConnected, + ::Components::InvalidConnection)) +{ + if (! CORBA::is_nil (this->ciao_uses_[receptacle name]_.in ())) + throw ::Components::AlreadyConnected (); + + if (CORBA::is_nil (c)) + throw ::Components::InvalidConnection (); + + // When do we throw InvalidConnection exception? + this->ciao_uses_[receptacle name]_ = [uses type]::_duplicate (c); +} + +[uses type]_ptr +[ciao module name]::[component name]_Context::disconnect_[receptacle name] () + ACE_THROW_SPEC ((CORBA::SystemException, + ::Components::NoConnection)) +{ + if (CORBA::is_nil (this->ciao_uses_[receptacle name]_.in ())) + throw ::Components::NoConnection (); + + return this->ciao_uses_[receptacle name]_._retn (); +} + +## else ([receptacle name] is a multiplex ('uses multiple') receptacle) +// Multiplex [receptacle name] connection management operations +::Components::Cookie * +[ciao module name]::[component name]_Context::connect_[receptacle name] ([uses type]_ptr c) + ACE_THROW_SPEC ((CORBA::SystemException, + ::Components::ExceedConnectionLimit, + ::Components::InvalidConnection)) +{ + if (CORBA::is_nil (c)) + ACE_THROW_RETURN (::Components::InvalidConnection (), 0); + + [uses type]_var conn + = [uses type]::_duplicate (c); + + ACE_Active_Map_Manager_Key key; + this->ciao_muses_[receptacle name]_.bind (conn.in (), + key); + + conn._retn (); // Releases ownership to the map. + + ::Components::Cookie_var retv = new CIAO::Map_Key_Cookie (key); + return retv._retn (); +} + +[uses type]_ptr +[ciao module name]::[component name]_Context::disconnect_[receptacle name] (::Components::Cookie *ck) + ACE_THROW_SPEC ((CORBA::SystemException, + ::Components::InvalidConnection)) +{ + [uses type]_var retv; + + ACE_Active_Map_Manager_Key key; + if (ck == 0 || + CIAO::Map_Key_Cookie::extract (ck, key) == -1) + ACE_THROW_RETURN (::Components::InvalidConnection (), 0); + + if (this->ciao_muses_[receptacle name]_.unbind (key, + retv) != 0) + ACE_THROW_RETURN (::Components::InvalidConnection (), 0); + + return retv._retn (); +} + +## endif [receptacle name] +##end foreach [receptacle name] with [uses type] + +// Operations for ::Components::SessionContext interface +CORBA::Object_ptr +[ciao module name]::[component name]_Context::get_CCM_object () + ACE_THROW_SPEC ((CORBA::SystemException, + Components::IllegalState)) +{ + // @@ How do I check for IllegalState here? When it's not in a + // callback operation... + // ACE_THROW_RETURN (::Components::IllegalState (), 0); + + if (CORBA::is_nil (this->component_.in ())) + { + CORBA::Object_var obj = this->container_->get_objref (this->servant_); + + this->component_ = [component name]::_narrow (obj.in ()); + + if (CORBA::is_nil (this->component_.in ())) + ACE_THROW_RETURN (CORBA::INTERNAL (), 0); // This should not happen... + } + return [component name]::_duplicate (this->component_.in ()); +} + +////////////////////////////////////////////////////////////////// +// Component Servant Glue code implementation +////////////////////////////////////////////////////////////////// + +[ciao module name]::[component name]_Servant::[component name]_Servant (CCM_[component name]_ptr exe, + ::Components::CCMHome_ptr h, + ::CIAO::Session_Container *c) + : executor_ (CCM_[component name]::_duplicate (exe)), + container_ (c) +{ + this->context_ = new [ciao module name]::[component name]_Context (h, c, this); + + try + { + Components::SessionComponent_var scom = + Components::SessionComponent::_narrow (exe); + + if (! CORBA::is_nil (scom.in ())) + scom->set_session_context (this->context_); + } + catch (const CORBA::Exception& ex) + { + // @@ Ignore any exceptions? What happens if + // set_session_context throws an CCMException? + } +} + +[ciao module name]::[component name]_Servant::~[component name]_Servant (void) +{ + try + { + Components::SessionComponent_var scom = + Components::SessionComponent::_narrow (this->executor_.in ()); + + if (! CORBA::is_nil (scom.in ())) + scom->ccm_remove (); + } + catch (const CORBA::Exception& ex) + { + // @@ Ignore any exceptions? What happens if + // set_session_context throws an CCMException? + } + this->context_->_remove_ref (); +} + +// Operations for provides interfaces. +##foreach [facet name] with [facet type] in (list of all provided interfaces) generate: + +[facet type]_ptr +[ciao module name]::[component name]_Servant::provide_[facet name] () + ACE_THROW_SPEC ((CORBA::SystemException)) +{ + if (CORBA::is_nil (this->provide_[facet name]_.in ())) + { + CCM_[facet type]_var fexe = this->executor_->get_[facet name] (); + + if (CORBA::is_nil (fexe.in ())) + ACE_THROW_RETURN (CORBA::INTERNAL (), 0); + + [ciao module name]::[facet type]_Servant *svt = + new [ciao module name]::[facet type]_Servant (fexe.in (), + this->context_); + PortableServer::ServantBase_var safe_servant (svt); + + CORBA::Object_var obj = this->container_->install_servant (svt); + + [facet type]_var fo = [facet type]::_narrow (obj.in ()); + + this->provide_[facet name]_ = fo; + } + + return [facet type]::_duplicate (this->provide_[facet name]_.in ()); +} +##end foreach [facet name] with [facet type] + +// Operations for consumers interfaces. +##foreach [consumer name] with [eventtype] in (list of all consumers) generate: + +// EventConsumer Glue Code implementation + +// Inherit from ::Compopnents::EventBConsumerBase +void +[ciao module name]::[component name]_Servant::[eventtype]Consumer_[consumer name]_Servant::push_event (EventBase *ev) + ACE_THROW_SPEC ((CORBA::SystemException, + ::Components::BadEventType)) +{ + [eventtype]_var ev_type = [eventtype]::_downcast (ev); + if (ev_type != 0) + { + this->push_[eventtype] (ev_type.in ()); + return; + } + + // @@ This include the case when we receive a parent eventtype of [eventtype] + + throw ::Components::BadEventType (); +} + +// get_component implementation. +[eventtype]Consumer_ptr +[ciao module name]::[component name]_Servant::get_consumer_[consumer name] () + ACE_THROW_SPEC ((CORBA::SystemException)) +{ + if (CORBA::is_nil (this->consumes_[consumer name]_.in ())) + { + [ciao module name]::[component name]_Servant::[eventtype]Consumer_[consumer name]_Servant *svt = + new [ciao module name]::[component name]_Servant::[eventtype]Consumer_[consumer name]_Servant (this->executor_.in (), + this->context_); + PortableServer::ServantBase_var safe_servant (svt); + + CORBA::Object_var obj = this->container_->install_servant (svt); + + [eventtype]Consumer_var eco = [eventtype]Consumer::_narrow (obj.in ()); + + this->consumes_[consumer name]_ = eco; + } + + return [eventtype]Consumer::_duplicate (this->consumes_[consumer name]_.in ()); +} + +##end foreach [consumer name] with [eventtype] + +// Operations for Navigation interface +CORBA::Object_ptr +[ciao module name]::[component name]_Servant::provide_facet (const char * name) + ACE_THROW_SPEC ((CORBA::SystemException , + Components::InvalidName)) +{ + if (name == 0) + ACE_THROW_RETURN (CORBA::BAD_PARAM (), 0); + + // We simply iterate thru all the facets this component provides + // now. We can also use a hash map along with perfect hashing + // (i.e., gperf) if we need faster performance since all the provided + // interfaces are static to a component definition. + +##foreach [facet name] with [facet type] in (list of all provided interfaces) generate: + if (ACE_OS_String::strcmp (name, "[facet name]") == 0) + return this->provide_[facet name] (); +##end foreach [facet name] with [facet type] + + ACE_THROW_RETURN (::Components::InvalidName (), 0); +} + +::Components::FacetDescriptions * +[ciao module name]::[component name]_Servant::get_all_facets () + ACE_THROW_SPEC ((CORBA::SystemException)) +{ + ::Components::FacetDescriptions_var collection + = new ::Components::FacetDescriptions (#99); // #99 = number of all provided + // facets including those inherited + // from parent component(s). + collection->length (#99); + + ::Components::FacetDescription_var x; + CORBA::ULong i = 0; + +##foreach [facet name] with [facet type] in (list of all provided interfaces) generate: + + x = new ::OBV_Components::FacetDescription; + + x->Name ((const char *)"[facet name]"); + x->type_id ((const char *) "[facet type's repo id]"); // + x->facet_ref (this->provide_[facet name] ()); + + collection[i] = x._retn (); + ++i; +##end foreach [facet name] with [facet type] + + return collection._retn (); + +} + +::Components::FacetDescriptions * +[ciao module name]::[component name]_Servant::get_named_facets (const Components::NameList & names) + ACE_THROW_SPEC ((CORBA::SystemException, + Components::InvalidName)) +{ + ::Components::FacetDescriptions_var collection + = new ::Components::FacetDescriptions (names.length ()); + collection->length (names.length ()); + + ::Components::FacetDescription_var x; + CORBA::ULong i = 0; + for (; i < names.length (); ++i) + { + x = new ::OBV_Components::FacetDescription; + + // We probably need a more efficient way, e.g., a hash map, to handle all these. +##foreach [facet name] with [facet type] in (list of all provided interfaces) generate: + (else) if (ACE_OS_String::strcmp (names[i].in (), "[facet name]") == 0) + { + x->Name ((const char *)"[facet name]"); + x->type_id ((const char *) "[facet type's repo id]"); // + x->facet_ref (this->provide_[facet name] ()); + } +##end foreach [facet name] with [facet type] + else + ACE_THROW_RETURN (::Components::InvalidName (), 0); + + collection[i] = x._retn (); + } + return collection._retn (); +} + +CORBA::Boolean +[ciao module name]::[component name]_Servant::same_component (CORBA::Object_ptr object_ref) + ACE_THROW_SPEC ((CORBA::SystemException)) +{ + if (CORBA::is_nil (object_ref)) + ACE_THROW_RETURN (CORBA::BAD_PARAM (), 0); + + CORBA::Object_var the_other = object_ref->_get_component (); + + CORBA::Object_var me = this->context_->get_CCM_object (); + + return me->_is_equivalent (object_ref); +} + +// Operations for Receptacles interface +::Components::Cookie * +[ciao module name]::[component name]_Servant::connect (const char * name, + CORBA::Object_ptr connection) + ACE_THROW_SPEC ((CORBA::SystemException, + Components::InvalidName, + Components::InvalidConnection, + Components::AlreadyConnected, + Components::ExceededConnectionLimit)) +{ + // @@ We can omit this if clause if there's no receptacle in this component. + if (name == 0) + ACE_THROW_RETURN (Components::InvalidName (), 0); + +##foreach [receptacle name] with [uses type] in (list of all 'uses' interfaces) generate: + if (ACE_OS_String::strcmp (name, "[receptacle name]") == 0) + { + [uses type]_var _ciao_conn = + [uses type]::_narrow (connection); + + if (CORBA::is_nil (_ciao_conn.in ())) + ACE_THROW_RETURN (::Components::InvalidConnection (), 0); + +## if [receptacle name] is a simplex receptacle ('uses') + this->connect_[receptacle name] (_caio_conn.in ()); + return 0; +## else ([receptacle name] is a multiplex ('uses multiple') receptacle) + return this->connect_[receptacle name] (_ciao_conn.in ()); +## endif [receptacle name] + } +##end foreach [receptacle name] with [uses type] + + ACE_THROW_RETURN (Components::InvalidName (), 0); +} + +/* +##foreach [receptacle name] with [uses type] in (list of all 'uses' interfaces) generate: +## if [receptacle name] is a simplex receptacle ('uses') +## else ([receptacle name] is a multiplex ('uses multiple') receptacle) +## endif [receptacle name] +##end foreach [receptacle name] with [uses type] +*/ + +CORBA::Object_ptr +[ciao module name]::[component name]_Servant::disconnect (const char * name, + Components::Cookie *ck) + ACE_THROW_SPEC ((CORBA::SystemException, + Components::InvalidName, + Components::InvalidConnection, + Components::CookieRequired, + Components::NoConnection)) +{ + // @@ We can omit this if clause if there's no receptacle in this component. + if (name == 0) + ACE_THROW_RETURN (Components::InvalidName (), 0); + +##foreach [receptacle name] with [uses type] in (list of all 'uses' interfaces) generate: + if (ACE_OS_String::strcmp (name, "[receptacle name]") == 0) +## if [receptacle name] is a simplex receptacle ('uses') + return this->disconnect_[receptacle name] (); +## else ([receptacle name] is a multiplex ('uses multiple') receptacle) + return this->connect_[receptacle name] (ck); +## endif [receptacle name] +##end foreach [receptacle name] with [uses type] + + ACE_THROW_RETURN (Components::InvalidName (), 0); +} + +::Components::ConnectionDescriptions * +[ciao module name]::[component name]_Servant::get_connections (const char * name) + ACE_THROW_SPEC ((CORBA::SystemException, + Components::InvalidName)) +{ + // @@ We can omit this if clause if there's no receptacle in this component. + if (name == 0) + ACE_THROW_RETURN (Components::InvalidName (), 0); + +##foreach [receptacle name] with [uses type] in (list of all 'uses' interfaces) generate: + if (ACE_OS_String::strcmp (name, "[receptacle name]") == 0) + { +## if [receptacle name] is a simplex receptacle ('uses') + ::Components::ConnectionDescriptions_var retv = + new ::Components::ConnectionDescriptions (1); + retv->length (1); + + retv[0] = new OBV_Components::ConnectionDescription; + retv[0]->ck = 0; + retv[0]->objref = this->get_connection_[receptacle name] (); + + return retv._retn (); +## else ([receptacle name] is a multiplex ('uses multiple') receptacle) + // @@ Return type does not match here. We can not return directly. + return this->get_connections_[receptacle name] (); +## endif [receptacle name] + } +##end foreach [receptacle name] with [uses type] + + ACE_THROW_RETURN (Components::InvalidName (), 0); +} + +::Components::ReceptacleDescriptions * +[ciao module name]::[component name]_Servant::get_all_receptacles () + ACE_THROW_SPEC ((CORBA::SystemException)) +{ + ::Components::ReceptacleDescriptions_var retv = + new ::Components::ReceptacleDescriptions (#99); // #99 is number of receptacles + // this component has. + retv->length (#99); + CORBA::ULong i = 0; + +##foreach [receptacle name] with [uses type] in (list of all 'uses' interfaces) generate: + retv[i] = new OBV_Components::ReceptacleDescription; + + retv[i]->Name ((const char *) "[receptacle name]"); + retv[i]->type_id ((const char *) "[uses type repo id]"); +## if [receptacle name] is a simplex receptacle ('uses') + retv[i]->is_multiple (0); +## else ([receptacle name] is a multiplex ('uses multiple') receptacle) + retv[i]->is_multiple (1); +## endif [receptacle name] + retv[i]->connections (*this->get_connections ("[receptacle name]")); + ++i; +##end foreach [receptacle name] with [uses type] + + return retv._retn (); +} + +::Components::ReceptacleDescriptions * +[ciao module name]::[component name]_Servant::get_named_receptacles (const Components::NameList & names) + ACE_THROW_SPEC ((CORBA::SystemException, + Components::InvalidName)) +{ + ::Components::ReceptacleDescriptions_var retv = + new ::Components::ReceptacleDescriptions (names.length ()); + retv->length (names.length ()); + + CORBA::ULong i = 0; + for (; i < names.length (); ++i) + { + retv[i] = new ::OBV_Components::ReceptacleDescription; +##foreach [receptacle name] with [uses type] in (list of all 'uses' interfaces) generate: + (else) if (ACE_OS_String::strcmp (names[i].in (), "[receptacle name]") == 0) + { + retv[i]->Name ((const char *) "[receptacle name]"); + retv[i]->type_id ((const char *) "[uses type repo id]"); +## if [receptacle name] is a simplex receptacle ('uses') + retv[i]->is_multiple (0); +## else ([receptacle name] is a multiplex ('uses multiple') receptacle) + retv[i]->is_multiple (1); +## endif [receptacle name] + retv[i]->connections (*this->get_connections ("[receptacle name]")); + } +##end foreach [receptacle name] with [uses type] + else + ACE_THROW_RETURN (::Components::InvalidName (), 0); + } + return retv._retn (); +} + +// Operations for Events interface +::Components::EventConsumerBase_ptr +[ciao module name]::[component name]_Servant::get_consumer (const char * sink_name) + ACE_THROW_SPEC ((CORBA::SystemException, + Components::InvalidName)) +{ + // @@ We can omit this if clause if there's no event sinks in this component. + if (sink_name == 0) + ACE_THROW_RETURN (Components::InvalidName (), 0); + +##foreach [consumer name] with [eventtype] in (list of all consumers) generate: + if (ACE_OS_String::strcmp (sink_name, "[consumer name]") == 0) + return this->get_consumer_[consumer name] (); +##end foreach [consumer name] with [eventtype] + ACE_THROW_RETURN (Components::InvalidName (), 0); +} + +::Components::Cookie * +[ciao module name]::[component name]_Servant::subscribe (const char * publisher_name, + Components::EventConsumerBase_ptr subscriber) + ACE_THROW_SPEC ((CORBA::SystemException, + Components::InvalidName, + Components::InvalidConnection, + Components::ExceededConnectionLimit)) +{ + // @@ We can omit this if clause if there's no publisher in this component. + if (publisher_name == 0) + ACE_THROW_RETURN (Components::InvalidName (), 0); + +##foreach [publish name] with [eventtype] in (list of all publishers) generate: + if (ACE_OS_String::strcmp (publisher_name, "[publish name]") == 0) + { + [eventtype]Consumer_var _ciao_consumer = + [eventtype]Consumer::_narrow (subscriber); + + if (CORBA::is_nil (_ciao_consumer.in ())) + ACE_THROW_RETURN (Components::InvalidConnection (), 0); + + return this->subscribe_[publish name] (_ciao_consumer.in ()); + } +##end foreach [publish name] with [eventtype] + + ACE_THROW_RETURN (Components::InvalidName (), 0); +} + +::Components::EventConsumerBase_ptr +[ciao module name]::[component name]_Servant::unsubscribe (const char * publisher_name, + Components::Cookie *ck) + ACE_THROW_SPEC ((CORBA::SystemException, + Components::InvalidName, + Components::InvalidConnection)) +{ + // @@ We can omit this if clause if there's no publisher in this component. + if (publisher_name == 0) + ACE_THROW_RETURN (Components::InvalidName (), 0); + +##foreach [publish name] with [eventtype] in (list of all publishers) generate: + if (ACE_OS_String::strcmp (publisher_name, "[publish name]") == 0) + { + return this->unsubscribe_[publish name] (ck); + } +##end foreach [publish name] with [eventtype] + + ACE_THROW_RETURN (Components::InvalidName (), 0); +} + +void +[ciao module name]::[component name]_Servant::connect_consumer (const char * emitter_name, + Components::EventConsumerBase_ptr consumer) + ACE_THROW_SPEC ((CORBA::SystemException, + Components::InvalidName, + Components::AlreadyConnected, + Components::InvalidConnection)) +{ + // @@ We can omit this if clause if there's no emitter in this component. + if (emitter_name == 0) + throw Components::InvalidName (); + +##foreach [emit name] with [eventtype] in (list of all emitters) generate: + if (ACE_OS_String::strcmp (emitter_name, "[emit name]") == 0) + { + [eventtype]Consumer_var _ciao_consumer = + [eventtype]Consumer::_narrow (consumer); + + if (CORBA::is_nil (_ciao_consumer.in ())) + throw Components::InvalidConnection; + + this->connect_[emit name] (_ciao_consumer.in ()); + return; + } +##end foreach [emit name] with [eventtype] + + throw Components::InvalidName (); +} + +::Components::EventConsumerBase_ptr +[ciao module name]::[component name]_Servant::disconnect_consumer (const char * source_name) + ACE_THROW_SPEC ((CORBA::SystemException, + Components::InvalidName, + Components::NoConnection)) +{ + // @@ We can omit this if clause if there's no emitter in this component. + if (source_name == 0) + ACE_THROW_RETURN (Components::InvalidName (), 0); + +##foreach [emit name] with [eventtype] in (list of all emitters) generate: + if (ACE_OS_String::strcmp (source_name, "[emit name]") == 0) + { + return this->disconnect_[emit name] (); + } +##end foreach [emit name] with [eventtype] + + ACE_THROW_RETURN (Components::InvalidName (), 0); +} + +::Components::ConsumerDescriptions * +[ciao module name]::[component name]_Servant::get_all_consumers () + ACE_THROW_SPEC ((CORBA::SystemException)) +{ + ::Components::ConsumerDescriptions_var retv = + new ::Components::ConsumerDescriptions (#99); // #99 is the number of consumers + // this component has. + retv->length (#99); + + CORBA::ULong i = 0; +##foreach [consumer name] with [eventtype] in (list of all consumers) generate: + retv[i] = new OBV_Components::ConsumerDescription; + retv[i]->Name ("[consumer name]"); + retv[i]->type_id ("[eventtype]Consumer repo id"); + [eventtype]Consumer_var c + = this->get_consumer_[consumer name] (); + + retv[i]->consumer (c.in ()); + + i++; +##end foreach [consumer name] with [eventtype] + + return retv._retn (); +} + +::Components::ConsumerDescriptions * +[ciao module name]::[component name]_Servant::get_named_consumers (const Components::NameList & names) + ACE_THROW_SPEC ((CORBA::SystemException, + Components::InvalidName)) +{ + ::Components::ConsumerDescriptions_var retv = + new ::Components::ConsumerDescriptions (names.length ()); + retv->length (names.length ()); + + CORBA::ULong i = 0; + for (; i < names.length (); ++i) + { + retv[i] = new OBV_Components::ConsumerDescription; + +##foreach [consumer name] with [eventtype] in (list of all consumers) generate: + (else) if (ACE_OS_String::strcmp (names[i].in (), "[consumer name]") == 0) + { + retv[i]->Name ("[consumer name]"); + retv[i]->type_id ("[eventtype]Consumer repo id"); + [eventtype]Consumer_var c = + this->get_consumer_[consumer name] (); + + retv[i]->consumer (c.in ()); + } +##end foreach [consumer name] with [eventtype] + else + ACE_THROW_RETURN (::Components::InvalidName (), 0); + } + return retv._retn (); +} + +::Components::EmitterDescriptions * +[ciao module name]::[component name]_Servant::get_all_emitters () + ACE_THROW_SPEC ((CORBA::SystemException)) +{ + ::Components::EmitterDescriptions_var retv = + new ::Components::EmitterDescriptions (#99); // #99 is the number of emitters + // this component has. + retv->length (#99); + + CORBA::ULong i = 0; +##foreach [emit name] with [eventtype] in (list of all emitters) generate: + retv[i] = new OBV_Components::EmitterDescription; + retv[i]->Name ("[emit name]"); + retv[i]->type_id ("[eventtype]Consumer repo id"); + retv[i]->consumer ([eventtype]Consumer::_duplicate (this->context_->ciao_emits_[emit name]_consumer_)); + + i++; +##end foreach [emitter name] with [eventtype] + + return retv._retn (); +} + +::Components::EmitterDescriptions * +[ciao module name]::[component name]_Servant::get_named_emitters (const Components::NameList & names) + ACE_THROW_SPEC ((CORBA::SystemException, + Components::InvalidName)) +{ + ::Components::EmitterDescriptions_var retv = + new ::Components::EmitterDescriptions (names.length ()); + retv->length (names.length ()); + + CORBA::ULong i = 0; + for (; i < names.length (); ++i) + { + retv[i] = new OBV_Components::EmitterDescription; + +##foreach [emit name] with [eventtype] in (list of all emitters) generate: + (else) if (ACE_OS_String::strcmp (names[i].in (), "[emit name]") == 0) + { + retv[i]->Name ("[emit name]"); + retv[i]->type_id ("[eventtype]Consumer repo id"); + retv[i]->consumer ([eventtype]Consumer::_duplicate (this->context_->ciao_emits_[emit name]_consumer_.in ())); + } +##end foreach [consumer name] with [eventtype] + else + ACE_THROW_RETURN (::Components::InvalidName (), 0); + } + return retv._retn (); +} + +::Components::PublisherDescriptions * +[ciao module name]::[component name]_Servant::get_all_publishers () + ACE_THROW_SPEC ((CORBA::SystemException)) +{ + // @@ to-do + + // Need to add interfaces in the Context class to gather the information. + // Or we can just relay it to the Context object. + ACE_THROW_RETURN (CORBA::NO_IMPLEMENT (), 0); +} + +::Components::PublisherDescriptions * +[ciao module name]::[component name]_Servant::get_named_publishers (const Components::NameList & names) + ACE_THROW_SPEC ((CORBA::SystemException, + Components::InvalidName)) +{ + // @@ to-do + + // Need to add interfaces in the Context class to gather the information. + // Or we can just relay it to the Context object. + ACE_THROW_RETURN (CORBA::NO_IMPLEMENT (), 0); +} + +// Operations for CCMObject interface +::CORBA::IRObject_ptr +[ciao module name]::[component name]_Servant::get_component_def () + ACE_THROW_SPEC ((CORBA::SystemException)) +{ + // @@ to-do: Connect to an IfR? + ACE_THROW_RETURN (CORBA::NO_IMPLEMENT (), 0); +} + +::Components::CCMHome_ptr +[ciao module name]::[component name]_Servant::get_ccm_home () + ACE_THROW_SPEC ((CORBA::SystemException)) +{ + return this->context_->get_CCM_home (); +} + +::Components::PrimaryKeyBase * +[ciao module name]::[component name]_Servant::get_primary_key () + ACE_THROW_SPEC ((CORBA::SystemException, + Components::NoKeyAvailable)) +{ + // This is a keyless component. + ACE_THROW_RETURN (::Components::NoKeyAvailable (), 0); +} + +void +[ciao module name]::[component name]_Servant::configuration_complete () + ACE_THROW_SPEC ((CORBA::SystemException, + Components::InvalidConfiguration)) +{ + // @@ to-do + // No-op. Don't know how to pass this info to monolithic executor. +} + +void +[ciao module name]::[component name]_Servant::remove () + ACE_THROW_SPEC ((CORBA::SystemException, + Components::RemoveFailure)) +{ + // @@ to-do + // Need to figure out what to do here. E.g., tear down the all the connections + // this component has? +} + +::Components::ComponentPortDescription * +[ciao module name]::[component name]_Servant::get_all_ports () + ACE_THROW_SPEC ((CORBA::SystemException)) +{ + ::Components::ComponentPortDescription_var retv = + new OBV_Components::ComponentPortDescription; + + ::Components::FacetDescriptions_var facets_desc + = this->get_all_facets (); + + ::Components::ReceptacleDescriptions_var receptacle_desc + = get_all_receptacles (); + + ::Components::ConsumerDescriptions_var consumer_desc + = this->get_all_consumers (); + + ::Components::EmitterDescriptions_var emitter_desc + = this->get_all_emitters (); + + ::Components::PublisherDescriptions_var publisher_desc + = this->get_all_publishers (); + + retv->facets (facets_desc.in()); + retv->receptacles (receptacle_desc.in()); + retv->consumers (consumer_desc.in()); + retv->emitters (emitter_desc.in()); + retv->publishers (publisher_desc.in()); + + return retv._retn(); +} + +// get_component implementation. +CORBA::Object_ptr +[ciao module name]::[component name]_Servant::_get_component () + ACE_THROW_SPEC ((CORBA::SystemException)) +{ + ::Components::SessionContext_var sc = + ::Components::SessionContext::_narrow (this->context_); + + if (! CORBA::is_nil(sc.in ())) + return sc->get_CCM_object (); + + // @@ Do we need to try the following case here? We are afterall implementing + // a session component here. + ::Components::EntityContext_var ec = + ::Components::EntityContext::_narrow (this->context_); + + if (! CORBA::is_nil(ec.in ())) + return ec->get_CCM_object (); + + ACE_THROW_RETURN (CORBA::INTERNAL (), 0); +} + +void +[ciao module name]::[component name]_Servant::_ciao_activate () + ACE_THROW_SPEC ((CORBA::SystemException)) +{ + ::Components::SessionComponent_var temp = + ::Components::SessionComponent::_narrow (this->executor_.in ()); + + if (! CORBA::is_nil (temp.in ())) + temp->ccm_activate (); +} + +void +[ciao module name]::[component name]_Servant::_ciao_passivate () + ACE_THROW_SPEC ((CORBA::SystemException)) +{ + ::Components::SessionComponent_var temp = + ::Components::SessionComponent::_narrow (this->executor_.in ()); + + if (! CORBA::is_nil (temp.in ())) + temp->ccm_passivate (); +} + +////////////////////////////////////////////////////////////////// +// Component Home Glue code implementation +////////////////////////////////////////////////////////////////// + +[component name]_ptr +[ciao module name]::[home name]_Servant::_ciao_activate_component (CCM_[component name]_ptr exe) + ACE_THROW_SPEC ((CORBA::SystemException)) +{ + CORBA::Object_var hobj + = this->container_->get_objref (this); + + ::Components::CCMHome_var home + = ::Components::CCMHome::_narrow (hobj.in ()); + + [ciao module name]::[component name]_Servant *svt = + new [ciao module name]::[component name]_Servant (exe, + home.in (), + this->container_); + PortableServer::ServantBase_var safe (svt); + PortableServer::ObjectId_var oid; + + CORBA::Object_var objref + = this->container_->install_component (svt, + oid.out ()); + + svt->_ciao_activate (); + + [component name]_var ho + = [component name]::_narrow (objref.in ()); + + if (this->component_map_.bind (oid.in (), svt) == 0) + { + // @@ what should happen if bind fail? + safe._retn (); + } + return ho._retn (); +} + +void +[ciao module name]::[home name]_Servant::_ciao_passivate_component ([component name]_ptr comp) + ACE_THROW_SPEC ((CORBA::SystemException)) +{ + PortableServer::ObjectId_var oid; + + this->container_->uninstall_component (comp, + oid.out ()); + + [ciao module name]::[component name]_Servant *servant = 0; + if (this->component_map_.unbind (oid.in (), servant) == 0) + { + PortableServer::ServantBase_var safe (servant); + servant->_ciao_passivate (); + } + // What happen if unbind failed? + +} + +// Operations for Implicit Home interface +[component name]_ptr +[ciao module name]::[home name]_Servant::create () + ACE_THROW_SPEC ((CORBA::SystemException, + Components::CreateFailure)) +{ + if (this->executor_.in () == 0) + ACE_THROW_RETURN (CORBA::INTERNAL (), 0); + + Components::EnterpriseComponent_var _ciao_ec = + this->executor_->create (); + + CCM_[component name]_var _ciao_comp + = CCM_[component name]::_narrow (_ciao_ec.in ()); + + return this->_ciao_activate_component (_ciao_comp.in ()); +} + +// Operations for CCMHome interface +void +[ciao module name]::[home name]_Servant::remove_component (Components::CCMObject_ptr comp) + ACE_THROW_SPEC ((CORBA::SystemException, + Components::RemoveFailure)) +{ + [component name]_var _ciao_comp + = [component name]::_narrow (comp); + + if (CORBA::is_nil (_ciao_comp.in ())) + throw CORBA::INTERNAL (); // What is the right exception to throw here? + + // @@ It seems to me that we need to make sure this is a component + // generated by this home before calling remove on this component. + _ciao_comp->remove (); + + + // Removing the object reference? get the servant from the POA with + // the objref, and call remove() on the component, deactivate the + // component, and then remove-ref the servant? + this->_ciao_passivate_component (_ciao_comp.in ()); +} + +extern "C" [SERVANT]_Export ::PortableServer::Servant +create[home name]_Servant (::Components::HomeExecutorBase_ptr p, + CIAO::Session_Container *c); +{ + if (p == 0) + return 0; + + CCM_[home name]_var x + = CCM_[home name]::_narrow (p); + + if (CORBA::is_nil (x.in ())) + return 0; + + return new [ciao module name]::[home name]_Servant (x.in (), + c); +} diff --git a/modules/CIAO/docs/templates/CIAO_Glue_Session_Template.h b/modules/CIAO/docs/templates/CIAO_Glue_Session_Template.h new file mode 100644 index 00000000000..25c7813db53 --- /dev/null +++ b/modules/CIAO/docs/templates/CIAO_Glue_Session_Template.h @@ -0,0 +1,694 @@ +// $Id$ + +// =========================================================== +// +// @file CIAO_Glue_Session_Template.h +// +// This is a pseudo-meta generic servant implementations template +// for CIAO's CIDL compiler. It demonstrates how a servant +// implementation for a session component should look like. +// +// The generated filename for files using this template shoule be +// [idl-basename]_svnt.h +// +// @author Nanbor Wang <nanbor@cs.wustl.edu> +// +// =========================================================== + +#ifndef CIAO_GLUE_SESSION_[idl-basename]_SVNT_H +#define CIAO_GLUE_SESSION_[idl-basename]_SVNT_H +#include /**/ "ace/pre.h" + +#include "[idl-name]S.h" // Source in the skeletons for component + // client-view equivalent interfaces +#include "[idl-name]EC.h" // Source in the executor mapping + // that component implementations use +#include "ciao/Container_Base.h" //Source in the container interface definitions +#include "tao/LocalObject.h" +#include "tao/PortableServer/Key_Adapters.h" +#include "ace/Active_Map_Manager_T.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +/// @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ +/// @@@ Notice that all component and interface names need to be +/// fully qualified as we are creating a new namespace for the CIAO's +/// container glue code. +/// @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ + +##if component is defined withing a [module name] +namespace CIAO_GLUE_[module_name] +##else +namespace CIAO_GLUE +##endif +{ + + ////////////////////////////////////////////////////////////////// + // Facet Glue Code implementation + // @@ We are assuming that these facets are declared under the same + // module as the component (thus, we are placing this glue code + // here under the same namespace. If they are not, we will + // either be generating them in separate namespaces, or include + // some other CIDL generated files to get the glue code + // implementation. + +##foreach [facet type] in (all facet interface types in the original IDL) + class [SERVANT]_Export [facet type]_Servant : + : public virtual POA_[facet type] // full skeleton name here + { + public: + // Constructor and destructor. + [facet type]_Servant (CCM_[facet type]_ptr executor, + ::Components::CCMContext_ptr ctx); + ~[facet tyep]_Servant (); + +## foreach [operation] in (all facet operations) + // Generate operation decls. +## end foreach [operation] + + // get_component implementation. + virtual CORBA::Object_ptr + _get_component () + ACE_THROW_SPEC ((CORBA::SystemException)); + + protected: + // Facet executor. + CCM_[facet type]_var executor_; + + // Context object. + ::Components::CCMContext_var ctx_; + }; +##end foreach [facet type] + + + ////////////////////////////////////////////////////////////////// + // Component specific context implementation + class [SERVANT]_Export [component name]_Context : + public virtual CCM_[component name]_Context, + public virtual TAO_Local_RefCounted_Object + { + public: + // We will allow the the servant glue code we generate to access + // our states. + friend class [component name]_Servant; + + // Ctor. + [component name]_Context (::Components::CCMHome_ptr home, + ::CIAO::Session_Container *c, + [component name]_Servant *sv); + + // Dtor. + virtual ~[component name]_Context (); + + // Operations for [component name] event source, and + // receptacles defined in CCM_[component name]_Context. + +##foreach [receptacle name] with [uses type] in (list of all 'uses' interfaces) generate: +## if [receptacle name] is a simplex receptacle ('uses') + [uses type]_ptr + get_connection_[receptacle name] () + ACE_THROW_SPEC ((CORBA::SystemException)); +## else ([receptacle name] is a multiplex ('uses multiple') receptacle) + // [receptacle name]Connections typedef'ed as a sequence of + // struct [receptacle name]Connection. + [receptacle name]Connections * + get_connections_[receptacle name] (); + ACE_THROW_SPEC ((CORBA::SystemException)); +## endif [receptacle name] +##end foreach [receptacle name] with [uses type] + +##foreach [event name] with [eventtype] in (list of all event sources) generate: + void push_[event name] ([eventtype] *ev) + ACE_THROW_SPEC ((CORBA::SystemException)); +##end foreach [event name] with [eventtype] + + // Operations for ::Components::CCMContext + virtual ::Components::Principal_ptr + get_caller_principal () + ACE_THROW_SPEC ((CORBA::SystemException)); + + virtual ::Components::CCMHome_ptr + get_CCM_home () + ACE_THROW_SPEC ((CORBA::SystemException)); + + virtual CORBA::Boolean + get_rollback_only () + ACE_THROW_SPEC ((CORBA::SystemException, + Components::IllegalState)); + + virtual ::Components::Transaction::UserTransaction_ptr + get_user_transaction () + ACE_THROW_SPEC ((CORBA::SystemException, + Components::IllegalState)); + + virtual CORBA::Boolean + is_caller_in_role (const char * role) + ACE_THROW_SPEC ((CORBA::SystemException)); + + virtual void + set_rollback_only () + ACE_THROW_SPEC ((CORBA::SystemException, + Components::IllegalState)); + + // Operations for ::Components::SessionContext interface + virtual CORBA::Object_ptr + get_CCM_object () + ACE_THROW_SPEC ((CORBA::SystemException, + Components::IllegalState)); + protected: + // We need to generate, in protected section, stuff that manage + // connections and consumers of this component. + +##foreach [receptacle name] with [uses type] in (list of all 'uses' interfaces) generate: +## if [receptacle name] is a simplex receptacle ('uses') + // Simplex [receptacle name] connection management operations + void + connect_[receptacle name] ([uses type]_ptr c) + ACE_THROW_SPEC ((CORBA::SystemException, + ::Components::AlreadyConnected, + ::Components::InvalidConnection)); + + [uses type]_ptr + disconnect_[receptacle name] () + ACE_THROW_SPEC ((CORBA::SystemException, + ::Components::NoConnection)); + + // Simplex [receptacle name] connection + [uses type]_var ciao_uses_[receptacle name]_; + +## else ([receptacle name] is a multiplex ('uses multiple') receptacle) + // Multiplex [receptacle name] connection management operations + ::Components::Cookie * + connect_[receptacle name] ([uses type]_ptr c) + ACE_THROW_SPEC ((CORBA::SystemException, + ::Components::ExceedConnectionLimit, + ::Components::InvalidConnection)); + + [uses type]_ptr + disconnect_[receptacle name] (::Components::Cookie *ck) + ACE_THROW_SPEC ((CORBA::SystemException, + ::Components::InvalidConnection)); + + // Multiplex [receptacle name] connections + + ACE_Active_Map_Manager<[uses type]_var> ciao_muses_[receptacle name]_; +## endif [receptacle name] +##end foreach [receptacle name] with [uses type] + + // Operations for emits interfaces. +##foreach [emit name] with [eventtype] in (list of all emitters) generate: + void + connect_[emit name] ([eventtype]Consumer_ptr c) + ACE_THROW_SPEC ((CORBA::SystemException, + ::Components::AlreadyConnected)); + + [eventtype]Consumer_ptr + disconnect_[emit name] () + ACE_THROW_SPEC ((CORBA::SystemException, + ::Components::NoConnection)); + + [eventtype]Consumer_var ciao_emits_[emit name]_consumer_; +##end foreach [emit name] with [eventtype] + + // Operations for publishes interfaces. +##foreach [publish name] with [eventtype] in (list of all publishers) generate: + ::Components::Cookie * + subscribe_[publish name] ([eventtype]Consumer_ptr c) + ACE_THROW_SPEC ((CORBA::SystemException, + ::Components::ExceededConnectionLimit)); + + [eventtype]Consumer_ptr + unsubscribe_[publish name] (::Components::Cookie *ck) + ACE_THROW_SPEC ((CORBA::SystemException, + ::Components::InvalidConnection)); + + ACE_Active_Map_Manager<[eventtype]Consumer_var> ciao_publishes_[publish name]_map_; +##end foreach [publish name] with [eventtype] + + protected: + /// Cached component home reference. + ::Components::CCMHome_var home_; + + /// session container + ::CIAO::Session_Container *container_; + + /// Reference back to owner. + [component name]_Servant *servant_; + + /// @@ Cached component reference. + [component name]_var component_; + + }; + + ////////////////////////////////////////////////////////////////// + // Component Servant Glue code implementation + class [SERVANT]_Export [component name]_Servant + : public virtual POA_[component name] // full skeleton name here + { + public: + // Ctor. + [component name]_Servant (CCM_[component name]_ptr executor, + ::Components::CCMHome_ptr home, + ::CIAO::Session_Container *c); + + // Dtor. + ~[component name]_Servant (void); + +##foreach [operation] in all supported interfaces of own component and all inherited components and attribute accessors/mutators + + // Generate the [operation] here. + +##end + + // Operations for provides interfaces. +##foreach [facet name] with [facet type] in (list of all provided interfaces) generate: + virtual [facet type]_ptr + provide_[facet name] () + ACE_THROW_SPEC ((CORBA::SystemException)); +##end foreach [facet name] with [facet type] + + // Operations for receptacles interfaces. + +##foreach [receptacle name] with [uses type] in (list of all 'uses' interfaces) generate: +## if [receptacle name] is a simplex receptacle ('uses') + // Simplex [receptacle name] connection management operations + virtual void + connect_[receptacle name] ([uses type]_ptr c) + ACE_THROW_SPEC ((CORBA::SystemException, + ::Components::AlreadyConnected, + ::Components::InvalidConnection)); + + virtual [uses type]_ptr + disconnect_[receptacle name] () + ACE_THROW_SPEC ((CORBA::SystemException, + ::Components::NoConnection)); + + virtual [uses type]_ptr + get_connection_[receptacle name] () + ACE_THROW_SPEC ((CORBA::SystemException)); +## else ([receptacle name] is a multiplex ('uses multiple') receptacle) + // Multiplex [receptacle name] connection management operations + virtual ::Components::Cookie * + connect_[receptacle name] ([uses type]_ptr c) + ACE_THROW_SPEC ((CORBA::SystemException, + ::Components::ExceedConnectionLimit, + ::Components::InvalidConnection)); + + virtual [uses type]_ptr + disconnect_[receptacle name] (::Components::Cookie *ck) + ACE_THROW_SPEC ((CORBA::SystemException, + ::Components::InvalidConnection)); + + virtual [receptacle name]Connections * + get_connections_[receptacle name] () + ACE_THROW_SPEC ((CORBA::SystemException)); +## endif [receptacle name] +##end foreach [receptacle name] with [uses type] + + // Operations for consumers interfaces. +##foreach [consumer name] with [eventtype] in (list of all consumers) generate: + + // First we need to generate the event sink specific servant + class [SERVANT]_Export [eventtype]Consumer_[consumer name]_Servant + : public virtual POA_[eventtype]Consumer // full skeleton name here + { + public: + // Constructor and destructor. + [event type]Consumer_[consumer name]_Servant (CCM_[component name]_ptr executor, + CCM_[component name]_Context_ptr c); + + ~[event type]Consumer_[consumer name]_Servant (); + +## foreach [type] in ([eventtype] and all its parent eventtype, if any) + virtual void push_[type] ([type] *evt) + ACE_THROW_SPEC ((CORBA::SystemException)); +## end [type] + + // Inherit from ::Compopnents::EventConsumerBase + virtual void push_event (::Components::EventBase *ev) + ACE_THROW_SPEC ((CORBA::SystemException, + ::Components::BadEventType)); + + // get_component implementation. + virtual CORBA::Object_ptr + _get_component () + ACE_THROW_SPEC ((CORBA::SystemException)); + + protected: + // Executor + CCM_[component name]_var executor_; + + // Context object. + CCM_[component name]_Context_var ctx_; + }; + + virtual [eventtype]Consumer_ptr + get_consumer_[consumer name] () + ACE_THROW_SPEC ((CORBA::SystemException)); +##end foreach [consumer name] with [eventtype] + + // Operations for emits interfaces. +##foreach [emit name] with [eventtype] in (list of all emitters) generate: + virtual void + connect_[emit name] ([eventtype]Consumer_ptr c) + ACE_THROW_SPEC ((CORBA::SystemException + ::Components::AlreadyConnected)); + + virtual [eventtype]Consumer_ptr + disconnect_[emit name] () + ACE_THROW_SPEC ((CORBA::SystemException, + ::Components::NoConnection)); +##end foreach [emit name] with [eventtype] + + // Operations for publishes interfaces. +##foreach [publish name] with [eventtype] in (list of all publishers) generate: + virtual ::Components::Cookie * + subscribe_[publish name] ([eventtype]Consumer_ptr c) + ACE_THROW_SPEC ((CORBA::SystemException, + ::Components::ExceededConnectionLimit)); + + virtual [eventtype]Consumer_ptr + unsubscribe_[publish name] (::Components::Cookie *ck) + ACE_THROW_SPEC ((CORBA::SystemException, + ::Components::InvalidConnection)); +##end foreach [publish name] with [eventtype] + + // Operations for Navigation interface + virtual CORBA::Object_ptr + provide_facet (const char * name) + ACE_THROW_SPEC ((CORBA::SystemException , + Components::InvalidName)) ; + + virtual ::Components::FacetDescriptions * + get_all_facets () + ACE_THROW_SPEC ((CORBA::SystemException)); + + virtual ::Components::FacetDescriptions * + get_named_facets (const Components::NameList & names) + ACE_THROW_SPEC ((CORBA::SystemException , + Components::InvalidName)); + + virtual CORBA::Boolean + same_component (CORBA::Object_ptr object_ref) + ACE_THROW_SPEC ((CORBA::SystemException)); + + // Operations for Receptacles interface + virtual ::Components::Cookie * + connect (const char * name, + CORBA::Object_ptr connection) + ACE_THROW_SPEC ((CORBA::SystemException, + Components::InvalidName, + Components::InvalidConnection, + Components::AlreadyConnected, + Components::ExceededConnectionLimit)); + + virtual CORBA::Object_ptr + disconnect (const char * name, + Components::Cookie *ck) + ACE_THROW_SPEC ((CORBA::SystemException, + Components::InvalidName, + Components::InvalidConnection, + Components::CookieRequired, + Components::NoConnection)); + + virtual ::Components::ConnectionDescriptions * + get_connections (const char * name) + ACE_THROW_SPEC ((CORBA::SystemException, + Components::InvalidName)); + + virtual ::Components::ReceptacleDescriptions * + get_all_receptacles () + ACE_THROW_SPEC ((CORBA::SystemException)); + + virtual ::Components::ReceptacleDescriptions * + get_named_receptacles (const Components::NameList & names) + ACE_THROW_SPEC ((CORBA::SystemException, + Components::InvalidName)); + + // Operations for Events interface + virtual ::Components::EventConsumerBase_ptr + get_consumer (const char * sink_name) + ACE_THROW_SPEC ((CORBA::SystemException, + Components::InvalidName)); + + virtual ::Components::Cookie * + subscribe (const char * publisher_name, + Components::EventConsumerBase_ptr subscriber) + ACE_THROW_SPEC ((CORBA::SystemException, + Components::InvalidName, + Components::InvalidConnection, + Components::ExceededConnectionLimit)); + + virtual ::Components::EventConsumerBase_ptr + unsubscribe (const char * publisher_name, + Components::Cookie *ck) + ACE_THROW_SPEC ((CORBA::SystemException, + Components::InvalidName, + Components::InvalidConnection)); + + virtual void + connect_consumer (const char * emitter_name, + Components::EventConsumerBase_ptr consumer) + ACE_THROW_SPEC ((CORBA::SystemException, + Components::InvalidName, + Components::AlreadyConnected, + Components::InvalidConnection)); + + virtual ::Components::EventConsumerBase_ptr + disconnect_consumer (const char * source_name) + ACE_THROW_SPEC ((CORBA::SystemException, + Components::InvalidName, + Components::NoConnection)); + + virtual ::Components::ConsumerDescriptions * + get_all_consumers () + ACE_THROW_SPEC ((CORBA::SystemException)); + + virtual ::Components::ConsumerDescriptions * + get_named_consumers (const Components::NameList & names) + ACE_THROW_SPEC ((CORBA::SystemException, + Components::InvalidName)); + + virtual ::Components::EmitterDescriptions * + get_all_emitters () + ACE_THROW_SPEC ((CORBA::SystemException)); + + virtual ::Components::EmitterDescriptions * + get_named_emitters (const Components::NameList & names) + ACE_THROW_SPEC ((CORBA::SystemException, + Components::InvalidName)); + + virtual ::Components::PublisherDescriptions * + get_all_publishers () + ACE_THROW_SPEC ((CORBA::SystemException)); + + virtual ::Components::PublisherDescriptions * + get_named_publishers (const Components::NameList & names) + ACE_THROW_SPEC ((CORBA::SystemException, + Components::InvalidName)); + + // Operations for CCMObject interface + virtual ::CORBA::IRObject_ptr + get_component_def () + ACE_THROW_SPEC ((CORBA::SystemException)); + + virtual ::Components::CCMHome_ptr + get_ccm_home () + ACE_THROW_SPEC ((CORBA::SystemException)); + + virtual ::Components::PrimaryKeyBase * + get_primary_key () + ACE_THROW_SPEC ((CORBA::SystemException, + Components::NoKeyAvailable)); + + virtual void + configuration_complete () + ACE_THROW_SPEC ((CORBA::SystemException, + Components::InvalidConfiguration)); + + virtual void + remove () + ACE_THROW_SPEC ((CORBA::SystemException, + Components::RemoveFailure)); + + virtual ::Components::ComponentPortDescription * + get_all_ports () + ACE_THROW_SPEC ((CORBA::SystemException)); + + // get_component implementation. + virtual CORBA::Object_ptr + _get_component () + ACE_THROW_SPEC ((CORBA::SystemException)); + + // CIAO specific operations. + + // Activate the object in the container_ + void + _ciao_activate () + ACE_THROW_SPEC ((CORBA::SystemException)); + + void + _ciao_passivate () + ACE_THROW_SPEC ((CORBA::SystemException)); + + protected: + // My Executor. + CCM_[component name]_var executor_; + + // My Run-time Context. + [component name]_Context *context_; + + // Managing container. + ::CIAO::Session_Container *container_; + + // Cached provided interfaces. +##foreach [facet name] with [facet type] in (list of all provided interfaces) generate: + [facet type]_var provide_[facet name]_; +##end foreach [facet name] with [facet type] + +##foreach [consumer name] with [eventtype] in (list of all consumers) generate: + [eventtype]Consumer_var consumes_[consumer name]_; +##end foreach [consumer name] with [eventtype] + + }; + + + ////////////////////////////////////////////////////////////////// + // Component Home Glue code implementation + + // Foreach component home + class [SERVANT]_Export [home name]_Servant : + public virtual POA_[home name] // full skeleton name here + { + public: + // Ctor. + [home name]_Servant (CCM_[home name]_ptr exe, + CIAO::Session_Container *c); + + // Dtor. + ~[home name]_Servant (void); + + // User defined and inherited operations +##foreach [operation] in (all explicit operations in [home basename] including its parents) + + // The operation decl here. + +## end foreach opeartion + + // Factory operations +##foreach [factory name] in (all factory operations in [home basename] including its parents) + // for factory operations inherit from parent home(s), they should return + // the corresponding component types their homes manage + virtual [component name]_ptr + [factory name] (....) + ACE_THROW_SPEC ((CORBA::SystemException, + ::Components::CreateFailure, + ....)); +##end foreach [factory name] + + // Finder operations +##foreach [finder name] in (all finder operations in [home basename] including its parents) + // for finder operations inherit from parent home(s), they should return + // the corresponding component types their homes manage + virtual [component name]_ptr + [finder name] (....) + ACE_THROW_SPEC ((CORBA::SystemException, + Components::FinderFailure, + ....)); +##end foreach [finder name] + +## if [home name] is a keyless home + + // Operations for KeylessHome interface + virtual ::Components::CCMObject_ptr + create_component () + ACE_THROW_SPEC ((CORBA::SystemException, + Components::CreateFailure)); + +## else [home basename] is keyed home with [key type] + + // We do not support key'ed home at the moment but we might + // as well generate the mapping. + virtual [component name]_ptr create ([key type] *key) + ACE_THROW_SPEC ((CORBA::SystemException, + ::Components::CreationFailure, + ::Components::DuplicateKeyValue, + ::Components::InvalidKey)); + + virtual [component name]_ptr + find_by_primary_key ([key type] *key) + ACE_THROW_SPEC ((CORBA::SystemException, + ::Components::FinderFailure, + ::Components::UnknownKeyValue, + ::Components::InvalidKey)); + + virtual void remove ([key type] *key) + ACE_THROW_SPEC ((CORBA::SystemException, + ::Components::RemoveFailure, + ::Components::UnknownKeyValue, + ::Components::InvalidKey)); + + virtual [key type] * + get_primary_key ([component name]_ptr comp) + ACE_THROW_SPEC ((CORBA::SystemException)); + +## endif (keyed or keyless home) + + // Operations for Implicit Home interface + virtual [component name]_ptr + create () + ACE_THROW_SPEC ((CORBA::SystemException, + Components::CreateFailure)); + + // Operations for CCMHome interface + virtual ::CORBA::IRObject_ptr + get_component_def () + ACE_THROW_SPEC ((CORBA::SystemException)); + + virtual ::CORBA::IRObject_ptr + get_home_def () + ACE_THROW_SPEC ((CORBA::SystemException)); + + virtual void remove_component (Components::CCMObject_ptr comp) + ACE_THROW_SPEC ((CORBA::SystemException, + Components::RemoveFailure)); + + protected: + // Helper method for factory operations. + [component name]_ptr + _ciao_activate_component (CCM_[component name]_ptr exe) + ACE_THROW_SPEC ((CORBA::SystemException)); + + void + _ciao_passivate_component ([component name]_ptr comp) + ACE_THROW_SPEC ((CORBA::SystemException)); + + // My Executor. + CCM_[home name]_var executor_; + + // My Container + CIAO::Session_Container *container_; + + // Components this home manages. + ACE_Hash_Map_Manager_Ex <PortableServer::ObjectId, + [component name]_Servant*, + TAO_ObjectId_Hash, + ACE_Equal_To<PortableServer::ObjectId>, + ACE_SYNCH_MUTEX> component_map_; + }; + +} + +extern "C" [SERVANT]_Export ::PortableServer::Servant +create[home name]_Servant (::Components::HomeExecutorBase_ptr p, + CIAO::Session_Container *c); + +#if defined (__ACE_INLINE__) +# include "[idl-name]_svnt.inl" +#endif /* __ACE_INLINE__ */ + + +#include /**/ "ace/post.h" +#endif /* CIAO_GLUE_SESSION_[idl-basename]_SVNT_H */ diff --git a/modules/CIAO/docs/templates/CIAO_Glue_Session_Template.inl b/modules/CIAO/docs/templates/CIAO_Glue_Session_Template.inl new file mode 100644 index 00000000000..1cb07a064ae --- /dev/null +++ b/modules/CIAO/docs/templates/CIAO_Glue_Session_Template.inl @@ -0,0 +1,471 @@ +// $Id$ -*- C++ -*- + +// The generated filename for files using this template shoule be +// [idl-basename]GS.i GS --> GlueSession + +// @@ Notice: [ciao module name] can expand to either CIAO_GLUE or +// CIAO_GLUE_[module name] as defined in the header file. + +/// @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ +/// @@@ Notice that all component and interface names need to be +/// fully qualified as we are creating a new namespace for the CIAO's +/// container glue code. +/// @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ + +////////////////////////////////////////////////////////////////// +// Facet Glue Code implementation +// @@ We are assuming that these facets are declared under the same +// module as the component (thus, we are placing this glue code +// here under the same namespace. If they are not, we will +// either be generating them in separate namespaces, or include +// some other CIDL generated files to get the glue code +// implementation. +////////////////////////////////////////////////////////////////// + +##foreach [facet type] in (all facet interface types in the original IDL) +// Constructor and destructor. +ACE_INLINE +[ciao module name]::[facet type]_Servant::[facet type]_Servant (CCM_[facet type]_ptr executor, + ::Components::CCMContext_ptr c) + : executor_ (CCM_[facet type]::_duplicate (executor)), + ctx_ (Components::CCMContext::_duplicate (c)) +{ +} + +ACE_INLINE +[ciao module name]::[facet type]_Servant::~[facet tyep]_Servant () +{ +} + + +## foreach [operation] in (all facet operations) + +// This is only a guideline... we always relay the operation to underlying +// executor. + +ACE_INLINE [operation return_type] +[ciao module name]::[facet type]_Servant::[operation] ([operation args]) +{ + // Simply relay to executor. May not need to return the result... + return this->executor_->operation ([operation args]); +} +## end foreach [operation] + +##end foreach [facet type] + + +////////////////////////////////////////////////////////////////// +// Component specific context implementation +////////////////////////////////////////////////////////////////// + +ACE_INLINE +[ciao module name]::[component name]_Context::[component name]_Context (::Components::CCMHome_ptr home, + ::CIAO::Session_Container *c, + [ciao module name]::[component name]_Servant *sv) + : home_ (::Components::CCMHome::_duplicate (home)), + container_ (c), + servant_ (sv) +{ + +} + +ACE_INLINE +[ciao module name]::[component name]_Context::~[component name]_Context () +{ +} + +// Operations for emits interfaces. +##foreach [emit name] with [eventtype] in (list of all emitters) generate: + +ACE_INLINE void +[ciao module name]::[component name]_Context::connect_[emit name] ([eventtype]Consumer_ptr c) + ACE_THROW_SPEC ((CORBA::SystemException, + ::Components::AlreadyConnected)) +{ + if (CORBA::is_nil (c)) + throw CORBA::BAD_PARAM (); + + if (! CORBA::is_nil (this->ciao_emits_[emit name]_consumer_.in ())) + throw ::Components::AlreadyConnected (); + + this->ciao_emits_[emit name]_consumer_ = c; +} + +ACE_INLINE [eventtype]Consumer_ptr +[ciao module name]::[component name]_Context::disconnect_[emit name] () + ACE_THROW_SPEC ((CORBA::SystemException, + ::Components::NoConnection)) +{ + if (CORBA::is_nil (this->ciao_emits_[emit name]_consumer_.in ())) + throw ::Components::NoConnection (); + + return this->ciao_emits_[emit name]_consumer_._retn (); +} + +##end foreach [emit name] with [eventtype] + +// Operations for ::Components::CCMContext +ACE_INLINE ::Components::Principal_ptr +[ciao module name]::[component name]_Context::get_caller_principal () + ACE_THROW_SPEC ((CORBA::SystemException)) +{ + // @@ We don't support Security in CIAO yet. + ACE_THROW_RETURN (CORBA::NO_IMPLEMENT (), 0); +} + +ACE_INLINE ::Components::CCMHome_ptr +[ciao module name]::[component name]_Context::get_CCM_home () + ACE_THROW_SPEC ((CORBA::SystemException)) +{ + return ::Components::CCMHome::_duplicate (this->home_.in ()); +} + +ACE_INLINE CORBA::Boolean +[ciao module name]::[component name]_Context::get_rollback_only () + ACE_THROW_SPEC ((CORBA::SystemException, + Components::IllegalState)) +{ + // @@ We don't support Transaction in CIAO yet. + ACE_THROW_RETURN (CORBA::NO_IMPLEMENT (), 0); +} + +ACE_INLINE ::Components::Transaction::UserTransaction_ptr +[ciao module name]::[component name]_Context::get_user_transaction () + ACE_THROW_SPEC ((CORBA::SystemException, + Components::IllegalState)) +{ + // @@ We don't support Transaction in CIAO yet. + ACE_THROW_RETURN (CORBA::NO_IMPLEMENT (), 0); +} + +ACE_INLINE CORBA::Boolean +[ciao module name]::[component name]_Context::is_caller_in_role (const char * role) + ACE_THROW_SPEC ((CORBA::SystemException)) +{ + ACE_UNUSED_ARG (role); + + // @@ We don't support Transaction in CIAO yet. + ACE_THROW_RETURN (CORBA::NO_IMPLEMENT (), 0); +} + +ACE_INLINE void +[ciao module name]::[component name]_Context::set_rollback_only () + ACE_THROW_SPEC ((CORBA::SystemException, + Components::IllegalState)) +{ + // @@ We don't support Transaction in CIAO yet. + throw CORBA::NO_IMPLEMENT (); +} + +////////////////////////////////////////////////////////////////// +// Component Servant Glue code implementation +////////////////////////////////////////////////////////////////// + +##foreach [operation] in all supported interfaces of own component and all inherited components and attribute accessors/mutators + +// This is only a guideline... we always relay the operation to underlying +// executor. + +ACE_INLINE [operation return_type] +[ciao module name]::[component name]_Servant::[operation] ([operation args]) +{ + // Simply relay to executor. May not need to return the result... + return this->executor_->operation ([operation args]); +} + +##end + +##foreach [receptacle name] with [uses type] in (list of all 'uses' interfaces) generate: +## if [receptacle name] is a simplex receptacle ('uses') +// Simplex [receptacle name] connection management operations +ACE_INLINE void +[ciao module name]::[component name]_Servant::connect_[receptacle name] ([uses type]_ptr c) + ACE_THROW_SPEC ((CORBA::SystemException, + ::Components::AlreadyConnected, + ::Components::InvalidConnection)) +{ + this->context_->connect_[receptacle name] (c); +} + +ACE_INLINE [uses type]_ptr +[ciao module name]::[component name]_Servant::disconnect_[receptacle name] () + ACE_THROW_SPEC ((CORBA::SystemException, + ::Components::NoConnection)) +{ + return this->context_->disconnect_[receptacle name] (); +} + +ACE_INLINE [uses type]_ptr +[ciao module name]::[component name]_Servant::get_connection_[receptacle name] () + ACE_THROW_SPEC ((CORBA::SystemException)) +{ + return this->context_->get_connection_[receptacle name] (); +} +## else ([receptacle name] is a multiplex ('uses multiple') receptacle) + +// Multiplex [receptacle name] connection management operations +ACE_INLINE ::Components::Cookie * +[ciao module name]::[component name]_Servant::connect_[receptacle name] ([uses type]_ptr c) + ACE_THROW_SPEC ((CORBA::SystemException, + ::Components::ExceedConnectionLimit, + ::Components::InvalidConnection)) +{ + return this->context_->connect_[receptacle name] (c); +} + +ACE_INLINE [uses type]_ptr +[ciao module name]::[component name]_Servant::disconnect_[receptacle name] (::Components::Cookie *ck) + ACE_THROW_SPEC ((CORBA::SystemException, + ::Components::InvalidConnection)) +{ + return this->context_->disconnect_[receptacle name] (ck); +} + +ACE_INLINE [receptacle name]Connections * +[ciao module name]::[component name]_Servant::get_connections_[receptacle name] () + ACE_THROW_SPEC ((CORBA::SystemException)) +{ + return this->context_->get_connections_[receptacle name] (); +} + +## endif [receptacle name] +##end foreach [receptacle name] with [uses type] + +////////////////////////////////////////////////////////////////// +// EventConsumer Glue Code implementation +// @@ We are assuming that these consumers are declared under the same +// module as the component (thus, we are placing this glue code +// here under the same namespace. If they are not, we will +// either be generating them in separate namespaces, or include +// some other CIDL generated files to get the glue code +// implementation. +////////////////////////////////////////////////////////////////// + +##foreach [consumer name] with [eventtype] in (list of all consumers) generate: + +// Constructor and destructor. +ACE_INLINE +[ciao module name]::[component name]_Servant::[eventtype]Consumer_[consumer name]_Servant::[eventtype]Consumer_[consumer name]_Servant + (CCM_[component name]_ptr executor, + CCM_[component name]_Context_ptr c) + : executor_ (CCM_[component name]::_duplicate (executor)), + ctx_ (CCM_[component name]_Context::_duplicate (c)) +{ +} + +ACE_INLINE +[ciao module name]::[component name]_Servant::[eventtype]Consumer_[consumer name]_Servant::~[eventtype]Consumer_[consumer name]_Servant () +{ +} + +ACE_INLINE CORBA::Object_ptr +[ciao module name]::[component name]_Servant::[eventtype]Consumer_[consumer name]_Servant::_get_component () + ACE_THROW_SPEC ((CORBA::SystemException)) +{ + return this->ctx_->get_CCM_object (); +} + +ACE_INLINE void +[ciao module name]::[component name]_Servant::[eventtype]Consumer_[consumer name]_Servant::push_[eventtype] + ([eventtype] *evt) + ACE_THROW_SPEC ((CORBA::SystemException)) +{ + this->executor_->push_[consumer name] (evt); +} + +## foreach [type] in (all parents of eventtype, if any, not including EventConsumerBase) +ACE_INLINE void +[ciao module name]::[component name]_Servant::[eventtype]Consumer_[consumer name]_Servant::push_[type] + ([type] *evt) + ACE_THROW_SPEC ((CORBA::SystemException)) +{ + // @@ Problem, there's no way to handle this case. + + // this->executor_->push_[consumer name] (evt ACE_ENV_ARG); + throw ::CORBA::BAD_PARAM (); +} +## end [type] + +##end foreach [consumer name] + +// Operations for emits interfaces. +##foreach [emit name] with [eventtype] in (list of all emitters) generate: +ACE_INLINE void +[ciao module name]::[component name]_Servant::connect_[emit name] ([eventtype]Consumer_ptr c) + ACE_THROW_SPEC ((CORBA::SystemException + ::Components::AlreadyConnected)) +{ + this->context_->connect_[emit name] (c); +} + +ACE_INLINE [eventtype]Consumer_ptr +[ciao module name]::[component name]_Servant::disconnect_[emit name] () + ACE_THROW_SPEC ((CORBA::SystemException, + ::Components::NoConnection)) +{ + return this->context_->disconnect_[emit name] (); +} +##end foreach [emit name] with [eventtype] + +// Operations for publishes interfaces. +##foreach [publish name] with [eventtype] in (list of all publishers) generate: +ACE_INLINE ::Components::Cookie * +[ciao module name]::[component name]_Servant::subscribe_[publish name] ([eventtype]Consumer_ptr c) + ACE_THROW_SPEC ((CORBA::SystemException, + ::Components::ExceededConnectionLimit)) +{ + return this->context_->subscribe_[publish name] (c); +} + +ACE_INLINE [eventtype]Consumer_ptr +[ciao module name]::[component name]_Servant::unsubscribe_[publish name] (::Components::Cookie *ck) + ACE_THROW_SPEC ((CORBA::SystemException, + ::Components::InvalidConnection)) +{ + return this->context_->unsubscribe_[publish name] (ck); +} +##end foreach [publish name] with [eventtype] + +////////////////////////////////////////////////////////////////// +// Component Home Glue code implementation +////////////////////////////////////////////////////////////////// + +ACE_INLINE +[ciao module name]::[home name]_Servant::[home name]_Servant (CCM_[home name]_ptr exe, + CIAO::Session_Container *c) + : executor_ (CCM_[home name]::_duplicate (exe)), + container_ (c) +{ +} + +ACE_INLINE +[ciao module name]::[home name]_Servant::~[home name]_Servant (void) +{ +} + +##foreach [operation] in (all explicit operations in [home basename] including its parents) + +// The operation impl here. This can simply be relayed to the underlying executor... + +## end foreach opeartion + +##foreach [factory name] in (all factory operations in [home basename] including its parents) +// for factory operations inherit from parent home(s), they should return +// the corresponding component types their homes manage +ACE_INLINE [component name]_ptr +[ciao module name]::[home name]_Servant::[factory name] (....) + ACE_THROW_SPEC ((CORBA::SystemException, + ::Components::CreateFailure, + ....)) +{ + Components::EnterpriseComponent_var _ciao_ec = + this->executor_->[factory name] (....); + + CCM_[component name]_var _ciao_comp + = CCM_[component name]::_narrow (_ciao_ec.in ()); + + return this->_ciao_activate_component (_ciao_comp.in ()); +} +##end foreach [factory name] + +##foreach [finder name] in (all finder operations in [home basename] including its parents) +// for finder operations inherit from parent home(s), they should return +// the corresponding component types their homes manage +ACE_INLINE [component name]_ptr +[ciao module name]::[home name]_Servant::[finder name] (....) + ACE_THROW_SPEC ((CORBA::SystemException, + Components::FinderFailure, + ....)) +{ + Components::EnterpriseComponent_var com = + this->executor_->[finder name] (....); + + // Do we create a new object reference referring to the same object, + // or do we try to create a different objref referring to the same object? + return this->_ciao_create_helper (com); +} +##end foreach [finder name] + +## if [home name] is a keyless home + +// Operations for KeylessHome interface +ACE_INLINE ::Components::CCMObject_ptr +[ciao module name]::[home name]_Servant::create_component () + ACE_THROW_SPEC ((CORBA::SystemException, + Components::CreateFailure)) +{ + // Simply forward to the create method. + return this->create (); +} + +## else [home basename] is keyed home with [key type] + +// We do not support key'ed home at the moment but we might +// as well generate the mapping. +ACE_INLINE [component name]_ptr +[ciao module name]::[home name]_Servant::create ([key type] *key) + ACE_THROW_SPEC ((CORBA::SystemException, + ::Components::CreationFailure, + ::Components::DuplicateKeyValue, + ::Components::InvalidKey)) +{ + // @@ TO-DO when we suppor keyed home. + + ACE_THROW_RETURN (CORBA::NO_IMPLEMENT (), 0); +} + +ACE_INLINE [component name]_ptr +[ciao module name]::[home name]_Servant::find_by_primary_key ([key type] *key) + ACE_THROW_SPEC ((CORBA::SystemException, + ::Components::FinderFailure, + ::Components::UnknownKeyValue, + ::Components::InvalidKey)) +{ + // @@ TO-DO when we suppor keyed home. + + ACE_THROW_RETURN (CORBA::NO_IMPLEMENT (), 0); +} + + +ACE_INLINE void +[ciao module name]::[home name]_Servant::remove ([key type] *key) + ACE_THROW_SPEC ((CORBA::SystemException, + ::Components::RemoveFailure, + ::Components::UnknownKeyValue, + ::Components::InvalidKey)) +{ + // @@ TO-DO when we suppor keyed home. + + throw CORBA::NO_IMPLEMENT (); +} + +ACE_INLINE [key type] * +[ciao module name]::[home name]_Servant::get_primary_key ([component name]_ptr comp) + ACE_THROW_SPEC ((CORBA::SystemException)) +{ + // @@ TO-DO when we suppor keyed home. + + ACE_THROW_RETURN (CORBA::NO_IMPLEMENT (), 0); +} + +## endif (keyed or keyless home) + + +// Operations for CCMHome interface +ACE_INLINE ::CORBA::IRObject_ptr +[ciao module name]::[home name]_Servant::get_component_def () + ACE_THROW_SPEC ((CORBA::SystemException)) +{ + // @@ TO-DO. Contact IfR? + + ACE_THROW_RETURN (CORBA::NO_IMPLEMENT (), 0); +} + +ACE_INLINE CORBA::IRObject_ptr +[ciao module name]::[home name]_Servant::get_home_def () + ACE_THROW_SPEC ((CORBA::SystemException)) +{ + // @@ TO-DO. Contact IfR? + + ACE_THROW_RETURN (CORBA::NO_IMPLEMENT (), 0); +} diff --git a/modules/CIAO/docs/templates/Executor.idl b/modules/CIAO/docs/templates/Executor.idl new file mode 100644 index 00000000000..259bffac0df --- /dev/null +++ b/modules/CIAO/docs/templates/Executor.idl @@ -0,0 +1,246 @@ +// $Id$ + +// =========================================================== +// +// @file Executor.idl +// +// The purpose of this IDL file is to serve as a template for the CIDL +// generated equivalent executor file. The CIDL will generate this +// file directly which, in turn, gets compiled by the TAO IDL compiler +// to generate the C++ mappings for the stuff defined in this file +// into a set of [idl-name]EC.{h,inl,cpp} files. +// +// This intermediate step is necessary because component implemenetors +// will need to extend these executor definitions (thru inheritance) +// to implemenet more complex executor implementations, such as those +// that support session component interface. (This is necessary to +// properly support C++ mapping for features such as interface +// narrowing.) +// +// What are missing in the template for executor mappings are the +// exception specifications for most operations. +// +// @author Nanbor Wang <nanbor@cs.wustl.edu> +// +// =========================================================== + +#ifndef [component_idl]E_IDL +#define [component_idl]E_IDL + +#include "CCM_Container.idl" // Found in $(CIAO_ROOT)/ciao + // For various definitions of container + // internal/callback interfaces +#include "[component_idl].idl" // Original component IDL definition +// @@ We may need to include other *E.idl here.... Can't figure out +// if we can do this automagically or not. + +##if there are module definitions, preserve them all +module [module_name] { +##endif + +//////////////////////////////////////////////////////////////////// +//// * Iterate thru all supported interface types +//// It's possible that we need to put some of the common supported +//// interface definitions into a separate compilation unit. How do we +//// specify that in CCIDL? I haven't figured that out. Perhaps +//// allowing CCIDL to compile files that contain no component +//// definition? +##foreach [interface_type] in (types of all supported interface) generate: + + local interface CCM_[interface_type] : [interface_type] + { + }; + +##end foreach [interface_type] + +//////////////////////////////////////////////////////////////////// +//// * Iterate thru all facet ('provides' interface) interface types +//// It's possible that we need to put some of the common facet +//// definitions into a separate compilation unit. How do we +//// specify that in CCIDL? I haven't figured that out. Perhaps +//// allowing CCIDL to compile files that contain no component +//// definition? +##foreach [facet_interface_type] in (types of all facets) generate: + + local interface CCM_[facet_interface_type] : [facet_interface_type] + { + }; + +##end foreach [facet_interface_type] + +//////////////////////////////////////////////////////////////////// +//// * Iterate thru all event ('emits', "publishes', or 'consumes') types +//// It's possible that we need to put some of the EventConsumer +//// definitions into a separate compilation unit. Like in the case +//// of facets interface mappings, how do we +//// specify that in CCIDL? I haven't figured that out. Perhaps +//// allowing CCIDL to compile files that contain no component +//// definition? + +##foreach [eventtype] in (all eventtypes) generate: + + local interface CCM_[eventtype]Consumer + { + void push (in [eventtype] ev); + }; + +##end foreach [eventtype] + + +//////////////////////////////////////////////////////////////////// +//// * Iterate thru all component definitions in the IDL files. +//// Notice that there's no distinction between entity and session +//// components in executor mappings. + +##foreach [component basename] in (all component definitions) generate: + + // Component Main Executor Interface. We currently do not + // support Executor-based implementation. + + local interface CCM_[component basename]_Executor + : +## if [component basename] inherits from [parent component name] + CCM_[parent component name]_Executor +## else + ::Components::EnterpriseComponent +## endif +## foreach [interface name] in (all component supported interfaces) generate: + , [interface name] +## end foreach [interface name] + + { +## foreach [attribute definition] in (attributes defined in [component basename]) generate: + [attribute definition]; +## end foreach [attribute definition] + + }; + + // Monolithic component executor. + // For implementing monolithic component call back interface. + + local interface CCM_[component basename] + : +## if [component basename] inherits from [parent component name] + CCM_[parent component name] +## else + ::Components::EnterpriseComponent +## endif +## foreach [interface name] in (all component supported interfaces) generate: + , [interface name] +## end foreach [interface name] + + { +## foreach [attribute definition] in (attributes defined in [component basename]) generate: + [attribute definition]; +## end foreach [attribute definition] + +## foreach [facet name] with [facet type] in (list of all provided interfaces) generate: + CCM_[facet type] get_[facet name] (); +## end foreach [facet name] with [facet type] + +## foreach [event name] with [eventtype] in (list of all event sinks) generate: + void push_[event name] (in [eventtype] ev); +## end foreach [event name] with [eventtype] + + }; + + /** + * Component Context Interface + * + * Notice that we are taking a shortcut here to inherit the + * component-specific context from SessionContext directly instead + * of CCMContext. + */ + local interface CCM_[component basename]_Context + : +## if [component basename] inherits from [parent component name] + CCM_[parent component name]_Context +## else + ::Components::SessionContext +## endif + { + +## foreach [receptacle name] with [uses type] in (list of all 'uses' interfaces) generate: +## if [receptacle name] is a simplex receptacle ('uses') + [uses type] get_connection_[receptacle name] (); +## else ([receptacle name] is a multiplex ('uses multiple') receptacle) + // [receptacle name]Connections typedef'ed as a sequence of + // struct [receptacle name]Connection. + [receptacle name]Connections get_connections_[receptacle name] (); +## endif [receptacle name] +## end foreach [receptacle name] with [uses type] + +## foreach [event name] with [eventtype] in (list of all event sources) generate: + void push_[event name] (in [eventtype] ev); +## end foreach [event name] with [eventtype] + + }; + +##end foreach [component basename] + + +//////////////////////////////////////////////////////////////////// +//// * Iterate thru all home definitions in the IDL files. + +##foreach [home basename] in (all home definitions) generate: + + local interface CCM_[home basename]Explicit + : +## if [home basename] inherits from [parent home name] + CCM_[parent home name]Explicit +## else + ::Components::HomeExecutorBase +## endif +## foreach [interface name] in (all home supported interfaces) generate: + , [interface name] +## end foreach [interface name] + { +##foreach [operation] in (all explicit operations defined in [home basename]) + + // The operation decl here. + +## end foreach opeartion + +##foreach [factory name] in (all factory operations defined in [home basename]) + ::Components::EnterpriseComponent [factory name] (....) + raise (Components::CreateFailure, ....); +##end foreach [factory name] + +##foreach [finder name] in (all finder operations defined in [home basename]) + ::Components::EnterpriseComponent [finder name] (....) + raise (Components::FinderFailure, ....); +##end foreach [finder name] + }; + + local interface CCM_[home basename]Implicit + { +## if [home basename] is a keyless home + ::Components::EnterpriseComponent create () + raises (::Components::CCMException); +## else [home basename] is key'ed home with [key type] + // We do not support key'ed home at the moment but we might + // as well generate the mapping. + ::Components::EnterpriseComponent create (in [key type] key) + raises (::Components::CCMException); + + ::Components::EnterpriseComponent find_by_primary_key (in [key type] key) + raises (::Components::CCMException); + + void remove (in [key type] key) + raises (::Components::CCMException); +## endif (key'ed or keyless home) + }; + + local interface CCM_[home basename] + : CCM_[home basename]Explicit, + CCM_[home basename]Implicit + { + }; + +##end foreach [home basename] + +##if there are module definitions, preserve them all +}; +##endif + +#endif /* [component_idl]E_IDL */ diff --git a/modules/CIAO/docs/templates/cidl_template.cidl b/modules/CIAO/docs/templates/cidl_template.cidl new file mode 100644 index 00000000000..3d359708f32 --- /dev/null +++ b/modules/CIAO/docs/templates/cidl_template.cidl @@ -0,0 +1,31 @@ +// $Id$ -*- C++ -*- + +/** + * @file cidl_template.cidl + * + * This file show an example cidl file. + */ + +// @@ We do not support import (yet). +//import [component module]; + +// [idl-basename] contains the IDL3 definitions for component(s) and +// home(s) and the interfaces that they need. + +#include "[idl-basename].idl" + +// We only support a simple session implementation definition, for +// now. @@ What is the relation of various names here and the +// generated names we used in the glue code? +composition session [composition name] +{ + home executor [home executor name] + { + implement [home name]; + manages [component executor name]; + }; +}; + + +// @@ We should also generate somet sort of implementaion template for +// users. E.g., a set of [idl-basename]_impl.* and the MPC files(?). diff --git a/modules/CIAO/docs/tutorials/CoSMIC/01.html b/modules/CIAO/docs/tutorials/CoSMIC/01.html new file mode 100644 index 00000000000..73db63f7236 --- /dev/null +++ b/modules/CIAO/docs/tutorials/CoSMIC/01.html @@ -0,0 +1,185 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> + + + <meta name="generator" content="HTML Tidy for Mac OS X (vers 1st December 2004), see www.w3.org" /> +<!-- $Id$ --> + + + + <title>Getting Started</title> +</head> + + + +<body style="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);" link="#000fff" vlink="#ff0f0f"> + + +<h3>Getting Started<br /> +</h3> +<b>Writing IDL files</b><br /> + + <br /> + + We will start from writing the idl file for each component.<br /> + + + +<ol> + + <li>Create a directory named <code><span style="font-style: italic;">MyQuoter</span></code><span style="font-style: italic;">.</span></li> + + + <li>In <code style="font-style: italic;">MyQuoter</code> + directory, create one directory <span style="font-style: italic;">Stock_Base</span> for the base idl and + two more directories <span style="font-style: italic;">Broker</span>, <span style="font-style: italic;">Distributor</span> for each component. In + <code style="font-style: italic;">MyQuoter/Stock_Base</code>, + place an idl file <code style="font-style: italic;">Stock_Base.idl</code> that you could copy + from <a href="../Quoter/Simple/Stock_Base/Stock_Base.idl">here</a>. This + file defines the interfaces and events that will be used by + both Stock Distributor and Stock Broker.</li> + + + <li style="list-style-type: none; list-style-image: none; list-style-position: outside;">We put together the common + interface definitions so the base library can be shared by both + components, reducing the size of "real" components.<br /> + </li> + + + <li>In <code style="font-style: italic;">MyQuoter/Distributor</code>, place an idl + file <code style="font-style: italic;">Distributor.idl</code> + that looks like <a href="../Quoter/Simple/Distributor/Distributor.idl">this</a>. This + file defines the StockDistributor component + interfaces.<br /> + </li> + + + <li>In <code style="font-style: italic;">MyQuoter/Broker</code> + place an idl file <code><span style="font-style: italic;">Broker.id</span>l</code> that looks like + <a href="../Quoter/Simple/Broker/Broker.idl">this</a>. This + file defines the StockBroker component interface.<br /> + </li> + + +</ol> +<br /> + + <b>Importing IDL to PICML</b><br /> + + <br /> + + To quick start our Stock Quoter modeling process in + GME, CoSMIC introduces <em>idl_to_picml</em> , which is an + executable program that imports the IDL files you just created + into PICML.<br /> + + + +<ol> + + <li>Make sure <code>%COSMIC_ROOT%\bin</code> is included in the + PATH variable, e.g., c:\Program + Files\ISIS\CoSMIC\bin.<br /> + </li> + + + <li>Open a command prompt, run VCVARS32.BAT from the MSVC .NET + folder if you haven't done so. It will set the environment for + using Microsoft Visual Studio .NET tools so that <span style="font-style: italic;">idl_to_picml</span> works properly.<br /> + + in my machine, VCVARS32.bat is in C:\Program Files\Microsoft + Visual Studio .NET 2003\Vc7\bin<br /> + </li> + + + <li>In the same command prompt, change directory to + <code>MyQuoter\</code>, and type the following command:<br /> + + > <kbd>idl_to_picml -x MyQuoter -r . -I + .\Stock_Base</kbd><br /> + + (if the above command does not work, you may also + try this<br /> + + ><kbd>idl_to_picml -x MyQuoter -r . -I .\Stock_Base -I + %TAO_ROOT% -I %TAO_ROOT%\orbsvcs -I + %CIAO_ROOT%\ciao)</kbd><br /> + + <em>idl_to_picml</em> will parse your IDL files and + generated a <code>MyQuoter.xme</code> file in the + <code>MyQuoter</code> directory. Note that if -x option is not + used, the default xme file name will be + <code>PICML_default_xme_file.xme.</code><br /> + + 4. Start GME, select <strong>File->Import xml..</strong>, + and choose the xme file just generated. You should be able to + see an imported PICML model similar to the one shown in Figure + 2.<br /> + </li> + + +</ol> +<br /> + + + +<div style="text-align: center;"> + <img alt="" src="Images/fig2.jpg" style="width: 781px; height: 635px;" /><br /> + + <br /> + + Figure 2<br /> + + </div> + + + +<p> In the Browser of the generated model, the + <em>PredefinedTypes</em> folder contains a bunch of atomic + datatype elements that will be referenced by other modeling parts + later. You don't have to worry about them for now. The models in + <em>InterfaceDefinitions</em> folder are the PICML + representations ofthe IDL files you just imported. Double-click + to open <em>Broker</em>, it will show you a white, document-like + entity which represents a <<FileRef>> instance and a + yellow box-shaped entity representing a <<Package>> + instance. Their equivalent representations in IDL files are + "#include" and "module" respectively. Figure 3 gives you a clear + view of GME representation of all the 3 idl files created. We + will cover the other folders in the next section.</p> + + + +<div style="text-align: center;"> + <img alt="" src="Images/fig3.jpg" style="width: 223px; height: 336px;" /><br /> + + <br /> + + Figure 3<br /> + + <br /> + + </div> +Now we are ready to model the rest of the Stock Quoter + systems.<br /> + + <br /> + + <br /> + + <br /> + + +<hr /> + + +<address> + <a href="mailto:ming.xiong@vanderbilt.edu">Ming Xiong<br /> +</a> + </address> +<!-- Created: Sat Nov 27 15:25:06 CST 1999 --> + <!-- hhmts start --> + Last modified:<!-- hhmts end --> +</body> +</html> diff --git a/modules/CIAO/docs/tutorials/CoSMIC/02.html b/modules/CIAO/docs/tutorials/CoSMIC/02.html new file mode 100644 index 00000000000..8f4e7decc11 --- /dev/null +++ b/modules/CIAO/docs/tutorials/CoSMIC/02.html @@ -0,0 +1,554 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> + + <meta name="generator" content="HTML Tidy for Mac OS X (vers 1st December 2004), see www.w3.org" /> + <title>Building a Stock Quoter with TAO - A Tutorial</title> + + +<!-- $Id$ --> + <link rel="stylesheet" type="text/css" href="style.css" /> + +</head> + + + +<body style="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);" link="#000fff" vlink="#ff0f0f"> + +<h3>Building Stock Quoter system in PICML</h3> + +<br /> + +<p>This section describes modeling the Quoter application using +PICML. If you have trouble producing a functioning model from this +tutorial, please see the, <a href="Model/Quoter.xme">pre-built +Quoter model</a> which is provided for your reference. This model +contains all elements created as part of this tutorial.</p> + +<div class="important"> <strong>Note:</strong> +To import an XML file in GME, select <em>File->Import +XML..</em> from GME and choose your XML model<br /> + +</div> + +<p>The PICML paradigm is designed for the <a href="http://www.omg.org/cgi-bin/doc?ptc/2003-07-08">OMG +Deployment & Configuration (D&C) specification +(ptc/2003-07-08)</a>, so the modeling process is straightforward +if you are familiar with the specification. Please see the <a href="../../releasenotes/dance.html">DAnCE +project</a> for more information. For those who hate specification (including me, :-)), an <a href="http://www.cs.wustl.edu/%7Eschmidt/PDF/DAnCE.pdf">overview of D&C</a> and as well as a <a href="http://www.cs.wustl.edu/%7Eschmidt/OMG-CCM-Tutorial.ppt">tutorial of D&C and CCM</a> can help to reduce the learning curve. +(Thanks to Sowayan, Abdulah for pointing this out). +In addition, it is also helpful to read through Chapter 32 of TAO's +Developer's Guide 1.4a (CIAO and CCM) which thoroughly describes the +various descriptors required for a component (*.iad, *.ccd, *.cid, +etc). </p> +<h3>Table of Contents</h3> + +<ul> + + <li><a href="#1">ImplementationArtifacts</a></li> + + <li><a href="#2">ComponentImplementations</a></li> + + <li><a href="#3">ComponentPackages</a></li> + + <li><a href="#4">PackageConfiguration</a></li> + + <li><a href="#5">TopLevelPackage</a></li> + + <li><a href="#6">Targets</a></li> + + <li><a href="#7">DeploymentPlan</a></li> + +</ul> + +<hr /> +<p>The complete PICML Quoter model consists of modeling elements +distributed across various folders. If you used <em>idl_to_picml</em> +to generate the initial model, you will see that it has created all +these folders and some of the tedious boilerplate modeling for us. The +rest of the section will explain the purpose of each folder as well as +the modeling entities contained in these folders. We will also show how +to model some of the folders that have to be done by hand.</p> + +<div class="important"> <strong>Important:</strong> +The interpreters that generate deployment artifacts expect very strict +constraints in the model. When you finish your model, and any time you +wish to generate anything, it is a good idea to check constraints by +clicking on <em>File->Check->Check All</em> +in GME. This will help you find many logic errors in your model. </div> + +<h3><a name="1">ImplementationArtifacts</a></h3> + +<p>This folder contains implementation artifacts associated with +components. <em>idl_to_picml</em> has created these +artifacts for us, with their dependency relationships correctly +captured. Figure 4 shows the Implementation Artifacts for <em>Broker</em>.</p> + +<div style="text-align: center;"> <img alt="" src="Images/fig4.jpg" style="border: 1px solid ; width: 891px; height: 552px;" /><a name="1"><br /> + +Figure 4.<br /> + +</a><br /> + +</div> + +<a name="1"></a> +<hr /> +<h3><a name="2">ComponentImplementation</a></h3> + +<p>This folder contains models that describe the implementations +of component interfaces. In the Quoter example, we will have two +monolithic component implementations - named <em>StockDistributorImplementation</em> +and <em>StockBrokerImplementation</em> - and an assembly +component implementation named <em>StockQuoter</em>, which +is an assembly of <em>StockDistributorImplementation</em> +and <em>StockBrokerImplementaion</em>. <em>idl_to_picml</em> +has created the monolithic component implementations for us, as shown +in figure 5 for example, but we have to specify the connections between +them in order to construct a Quoter system.</p> + +<div style="text-align: center;"> <img alt="" src="Images/fig5.jpg" style="border: 1px solid ; width: 922px; height: 639px;" /><br /> + +Figure 5<br /> + +</div> + +<p>Assembly components provide a boundary for the composition of +monolithic components and even other assemblies. Assembly components do +not provide actual implementations for their interface, it is a virtual +component that delegates its ports and attributes to one or more of the +entities it contains. There are slight differences between modeling an +assembly and modeling a monolithic component. Since the assembly is a +virtual component, it is not necessary to model a <code>MonolithicImplementation</code>. +Instead, <em>instances</em> of other components are placed +within the assembly and connected. Let's try to assemble the <em>StockQuoter</em>.</p> + +<ol> + + <li>Right click the <em>ComponentImplementations</em> +folder, choose <strong>Insert +Model->ComponentImplementationContainer</strong>, rename +it as "StockQuoterImplementation" in the Attribute Panel. Double click +to open it.</li> + + <li>From the Part Browser, drag a +<<ComponentAssembly>> to the modeling +window, name it "StockQuoter". Double click to open it.</li> + + <li>Now we will create two instances for interfaces <em>StockBroker</em> +and <em>StockDistributor</em>. To do that, expand the +folder <code><em>InterfaceDefinitions</em></code>, +then expand the <code><em>InterfaceDefinitions/</em></code> + <em>Broker</em>, then <code><em>InterfaceDefinitions/</em></code> + <em>Broker/ Stock</em> until the interface definition +of <em>StockBroker</em> shows. While expanding the tree, +always keep the "StockQuoter" +<<ComponentAssembly>> window open. Then +drag <code>MyQuoter/InterfaceDefinitions/Broker/Stock/StockBroker</code> +in the browser to the "StockQuoter" +<<ComponentAssembly>> window while pressing +ALT key. Repeat the same steps for <code>MyQuoter/InterfaceDefinitions/Distributor/Stock/StockDistributor</code>, +and you will see two instances of component interfaces have been +created as shown in Figure 6 (the black line in the figure only +indicates .mapping)<br /> + + </li> + +</ol> + +<br /> + +<div style="text-align: center;"> <img alt="" src="Images/fig6.jpg" style="width: 972px; height: 714px;" /><br /> + +<br /> + +Figure 6<br /> + +</div> + +<ol> + + <li value="4">Create an +<<PublishConnector>>.<br /> + + </li> + + <li>Now assemble the components together according to <a href="Images/fig1.jpg">Figure 1</a>(make sure you +change to connect mode <img alt="" src="Icons/AddConnMode.gif" style="width: 20px; height: 17px;" /> +) and the resulting assembly model should look like Figure 7. Note that +to create connections between StockDistributor.notify_out and +StockBroker.notify_in, you will need the intermediate connector +<<PublishConnector>>.<br /> + + </li> + +</ol> + +<img alt="" src="Images/fig7.jpg" style="width: 724px; height: 402px;" /><br /> + +<br /> + +Figure 7<br /> + +<hr /> <a name="3"></a> +<h3>ComponentPackage<br /> + +</h3> + +This folder contains deployable component packages. Every instance in +an assembly should have a corresponding monolithic implementation and +packaged in a ComponentPackagebe To create a package for <em>StockBroker</em>.instance<br /> + +<ol> + + <li>Right click folder <em>ComponentPackage</em>s +, insert a <<PackageContainer>>, name it +"Broker"; Double click to open it.<br /> + + </li> + + <li>From the PartBrowser, add the following:<br /> + + <ul> + + <li>a <<ComponentPackage>> +named "Broker";</li> + + <li>a +<<ComponentImplementationReference>> named +"Broker";</li> + + <li>a <<ComponentRef>> named +"Broker";</li> + + </ul> + + </li> + + <li>Refer the +<<ComponentImplementationReference>> <em>Broker</em> +to <code>MyQuoter/ComponentImplementations/StockBroker</code>Implementation/StockBrokerMonolithicImpl. +Refer the <<ComponentRef>> <em>Broker</em> +to <code>MyQuoter/InterfaceDefinitions/Broker/Stock/StockBroker</code>. +To create a reference in GME, simply drag the tree node in the Browser +"into" the reference model. For example, you should drag the tree node <code>MyQuoter/ComponentImplementations/StockBroker</code>Implementation/StockBrokerMonolithicImpl +into <<ComponentImplementationReference>> <em>Broker.</em> +Check GME manual(tutorials) for more information.</li> + + <li>Switch to Connect Mode and create two connections according +to the following relationship.<br /> + + <ul> + + <li><<ComponentImplementationReference>> + <em>Broker</em> implements +<<ComponentPackage>> <em>Broker</em>;</li> + + <li><<ComponentPackage>> <em>Broker</em> +realizes <<ComponentRef>> <em>Broker</em>.</li> + + </ul> + + <br /> + + <br /> + + The model you built should +resemble Figure 8.<br /> + + <br /> + + <div style="text-align: center;"> <img alt="" src="Images/fig8.jpg" style="width: 675px; height: 497px;" /><br /> + + <br /> + +Figure 8<br /> + + <br /> + + </div> + +Now create a ComponentPackage/StockDistributor following the same +steps. </li> + + <li style="list-style-type: none; list-style-image: none; list-style-position: outside;"> + <br /> + +We will also need to create a package for the assembly component +StockQuoter. Remember assembly component is a virtual component, it +does not "realize" a certain interface, so different from the Broker +and Distributor packages, the StockQuoter does not need a +<<ComponentRef>>. To create this model: + <ol> + + <li>Insert a +<<ComponentPackage>> named "StockQuoter"<br /> + + </li> + + <li>Add a +<<ComponentImplementationReference>> named +"StockQuoter", refer it to MyQuoter<code>/ComponentImplementations/StockQuoter/StockQuoter</code></li> + + <li>Switch to connect mode and connect +<<ComponentImplementationReference>> +StockQuoter with <<ComponentPackage>> +StockQuoter, as in Figure 9.<br /> + + </li> + + </ol> + + </li> + +</ol> + +<div style="text-align: center;"> <img alt="" src="Images/fig9.jpg" style="width: 549px; height: 354px;" /><br /> + +<br /> + +Figure 9<br /> + +<br /> + +</div> + +<hr /> <a name="4"></a> +<h3>PackageConfiguration<br /> + +</h3> + +This folder contains just one model capturing specific configuration of +Component packages.<br /> + +<ol> + + <li>In the folder <em>PackageConfiguratio</em>n, +and create a +<<PackageConfigurationContainer>>, name it +"Default", click to open it.<br /> + + </li> + + <li>Add a <<PackageConfiguration>> +named "default" and a +<<ComponentPackageReference>>, name it +"StockQuoter", connect "Default" to "StockQuoter"<br /> + + </li> + + <li>Refer +<<ComponentPackageReference>> StockQuoter +to <<ComponentPackage>> <code>MyQuoter/ComponentPackage/StockQuoter/StockQuoter<br /> + +(Not <<ComponentImplementationReference>></code> + <code>MyQuoter/ComponentPackage/StockQuoter/StockQuoter!) </code></li> + +</ol> + +<br /> + +<hr /> <a name="5"></a> +<h3>ToplevelPackage<br /> + +</h3> + +This folder contains one model capturing information about the +top-level element that will be fed to the application.<br /> + +<ol> + + <li>In the folder <em>ToplevelPackage</em>, and +create a <<ToplevelPackageContainer>>, name +it "Default", double click to open it.<br /> + + </li> + + <li>Add a <<ToplevelPackage>> named +"ToplevelPackage" and a +<<PackageConfigurationReference>>, name it +"Default", connect "ToplevelPackage" to "Default"<br /> + + </li> + + <li>Refer "Default" to My<code>Quoter/PackageConfiguration/Default/Default</code><br /> + + </li> + +</ol> + +<br /> + +<hr /> <a name="6"></a> +<h3>Targets<br /> + +</h3> + +This folder contains domain-specific models capturing information about +the target environment in which component-based application will be +deployed. In this Quoter example, we can either deploy the two +components into ONE host, or into TWO different host. We will deploy +the Quoter into two different host.<br /> + +<ol> + + <li>In the folder <span style="font-style: italic;">Targets</span>, +insert a new <<Domain>> named "Domain"; +double click to open it.<br /> + + </li> + + <li>From the Part Browser, add two +<<Node>> named "Broker" and "Distributor" +respectively.<br /> + + </li> + +</ol> + +<br /> + +Now we are ready to deploy our Components to the actual physical +environment.<br /> + +<hr /> <a name="7"></a> +<h3>DeploymentPlan<br /> + +</h3> + +This folder contains a plan model that captures information about the +assignment of component to nodes.<br /> + +<ol> + + <li>In the folder <em>DeploymentPlan</em>, insert +a model <<DeploymentPlan>>; name it "Plan", +click to open it<br /> + + </li> + + <li>From the PartBrowser, add the following:<br /> + + <ul> + + <li>Two <<CollocationGroup>></li> + + <li>Two <<NodeReference>> named +"Node_Broker" and "Node_Distributor" respectively, refering to <code>MyQuoter/Targets/Domain/Broker</code> +and <code>MyQuoter/Targets/Domain/Distributor</code> +respectively</li> + + <li>Two <<ComponentRef>> named +"StockBroker" and "StockDistributor" respectively, refering to <code>MyQuoter/ComponentImplementations/StockQuoterImplementation/StockQuoter/StockBroker</code> +and <code>MyQuoter/ComponentImplementations/StockQuoterImplementation/StockQuoter/StockDistributor</code> +respectively. Note that the +<<ComponentRef>> in DeploymentPlan is not +referring to the interface, but rather the actual instance of the +implementation.</li> + + </ul> + + </li> + + <li>Switch to Connect Mode, connect one +<<CollocationGroup>> to +<<NodeReference>> <em>Node_Broker</em>, +connect another <<CollocationGroup>> to +<<NodeReference>> <em>Node_</em><em>Distributor</em>. +Now the model looks like the following.<br /> + + <br /> + + <div style="text-align: center;"> <img alt="" src="Images/fig10.jpg" style="width: 752px; height: 530px;" /><br /> + + <br /> + +Figure 10.<br /> + + <br /> + + </div> + + </li> + + <li>Now we need to associate +<<ComponentRef>> StockBroker to the +<<CollocationGroup>> running on the +<<NodeReference>> Broker, and +<<ComponentRef>> StockDistributor to the +<<CollocationGroup>> running on the +<<NodeReference>> Distributor. To do that, +switch the Edit Mode Bar to Set Mode (<img alt="" src="Icons/SetMode.gif" style="width: 20px; height: 17px;" />), +and move the cursor to the +<<CollocationGroup>> running on +<<NodeReference>> Distributor, right-click +on it. You will find the cursor is changed to set mode cursor, and only +the <<CollocationGroup>> you clicked in is +highlighted, as shown in Figure 11.<br /> + + <br /> + + </li> + +</ol> + +<div style="text-align: center;"> <img alt="" src="Images/fig11.jpg" style="width: 672px; height: 505px;" /><br /> + +<br /> + +Figure 11<br /> + +<br /> + +</div> + +<p>Now move your cursor to +<<ComponentRef>> +StockDistributor, and left-click it, so that it looks like Figure 12.<br /> + +</p> + +<div style="text-align: center;"> <img alt="" src="Images/fig12.jpg" style="width: 672px; height: 505px;" /><br /> + +<br /> + +Figure 12<br /> + +<br /> + +</div> + +<p>This operation associates <em>StockDistributor</em> +component to the <<CollocationGroup>> +running on <em>Distributor</em> node. To do the same with +Broker, just right-click on another +<<CollocationGroup>>, and left-click on +StockBroker <<CollocationGroup>> which is +highlighted.<br /> + +<br /> + +</p> + +<hr /> <a name="8"></a> +<p>Up to this point, we are basically done with the modeling +part. Before we generate anything from this model though, please <span style="font-weight: bold;">DO</span> remember to check +the constraints of the model as we mentioned earlier.</p> + +<p>After we are done with the modeling, the +flattened_deploymentplan interpreter that comes along with PICML will +help us to generate a flattened_deploymentplan.cdp file. Please make +sure you generate this file to MyQuoter/descriptors. Note that to get the example working<span style="font-family: monospace;">,</span>a Node Map file should be created to map logical<span style="font-family: monospace;"> </span>nodes to NodeManager object references,e.g:<br /> +</p> +<pre wrap="">DistributorNode corbaloc:iiop:localhost:30000/NodeManager<br />BrokerNode corbaloc:iiop:localhost:40000/NodeManager</pre> + +<address> <br /> + +<a href="mailto:ming.xiong@vanderbilt.edu">Ming Xiong<br /> + +</a> </address> + +<!-- Created: Sat Nov 27 15:25:06 CST 1999 --><!-- hhmts start --> +Last modified:<!-- hhmts end --> +</body> +</html> diff --git a/modules/CIAO/docs/tutorials/CoSMIC/03.html b/modules/CIAO/docs/tutorials/CoSMIC/03.html new file mode 100644 index 00000000000..c2da3726762 --- /dev/null +++ b/modules/CIAO/docs/tutorials/CoSMIC/03.html @@ -0,0 +1,79 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> + + <title>Building a Stock Quoter with TAO - A Tutorial</title> + <!-- $Id$ --> +</head> + +<body style= +"color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);" link= +"#000FFF" vlink="#FF0F0F"> + <h3>Implementing Quoter Components with DAnCE<br /></h3>We + discuss this section after the PICML modeling only because we + would like to focus our attention more on the modeling stage. It + does not indicate that the implementation of components has to be + subsequent to the work we've done under GME. They are totally + orthogonal to each other. In fact, they are so orthogonal + that we won't go into details as to how DAnCE programming should + be done. We'll briefly go through the functionality of each + component and provides the links to their implementations + respectively. For a hands on experience on DAnCE programming, + please refer to $CIAO_ROOT/examples/Hello.<br /> + <br /> + <big><big><small>Broker Component<br /> + </small></big></big> The Broker component + waits to be notified by the Distributor component about stock + changes. When a stock change event arrives, it will go back + to Distributor component and retrieve the information it interest + in and output them to the console. The users are allowed to + subscribe to the interested stock value through the interface + supported by Broker component. Here's the complete version of + <a href="../Quoter/Simple/Broker/Broker_exec.h">Broker_exec.h</a> + and <a href= + "../Quoter/Simple/Broker/Broker_exec.cpp">Broker_exec.cpp</a>.<br /> + + <br /> + <big><big><small>Distributor Component<br /> + </small></big></big> The Distributor component + monitors the real time stock database and publishes events + whenever it detects stock change. In our program, we use a + ACE_Task to simulate this real-life activity. The task + will run in a separate thread and periodically increment the + stock value by 1. In the same time the stock value is + incremented, an <span style= + "font-style: italic;">StockName</span> event along with the name + of the changed stock will be sent. Here's the complete version of + <a href= + "../Quoter/Simple/Distributor/Distributor_exec.h">Distributor_exec.h</a> + and <a href= + "../Quoter/Simple/Distributor/Distributor_exec.cpp">Distributor_exec.cpp</a><br /> + + <big><big><small><br /> + Broker client<br /> + </small></big></big> The Broker client program + is the driver program for client to control Broker component, + subscribe and unsubscribe to a specific stock. Here's the + complete version of <a href= + "../Quoter/Simple/Broker/Broker.cpp">Broker.cpp</a><br /> + <br /><big><big><small> + Distributor client</small></big></big><br /> + The Distributor + client program is the driver program for client to control + Distributor component, turn on and off the distribution service, + set up the frequency, etc. Here's the complete version of + <a href="../Quoter/Simple/Distributor/Distributor.cpp">Distributor.cpp</a> + <a name="2" /><br /> + <br /><br /> + + + <address> + <a href="mailto:ming.xiong@vanderbilt.edu">Ming Xiong<br /></a> + </address><!-- Created: Sat Nov 27 15:25:06 CST 1999 --> + <!-- hhmts start --> + <a href="mailto:ming.xiong@vanderbilt.edu">Last modified: + <!-- hhmts end --></a> +</body> +</html> diff --git a/modules/CIAO/docs/tutorials/CoSMIC/04.html b/modules/CIAO/docs/tutorials/CoSMIC/04.html new file mode 100644 index 00000000000..dce2fb1364c --- /dev/null +++ b/modules/CIAO/docs/tutorials/CoSMIC/04.html @@ -0,0 +1,77 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> + <meta name="generator" content= + "HTML Tidy for Mac OS X (vers 1st December 2004), see www.w3.org" /> + + <title>Building a Stock Quoter with TAO - A Tutorial</title> + <!-- $Id$ --> +</head> + +<body style= +"color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);" link= +"#000FFF" vlink="#FF0F0F"> + <h3>Running the application<br /></h3>Now that we have all the + components and driver programs successfully built, along with the + flattened_deploymentplan generated by PICML, we will be able to + run our application<br /> + <br /> + From different command prompts in + <code>%CIAO_ROOT%/docs/tutorials/Quoter/Simple/descriptors/</code> + directory: + + <ul> + <li>Start NodeManagers (NodeDameon) by running + <code>runNodeDaemon.pl</code></li> + + <li>Start the execution manager + <code>%CIAO_ROOT%/DAnCE/ExecutionManager/Execution_Manager -o + ior -i Stock.dat</code> </li> + </ul> + + <p>The <code>Stock.dat</code> file describes the deployment + daemons CIAO's Execution_Manager will contact to instantiate + ComponentServer's, home's, and component instances. Each line + specify the name of a installation "destination" and the + corresponding IOR for the CIAO_Daemon.</p> + + <ul type="square"> + <li><em>NOTE</em>: As one can see, we use the "Stock.dat" file + to instruct the Execution_Manager how to find the endpoint of + each individual NodeManager (i.e., Node Daemon) where + component(s) will be deployed, so this is non-standard. We plan + to use Naming Service to do this in the future.</li> + </ul> + + <ul> + <li>Start the plan_launcher by running + <code>%CIAO_ROOT%/DAnCE/Plan_Launcher/Plan_Launcher -p + flattened_deploymentplan.cdp -k file://ior</code></li> + + <li>By now the components should be successfully deployed. You + may run the driver program to start the application. e.g. you + can try the following<br /></li> + </ul> + <code>%CIAO_ROOT%/docs/tutorials/Quoter/Simple/Distributor/Distributor.exe + -o</code><br /> + <br /> + + <code>%CIAO_ROOT%/docs/tutorials/Quoter/Simple/Broker/Broker.exe + -s MSFT</code><br /> + <br /> + + <code>%CIAO_ROOT%/docs/tutorials/Quoter/Simple/Broker/Broker.exe + -s IBM</code><br /> + <br /> + + <code>%CIAO_ROOT%/docs/tutorials/Quoter/Simple/Broker/Broker.exe + -u MSFT</code><br /> + <br /> + + <code>%CIAO_ROOT%/docs/tutorials/Quoter/Simple/Distributor/Distributor.exe + -f</code><br /> + <br /> +</body> +</html> diff --git a/modules/CIAO/docs/tutorials/CoSMIC/Icons/AddConnMode.gif b/modules/CIAO/docs/tutorials/CoSMIC/Icons/AddConnMode.gif Binary files differnew file mode 100644 index 00000000000..3604d32946d --- /dev/null +++ b/modules/CIAO/docs/tutorials/CoSMIC/Icons/AddConnMode.gif diff --git a/modules/CIAO/docs/tutorials/CoSMIC/Icons/SetMode.gif b/modules/CIAO/docs/tutorials/CoSMIC/Icons/SetMode.gif Binary files differnew file mode 100644 index 00000000000..6dcad861f07 --- /dev/null +++ b/modules/CIAO/docs/tutorials/CoSMIC/Icons/SetMode.gif diff --git a/modules/CIAO/docs/tutorials/CoSMIC/Images/fig1.jpg b/modules/CIAO/docs/tutorials/CoSMIC/Images/fig1.jpg Binary files differnew file mode 100644 index 00000000000..a8550fe1176 --- /dev/null +++ b/modules/CIAO/docs/tutorials/CoSMIC/Images/fig1.jpg diff --git a/modules/CIAO/docs/tutorials/CoSMIC/Images/fig10.jpg b/modules/CIAO/docs/tutorials/CoSMIC/Images/fig10.jpg Binary files differnew file mode 100644 index 00000000000..3db5ac174e0 --- /dev/null +++ b/modules/CIAO/docs/tutorials/CoSMIC/Images/fig10.jpg diff --git a/modules/CIAO/docs/tutorials/CoSMIC/Images/fig11.jpg b/modules/CIAO/docs/tutorials/CoSMIC/Images/fig11.jpg Binary files differnew file mode 100644 index 00000000000..c5eaf705384 --- /dev/null +++ b/modules/CIAO/docs/tutorials/CoSMIC/Images/fig11.jpg diff --git a/modules/CIAO/docs/tutorials/CoSMIC/Images/fig12.jpg b/modules/CIAO/docs/tutorials/CoSMIC/Images/fig12.jpg Binary files differnew file mode 100644 index 00000000000..ea2a885af6b --- /dev/null +++ b/modules/CIAO/docs/tutorials/CoSMIC/Images/fig12.jpg diff --git a/modules/CIAO/docs/tutorials/CoSMIC/Images/fig2.jpg b/modules/CIAO/docs/tutorials/CoSMIC/Images/fig2.jpg Binary files differnew file mode 100644 index 00000000000..49d6f90c3b0 --- /dev/null +++ b/modules/CIAO/docs/tutorials/CoSMIC/Images/fig2.jpg diff --git a/modules/CIAO/docs/tutorials/CoSMIC/Images/fig3.jpg b/modules/CIAO/docs/tutorials/CoSMIC/Images/fig3.jpg Binary files differnew file mode 100644 index 00000000000..0559dc7382b --- /dev/null +++ b/modules/CIAO/docs/tutorials/CoSMIC/Images/fig3.jpg diff --git a/modules/CIAO/docs/tutorials/CoSMIC/Images/fig4.jpg b/modules/CIAO/docs/tutorials/CoSMIC/Images/fig4.jpg Binary files differnew file mode 100644 index 00000000000..8fb89eccb57 --- /dev/null +++ b/modules/CIAO/docs/tutorials/CoSMIC/Images/fig4.jpg diff --git a/modules/CIAO/docs/tutorials/CoSMIC/Images/fig5.jpg b/modules/CIAO/docs/tutorials/CoSMIC/Images/fig5.jpg Binary files differnew file mode 100644 index 00000000000..e847b9290d6 --- /dev/null +++ b/modules/CIAO/docs/tutorials/CoSMIC/Images/fig5.jpg diff --git a/modules/CIAO/docs/tutorials/CoSMIC/Images/fig6.jpg b/modules/CIAO/docs/tutorials/CoSMIC/Images/fig6.jpg Binary files differnew file mode 100644 index 00000000000..0a214c84ea8 --- /dev/null +++ b/modules/CIAO/docs/tutorials/CoSMIC/Images/fig6.jpg diff --git a/modules/CIAO/docs/tutorials/CoSMIC/Images/fig7.jpg b/modules/CIAO/docs/tutorials/CoSMIC/Images/fig7.jpg Binary files differnew file mode 100644 index 00000000000..67d90b775b0 --- /dev/null +++ b/modules/CIAO/docs/tutorials/CoSMIC/Images/fig7.jpg diff --git a/modules/CIAO/docs/tutorials/CoSMIC/Images/fig8.jpg b/modules/CIAO/docs/tutorials/CoSMIC/Images/fig8.jpg Binary files differnew file mode 100644 index 00000000000..a565c2ab989 --- /dev/null +++ b/modules/CIAO/docs/tutorials/CoSMIC/Images/fig8.jpg diff --git a/modules/CIAO/docs/tutorials/CoSMIC/Images/fig9.jpg b/modules/CIAO/docs/tutorials/CoSMIC/Images/fig9.jpg Binary files differnew file mode 100644 index 00000000000..996d90d800b --- /dev/null +++ b/modules/CIAO/docs/tutorials/CoSMIC/Images/fig9.jpg diff --git a/modules/CIAO/docs/tutorials/CoSMIC/Model/Quoter.xme b/modules/CIAO/docs/tutorials/CoSMIC/Model/Quoter.xme new file mode 100644 index 00000000000..10f968f69ca --- /dev/null +++ b/modules/CIAO/docs/tutorials/CoSMIC/Model/Quoter.xme @@ -0,0 +1,2003 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE project SYSTEM "mga.dtd"> + +<project guid="{693BB5A4-CC13-45F0-8470-8F189DE22CF8}" cdate="Thu Feb 02 21:46:10 2006" mdate="Thu Feb 02 21:46:10 2006" version="" metaguid="{3F14D74F-DE80-4071-8F14-550B6023233F}" metaversion="" metaname="PICML"> + <name>MyQuoter</name> + <comment></comment> + <author></author> + <folder id="id-006a-00000001" relid="0x1" childrelidcntr="0x2" kind="RootFolder"> + <name>MyQuoter</name> + <folder id="id-006a-00000002" relid="0x2" childrelidcntr="0x3" kind="InterfaceDefinitions"> + <name>InterfaceDefinitions</name> + <model id="id-0065-00000001" kind="File" relid="0x1" childrelidcntr="0x1"> + <name>Stock_Base</name> + <attribute kind="PrefixTag" status="meta"> + <value></value> + </attribute> + <model id="id-0065-00000002" kind="Package" role="Package" relid="0x1" childrelidcntr="0x5"> + <name>Stock</name> + <regnode name="PartRegs" isopaque="yes"> + <value></value> + <regnode name="InterfaceDefinition" isopaque="yes"> + <value></value> + <regnode name="Position" isopaque="yes"> + <value>293,153</value> + </regnode> + </regnode> + </regnode> + <attribute kind="PrefixTag" status="meta"> + <value></value> + </attribute> + <attribute kind="SpecifyIdTag" status="meta"> + <value></value> + </attribute> + <attribute kind="VersionTag" status="meta"> + <value></value> + </attribute> + <model id="id-0065-00000003" kind="Exception" role="Exception" relid="0x1" childrelidcntr="0x0"> + <name>Invalid_Stock</name> + <regnode name="PartRegs" isopaque="yes"> + <value></value> + <regnode name="InterfaceDefinition" isopaque="yes"> + <value></value> + <regnode name="Position" isopaque="yes"> + <value>151,84</value> + </regnode> + </regnode> + </regnode> + <attribute kind="SpecifyIdTag" status="meta"> + <value></value> + </attribute> + <attribute kind="VersionTag" status="meta"> + <value></value> + </attribute> + </model> + <model id="id-0065-00000004" kind="Aggregate" role="Aggregate" relid="0x3" childrelidcntr="0x4"> + <name>StockInfo</name> + <regnode name="PartRegs" isopaque="yes"> + <value></value> + <regnode name="InterfaceDefinition" isopaque="yes"> + <value></value> + <regnode name="Position" isopaque="yes"> + <value>517,316</value> + </regnode> + </regnode> + </regnode> + <attribute kind="SpecifyIdTag" status="meta"> + <value></value> + </attribute> + <attribute kind="VersionTag" status="meta"> + <value></value> + </attribute> + <reference id="id-0067-00000018" kind="Member" role="Member" relid="0x1" referred="id-0066-00000003"> + <name>name</name> + <regnode name="PartRegs" isopaque="yes"> + <value></value> + <regnode name="InterfaceDefinition" isopaque="yes"> + <value></value> + <regnode name="Position" isopaque="yes"> + <value>188,108</value> + </regnode> + </regnode> + </regnode> + </reference> + <reference id="id-0067-00000019" kind="Member" role="Member" relid="0x2" referred="id-0066-00000007"> + <name>high</name> + <regnode name="PartRegs" isopaque="yes"> + <value></value> + <regnode name="InterfaceDefinition" isopaque="yes"> + <value></value> + <regnode name="Position" isopaque="yes"> + <value>408,248</value> + </regnode> + </regnode> + </regnode> + </reference> + <reference id="id-0067-0000001a" kind="Member" role="Member" relid="0x3" referred="id-0066-00000007"> + <name>low</name> + <regnode name="PartRegs" isopaque="yes"> + <value></value> + <regnode name="InterfaceDefinition" isopaque="yes"> + <value></value> + <regnode name="Position" isopaque="yes"> + <value>628,388</value> + </regnode> + </regnode> + </regnode> + </reference> + <reference id="id-0067-0000001b" kind="Member" role="Member" relid="0x4" referred="id-0066-00000007"> + <name>last</name> + <regnode name="PartRegs" isopaque="yes"> + <value></value> + <regnode name="InterfaceDefinition" isopaque="yes"> + <value></value> + <regnode name="Position" isopaque="yes"> + <value>848,528</value> + </regnode> + </regnode> + </regnode> + </reference> + </model> + <model id="id-0065-00000005" kind="Object" role="Object" relid="0x4" childrelidcntr="0x1"> + <name>StockQuoter</name> + <regnode name="PartRegs" isopaque="yes"> + <value></value> + <regnode name="InterfaceDefinition" isopaque="yes"> + <value></value> + <regnode name="Position" isopaque="yes"> + <value>700,432</value> + </regnode> + </regnode> + </regnode> + <attribute kind="PrefixTag" status="meta"> + <value></value> + </attribute> + <attribute kind="SpecifyIdTag" status="meta"> + <value></value> + </attribute> + <attribute kind="VersionTag" status="meta"> + <value></value> + </attribute> + <attribute kind="abstract" status="meta"> + <value>false</value> + </attribute> + <attribute kind="local" status="meta"> + <value>false</value> + </attribute> + <model id="id-0065-00000006" kind="TwowayOperation" role="TwowayOperation" relid="0x1" childrelidcntr="0x3"> + <name>get_stock_info</name> + <regnode name="PartRegs" isopaque="yes"> + <value></value> + <regnode name="InterfaceDefinition" isopaque="yes"> + <value></value> + <regnode name="Position" isopaque="yes"> + <value>518,318</value> + </regnode> + </regnode> + </regnode> + <attribute kind="SpecifyIdTag" status="meta"> + <value></value> + </attribute> + <attribute kind="VersionTag" status="meta"> + <value></value> + </attribute> + <reference id="id-0067-00000001" kind="ReturnType" role="ReturnType" relid="0x1" referred="id-0065-00000004"> + <name>ReturnType</name> + <regnode name="PartRegs" isopaque="yes"> + <value></value> + <regnode name="InterfaceDefinition" isopaque="yes"> + <value></value> + <regnode name="Position" isopaque="yes"> + <value>243,143</value> + </regnode> + </regnode> + </regnode> + </reference> + <reference id="id-0067-00000002" kind="ExceptionRef" role="ExceptionRef" relid="0x4" referred="id-0065-00000003"> + <name>ExceptionRef</name> + <regnode name="PartRegs" isopaque="yes"> + <value></value> + <regnode name="InterfaceDefinition" isopaque="yes"> + <value></value> + <regnode name="Position" isopaque="yes"> + <value>1068,668</value> + </regnode> + </regnode> + </regnode> + </reference> + <reference id="id-0067-0000001c" kind="InParameter" role="InParameter" relid="0x3" referred="id-0066-00000003"> + <name>stock_name</name> + <regnode name="PartRegs" isopaque="yes"> + <value></value> + <regnode name="InterfaceDefinition" isopaque="yes"> + <value></value> + <regnode name="Position" isopaque="yes"> + <value>793,493</value> + </regnode> + </regnode> + </regnode> + </reference> + </model> + </model> + <model id="id-0065-00000007" kind="Event" role="Event" relid="0x5" childrelidcntr="0x1"> + <name>StockName</name> + <regnode name="PartRegs" isopaque="yes"> + <value></value> + <regnode name="InterfaceDefinition" isopaque="yes"> + <value></value> + <regnode name="Position" isopaque="yes"> + <value>883,548</value> + </regnode> + </regnode> + </regnode> + <attribute kind="PrefixTag" status="meta"> + <value></value> + </attribute> + <attribute kind="SpecifyIdTag" status="meta"> + <value></value> + </attribute> + <attribute kind="VersionTag" status="meta"> + <value></value> + </attribute> + <attribute kind="abstract" status="meta"> + <value>false</value> + </attribute> + <reference id="id-0067-0000001d" kind="Member" role="Member" relid="0x1" referred="id-0066-00000003"> + <name>name</name> + <regnode name="PartRegs" isopaque="yes"> + <value></value> + <regnode name="InterfaceDefinition" isopaque="yes"> + <value></value> + <regnode name="Position" isopaque="yes"> + <value>518,318</value> + </regnode> + </regnode> + </regnode> + </reference> + </model> + <reference id="id-0067-00000017" kind="Collection" role="Collection" relid="0x2" referred="id-0066-0000000b"> + <name>ImageBlob</name> + <regnode name="PartRegs" isopaque="yes"> + <value></value> + <regnode name="InterfaceDefinition" isopaque="yes"> + <value></value> + <regnode name="Position" isopaque="yes"> + <value>334,200</value> + </regnode> + </regnode> + </regnode> + <attribute kind="SpecifyIdTag" status="meta"> + <value></value> + </attribute> + <attribute kind="VersionTag" status="meta"> + <value></value> + </attribute> + </reference> + </model> + </model> + <model id="id-0065-00000008" kind="File" relid="0x2" childrelidcntr="0x2"> + <name>Broker</name> + <attribute kind="PrefixTag" status="meta"> + <value></value> + </attribute> + <model id="id-0065-00000009" kind="Package" role="Package" relid="0x2" childrelidcntr="0x4"> + <name>Stock</name> + <regnode name="PartRegs" isopaque="yes"> + <value></value> + <regnode name="InterfaceDefinition" isopaque="yes"> + <value></value> + <regnode name="Position" isopaque="yes"> + <value>314,216</value> + </regnode> + </regnode> + </regnode> + <attribute kind="PrefixTag" status="meta"> + <value></value> + </attribute> + <attribute kind="SpecifyIdTag" status="meta"> + <value></value> + </attribute> + <attribute kind="VersionTag" status="meta"> + <value></value> + </attribute> + <model id="id-0065-0000000a" kind="Object" role="Object" relid="0x1" childrelidcntr="0x2"> + <name>StockSubscriber</name> + <regnode name="PartRegs" isopaque="yes"> + <value></value> + <regnode name="InterfaceDefinition" isopaque="yes"> + <value></value> + <regnode name="Position" isopaque="yes"> + <value>243,143</value> + </regnode> + </regnode> + </regnode> + <attribute kind="PrefixTag" status="meta"> + <value></value> + </attribute> + <attribute kind="SpecifyIdTag" status="meta"> + <value></value> + </attribute> + <attribute kind="VersionTag" status="meta"> + <value></value> + </attribute> + <attribute kind="abstract" status="meta"> + <value>false</value> + </attribute> + <attribute kind="local" status="meta"> + <value>false</value> + </attribute> + <model id="id-0065-0000000b" kind="TwowayOperation" role="TwowayOperation" relid="0x1" childrelidcntr="0x2"> + <name>stock_subscribe</name> + <regnode name="PartRegs" isopaque="yes"> + <value></value> + <regnode name="InterfaceDefinition" isopaque="yes"> + <value></value> + <regnode name="Position" isopaque="yes"> + <value>334,201</value> + </regnode> + </regnode> + </regnode> + <attribute kind="SpecifyIdTag" status="meta"> + <value></value> + </attribute> + <attribute kind="VersionTag" status="meta"> + <value></value> + </attribute> + <reference id="id-0067-00000004" kind="ExceptionRef" role="ExceptionRef" relid="0x2" referred="id-0065-00000003"> + <name>ExceptionRef</name> + <regnode name="PartRegs" isopaque="yes"> + <value></value> + <regnode name="InterfaceDefinition" isopaque="yes"> + <value></value> + <regnode name="Position" isopaque="yes"> + <value>700,434</value> + </regnode> + </regnode> + </regnode> + </reference> + <reference id="id-0067-0000001e" kind="InParameter" role="InParameter" relid="0x1" referred="id-0066-00000003"> + <name>stock_name</name> + <regnode name="PartRegs" isopaque="yes"> + <value></value> + <regnode name="InterfaceDefinition" isopaque="yes"> + <value></value> + <regnode name="Position" isopaque="yes"> + <value>334,201</value> + </regnode> + </regnode> + </regnode> + </reference> + </model> + <model id="id-0065-0000000c" kind="TwowayOperation" role="TwowayOperation" relid="0x2" childrelidcntr="0x2"> + <name>stock_unsubscribe</name> + <regnode name="PartRegs" isopaque="yes"> + <value></value> + <regnode name="InterfaceDefinition" isopaque="yes"> + <value></value> + <regnode name="Position" isopaque="yes"> + <value>700,434</value> + </regnode> + </regnode> + </regnode> + <attribute kind="SpecifyIdTag" status="meta"> + <value></value> + </attribute> + <attribute kind="VersionTag" status="meta"> + <value></value> + </attribute> + <reference id="id-0067-00000005" kind="ExceptionRef" role="ExceptionRef" relid="0x2" referred="id-0065-00000003"> + <name>ExceptionRef</name> + <regnode name="PartRegs" isopaque="yes"> + <value></value> + <regnode name="InterfaceDefinition" isopaque="yes"> + <value></value> + <regnode name="Position" isopaque="yes"> + <value>700,434</value> + </regnode> + </regnode> + </regnode> + </reference> + <reference id="id-0067-0000001f" kind="InParameter" role="InParameter" relid="0x1" referred="id-0066-00000003"> + <name>stock_name</name> + <regnode name="PartRegs" isopaque="yes"> + <value></value> + <regnode name="InterfaceDefinition" isopaque="yes"> + <value></value> + <regnode name="Position" isopaque="yes"> + <value>334,201</value> + </regnode> + </regnode> + </regnode> + </reference> + </model> + </model> + <model id="id-0065-0000000d" kind="Component" role="Component" relid="0x2" childrelidcntr="0x3"> + <name>StockBroker</name> + <regnode name="PartRegs" isopaque="yes"> + <value></value> + <regnode name="InterfaceDefinition" isopaque="yes"> + <value></value> + <regnode name="Position" isopaque="yes"> + <value>426,242</value> + </regnode> + </regnode> + </regnode> + <attribute kind="SpecifyIdTag" status="meta"> + <value></value> + </attribute> + <attribute kind="UUID"> + <value>58E736A4-F9F5-44CF-AA0F-83A280F907A6</value> + </attribute> + <attribute kind="VersionTag" status="meta"> + <value></value> + </attribute> + <attribute kind="label" status="meta"> + <value></value> + </attribute> + <reference id="id-0067-00000006" kind="Supports" role="Supports" relid="0x1" referred="id-0065-0000000a"> + <name>Supports</name> + <regnode name="PartRegs" isopaque="yes"> + <value></value> + <regnode name="InterfaceDefinition" isopaque="yes"> + <value></value> + <regnode name="Position" isopaque="yes"> + <value>55,160</value> + </regnode> + </regnode> + </regnode> + </reference> + <reference id="id-0067-00000007" kind="RequiredRequestPort" role="RequiredRequestPort" relid="0x2" referred="id-0065-00000005"> + <name>read_quoter</name> + <regnode name="PartRegs" isopaque="yes"> + <value></value> + <regnode name="InterfaceDefinition" isopaque="yes"> + <value></value> + <regnode name="Position" isopaque="yes"> + <value>69,307</value> + </regnode> + </regnode> + </regnode> + <attribute kind="SpecifyIdTag" status="meta"> + <value></value> + </attribute> + <attribute kind="VersionTag" status="meta"> + <value></value> + </attribute> + <attribute kind="exclusiveProvider" status="meta"> + <value>false</value> + </attribute> + <attribute kind="exclusiveUser" status="meta"> + <value>false</value> + </attribute> + <attribute kind="multiple_connections"> + <value>false</value> + </attribute> + <attribute kind="optional" status="meta"> + <value>false</value> + </attribute> + </reference> + <reference id="id-0067-00000008" kind="InEventPort" role="InEventPort" relid="0x3" referred="id-0065-00000007"> + <name>notify_in</name> + <regnode name="PartRegs" isopaque="yes"> + <value></value> + <regnode name="InterfaceDefinition" isopaque="yes"> + <value></value> + <regnode name="Position" isopaque="yes"> + <value>83,433</value> + </regnode> + </regnode> + </regnode> + <attribute kind="SpecifyIdTag" status="meta"> + <value></value> + </attribute> + <attribute kind="VersionTag" status="meta"> + <value></value> + </attribute> + <attribute kind="exclusiveProvider" status="meta"> + <value>false</value> + </attribute> + <attribute kind="exclusiveUser" status="meta"> + <value>false</value> + </attribute> + <attribute kind="optional" status="meta"> + <value>false</value> + </attribute> + </reference> + </model> + <model id="id-0065-0000000e" kind="ComponentFactory" role="ComponentFactory" relid="0x3" childrelidcntr="0x0"> + <name>StockBrokerHome</name> + <regnode name="PartRegs" isopaque="yes"> + <value></value> + <regnode name="InterfaceDefinition" isopaque="yes"> + <value></value> + <regnode name="Position" isopaque="yes"> + <value>793,493</value> + </regnode> + </regnode> + </regnode> + <attribute kind="SpecifyIdTag" status="meta"> + <value></value> + </attribute> + <attribute kind="VersionTag" status="meta"> + <value></value> + </attribute> + </model> + <connection id="id-0068-00000001" kind="ManagesComponent" role="ManagesComponent" relid="0x4"> + <name>ManagesComponent</name> + <regnode name="autorouterPref" isopaque="yes"> + <value>Ws</value> + </regnode> + <connpoint role="dst" target="id-0065-0000000d"/> + <connpoint role="src" target="id-0065-0000000e"/> + </connection> + </model> + <reference id="id-0067-00000003" kind="FileRef" role="FileRef" relid="0x1" referred="id-0065-00000001"> + <name>FileRef</name> + <regnode name="PartRegs" isopaque="yes"> + <value></value> + <regnode name="InterfaceDefinition" isopaque="yes"> + <value></value> + <regnode name="Position" isopaque="yes"> + <value>174,181</value> + </regnode> + </regnode> + </regnode> + </reference> + </model> + <model id="id-0065-0000000f" kind="File" relid="0x3" childrelidcntr="0x2"> + <name>Distributor</name> + <attribute kind="PrefixTag" status="meta"> + <value></value> + </attribute> + <model id="id-0065-00000010" kind="Package" role="Package" relid="0x2" childrelidcntr="0x4"> + <name>Stock</name> + <regnode name="PartRegs" isopaque="yes"> + <value></value> + <regnode name="InterfaceDefinition" isopaque="yes"> + <value></value> + <regnode name="Position" isopaque="yes"> + <value>700,434</value> + </regnode> + </regnode> + </regnode> + <attribute kind="PrefixTag" status="meta"> + <value></value> + </attribute> + <attribute kind="SpecifyIdTag" status="meta"> + <value></value> + </attribute> + <attribute kind="VersionTag" status="meta"> + <value></value> + </attribute> + <model id="id-0065-00000011" kind="Object" role="Object" relid="0x1" childrelidcntr="0x2"> + <name>Trigger</name> + <regnode name="PartRegs" isopaque="yes"> + <value></value> + <regnode name="InterfaceDefinition" isopaque="yes"> + <value></value> + <regnode name="Position" isopaque="yes"> + <value>243,143</value> + </regnode> + </regnode> + </regnode> + <attribute kind="PrefixTag" status="meta"> + <value></value> + </attribute> + <attribute kind="SpecifyIdTag" status="meta"> + <value></value> + </attribute> + <attribute kind="VersionTag" status="meta"> + <value></value> + </attribute> + <attribute kind="abstract" status="meta"> + <value>false</value> + </attribute> + <attribute kind="local" status="meta"> + <value>false</value> + </attribute> + <model id="id-0065-00000012" kind="TwowayOperation" role="TwowayOperation" relid="0x1" childrelidcntr="0x0"> + <name>start</name> + <regnode name="PartRegs" isopaque="yes"> + <value></value> + <regnode name="InterfaceDefinition" isopaque="yes"> + <value></value> + <regnode name="Position" isopaque="yes"> + <value>334,201</value> + </regnode> + </regnode> + </regnode> + <attribute kind="SpecifyIdTag" status="meta"> + <value></value> + </attribute> + <attribute kind="VersionTag" status="meta"> + <value></value> + </attribute> + </model> + <model id="id-0065-00000013" kind="TwowayOperation" role="TwowayOperation" relid="0x2" childrelidcntr="0x0"> + <name>stop</name> + <regnode name="PartRegs" isopaque="yes"> + <value></value> + <regnode name="InterfaceDefinition" isopaque="yes"> + <value></value> + <regnode name="Position" isopaque="yes"> + <value>700,434</value> + </regnode> + </regnode> + </regnode> + <attribute kind="SpecifyIdTag" status="meta"> + <value></value> + </attribute> + <attribute kind="VersionTag" status="meta"> + <value></value> + </attribute> + </model> + </model> + <model id="id-0065-00000014" kind="Component" role="Component" relid="0x2" childrelidcntr="0x4"> + <name>StockDistributor</name> + <regnode name="PartRegs" isopaque="yes"> + <value></value> + <regnode name="InterfaceDefinition" isopaque="yes"> + <value></value> + <regnode name="Position" isopaque="yes"> + <value>518,318</value> + </regnode> + </regnode> + </regnode> + <attribute kind="SpecifyIdTag" status="meta"> + <value></value> + </attribute> + <attribute kind="UUID"> + <value>B124B4A8-F51C-4F63-9A08-35256C9A9259</value> + </attribute> + <attribute kind="VersionTag" status="meta"> + <value></value> + </attribute> + <attribute kind="label" status="meta"> + <value></value> + </attribute> + <model id="id-0065-00000015" kind="Attribute" role="Attribute" relid="0x4" childrelidcntr="0x1"> + <name>rate</name> + <regnode name="PartRegs" isopaque="yes"> + <value></value> + <regnode name="InterfaceDefinition" isopaque="yes"> + <value></value> + <regnode name="Position" isopaque="yes"> + <value>848,528</value> + </regnode> + </regnode> + </regnode> + <attribute kind="SpecifyIdTag" status="meta"> + <value></value> + </attribute> + <attribute kind="VersionTag" status="meta"> + <value></value> + </attribute> + <reference id="id-0067-00000020" kind="AttributeMember" role="AttributeMember" relid="0x1" referred="id-0066-00000007"> + <name>AttributeMember</name> + <regnode name="PartRegs" isopaque="yes"> + <value></value> + <regnode name="InterfaceDefinition" isopaque="yes"> + <value></value> + <regnode name="Position" isopaque="yes"> + <value>518,318</value> + </regnode> + </regnode> + </regnode> + </reference> + </model> + <reference id="id-0067-0000000a" kind="Supports" role="Supports" relid="0x1" referred="id-0065-00000011"> + <name>Supports</name> + <regnode name="PartRegs" isopaque="yes"> + <value></value> + <regnode name="InterfaceDefinition" isopaque="yes"> + <value></value> + <regnode name="Position" isopaque="yes"> + <value>188,108</value> + </regnode> + </regnode> + </regnode> + </reference> + <reference id="id-0067-0000000b" kind="ProvidedRequestPort" role="ProvidedRequestPort" relid="0x2" referred="id-0065-00000005"> + <name>push_quoter</name> + <regnode name="PartRegs" isopaque="yes"> + <value></value> + <regnode name="InterfaceDefinition" isopaque="yes"> + <value></value> + <regnode name="Position" isopaque="yes"> + <value>608,216</value> + </regnode> + </regnode> + </regnode> + <attribute kind="SpecifyIdTag" status="meta"> + <value></value> + </attribute> + <attribute kind="VersionTag" status="meta"> + <value></value> + </attribute> + <attribute kind="exclusiveProvider" status="meta"> + <value>false</value> + </attribute> + <attribute kind="exclusiveUser" status="meta"> + <value>false</value> + </attribute> + <attribute kind="optional" status="meta"> + <value>false</value> + </attribute> + </reference> + <reference id="id-0067-0000000c" kind="OutEventPort" role="OutEventPort" relid="0x3" referred="id-0065-00000007"> + <name>notify_out</name> + <regnode name="PartRegs" isopaque="yes"> + <value></value> + <regnode name="InterfaceDefinition" isopaque="yes"> + <value></value> + <regnode name="Position" isopaque="yes"> + <value>628,388</value> + </regnode> + </regnode> + </regnode> + <attribute kind="SpecifyIdTag" status="meta"> + <value></value> + </attribute> + <attribute kind="VersionTag" status="meta"> + <value></value> + </attribute> + <attribute kind="exclusiveProvider" status="meta"> + <value>false</value> + </attribute> + <attribute kind="exclusiveUser" status="meta"> + <value>false</value> + </attribute> + <attribute kind="optional" status="meta"> + <value>false</value> + </attribute> + <attribute kind="out_event_port_type" status="meta"> + <value>DirectConnect</value> + </attribute> + <attribute kind="single_destination"> + <value>false</value> + </attribute> + </reference> + </model> + <model id="id-0065-00000016" kind="ComponentFactory" role="ComponentFactory" relid="0x3" childrelidcntr="0x0"> + <name>StockDistributorHome</name> + <regnode name="PartRegs" isopaque="yes"> + <value></value> + <regnode name="InterfaceDefinition" isopaque="yes"> + <value></value> + <regnode name="Position" isopaque="yes"> + <value>793,493</value> + </regnode> + </regnode> + </regnode> + <attribute kind="SpecifyIdTag" status="meta"> + <value></value> + </attribute> + <attribute kind="VersionTag" status="meta"> + <value></value> + </attribute> + </model> + <connection id="id-0068-00000002" kind="ManagesComponent" role="ManagesComponent" relid="0x4"> + <name>ManagesComponent</name> + <regnode name="autorouterPref" isopaque="yes"> + <value>Ws</value> + </regnode> + <connpoint role="dst" target="id-0065-00000014"/> + <connpoint role="src" target="id-0065-00000016"/> + </connection> + </model> + <reference id="id-0067-00000009" kind="FileRef" role="FileRef" relid="0x1" referred="id-0065-00000001"> + <name>FileRef</name> + <regnode name="PartRegs" isopaque="yes"> + <value></value> + <regnode name="InterfaceDefinition" isopaque="yes"> + <value></value> + <regnode name="Position" isopaque="yes"> + <value>334,201</value> + </regnode> + </regnode> + </regnode> + </reference> + </model> + </folder> + <folder id="id-006a-00000003" relid="0x1" childrelidcntr="0xb" kind="PredefinedTypes"> + <name>PredefinedTypes</name> + <atom id="id-0066-00000001" kind="TypeKind" relid="0xb"> + <name>TypeKind</name> + </atom> + <atom id="id-0066-00000002" kind="TypeEncoding" relid="0xa"> + <name>TypeEncoding</name> + </atom> + <atom id="id-0066-00000003" kind="String" relid="0x9"> + <name>String</name> + </atom> + <atom id="id-0066-00000004" kind="Boolean" relid="0x8"> + <name>Boolean</name> + </atom> + <atom id="id-0066-00000005" kind="ShortInteger" relid="0x7"> + <name>ShortInteger</name> + </atom> + <atom id="id-0066-00000006" kind="RealNumber" relid="0x6"> + <name>RealNumber</name> + </atom> + <atom id="id-0066-00000007" kind="LongInteger" relid="0x5"> + <name>LongInteger</name> + </atom> + <atom id="id-0066-00000008" kind="GenericValueObject" relid="0x4"> + <name>GenericValueObject</name> + </atom> + <atom id="id-0066-00000009" kind="GenericValue" relid="0x3"> + <name>GenericValue</name> + </atom> + <atom id="id-0066-0000000a" kind="GenericObject" relid="0x2"> + <name>GenericObject</name> + </atom> + <atom id="id-0066-0000000b" kind="Byte" relid="0x1"> + <name>Byte</name> + </atom> + </folder> + <folder id="id-006a-00000004" relid="0x3" childrelidcntr="0x1" kind="ComponentImplementations"> + <name>ComponentImplementations</name> + <model id="id-0065-00000017" kind="ComponentImplementationContainer" relid="0x1" childrelidcntr="0xb"> + <name>StockBrokerImplementation</name> + <model id="id-0065-00000018" kind="Property" role="Property" relid="0x2" childrelidcntr="0x2"> + <name>ComponentIOR</name> + <regnode name="PartRegs" isopaque="yes"> + <value></value> + <regnode name="Packaging" isopaque="yes"> + <value></value> + <regnode name="Position" isopaque="yes"> + <value>282,168</value> + </regnode> + </regnode> + </regnode> + <attribute kind="DataValue"> + <value>StockBroker.ior</value> + </attribute> + <reference id="id-0067-0000000d" kind="DataType" role="DataType" relid="0x2" referred="id-0066-00000003"> + <name>String</name> + <regnode name="PartRegs" isopaque="yes"> + <value></value> + <regnode name="Packaging" isopaque="yes"> + <value></value> + <regnode name="Position" isopaque="yes"> + <value>518,318</value> + </regnode> + </regnode> + </regnode> + </reference> + </model> + <atom id="id-0066-0000000c" kind="MonolithicImplementation" role="MonolithicImplementation" relid="0x1"> + <name>StockBrokerMonolithicImpl</name> + <regnode name="PartRegs" isopaque="yes"> + <value></value> + <regnode name="Packaging" isopaque="yes"> + <value></value> + <regnode name="Position" isopaque="yes"> + <value>125,68</value> + </regnode> + </regnode> + </regnode> + <attribute kind="UUID" status="meta"> + <value></value> + </attribute> + <attribute kind="label" status="meta"> + <value></value> + </attribute> + </atom> + <reference id="id-0067-0000000e" kind="ComponentRef" role="ComponentRef" relid="0x9" referred="id-0065-0000000d"> + <name>StockBrokerRef</name> + <regnode name="PartRegs" isopaque="yes"> + <value></value> + <regnode name="Packaging" isopaque="yes"> + <value></value> + <regnode name="Position" isopaque="yes"> + <value>783,557</value> + </regnode> + </regnode> + </regnode> + </reference> + <reference id="id-0067-00000021" kind="ImplementationArtifactReference" role="ImplementationArtifactReference" relid="0x3" referred="id-0066-0000000e"> + <name>StockBroker_stubRef</name> + <regnode name="PartRegs" isopaque="yes"> + <value></value> + <regnode name="Packaging" isopaque="yes"> + <value></value> + <regnode name="Position" isopaque="yes"> + <value>461,265</value> + </regnode> + </regnode> + </regnode> + </reference> + <reference id="id-0067-00000022" kind="ImplementationArtifactReference" role="ImplementationArtifactReference" relid="0x4" referred="id-0066-0000000f"> + <name>StockBroker_svntRef</name> + <regnode name="PartRegs" isopaque="yes"> + <value></value> + <regnode name="Packaging" isopaque="yes"> + <value></value> + <regnode name="Position" isopaque="yes"> + <value>566,363</value> + </regnode> + </regnode> + </regnode> + </reference> + <reference id="id-0067-00000023" kind="ImplementationArtifactReference" role="ImplementationArtifactReference" relid="0x5" referred="id-0066-00000010"> + <name>StockBroker_execRef</name> + <regnode name="PartRegs" isopaque="yes"> + <value></value> + <regnode name="Packaging" isopaque="yes"> + <value></value> + <regnode name="Position" isopaque="yes"> + <value>741,468</value> + </regnode> + </regnode> + </regnode> + </reference> + <connection id="id-0068-00000003" kind="ConfigProperty" role="ConfigProperty" relid="0xa"> + <name>ConfigProperty</name> + <connpoint role="dst" target="id-0065-00000018"/> + <connpoint role="src" target="id-0066-0000000c"/> + </connection> + <connection id="id-0068-00000004" kind="MonolithprimaryArtifact" role="MonolithprimaryArtifact" relid="0x6"> + <name>MonolithprimaryArtifact</name> + <connpoint role="src" target="id-0066-0000000c"/> + <connpoint role="dst" target="id-0067-00000021"/> + </connection> + <connection id="id-0068-00000005" kind="MonolithprimaryArtifact" role="MonolithprimaryArtifact" relid="0x7"> + <name>MonolithprimaryArtifact</name> + <connpoint role="src" target="id-0066-0000000c"/> + <connpoint role="dst" target="id-0067-00000022"/> + </connection> + <connection id="id-0068-00000006" kind="MonolithprimaryArtifact" role="MonolithprimaryArtifact" relid="0x8"> + <name>MonolithprimaryArtifact</name> + <connpoint role="src" target="id-0066-0000000c"/> + <connpoint role="dst" target="id-0067-00000023"/> + </connection> + <connection id="id-0068-00000007" kind="Implements" role="Implements" relid="0xb"> + <name>Implements</name> + <connpoint role="src" target="id-0066-0000000c"/> + <connpoint role="dst" target="id-0067-0000000e"/> + </connection> + </model> + <model id="id-0065-00000019" kind="ComponentImplementationContainer" relid="0x2" childrelidcntr="0xb"> + <name>StockDistributorImplementation</name> + <model id="id-0065-0000001a" kind="Property" role="Property" relid="0x2" childrelidcntr="0x2"> + <name>ComponentIOR</name> + <regnode name="PartRegs" isopaque="yes"> + <value></value> + <regnode name="Packaging" isopaque="yes"> + <value></value> + <regnode name="Position" isopaque="yes"> + <value>282,168</value> + </regnode> + </regnode> + </regnode> + <attribute kind="DataValue"> + <value>StockDistributor.ior</value> + </attribute> + <reference id="id-0067-0000000f" kind="DataType" role="DataType" relid="0x2" referred="id-0066-00000003"> + <name>String</name> + <regnode name="PartRegs" isopaque="yes"> + <value></value> + <regnode name="Packaging" isopaque="yes"> + <value></value> + <regnode name="Position" isopaque="yes"> + <value>518,318</value> + </regnode> + </regnode> + </regnode> + </reference> + </model> + <atom id="id-0066-0000000d" kind="MonolithicImplementation" role="MonolithicImplementation" relid="0x1"> + <name>StockDistributorMonolithicImpl</name> + <regnode name="PartRegs" isopaque="yes"> + <value></value> + <regnode name="Packaging" isopaque="yes"> + <value></value> + <regnode name="Position" isopaque="yes"> + <value>125,68</value> + </regnode> + </regnode> + </regnode> + <attribute kind="UUID" status="meta"> + <value></value> + </attribute> + <attribute kind="label" status="meta"> + <value></value> + </attribute> + </atom> + <reference id="id-0067-00000010" kind="ComponentRef" role="ComponentRef" relid="0x9" referred="id-0065-00000014"> + <name>StockDistributorRef</name> + <regnode name="PartRegs" isopaque="yes"> + <value></value> + <regnode name="Packaging" isopaque="yes"> + <value></value> + <regnode name="Position" isopaque="yes"> + <value>910,568</value> + </regnode> + </regnode> + </regnode> + </reference> + <reference id="id-0067-00000024" kind="ImplementationArtifactReference" role="ImplementationArtifactReference" relid="0x3" referred="id-0066-00000011"> + <name>StockDistributor_stubRef</name> + <regnode name="PartRegs" isopaque="yes"> + <value></value> + <regnode name="Packaging" isopaque="yes"> + <value></value> + <regnode name="Position" isopaque="yes"> + <value>439,268</value> + </regnode> + </regnode> + </regnode> + </reference> + <reference id="id-0067-00000025" kind="ImplementationArtifactReference" role="ImplementationArtifactReference" relid="0x4" referred="id-0066-00000012"> + <name>StockDistributor_svntRef</name> + <regnode name="PartRegs" isopaque="yes"> + <value></value> + <regnode name="Packaging" isopaque="yes"> + <value></value> + <regnode name="Position" isopaque="yes"> + <value>596,368</value> + </regnode> + </regnode> + </regnode> + </reference> + <reference id="id-0067-00000026" kind="ImplementationArtifactReference" role="ImplementationArtifactReference" relid="0x5" referred="id-0066-00000013"> + <name>StockDistributor_execRef</name> + <regnode name="PartRegs" isopaque="yes"> + <value></value> + <regnode name="Packaging" isopaque="yes"> + <value></value> + <regnode name="Position" isopaque="yes"> + <value>753,468</value> + </regnode> + </regnode> + </regnode> + </reference> + <connection id="id-0068-00000008" kind="ConfigProperty" role="ConfigProperty" relid="0xa"> + <name>ConfigProperty</name> + <connpoint role="dst" target="id-0065-0000001a"/> + <connpoint role="src" target="id-0066-0000000d"/> + </connection> + <connection id="id-0068-00000009" kind="MonolithprimaryArtifact" role="MonolithprimaryArtifact" relid="0x6"> + <name>MonolithprimaryArtifact</name> + <connpoint role="src" target="id-0066-0000000d"/> + <connpoint role="dst" target="id-0067-00000024"/> + </connection> + <connection id="id-0068-0000000a" kind="MonolithprimaryArtifact" role="MonolithprimaryArtifact" relid="0x7"> + <name>MonolithprimaryArtifact</name> + <connpoint role="src" target="id-0066-0000000d"/> + <connpoint role="dst" target="id-0067-00000025"/> + </connection> + <connection id="id-0068-0000000b" kind="MonolithprimaryArtifact" role="MonolithprimaryArtifact" relid="0x8"> + <name>MonolithprimaryArtifact</name> + <connpoint role="src" target="id-0066-0000000d"/> + <connpoint role="dst" target="id-0067-00000026"/> + </connection> + <connection id="id-0068-0000000c" kind="Implements" role="Implements" relid="0xb"> + <name>Implements</name> + <connpoint role="src" target="id-0066-0000000d"/> + <connpoint role="dst" target="id-0067-00000010"/> + </connection> + </model> + <model id="id-0065-00000023" kind="ComponentImplementationContainer" relid="0x1" childrelidcntr="0x1"> + <name>StockQuoterImplementation</name> + <model id="id-0065-00000024" kind="ComponentAssembly" role="ComponentAssembly" relid="0x1" childrelidcntr="0x6"> + <name>StockQuoter</name> + <regnode name="PartRegs" status="undefined"> + <value></value> + <regnode name="Packaging" status="undefined"> + <value></value> + <regnode name="Position" isopaque="yes"> + <value>307,221</value> + </regnode> + </regnode> + <regnode name="QoSModelAspect" status="undefined"> + <value></value> + <regnode name="Position" isopaque="yes"> + <value>331,198</value> + </regnode> + </regnode> + </regnode> + <attribute kind="UUID"> + <value>EBE916A6-E4E5-469C-A8EE-EDDFCA4B9CE3</value> + </attribute> + <attribute kind="label" status="meta"> + <value></value> + </attribute> + <model id="id-0065-00000025" kind="Component" role="Component" derivedfrom="id-0065-0000000d" isinstance="yes" isprimary="yes" relid="0x1" childrelidcntr="0x0"> + <name>StockBroker</name> + <regnode name="PartRegs"> + <value></value> + <regnode name="Packaging" status="undefined"> + <value></value> + <regnode name="Position" isopaque="yes"> + <value>447,116</value> + </regnode> + </regnode> + </regnode> + <attribute kind="SpecifyIdTag" status="meta"> + <value></value> + </attribute> + <attribute kind="UUID"> + <value>94A1586C-2E9A-4FFD-8D75-7FC5A54F6B71</value> + </attribute> + <attribute kind="VersionTag" status="meta"> + <value></value> + </attribute> + <attribute kind="label" status="meta"> + <value></value> + </attribute> + <reference id="id-0067-00000027" kind="InEventPort" role="InEventPort" derivedfrom="id-0067-00000008" isinstance="yes" isprimary="no" referred="id-0065-00000007" isbound="yes"> + <name>notify_in</name> + <attribute kind="SpecifyIdTag" status="meta"> + <value></value> + </attribute> + <attribute kind="VersionTag" status="meta"> + <value></value> + </attribute> + <attribute kind="exclusiveProvider" status="meta"> + <value>false</value> + </attribute> + <attribute kind="exclusiveUser" status="meta"> + <value>false</value> + </attribute> + <attribute kind="optional" status="meta"> + <value>false</value> + </attribute> + </reference> + <reference id="id-0067-00000028" kind="RequiredRequestPort" role="RequiredRequestPort" derivedfrom="id-0067-00000007" isinstance="yes" isprimary="no" referred="id-0065-00000005" isbound="yes"> + <name>read_quoter</name> + <attribute kind="SpecifyIdTag" status="meta"> + <value></value> + </attribute> + <attribute kind="VersionTag" status="meta"> + <value></value> + </attribute> + <attribute kind="exclusiveProvider" status="meta"> + <value>false</value> + </attribute> + <attribute kind="exclusiveUser" status="meta"> + <value>false</value> + </attribute> + <attribute kind="multiple_connections" status="inherited"> + <value>false</value> + </attribute> + <attribute kind="optional" status="meta"> + <value>false</value> + </attribute> + </reference> + <reference id="id-0067-00000029" kind="Supports" role="Supports" derivedfrom="id-0067-00000006" isinstance="yes" isprimary="no" referred="id-0065-0000000a" isbound="yes"> + <name>Supports</name> + </reference> + </model> + <model id="id-0065-00000026" kind="Component" role="Component" derivedfrom="id-0065-00000014" isinstance="yes" isprimary="yes" relid="0x2" childrelidcntr="0x0"> + <name>StockDistributor</name> + <regnode name="PartRegs"> + <value></value> + <regnode name="Packaging" status="undefined"> + <value></value> + <regnode name="Position" isopaque="yes"> + <value>83,123</value> + </regnode> + </regnode> + </regnode> + <attribute kind="SpecifyIdTag" status="meta"> + <value></value> + </attribute> + <attribute kind="UUID"> + <value>2DBE2452-FDE3-4399-9210-509CAC49139A</value> + </attribute> + <attribute kind="VersionTag" status="meta"> + <value></value> + </attribute> + <attribute kind="label" status="meta"> + <value></value> + </attribute> + <model id="id-0065-00000027" kind="Attribute" role="Attribute" derivedfrom="id-0065-00000015" isinstance="yes" isprimary="no" childrelidcntr="0x0"> + <name>rate</name> + <attribute kind="SpecifyIdTag" status="meta"> + <value></value> + </attribute> + <attribute kind="VersionTag" status="meta"> + <value></value> + </attribute> + <reference id="id-0067-0000002a" kind="AttributeMember" role="AttributeMember" derivedfrom="id-0067-00000020" isinstance="yes" isprimary="no" referred="id-0066-00000007" isbound="yes"> + <name>AttributeMember</name> + </reference> + </model> + <reference id="id-0067-0000002b" kind="OutEventPort" role="OutEventPort" derivedfrom="id-0067-0000000c" isinstance="yes" isprimary="no" referred="id-0065-00000007" isbound="yes"> + <name>notify_out</name> + <attribute kind="SpecifyIdTag" status="meta"> + <value></value> + </attribute> + <attribute kind="VersionTag" status="meta"> + <value></value> + </attribute> + <attribute kind="exclusiveProvider" status="meta"> + <value>false</value> + </attribute> + <attribute kind="exclusiveUser" status="meta"> + <value>false</value> + </attribute> + <attribute kind="optional" status="meta"> + <value>false</value> + </attribute> + <attribute kind="out_event_port_type" status="meta"> + <value>DirectConnect</value> + </attribute> + <attribute kind="single_destination" status="inherited"> + <value>false</value> + </attribute> + </reference> + <reference id="id-0067-0000002c" kind="ProvidedRequestPort" role="ProvidedRequestPort" derivedfrom="id-0067-0000000b" isinstance="yes" isprimary="no" referred="id-0065-00000005" isbound="yes"> + <name>push_quoter</name> + <attribute kind="SpecifyIdTag" status="meta"> + <value></value> + </attribute> + <attribute kind="VersionTag" status="meta"> + <value></value> + </attribute> + <attribute kind="exclusiveProvider" status="meta"> + <value>false</value> + </attribute> + <attribute kind="exclusiveUser" status="meta"> + <value>false</value> + </attribute> + <attribute kind="optional" status="meta"> + <value>false</value> + </attribute> + </reference> + <reference id="id-0067-0000002d" kind="Supports" role="Supports" derivedfrom="id-0067-0000000a" isinstance="yes" isprimary="no" referred="id-0065-00000011" isbound="yes"> + <name>Supports</name> + </reference> + </model> + <atom id="id-0066-00000014" kind="PublishConnector" role="PublishConnector" relid="0x3"> + <name>PublishConnector</name> + <regnode name="PartRegs" status="undefined"> + <value></value> + <regnode name="Packaging" status="undefined"> + <value></value> + <regnode name="Position" isopaque="yes"> + <value>329,154</value> + </regnode> + </regnode> + </regnode> + </atom> + <connection id="id-0068-00000017" kind="invoke" role="invoke" relid="0x4"> + <name>invoke</name> + <connpoint role="src" target="id-0067-00000028"/> + <connpoint role="dst" target="id-0067-0000002c"/> + </connection> + <connection id="id-0068-00000018" kind="publish" role="publish" relid="0x5"> + <name>publish</name> + <connpoint role="dst" target="id-0066-00000014"/> + <connpoint role="src" target="id-0067-0000002b"/> + </connection> + <connection id="id-0068-00000019" kind="deliverTo" role="deliverTo" relid="0x6"> + <name>deliverTo</name> + <regnode name="autorouterPref" isopaque="yes"> + <value>E</value> + </regnode> + <connpoint role="src" target="id-0066-00000014"/> + <connpoint role="dst" target="id-0067-00000027"/> + </connection> + </model> + </model> + </folder> + <folder id="id-006a-00000005" relid="0x4" childrelidcntr="0x0" kind="ImplementationArtifacts"> + <name>ImplementationArtifacts</name> + <model id="id-0065-0000001b" kind="ArtifactContainer" relid="0x1" childrelidcntr="0xa"> + <name>StockBrokerArtifacts</name> + <model id="id-0065-0000001c" kind="Property" role="Property" relid="0x2" childrelidcntr="0x2"> + <name>entryPoint</name> + <regnode name="PartRegs" isopaque="yes"> + <value></value> + <regnode name="Packaging" isopaque="yes"> + <value></value> + <regnode name="Position" isopaque="yes"> + <value>334,200</value> + </regnode> + </regnode> + </regnode> + <attribute kind="DataValue"> + <value>createStockBrokerHome_Servant</value> + </attribute> + <reference id="id-0067-00000011" kind="DataType" role="DataType" relid="0x2" referred="id-0066-00000003"> + <name>String</name> + <regnode name="PartRegs" isopaque="yes"> + <value></value> + <regnode name="Packaging" isopaque="yes"> + <value></value> + <regnode name="Position" isopaque="yes"> + <value>298,193</value> + </regnode> + </regnode> + </regnode> + </reference> + </model> + <model id="id-0065-0000001d" kind="Property" role="Property" relid="0x4" childrelidcntr="0x2"> + <name>entryPoint</name> + <regnode name="PartRegs" isopaque="yes"> + <value></value> + <regnode name="Packaging" isopaque="yes"> + <value></value> + <regnode name="Position" isopaque="yes"> + <value>700,432</value> + </regnode> + </regnode> + </regnode> + <attribute kind="DataValue"> + <value>createStockBrokerHome_Impl</value> + </attribute> + <reference id="id-0067-00000012" kind="DataType" role="DataType" relid="0x2" referred="id-0066-00000003"> + <name>String</name> + <regnode name="PartRegs" isopaque="yes"> + <value></value> + <regnode name="Packaging" isopaque="yes"> + <value></value> + <regnode name="Position" isopaque="yes"> + <value>340,172</value> + </regnode> + </regnode> + </regnode> + </reference> + </model> + <atom id="id-0066-0000000e" kind="ImplementationArtifact" role="ImplementationArtifact" relid="0x1"> + <name>StockBroker_stub</name> + <regnode name="PartRegs" isopaque="yes"> + <value></value> + <regnode name="Packaging" isopaque="yes"> + <value></value> + <regnode name="Position" isopaque="yes"> + <value>151,84</value> + </regnode> + </regnode> + </regnode> + <attribute kind="UUID" status="meta"> + <value></value> + </attribute> + <attribute kind="configuration" status="meta"> + <value></value> + </attribute> + <attribute kind="label"> + <value></value> + </attribute> + <attribute kind="location"> + <value>StockBroker_stub</value> + </attribute> + </atom> + <atom id="id-0066-0000000f" kind="ImplementationArtifact" role="ImplementationArtifact" relid="0x3"> + <name>StockBroker_svnt</name> + <regnode name="PartRegs" isopaque="yes"> + <value></value> + <regnode name="Packaging" isopaque="yes"> + <value></value> + <regnode name="Position" isopaque="yes"> + <value>517,316</value> + </regnode> + </regnode> + </regnode> + <attribute kind="UUID" status="meta"> + <value></value> + </attribute> + <attribute kind="configuration" status="meta"> + <value></value> + </attribute> + <attribute kind="label"> + <value></value> + </attribute> + <attribute kind="location"> + <value>StockBroker_svnt</value> + </attribute> + </atom> + <atom id="id-0066-00000010" kind="ImplementationArtifact" role="ImplementationArtifact" relid="0x5"> + <name>StockBroker_exec</name> + <regnode name="PartRegs" isopaque="yes"> + <value></value> + <regnode name="Packaging" isopaque="yes"> + <value></value> + <regnode name="Position" isopaque="yes"> + <value>883,548</value> + </regnode> + </regnode> + </regnode> + <attribute kind="UUID" status="meta"> + <value></value> + </attribute> + <attribute kind="configuration" status="meta"> + <value></value> + </attribute> + <attribute kind="label"> + <value></value> + </attribute> + <attribute kind="location"> + <value>StockBroker_exec</value> + </attribute> + </atom> + <connection id="id-0068-0000000d" kind="ArtifactExecParameter" role="ArtifactExecParameter" relid="0x7"> + <name>ArtifactExecParameter</name> + <connpoint role="dst" target="id-0065-0000001c"/> + <connpoint role="src" target="id-0066-0000000f"/> + </connection> + <connection id="id-0068-0000000e" kind="ArtifactDependency" role="ArtifactDependency" relid="0x8"> + <name>ArtifactDependency</name> + <connpoint role="dst" target="id-0066-0000000e"/> + <connpoint role="src" target="id-0066-0000000f"/> + </connection> + <connection id="id-0068-0000000f" kind="ArtifactExecParameter" role="ArtifactExecParameter" relid="0x8"> + <name>ArtifactExecParameter</name> + <connpoint role="dst" target="id-0065-0000001d"/> + <connpoint role="src" target="id-0066-00000010"/> + </connection> + <connection id="id-0068-00000010" kind="ArtifactDependency" role="ArtifactDependency" relid="0x9"> + <name>ArtifactDependency</name> + <connpoint role="dst" target="id-0066-0000000f"/> + <connpoint role="src" target="id-0066-00000010"/> + </connection> + <connection id="id-0068-00000011" kind="ArtifactDependency" role="ArtifactDependency" relid="0xa"> + <name>ArtifactDependency</name> + <connpoint role="dst" target="id-0066-0000000e"/> + <connpoint role="src" target="id-0066-00000010"/> + </connection> + </model> + <model id="id-0065-0000001e" kind="ArtifactContainer" relid="0x2" childrelidcntr="0xa"> + <name>StockDistributorArtifacts</name> + <model id="id-0065-0000001f" kind="Property" role="Property" relid="0x2" childrelidcntr="0x2"> + <name>entryPoint</name> + <regnode name="PartRegs" isopaque="yes"> + <value></value> + <regnode name="Packaging" isopaque="yes"> + <value></value> + <regnode name="Position" isopaque="yes"> + <value>334,200</value> + </regnode> + </regnode> + </regnode> + <attribute kind="DataValue"> + <value>createStockDistributorHome_Servant</value> + </attribute> + <reference id="id-0067-00000013" kind="DataType" role="DataType" relid="0x2" referred="id-0066-00000003"> + <name>String</name> + <regnode name="PartRegs" isopaque="yes"> + <value></value> + <regnode name="Packaging" isopaque="yes"> + <value></value> + <regnode name="Position" isopaque="yes"> + <value>518,318</value> + </regnode> + </regnode> + </regnode> + </reference> + </model> + <model id="id-0065-00000020" kind="Property" role="Property" relid="0x4" childrelidcntr="0x2"> + <name>entryPoint</name> + <regnode name="PartRegs" isopaque="yes"> + <value></value> + <regnode name="Packaging" isopaque="yes"> + <value></value> + <regnode name="Position" isopaque="yes"> + <value>700,432</value> + </regnode> + </regnode> + </regnode> + <attribute kind="DataValue"> + <value>createStockDistributorHome_Impl</value> + </attribute> + <reference id="id-0067-00000014" kind="DataType" role="DataType" relid="0x2" referred="id-0066-00000003"> + <name>String</name> + <regnode name="PartRegs" isopaque="yes"> + <value></value> + <regnode name="Packaging" isopaque="yes"> + <value></value> + <regnode name="Position" isopaque="yes"> + <value>518,318</value> + </regnode> + </regnode> + </regnode> + </reference> + </model> + <atom id="id-0066-00000011" kind="ImplementationArtifact" role="ImplementationArtifact" relid="0x1"> + <name>StockDistributor_stub</name> + <regnode name="PartRegs" isopaque="yes"> + <value></value> + <regnode name="Packaging" isopaque="yes"> + <value></value> + <regnode name="Position" isopaque="yes"> + <value>151,84</value> + </regnode> + </regnode> + </regnode> + <attribute kind="UUID" status="meta"> + <value></value> + </attribute> + <attribute kind="configuration" status="meta"> + <value></value> + </attribute> + <attribute kind="label"> + <value></value> + </attribute> + <attribute kind="location"> + <value>StockDistributor_stub</value> + </attribute> + </atom> + <atom id="id-0066-00000012" kind="ImplementationArtifact" role="ImplementationArtifact" relid="0x3"> + <name>StockDistributor_svnt</name> + <regnode name="PartRegs" isopaque="yes"> + <value></value> + <regnode name="Packaging" isopaque="yes"> + <value></value> + <regnode name="Position" isopaque="yes"> + <value>517,316</value> + </regnode> + </regnode> + </regnode> + <attribute kind="UUID" status="meta"> + <value></value> + </attribute> + <attribute kind="configuration" status="meta"> + <value></value> + </attribute> + <attribute kind="label"> + <value></value> + </attribute> + <attribute kind="location"> + <value>StockDistributor_svnt</value> + </attribute> + </atom> + <atom id="id-0066-00000013" kind="ImplementationArtifact" role="ImplementationArtifact" relid="0x5"> + <name>StockDistributor_exec</name> + <regnode name="PartRegs" isopaque="yes"> + <value></value> + <regnode name="Packaging" isopaque="yes"> + <value></value> + <regnode name="Position" isopaque="yes"> + <value>883,548</value> + </regnode> + </regnode> + </regnode> + <attribute kind="UUID" status="meta"> + <value></value> + </attribute> + <attribute kind="configuration" status="meta"> + <value></value> + </attribute> + <attribute kind="label"> + <value></value> + </attribute> + <attribute kind="location"> + <value>StockDistributor_exec</value> + </attribute> + </atom> + <connection id="id-0068-00000012" kind="ArtifactExecParameter" role="ArtifactExecParameter" relid="0x7"> + <name>ArtifactExecParameter</name> + <connpoint role="dst" target="id-0065-0000001f"/> + <connpoint role="src" target="id-0066-00000012"/> + </connection> + <connection id="id-0068-00000013" kind="ArtifactDependency" role="ArtifactDependency" relid="0x8"> + <name>ArtifactDependency</name> + <connpoint role="dst" target="id-0066-00000011"/> + <connpoint role="src" target="id-0066-00000012"/> + </connection> + <connection id="id-0068-00000014" kind="ArtifactExecParameter" role="ArtifactExecParameter" relid="0x8"> + <name>ArtifactExecParameter</name> + <connpoint role="dst" target="id-0065-00000020"/> + <connpoint role="src" target="id-0066-00000013"/> + </connection> + <connection id="id-0068-00000015" kind="ArtifactDependency" role="ArtifactDependency" relid="0x9"> + <name>ArtifactDependency</name> + <connpoint role="dst" target="id-0066-00000012"/> + <connpoint role="src" target="id-0066-00000013"/> + </connection> + <connection id="id-0068-00000016" kind="ArtifactDependency" role="ArtifactDependency" relid="0xa"> + <name>ArtifactDependency</name> + <connpoint role="dst" target="id-0066-00000011"/> + <connpoint role="src" target="id-0066-00000013"/> + </connection> + </model> + </folder> + <folder id="id-006a-00000006" relid="0x5" childrelidcntr="0x0" kind="ComponentTypes"> + <name>ComponentTypes</name> + <model id="id-0065-00000021" kind="ComponentContainer" relid="0x1" childrelidcntr="0x1"> + <name>StockBrokerContainer</name> + <reference id="id-0067-00000015" kind="ComponentRef" role="ComponentRef" relid="0x1" referred="id-0065-0000000d"> + <name>StockBrokerRef</name> + <regnode name="PartRegs" isopaque="yes"> + <value></value> + <regnode name="Packaging" isopaque="yes"> + <value></value> + <regnode name="Position" isopaque="yes"> + <value>244,214</value> + </regnode> + </regnode> + </regnode> + </reference> + </model> + <model id="id-0065-00000022" kind="ComponentContainer" relid="0x2" childrelidcntr="0x1"> + <name>StockDistributorContainer</name> + <reference id="id-0067-00000016" kind="ComponentRef" role="ComponentRef" relid="0x1" referred="id-0065-00000014"> + <name>StockDistributorRef</name> + <regnode name="PartRegs" isopaque="yes"> + <value></value> + <regnode name="Packaging" isopaque="yes"> + <value></value> + <regnode name="Position" isopaque="yes"> + <value>202,249</value> + </regnode> + </regnode> + </regnode> + </reference> + </model> + </folder> + <folder id="id-006a-00000007" relid="0x6" childrelidcntr="0x1" kind="PackageConfigurations"> + <name>PackageConfigurations</name> + <model id="id-0065-0000002b" kind="PackageConfigurationContainer" relid="0x1" childrelidcntr="0x2"> + <name>Default</name> + <atom id="id-0066-00000018" kind="PackageConfiguration" role="PackageConfiguration" relid="0x1"> + <name>Default</name> + <regnode name="PartRegs" status="undefined"> + <value></value> + <regnode name="Packaging" status="undefined"> + <value></value> + <regnode name="Position" isopaque="yes"> + <value>163,226</value> + </regnode> + </regnode> + </regnode> + <attribute kind="UUID" status="meta"> + <value></value> + </attribute> + <attribute kind="label" status="meta"> + <value></value> + </attribute> + </atom> + <reference id="id-0067-00000033" kind="ComponentPackageReference" role="ComponentPackageReference" relid="0x2" referred="id-0066-00000017"> + <name>StockQuoter</name> + <regnode name="PartRegs" status="undefined"> + <value></value> + <regnode name="Packaging" status="undefined"> + <value></value> + <regnode name="Position" isopaque="yes"> + <value>391,230</value> + </regnode> + </regnode> + </regnode> + <attribute kind="requiredName" status="meta"> + <value></value> + </attribute> + <attribute kind="requiredType" status="meta"> + <value></value> + </attribute> + <attribute kind="requiredUUID" status="meta"> + <value></value> + </attribute> + </reference> + </model> + </folder> + <folder id="id-006a-00000008" relid="0x7" childrelidcntr="0x3" kind="ComponentPackages"> + <name>ComponentPackages</name> + <model id="id-0065-00000028" kind="PackageContainer" relid="0x1" childrelidcntr="0x5"> + <name>Broker</name> + <atom id="id-0066-00000015" kind="ComponentPackage" role="ComponentPackage" relid="0x1"> + <name>Broker</name> + <regnode name="PartRegs" status="undefined"> + <value></value> + <regnode name="Packaging" status="undefined"> + <value></value> + <regnode name="Position" isopaque="yes"> + <value>272,195</value> + </regnode> + </regnode> + </regnode> + <attribute kind="UUID" status="meta"> + <value></value> + </attribute> + <attribute kind="label" status="meta"> + <value></value> + </attribute> + </atom> + <reference id="id-0067-0000002e" kind="ComponentImplementationReference" role="ComponentImplementationReference" relid="0x2" referred="id-0066-0000000c"> + <name>Broker</name> + <regnode name="PartRegs" status="undefined"> + <value></value> + <regnode name="Packaging" status="undefined"> + <value></value> + <regnode name="Position" isopaque="yes"> + <value>96,194</value> + </regnode> + </regnode> + </regnode> + </reference> + <reference id="id-0067-0000002f" kind="ComponentRef" role="ComponentRef" relid="0x3" referred="id-0065-0000000d"> + <name>Broker</name> + <regnode name="PartRegs" status="undefined"> + <value></value> + <regnode name="Packaging" status="undefined"> + <value></value> + <regnode name="Position" isopaque="yes"> + <value>440,172</value> + </regnode> + </regnode> + </regnode> + </reference> + <connection id="id-0068-0000001b" kind="Implementation" role="Implementation" relid="0x4"> + <name>Implementation</name> + <regnode name="autorouterPref" isopaque="yes"> + <value>We</value> + </regnode> + <connpoint role="src" target="id-0066-00000015"/> + <connpoint role="dst" target="id-0067-0000002e"/> + </connection> + <connection id="id-0068-0000001c" kind="PackageInterface" role="PackageInterface" relid="0x5"> + <name>PackageInterface</name> + <regnode name="autorouterPref" isopaque="yes"> + <value>Ew</value> + </regnode> + <connpoint role="src" target="id-0066-00000015"/> + <connpoint role="dst" target="id-0067-0000002f"/> + </connection> + </model> + <model id="id-0065-00000029" kind="PackageContainer" relid="0x2" childrelidcntr="0x5"> + <name>Distributor</name> + <atom id="id-0066-00000016" kind="ComponentPackage" role="ComponentPackage" relid="0x2"> + <name>Distributor</name> + <regnode name="PartRegs" status="undefined"> + <value></value> + <regnode name="Packaging" status="undefined"> + <value></value> + <regnode name="Position" isopaque="yes"> + <value>272,195</value> + </regnode> + </regnode> + </regnode> + <attribute kind="UUID" status="meta"> + <value></value> + </attribute> + <attribute kind="label" status="meta"> + <value></value> + </attribute> + </atom> + <reference id="id-0067-00000030" kind="ComponentImplementationReference" role="ComponentImplementationReference" relid="0x1" referred="id-0066-0000000d"> + <name>Distributor</name> + <regnode name="PartRegs" status="undefined"> + <value></value> + <regnode name="Packaging" status="undefined"> + <value></value> + <regnode name="Position" isopaque="yes"> + <value>96,194</value> + </regnode> + </regnode> + </regnode> + </reference> + <reference id="id-0067-00000031" kind="ComponentRef" role="ComponentRef" relid="0x3" referred="id-0065-00000014"> + <name>Distributor</name> + <regnode name="PartRegs" status="undefined"> + <value></value> + <regnode name="Packaging" status="undefined"> + <value></value> + <regnode name="Position" isopaque="yes"> + <value>440,172</value> + </regnode> + </regnode> + </regnode> + </reference> + <connection id="id-0068-0000001d" kind="Implementation" role="Implementation" relid="0x4"> + <name>Implementation</name> + <regnode name="autorouterPref" isopaque="yes"> + <value>We</value> + </regnode> + <connpoint role="src" target="id-0066-00000016"/> + <connpoint role="dst" target="id-0067-00000030"/> + </connection> + <connection id="id-0068-0000001e" kind="PackageInterface" role="PackageInterface" relid="0x5"> + <name>PackageInterface</name> + <regnode name="autorouterPref" isopaque="yes"> + <value>Ew</value> + </regnode> + <connpoint role="src" target="id-0066-00000016"/> + <connpoint role="dst" target="id-0067-00000031"/> + </connection> + </model> + <model id="id-0065-0000002a" kind="PackageContainer" relid="0x3" childrelidcntr="0x3"> + <name>StockQuoter</name> + <atom id="id-0066-00000017" kind="ComponentPackage" role="ComponentPackage" relid="0x2"> + <name>StockQuoter</name> + <regnode name="PartRegs" status="undefined"> + <value></value> + <regnode name="Packaging" status="undefined"> + <value></value> + <regnode name="Position" isopaque="yes"> + <value>391,125</value> + </regnode> + </regnode> + </regnode> + <attribute kind="UUID" status="meta"> + <value></value> + </attribute> + <attribute kind="label" status="meta"> + <value></value> + </attribute> + </atom> + <reference id="id-0067-00000032" kind="ComponentImplementationReference" role="ComponentImplementationReference" relid="0x1" referred="id-0065-00000024"> + <name>StockQuoter</name> + <regnode name="PartRegs" status="undefined"> + <value></value> + <regnode name="Packaging" status="undefined"> + <value></value> + <regnode name="Position" isopaque="yes"> + <value>96,103</value> + </regnode> + </regnode> + </regnode> + </reference> + <connection id="id-0068-0000001f" kind="Implementation" role="Implementation" relid="0x3"> + <name>Implementation</name> + <regnode name="autorouterPref" isopaque="yes"> + <value>We</value> + </regnode> + <connpoint role="src" target="id-0066-00000017"/> + <connpoint role="dst" target="id-0067-00000032"/> + </connection> + </model> + </folder> + <folder id="id-006a-00000009" relid="0x8" childrelidcntr="0x1" kind="DeploymentPlans"> + <name>DeploymentPlans</name> + <model id="id-0065-00000030" kind="DeploymentPlan" relid="0x1" childrelidcntr="0x8"> + <name>Plan</name> + <attribute kind="label" status="meta"> + <value></value> + </attribute> + <reference id="id-0067-00000035" kind="NodeReference" role="NodeReference" relid="0x3" referred="id-0065-0000002e"> + <name>Node_Broker</name> + <regnode name="PartRegs" status="undefined"> + <value></value> + <regnode name="NodeMapping" status="undefined"> + <value></value> + <regnode name="Position" isopaque="yes"> + <value>284,137</value> + </regnode> + </regnode> + </regnode> + </reference> + <reference id="id-0067-00000036" kind="NodeReference" role="NodeReference" relid="0x4" referred="id-0065-0000002f"> + <name>Node_Distributor</name> + <regnode name="PartRegs" status="undefined"> + <value></value> + <regnode name="NodeMapping" status="undefined"> + <value></value> + <regnode name="Position" isopaque="yes"> + <value>284,298</value> + </regnode> + </regnode> + </regnode> + </reference> + <reference id="id-0067-00000037" kind="ComponentRef" role="ComponentRef" relid="0x5" referred="id-0065-00000025"> + <name>StockBroker</name> + <regnode name="PartRegs" status="undefined"> + <value></value> + <regnode name="NodeMapping" status="undefined"> + <value></value> + <regnode name="Position" isopaque="yes"> + <value>412,95</value> + </regnode> + </regnode> + </regnode> + </reference> + <reference id="id-0067-00000038" kind="ComponentRef" role="ComponentRef" relid="0x6" referred="id-0065-00000026"> + <name>StockDistributor</name> + <regnode name="PartRegs" status="undefined"> + <value></value> + <regnode name="NodeMapping" status="undefined"> + <value></value> + <regnode name="Position" isopaque="yes"> + <value>412,270</value> + </regnode> + </regnode> + </regnode> + </reference> + <connection id="id-0068-00000021" kind="InstanceMapping" role="InstanceMapping" relid="0x7"> + <name>InstanceMapping</name> + <regnode name="autorouterPref" isopaque="yes"> + <value>Ew</value> + </regnode> + <connpoint role="dst" target="id-0067-00000035"/> + <connpoint role="src" target="id-0069-00000001"/> + </connection> + <connection id="id-0068-00000022" kind="InstanceMapping" role="InstanceMapping" relid="0x8"> + <name>InstanceMapping</name> + <regnode name="autorouterPref" isopaque="yes"> + <value>Ew</value> + </regnode> + <connpoint role="dst" target="id-0067-00000036"/> + <connpoint role="src" target="id-0069-00000002"/> + </connection> + <set id="id-0069-00000001" kind="CollocationGroup" role="CollocationGroup" relid="0x1" members="id-0067-00000037"> + <name>CollocationGroup</name> + <regnode name="PartRegs" status="undefined"> + <value></value> + <regnode name="NodeMapping" status="undefined"> + <value></value> + <regnode name="Position" isopaque="yes"> + <value>118,125</value> + </regnode> + </regnode> + </regnode> + </set> + <set id="id-0069-00000002" kind="CollocationGroup" role="CollocationGroup" relid="0x2" members="id-0067-00000038"> + <name>CollocationGroup</name> + <regnode name="PartRegs" status="undefined"> + <value></value> + <regnode name="NodeMapping" status="undefined"> + <value></value> + <regnode name="Position" isopaque="yes"> + <value>97,279</value> + </regnode> + </regnode> + </regnode> + </set> + </model> + </folder> + <folder id="id-006a-0000000a" relid="0x9" childrelidcntr="0x1" kind="Targets"> + <name>Targets</name> + <model id="id-0065-0000002d" kind="Domain" relid="0x1" childrelidcntr="0x2"> + <name>Domain</name> + <attribute kind="UUID" status="meta"> + <value></value> + </attribute> + <attribute kind="label" status="meta"> + <value></value> + </attribute> + <model id="id-0065-0000002e" kind="Node" role="Node" relid="0x1" childrelidcntr="0x0"> + <name>Broker</name> + <regnode name="PartRegs" status="undefined"> + <value></value> + <regnode name="Target" status="undefined"> + <value></value> + <regnode name="Position" isopaque="yes"> + <value>198,261</value> + </regnode> + </regnode> + </regnode> + <attribute kind="label" status="meta"> + <value></value> + </attribute> + </model> + <model id="id-0065-0000002f" kind="Node" role="Node" relid="0x2" childrelidcntr="0x0"> + <name>Distributor</name> + <regnode name="PartRegs" status="undefined"> + <value></value> + <regnode name="Target" status="undefined"> + <value></value> + <regnode name="Position" isopaque="yes"> + <value>394,310</value> + </regnode> + </regnode> + </regnode> + <attribute kind="label" status="meta"> + <value></value> + </attribute> + </model> + </model> + </folder> + <folder id="id-006a-0000000b" relid="0xa" childrelidcntr="0x1" kind="TopLevelPackages"> + <name>TopLevelPackages</name> + <model id="id-0065-0000002c" kind="TopLevelPackageContainer" relid="0x1" childrelidcntr="0x3"> + <name>Default</name> + <atom id="id-0066-00000019" kind="TopLevelPackage" role="TopLevelPackage" relid="0x1"> + <name>TopLevelPackage</name> + <regnode name="PartRegs" status="undefined"> + <value></value> + <regnode name="Packaging" status="undefined"> + <value></value> + <regnode name="Position" isopaque="yes"> + <value>132,275</value> + </regnode> + </regnode> + </regnode> + </atom> + <reference id="id-0067-00000034" kind="PackageConfigurationReference" role="PackageConfigurationReference" relid="0x2" referred="id-0066-00000018"> + <name>Default</name> + <regnode name="PartRegs" status="undefined"> + <value></value> + <regnode name="Packaging" status="undefined"> + <value></value> + <regnode name="Position" isopaque="yes"> + <value>370,265</value> + </regnode> + </regnode> + </regnode> + </reference> + <connection id="id-0068-00000020" kind="package" role="package" relid="0x3"> + <name>package</name> + <regnode name="autorouterPref" isopaque="yes"> + <value>Ew</value> + </regnode> + <connpoint role="src" target="id-0066-00000019"/> + <connpoint role="dst" target="id-0067-00000034"/> + </connection> + </model> + </folder> + <folder id="id-006a-0000000c" relid="0xb" childrelidcntr="0x0" kind="ComponentBuild"> + <name>ComponentBuild</name> + </folder> + </folder> +</project> diff --git a/modules/CIAO/docs/tutorials/CoSMIC/index.html b/modules/CIAO/docs/tutorials/CoSMIC/index.html new file mode 100644 index 00000000000..74547224422 --- /dev/null +++ b/modules/CIAO/docs/tutorials/CoSMIC/index.html @@ -0,0 +1,195 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> + + + <meta name="generator" content="HTML Tidy for Mac OS X (vers 1st December 2004), see www.w3.org" /> + + + + <title>Building a Stock Quoter with TAO - A Tutorial</title> +<!-- $Id$ --> +</head> + + + +<body style="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);" link="#000fff" vlink="#ff0f0f"> + + +<h3>Building a Stock Quoter with CoSMIC and DAnCE - A + Tutorial<br /> +</h3> + + + +<p>This tutorial provides a step-by-step lesson on developing + component-based distributed applications using <a href="http://www.dre.vanderbilt.edu/cosmic/">CoSMIC</a> modeling + toolkit and <a href="http://www.cs.wustl.edu/%7Eschmidt/CIAO.html">CIAO/DAnCE</a> + framework. The example application used in this tutorial is a + Stock Quoter that consists of two components; the + <em>StockDistributor</em> and the <em>StockBroker</em>. The + <em>StockDistributor</em> notifies one or more stock brokers + whenever a stock price changes. Upon receiving the notification, + the <em>StockBroker</em> fetches information about a particular + stock from the <em>StockDistributor</em>. The figure bellow shows + the application diagram. This Stock Quoter application is based + on a series of <a href="http://www.cs.wustl.edu/%7Eschmidt/report-doc.html">CORBA + component model</a> columns written by <a href="http://www.cs.wustl.edu/%7Eschmidt/">Doug Schmidt</a> and + <a href="http://www.iona.com/hyplan/vinoski/">Steve Vinoski</a> + for <a href="http://www.cuj.com">C/C++ Users Journal</a> and has + consistently been used as an example for <a href="http://www.cs.wustl.edu/%7Eschmidt/TAO.html">TAO</a>.<br /> +</p> + + + +<div style="text-align: center;"> + <img alt="" src="Images/fig1.jpg" style="width: 362px; height: 193px;" /><br /> + + <br /> + + Stock Quoter application Diagram<br /> + + </div> + + + +<p>This tutorial will show you how to use generic modeling + techniques <a href="http://www.dre.vanderbilt.edu/cosmic/">CoSMIC</a> to assist the + development process of CIAO applications. All the necessary steps + to build a component-based application model via <a href="http://www.dre.vanderbilt.edu/cosmic/">CoSMIC</a> toolkit are + documented here.</p> + + + +<blockquote> + + <hr /> + <strong>Note:</strong><br /> + + 1. Although the descriptor files generated by CoSMIC toolkits + are portable, the modeling environment required by CoSMIC (GME) + only supports Microsoft Windows platforms.<br /> + + 2. The CIAO/DAnCE codes used for this tutorial can be found in + <code>%CIAO_ROOT%/docs/tutorials/Quoter/Simple</code>.<br /> + + 3. The current tutorial is tested under GME 5.9.21, and + CosMIC 0.5.2. It will be subject to change as version of GME + and CoSMIC evolves.<br /> + + + <hr /> + </blockquote> +<strong><big>Prerequisites</big></strong><br /> + + <br /> + + Before you start, you will need the following: + + +<ol> + + <li><strong>ACE+TAO+CIAO (Component Integraated ACE + ORB).</strong> ACE + TAO + CIAO provide the CCM infrastructure + necessary to enable the CCM-based distributed component + interaction. You can click <a href="http://download.dre.vanderbilt.edu">here</a> to download + the latest ACE + TAO + CIAO and click <a href="../../../../../ACE-Install.html"> + here</a> for information on how to build ACE+TAO+CIAO.</li> + + + <li><strong>Generic Modeling Environment (GME).</strong> GME is + a configurable toolkit for creating domain-specific modeling + and program synthesis environments. It provides the execution + environment for CoSMIC toolkits. Click <a href="http://www.isis.vanderbilt.edu/Projects/gme/download.html">here</a> + to download GME.</li> + + + <li><strong>CoSMIC toolkit.</strong> Click <a href="http://www.dre.vanderbilt.edu/cosmic/">here</a> to download + the latest CoSMIC release.</li> + + +</ol> + + + +<blockquote> + + <hr /> + <strong>Note:</strong><br /> + + + + <ol> + + <li>Please use only the version of GME that the CoSMIC + package you have downloaded requires. Attempts to use earlier + or later versions may result in undefined behavior.</li> + + + <li>Make sure you install GME before you install CoSMIC.</li> + + + </ol> + + + <hr /> + </blockquote> +<strong><a href="01.html">Getting + Started</a></strong><br /> + + <br /> + + This section describes the IDL files used by the + example and shows you how to import IDL into <a href="http://www.cs.wustl.edu/%7Eschmidt/PDF/RTAS05-PICML.pdf">PICML + (Platform-Independent Component Modeling Language)</a>; a + domain-specific modeling language which is defined using GME. + PICML is designed to help to bridge the gap between design-time + verification and model-checking tools and the deployment of + component implementations.<br /> + + <br /> + + <strong><a href="02.html">Modeling StockQuoter system with + PICML</a></strong><br /> + + <br /> + + This section describes how to model the Stock + Quoter components in PICML.<br /> + + <br /> + + <a href="03.html"><strong>Implementing Quoter components with + DAnCE</strong></a><br /> + + <br /> + + This section provides codes for the Quoter + example.<br /> + + <br /> + + <strong><a href="04.html">Running the + application</a></strong><br /> + + <br /> + + After all the components and descriptors generated + by PICML are in place. You are ready to compile and run the + application.<br /> + + <br /> + + +<hr /> + + +<address> + <a href="mailto:ming.xiong@vanderbilt.edu">Ming Xiong<br /> +</a> + </address> +<!-- Created: Sat Nov 27 15:25:06 CST 1999 --> + <!-- hhmts start --> + Last modified: Fri May 5 21:29:07 CDT 2006 <!-- hhmts end --> +</body> +</html> diff --git a/modules/CIAO/docs/tutorials/CoSMIC/style.css b/modules/CIAO/docs/tutorials/CoSMIC/style.css new file mode 100644 index 00000000000..b86b9ceb671 --- /dev/null +++ b/modules/CIAO/docs/tutorials/CoSMIC/style.css @@ -0,0 +1,15 @@ + +/* Important Node */ +div.important { + position: center; + width: 75%; + text-align: left; + border: 1; + background: #FAEBD7; +} + +div.important strong { + font-weight: bold; + color: red; + font-variant: small-caps; +} diff --git a/modules/CIAO/docs/tutorials/Quoter/Simple/01.html b/modules/CIAO/docs/tutorials/Quoter/Simple/01.html new file mode 100644 index 00000000000..fb33ed38008 --- /dev/null +++ b/modules/CIAO/docs/tutorials/Quoter/Simple/01.html @@ -0,0 +1,838 @@ +<!-- $Id$ --> +<html xmlns:v="urn:schemas-microsoft-com:vml" +xmlns:o="urn:schemas-microsoft-com:office:office" +xmlns:w="urn:schemas-microsoft-com:office:word" +xmlns:p="urn:schemas-microsoft-com:office:powerpoint" +xmlns:oa="urn:schemas-microsoft-com:office:activation" +xmlns="http://www.w3.org/TR/REC-html40"> + +<head> +<meta http-equiv=Content-Type content="text/html; charset=us-ascii"> +<meta name=ProgId content=Word.Document> +<meta name=Generator content="Microsoft Word 11"> +<meta name=Originator content="Microsoft Word 11"> +<link rel=File-List href="01_files/filelist.xml"> +<link rel=Edit-Time-Data href="01_files/editdata.mso"> +<!--[if !mso]> +<style> +v\:* {behavior:url(#default#VML);} +o\:* {behavior:url(#default#VML);} +w\:* {behavior:url(#default#VML);} +.shape {behavior:url(#default#VML);} +</style> +<![endif]--> +<title>Getting Started</title> +<!--[if gte mso 9]><xml> + <o:DocumentProperties> + <o:Author>Abdullah Sowayan</o:Author> + <o:LastAuthor>Abdullah Sowayan</o:LastAuthor> + <o:Revision>22</o:Revision> + <o:TotalTime>244</o:TotalTime> + <o:Created>2006-10-09T18:21:00Z</o:Created> + <o:LastSaved>2006-12-01T17:30:00Z</o:LastSaved> + <o:Pages>1</o:Pages> + <o:Words>859</o:Words> + <o:Characters>4900</o:Characters> + <o:Company>Maritime Systems & Sensors</o:Company> + <o:Lines>40</o:Lines> + <o:Paragraphs>11</o:Paragraphs> + <o:CharactersWithSpaces>5748</o:CharactersWithSpaces> + <o:Version>11.8107</o:Version> + </o:DocumentProperties> +</xml><![endif]--><!--[if gte mso 9]><xml> + <w:WordDocument> + <w:SpellingState>Clean</w:SpellingState> + <w:GrammarState>Clean</w:GrammarState> + <w:ValidateAgainstSchemas/> + <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid> + <w:IgnoreMixedContent>false</w:IgnoreMixedContent> + <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText> + <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel> + </w:WordDocument> +</xml><![endif]--><!--[if gte mso 9]><xml> + <w:LatentStyles DefLockedState="false" LatentStyleCount="156"> + </w:LatentStyles> +</xml><![endif]--> +<style> +<!-- + /* Font Definitions */ + @font-face + {font-family:Tahoma; + panose-1:2 11 6 4 3 5 4 4 2 4; + mso-font-charset:0; + mso-generic-font-family:swiss; + mso-font-pitch:variable; + mso-font-signature:1627421319 -2147483648 8 0 66047 0;} + /* Style Definitions */ + p.MsoNormal, li.MsoNormal, div.MsoNormal + {mso-style-parent:""; + margin:0in; + margin-bottom:.0001pt; + mso-pagination:widow-orphan; + font-size:12.0pt; + font-family:"Times New Roman"; + mso-fareast-font-family:"Times New Roman";} +h3 + {mso-margin-top-alt:auto; + margin-right:0in; + mso-margin-bottom-alt:auto; + margin-left:0in; + mso-pagination:widow-orphan; + mso-outline-level:3; + font-size:13.5pt; + font-family:"Times New Roman"; + font-weight:bold;} +a:link, span.MsoHyperlink + {color:#000FFF; + text-decoration:underline; + text-underline:single;} +a:visited, span.MsoHyperlinkFollowed + {color:#FF0F0F; + text-decoration:underline; + text-underline:single;} +p + {mso-margin-top-alt:auto; + margin-right:0in; + mso-margin-bottom-alt:auto; + margin-left:0in; + mso-pagination:widow-orphan; + font-size:12.0pt; + font-family:"Times New Roman"; + mso-fareast-font-family:"Times New Roman";} +address + {margin:0in; + margin-bottom:.0001pt; + mso-pagination:widow-orphan; + font-size:12.0pt; + font-family:"Times New Roman"; + font-style:italic;} +code + {font-family:"Courier New"; + mso-ascii-font-family:"Courier New"; + mso-fareast-font-family:"Times New Roman"; + mso-hansi-font-family:"Courier New"; + mso-bidi-font-family:"Courier New";} +p.MsoAcetate, li.MsoAcetate, div.MsoAcetate + {mso-style-noshow:yes; + margin:0in; + margin-bottom:.0001pt; + mso-pagination:widow-orphan; + font-size:8.0pt; + font-family:Tahoma; + mso-fareast-font-family:"Times New Roman";} +span.SpellE + {mso-style-name:""; + mso-spl-e:yes;} +span.GramE + {mso-style-name:""; + mso-gram-e:yes;} +@page Section1 + {size:8.5in 11.0in; + margin:1.0in 1.25in 1.0in 1.25in; + mso-header-margin:.5in; + mso-footer-margin:.5in; + mso-paper-source:0;} +div.Section1 + {page:Section1;} + /* List Definitions */ + @list l0 + {mso-list-id:137387275; + mso-list-type:hybrid; + mso-list-template-ids:268987612 67698689 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;} +@list l0:level1 + {mso-level-number-format:bullet; + mso-level-text:\F0B7; + mso-level-tab-stop:.75in; + mso-level-number-position:left; + margin-left:.75in; + text-indent:-.25in; + font-family:Symbol;} +@list l0:level2 + {mso-level-tab-stop:1.0in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l0:level3 + {mso-level-tab-stop:1.5in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l0:level4 + {mso-level-tab-stop:2.0in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l0:level5 + {mso-level-tab-stop:2.5in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l0:level6 + {mso-level-tab-stop:3.0in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l0:level7 + {mso-level-tab-stop:3.5in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l0:level8 + {mso-level-tab-stop:4.0in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l0:level9 + {mso-level-tab-stop:4.5in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l1 + {mso-list-id:425031842; + mso-list-type:hybrid; + mso-list-template-ids:158504358 67698689 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;} +@list l1:level1 + {mso-level-number-format:bullet; + mso-level-text:\F0B7; + mso-level-tab-stop:1.75in; + mso-level-number-position:left; + margin-left:1.75in; + text-indent:-.25in; + font-family:Symbol;} +@list l1:level2 + {mso-level-tab-stop:1.0in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l1:level3 + {mso-level-tab-stop:1.5in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l1:level4 + {mso-level-tab-stop:2.0in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l1:level5 + {mso-level-tab-stop:2.5in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l1:level6 + {mso-level-tab-stop:3.0in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l1:level7 + {mso-level-tab-stop:3.5in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l1:level8 + {mso-level-tab-stop:4.0in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l1:level9 + {mso-level-tab-stop:4.5in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l2 + {mso-list-id:632565866; + mso-list-type:hybrid; + mso-list-template-ids:542421050 67698689 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;} +@list l2:level1 + {mso-level-number-format:bullet; + mso-level-text:\F0B7; + mso-level-tab-stop:1.25in; + mso-level-number-position:left; + margin-left:1.25in; + text-indent:-.25in; + font-family:Symbol;} +@list l2:level2 + {mso-level-tab-stop:1.0in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l2:level3 + {mso-level-tab-stop:1.5in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l2:level4 + {mso-level-tab-stop:2.0in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l2:level5 + {mso-level-tab-stop:2.5in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l2:level6 + {mso-level-tab-stop:3.0in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l2:level7 + {mso-level-tab-stop:3.5in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l2:level8 + {mso-level-tab-stop:4.0in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l2:level9 + {mso-level-tab-stop:4.5in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l3 + {mso-list-id:974944555; + mso-list-type:hybrid; + mso-list-template-ids:1880366448 67698689 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;} +@list l3:level1 + {mso-level-number-format:bullet; + mso-level-text:\F0B7; + mso-level-tab-stop:1.25in; + mso-level-number-position:left; + margin-left:1.25in; + text-indent:-.25in; + font-family:Symbol;} +@list l3:level2 + {mso-level-tab-stop:1.0in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l3:level3 + {mso-level-tab-stop:1.5in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l3:level4 + {mso-level-tab-stop:2.0in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l3:level5 + {mso-level-tab-stop:2.5in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l3:level6 + {mso-level-tab-stop:3.0in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l3:level7 + {mso-level-tab-stop:3.5in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l3:level8 + {mso-level-tab-stop:4.0in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l3:level9 + {mso-level-tab-stop:4.5in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l4 + {mso-list-id:1876190917; + mso-list-type:hybrid; + mso-list-template-ids:-767374784 67698689 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;} +@list l4:level1 + {mso-level-number-format:bullet; + mso-level-text:\F0B7; + mso-level-tab-stop:1.75in; + mso-level-number-position:left; + margin-left:1.75in; + text-indent:-.25in; + font-family:Symbol;} +@list l4:level2 + {mso-level-tab-stop:1.0in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l4:level3 + {mso-level-tab-stop:1.5in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l4:level4 + {mso-level-tab-stop:2.0in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l4:level5 + {mso-level-tab-stop:2.5in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l4:level6 + {mso-level-tab-stop:3.0in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l4:level7 + {mso-level-tab-stop:3.5in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l4:level8 + {mso-level-tab-stop:4.0in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l4:level9 + {mso-level-tab-stop:4.5in; + mso-level-number-position:left; + text-indent:-.25in;} +ol + {margin-bottom:0in;} +ul + {margin-bottom:0in;} +--> +</style> +<!--[if gte mso 10]> +<style> + /* Style Definitions */ + table.MsoNormalTable + {mso-style-name:"Table Normal"; + mso-tstyle-rowband-size:0; + mso-tstyle-colband-size:0; + mso-style-noshow:yes; + mso-style-parent:""; + mso-padding-alt:0in 5.4pt 0in 5.4pt; + mso-para-margin:0in; + mso-para-margin-bottom:.0001pt; + mso-pagination:widow-orphan; + font-size:10.0pt; + font-family:"Times New Roman"; + mso-ansi-language:#0400; + mso-fareast-language:#0400; + mso-bidi-language:#0400;} +</style> +<![endif]--><!-- 01.html,v 1.3 2006/02/10 14:34:35 mxiong Exp --><!--[if gte mso 9]><xml> + <o:shapedefaults v:ext="edit" spidmax="8194"/> +</xml><![endif]--><!--[if gte mso 9]><xml> + <o:shapelayout v:ext="edit"> + <o:idmap v:ext="edit" data="1"/> + </o:shapelayout></xml><![endif]--> +</head> + +<body bgcolor=white lang=EN-US link="#000FFF" vlink="#FF0F0F" style='tab-interval: +.5in'> + +<div class=Section1> + +<h3 align=center style='margin:0in;margin-bottom:.0001pt;text-align:center; +line-height:150%'><span style='color:black'>Step 1: Define your interfaces and +component types<o:p></o:p></span></h3> + +<h3 align=center style='margin:0in;margin-bottom:.0001pt;text-align:center; +line-height:150%'><span style='color:black'><img width=447 height=350 +id="_x0000_i1025" src="images/Step1.JPG"><o:p></o:p></span></h3> + +<h3 style='margin:0in;margin-bottom:.0001pt;line-height:150%'><span +style='color:black'><o:p> </o:p></span></h3> + +<h3 style='margin:0in;margin-bottom:.0001pt;line-height:150%'><span +style='font-size:12.0pt;line-height:150%;color:black;font-weight:normal; +mso-bidi-font-weight:bold'>Please make sure to read the following article to +under the Stock <span class=SpellE>Quoter</span> system architecture before +delving further into the tutorial:<o:p></o:p></span></h3> + +<p style='margin-top:0in;margin-right:0in;margin-bottom:0in;margin-left:.75in; +margin-bottom:.0001pt;text-indent:-.25in;line-height:150%;mso-list:l0 level1 lfo2; +tab-stops:list .75in'><![if !supportLists]><span style='font-family:Symbol; +mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol'><span +style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'> +</span></span></span><![endif]><a +href="http://www.cuj.com/documents/s=9152/cujexp0404vinoski/">The CORBA +Component Model, Part 2: Defining Components with the IDL 3.x Types</a></p> + +<h3 style='margin:0in;margin-bottom:.0001pt;line-height:150%'><span +style='font-size:12.0pt;line-height:150%;color:black;font-weight:normal; +mso-bidi-font-weight:bold'><o:p> </o:p></span></h3> + +<h3 style='margin:0in;margin-bottom:.0001pt;line-height:150%'><span +style='font-size:12.0pt;line-height:150%;color:black'>Directory Structure:<o:p></o:p></span></h3> + +<h3 style='margin:0in;margin-bottom:.0001pt;line-height:150%'><span +style='font-size:12.0pt;line-height:150%;color:black;font-weight:normal; +mso-bidi-font-weight:bold'>The tutorial relies on the following directory +structure. Create <span class=SpellE>Quoter</span> and all its subdirectories +as shown below. We will describe the purpose of these directories later in the +tutorial.<o:p></o:p></span></h3> + +<h3 style='margin:0in;margin-bottom:.0001pt;text-indent:.5in;line-height:150%'><span +class=SpellE><span style='font-size:12.0pt;line-height:150%;color:black; +font-weight:normal;mso-bidi-font-weight:bold'>Quoter</span></span><span +style='font-size:12.0pt;line-height:150%;color:black;font-weight:normal; +mso-bidi-font-weight:bold'><o:p></o:p></span></h3> + +<h3 style='margin:0in;margin-bottom:.0001pt;line-height:150%'><span +style='font-size:12.0pt;line-height:150%;color:black;font-weight:normal; +mso-bidi-font-weight:bold'><span +style='mso-spacerun:yes'> +</span>|---- descriptors<o:p></o:p></span></h3> + +<h3 style='margin:0in;margin-bottom:.0001pt;line-height:150%'><span +style='font-size:12.0pt;line-height:150%;color:black;font-weight:normal; +mso-bidi-font-weight:bold'><span +style='mso-spacerun:yes'> +</span>|---- <span class=SpellE>Stock_Base</span><o:p></o:p></span></h3> + +<h3 style='margin:0in;margin-bottom:.0001pt;line-height:150%'><span +style='font-size:12.0pt;line-height:150%;color:black;font-weight:normal; +mso-bidi-font-weight:bold'><span +style='mso-spacerun:yes'> +</span><span style='mso-spacerun:yes'> </span>|---- Distributor<o:p></o:p></span></h3> + +<h3 style='margin:0in;margin-bottom:.0001pt;line-height:150%'><span +style='font-size:12.0pt;line-height:150%;color:black;font-weight:normal; +mso-bidi-font-weight:bold'><span +style='mso-spacerun:yes'> +</span>|---- Broker<o:p></o:p></span></h3> + +<h3 style='margin:0in;margin-bottom:.0001pt;line-height:150%'><span +style='font-size:12.0pt;line-height:150%;color:black;font-weight:normal; +mso-bidi-font-weight:bold'><o:p> </o:p></span></h3> + +<h3 style='margin:0in;margin-bottom:.0001pt;line-height:150%'><span +style='font-size:12.0pt;line-height:150%;color:black'>Preliminaries:<o:p></o:p></span></h3> + +<h3 style='margin-top:0in;margin-right:0in;margin-bottom:0in;margin-left:.75in; +margin-bottom:.0001pt;text-indent:-.25in;line-height:150%;mso-list:l0 level1 lfo2; +tab-stops:list .75in'><![if !supportLists]><span style='font-size:12.0pt; +line-height:150%;font-family:Symbol;mso-fareast-font-family:Symbol;mso-bidi-font-family: +Symbol;color:black;font-weight:normal;mso-bidi-font-weight:bold'><span +style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'> +</span></span></span><![endif]><span style='font-size:12.0pt;line-height:150%; +color:black;font-weight:normal;mso-bidi-font-weight:bold'>We use the Make +Project Creator (MPC) throughout this tutorial. Understanding MPC will aid you +in understanding this tutorial. For more information on MPC please look at the +following:<o:p></o:p></span></h3> + +<h3 style='margin-top:0in;margin-right:0in;margin-bottom:0in;margin-left:1.5in; +margin-bottom:.0001pt;text-indent:-.25in;line-height:150%;mso-list:l0 level3 lfo2; +tab-stops:list 1.5in'><![if !supportLists]><span style='font-size:12.0pt; +line-height:150%;color:black;font-weight:normal;mso-bidi-font-weight:bold'><span +style='mso-list:Ignore'>1.<span style='font:7.0pt "Times New Roman"'> +</span></span></span><![endif]><span class=GramE><span style='font-size:12.0pt; +line-height:150%;color:black;font-weight:normal;mso-bidi-font-weight:bold'>MPC <a +href="http://downloads.ociweb.com/MPC/MakeProjectCreator.pdf">Chapter</a> in <span +class=SpellE>TAO’s</span> Developer’s Guide 1.4a.</span></span><span +style='font-size:12.0pt;line-height:150%;color:black;font-weight:normal; +mso-bidi-font-weight:bold'><o:p></o:p></span></h3> + +<h3 style='margin-top:0in;margin-right:0in;margin-bottom:0in;margin-left:1.5in; +margin-bottom:.0001pt;text-indent:-.25in;line-height:150%;mso-list:l0 level3 lfo2; +tab-stops:list 1.5in'><![if !supportLists]><span style='font-size:12.0pt; +line-height:150%;color:black;font-weight:normal;mso-bidi-font-weight:bold'><span +style='mso-list:Ignore'>2.<span style='font:7.0pt "Times New Roman"'> +</span></span></span><![endif]><span style='font-size:12.0pt;line-height:150%; +color:black;font-weight:normal;mso-bidi-font-weight:bold'>$ACE_ROOT/MPC/README<o:p></o:p></span></h3> + +<p class=MsoNormal style='line-height:150%'><b><span style='color:black'>Interface +Design:</span></b><span style='color:black'><o:p></o:p></span></p> + +<p class=MsoNormal style='margin-left:.75in;text-indent:-.25in;line-height: +150%;mso-list:l0 level1 lfo2;tab-stops:list .75in'><![if !supportLists]><span +style='font-family:Symbol;mso-fareast-font-family:Symbol;mso-bidi-font-family: +Symbol;color:black'><span style='mso-list:Ignore'>·<span +style='font:7.0pt "Times New Roman"'> +</span></span></span><![endif]><span style='color:black'>In the <span +class=SpellE><i style='mso-bidi-font-style:normal'>Quoter/<span +style='mso-bidi-font-style:italic'>Stock_Base</span></i></span><i> </i><span +style='mso-bidi-font-style:italic'>sub-</span>directory, place an <span +class=SpellE>idl</span> file </span><span class=SpellE><code><i><span +style='font-size:10.0pt;line-height:150%;color:black'>Stock_Base.idl</span></i></code></span><span +style='color:black'> that you could copy from <a +href="Stock_Base/Stock_Base.idl">here</a>. This file defines the interfaces and +events that will be used by both Stock Distributor and Stock Broker. We put +together the common interface definitions so the base library can be shared by +both components, reducing the size of "real" components.<o:p></o:p></span></p> + +<p class=MsoNormal style='margin-left:.75in;text-indent:-.25in;line-height: +150%;mso-list:l0 level1 lfo2;tab-stops:list .75in'><![if !supportLists]><span +style='font-family:Symbol;mso-fareast-font-family:Symbol;mso-bidi-font-family: +Symbol;color:black'><span style='mso-list:Ignore'>·<span +style='font:7.0pt "Times New Roman"'> +</span></span></span><![endif]><span style='color:black'>Next, we need to +create a Make Project Creator (MPC) file to generate the make files for us. +From the <span class=SpellE><i style='mso-bidi-font-style:normal'>Quoter/<span +style='mso-bidi-font-style:italic'>Stock_Base</span></i></span><span +style='mso-bidi-font-style:italic'> subdirectory, type the following command:</span><o:p></o:p></span></p> + +<p class=MsoNormal style='margin-left:.5in;text-indent:.5in;line-height:150%'><span +style='font-family:"Courier New";color:black;mso-bidi-font-style:italic'>generate_component_mpc.pl +–n -e <span class=SpellE>Stock_Base</span><o:p></o:p></span></p> + +<p class=MsoNormal style='margin-left:.5in;text-indent:.5in;line-height:150%'><span +style='font-family:"Courier New";color:black;mso-bidi-font-style:italic'><o:p> </o:p></span></p> + +<p class=MsoNormal style='margin-left:.5in;text-indent:.5in;line-height:150%'><span +style='color:black;mso-bidi-font-style:italic'>Note that we pass the –e option +to </span><span style='font-family:"Courier New";color:black;mso-bidi-font-style: +italic'>generate_component_mpc.pl because our </span><span class=SpellE><code><i><span +style='font-size:10.0pt;line-height:150%;color:black'>Stock_Base.idl</span></i></code></span><code><i><span +style='font-size:10.0pt;line-height:150%;color:black'> </span></i></code><span +style='color:black;mso-bidi-font-style:italic'>uses <span class=SpellE>eventtypes</span>. +If our <span class=SpellE>idl</span> file did not use <span class=SpellE>eventtypes</span>, +we would<o:p></o:p></span></p> + +<p class=MsoNormal style='margin-left:.5in;text-indent:.5in;line-height:150%'><span +class=GramE><span style='color:black;mso-bidi-font-style:italic'>not</span></span><span +style='color:black;mso-bidi-font-style:italic'> pass the –e command line +option.<o:p></o:p></span></p> + +<p class=MsoNormal style='text-indent:.5in;line-height:150%'><span +style='font-family:"Courier New";color:black;mso-bidi-font-style:italic'><o:p> </o:p></span></p> + +<p class=MsoNormal style='margin-left:.75in;line-height:150%'><span +style='color:black;mso-bidi-font-style:italic'>The command above will generate +a <span class=SpellE><i>Stock_Base.mpc</i></span> file that contains two +projects <span class=SpellE><i>Stock_Base_stub</i></span><i> </i>and <span +class=SpellE><i>Stock_Base_skel</i></span><i> </i>for the Stub and Servant code +respectively. In addition, the command above will generate export files that +will portably handle platform specific issues of import/export declarations of +dynamically linked libraries (DLLs). After executing the command above you +should see the following output on your screen.<o:p></o:p></span></p> + +<p class=MsoNormal style='margin-left:.5in;text-indent:.75in;line-height:150%'><span +style='font-family:"Courier New";color:black;mso-bidi-font-style:italic'><o:p> </o:p></span></p> + +<p class=MsoNormal style='margin-left:.5in;text-indent:.75in;line-height:150%'><span +style='font-family:"Courier New";color:black;mso-bidi-font-style:italic'>The +following commands have been executed:<o:p></o:p></span></p> + +<p class=MsoNormal style='margin-left:.5in;text-indent:.75in;line-height:150%'><span +style='font-family:"Courier New";color:black;mso-bidi-font-style:italic'><span +style='mso-spacerun:yes'> +</span>generate_export_file.pl STOCK_BASE_STUB > <span class=SpellE>Stock_Base_stub_export.h</span><o:p></o:p></span></p> + +<p class=MsoNormal style='margin-left:.5in;text-indent:.75in;line-height:150%'><span +style='font-family:"Courier New";color:black;mso-bidi-font-style:italic'><span +style='mso-spacerun:yes'> </span>generate_export_file.pl +STOCK_BASE_SKEL > <span class=SpellE>Stock_Base_skel_export.h</span><o:p></o:p></span></p> + +<p class=MsoNormal style='margin-left:.5in;text-indent:.75in;line-height:150%'><span +style='font-family:"Courier New";color:black;mso-bidi-font-style:italic'><o:p> </o:p></span></p> + +<p class=MsoNormal style='margin-left:1.75in;text-indent:-1.25in;line-height: +150%;mso-list:l1 level1 lfo4;tab-stops:list .75in 1.75in'><![if !supportLists]><span +style='font-family:Symbol;mso-fareast-font-family:Symbol;mso-bidi-font-family: +Symbol;color:black;mso-bidi-font-style:italic'><span style='mso-list:Ignore'>·<span +style='font:7.0pt "Times New Roman"'> +</span></span></span><![endif]><span style='color:black;mso-bidi-font-style: +italic'>The MPC file should look like <a href="Stock_Base/Stock_Base.mpc">this</a>. +</span><span style='font-family:"Courier New";color:black;mso-bidi-font-style: +italic'><o:p></o:p></span></p> + +<p class=MsoNormal style='margin-left:.5in;line-height:150%'><span +style='font-family:"Courier New";color:black;mso-bidi-font-style:italic'><o:p> </o:p></span></p> + +<p class=MsoNormal style='line-height:150%'><b><span style='color:black'>Component +Design:</span></b><span style='color:black'><o:p></o:p></span></p> + +<p class=MsoNormal style='text-indent:.5in;line-height:150%'><b +style='mso-bidi-font-weight:normal'><span style='color:black'>Distributor:</span></b><span +style='color:black'> <o:p></o:p></span></p> + +<p class=MsoNormal style='margin-left:1.25in;text-indent:-.25in;line-height: +150%;mso-list:l3 level1 lfo6;tab-stops:list 1.25in'><![if !supportLists]><span +style='font-family:Symbol;mso-fareast-font-family:Symbol;mso-bidi-font-family: +Symbol;color:black'><span style='mso-list:Ignore'>·<span +style='font:7.0pt "Times New Roman"'> +</span></span></span><![endif]><span style='color:black'>In the </span><span +class=SpellE><code><i><span style='font-size:10.0pt;line-height:150%; +color:black'>Quoter</span></i></code></span><code><i><span style='font-size: +10.0pt;line-height:150%;color:black'>/Distributor </span></i></code><code><span +style='mso-ansi-font-size:12.0pt;mso-bidi-font-size:12.0pt;line-height:150%; +font-family:"Times New Roman";color:black;mso-bidi-font-style:italic'>sub-directory</span></code><span +style='color:black'>, place an <span class=SpellE>idl</span> file </span><span +class=SpellE><code><i><span style='font-size:10.0pt;line-height:150%; +color:black'>Distributor.idl</span></i></code></span><span style='color:black'> +that looks like <a href="Distributor/Distributor.idl">this</a>. This file +defines the <span class=SpellE>StockDistributor</span> component interfaces.<o:p></o:p></span></p> + +<p class=MsoNormal style='margin-left:1.25in;text-indent:-.25in;line-height: +150%;mso-list:l3 level1 lfo6;tab-stops:list 1.25in'><![if !supportLists]><span +style='font-family:Symbol;mso-fareast-font-family:Symbol;mso-bidi-font-family: +Symbol;color:black'><span style='mso-list:Ignore'>·<span +style='font:7.0pt "Times New Roman"'> +</span></span></span><![endif]><span style='color:black'>Next, we need to +create a Make Project Creator (MPC) file to generate the make files for us. +From the <span class=SpellE><i style='mso-bidi-font-style:normal'>Quoter</i></span><i +style='mso-bidi-font-style:normal'>/<span style='mso-bidi-font-style:italic'>Distributor +</span></i><span style='mso-bidi-font-style:italic'><span +style='mso-spacerun:yes'> </span>sub-directory, type the following +command:</span><o:p></o:p></span></p> + +<p class=MsoNormal style='margin-left:.5in;text-indent:1.25in;line-height:150%'><span +style='font-family:"Courier New";color:black'>generate_component_mpc.pl -p <span +class=SpellE>Stock_Base</span> Distributor<o:p></o:p></span></p> + +<p class=MsoNormal style='margin-left:.5in;text-indent:1.25in;line-height:150%'><span +style='font-family:"Courier New";color:black;mso-bidi-font-style:italic'><o:p> </o:p></span></p> + +<p class=MsoNormal style='margin-left:1.25in;line-height:150%'><span +style='color:black;mso-bidi-font-style:italic'>The command above will generate +a <span class=SpellE><i>Distirubotor.mpc</i></span> file that contains three +projects <span class=SpellE><i>Distributor_stub</i></span><i>, <span +class=SpellE>Distributor_svnt</span>, and <span class=SpellE>Distributor_exec</span> +</i>for the Stub, Servant, and Executor code respectively. In addition, the +command above will generate export files that will portably handle platform +specific issues of import/export declarations of dynamically linked libraries +(DLLs). After executing the command above you should see the following output +on your screen.<o:p></o:p></span></p> + +<p class=MsoNormal style='margin-left:1.25in;text-indent:.75in;line-height: +150%'><span style='font-family:"Courier New";color:black;mso-bidi-font-style: +italic'><o:p> </o:p></span></p> + +<p class=MsoNormal style='margin-left:1.5in;line-height:150%'><span +style='font-family:"Courier New";color:black;mso-bidi-font-style:italic'>The +following commands have been executed:<o:p></o:p></span></p> + +<p class=MsoNormal style='margin-left:1.5in;line-height:150%'><span +style='font-family:"Courier New";color:black;mso-bidi-font-style:italic'><span +style='mso-spacerun:yes'> +</span>generate_export_file.pl DISTRIBUTOR_STUB > <span class=SpellE>Distributor_stub_export.h</span><o:p></o:p></span></p> + +<p class=MsoNormal style='margin-left:1.5in;line-height:150%'><span +style='font-family:"Courier New";color:black;mso-bidi-font-style:italic'><span +style='mso-spacerun:yes'> +</span>generate_export_file.pl DISTRIBUTOR_SVNT > <span class=SpellE>Distributor_svnt_export.h</span><o:p></o:p></span></p> + +<p class=MsoNormal style='margin-left:1.5in;line-height:150%'><span +style='font-family:"Courier New";color:black;mso-bidi-font-style:italic'><span +style='mso-spacerun:yes'> +</span>generate_export_file.pl DISTRIBUTOR_EXEC > <span class=SpellE>Distributor_exec_export.h</span><o:p></o:p></span></p> + +<p class=MsoNormal style='line-height:150%'><span style='color:black'><o:p> </o:p></span></p> + +<p class=MsoNormal style='margin-left:1.25in;line-height:150%'><span +style='color:black'>We will modify the generated MPC file to add an additional +project later in the tutorial.<o:p></o:p></span></p> + +<p class=MsoNormal style='margin-left:1.25in;text-indent:-.25in;line-height: +150%;mso-list:l4 level1 lfo8;tab-stops:list 1.25in 1.75in'><![if !supportLists]><span +style='font-family:Symbol;mso-fareast-font-family:Symbol;mso-bidi-font-family: +Symbol;color:black;mso-bidi-font-style:italic'><span style='mso-list:Ignore'>·<span +style='font:7.0pt "Times New Roman"'> +</span></span></span><![endif]><span style='color:black;mso-bidi-font-style: +italic'>The </span><span class=SpellE><i><span style='font-family:"Courier New"; +color:black'>Stock_Base_Distributor_stub</span></i></span><span +style='color:black;mso-bidi-font-style:italic'>, </span><span class=SpellE><i><span +style='font-family:"Courier New";color:black'>Stock_Base_Distributor_svnt</span></i></span><span +style='color:black;mso-bidi-font-style:italic'>, and </span><span class=SpellE><i><span +style='font-family:"Courier New";color:black'>Stock_Base_Distributor_exec</span></i></span><span +style='color:black;mso-bidi-font-style:italic'> projects in the MPC file should +look like <a href="Distributor/Distributor.mpc">this</a>. </span><span +style='font-family:"Courier New";color:black;mso-bidi-font-style:italic'><o:p></o:p></span></p> + +<p class=MsoNormal style='line-height:150%'><span style='color:black'><o:p> </o:p></span></p> + +<p class=MsoNormal style='text-indent:.5in;line-height:150%'><b +style='mso-bidi-font-weight:normal'><span style='color:black'>Broker:<o:p></o:p></span></b></p> + +<p class=MsoNormal style='margin-left:1.25in;text-indent:-.25in;line-height: +150%;mso-list:l2 level1 lfo10;tab-stops:list 1.25in'><![if !supportLists]><span +style='font-family:Symbol;mso-fareast-font-family:Symbol;mso-bidi-font-family: +Symbol;color:black'><span style='mso-list:Ignore'>·<span +style='font:7.0pt "Times New Roman"'> +</span></span></span><![endif]><span style='color:black'>In the </span><span +class=SpellE><code><i><span style='font-size:10.0pt;line-height:150%; +color:black'>Quoter</span></i></code></span><code><i><span style='font-size: +10.0pt;line-height:150%;color:black'>/Broker</span></i></code><span +style='color:black'> <code><span style='mso-ansi-font-size:12.0pt;mso-bidi-font-size: +12.0pt;line-height:150%;font-family:"Times New Roman";mso-bidi-font-style:italic'>sub-directory,</span></code> +place an <span class=SpellE>idl</span> file </span><span class=SpellE><code><i><span +style='font-size:10.0pt;line-height:150%;color:black'>Broker.id</span></i></code><code><span +style='font-size:10.0pt;line-height:150%;color:black'>l</span></code></span><span +style='color:black'> that looks like <a href="Broker/Broker.idl">this</a>. This +file defines the <span class=SpellE>StockBroker</span> component interface.<b +style='mso-bidi-font-weight:normal'><o:p></o:p></b></span></p> + +<p class=MsoNormal style='margin-left:1.25in;text-indent:-.25in;line-height: +150%;mso-list:l2 level1 lfo10;tab-stops:list 1.25in'><![if !supportLists]><span +style='font-family:Symbol;mso-fareast-font-family:Symbol;mso-bidi-font-family: +Symbol;color:black'><span style='mso-list:Ignore'>·<span +style='font:7.0pt "Times New Roman"'> +</span></span></span><![endif]><span style='color:black'>Next, we need to +create a Make Project Creator (MPC) file to generate the make files for us. +From the <span class=SpellE><i style='mso-bidi-font-style:normal'>Quoter</i></span><i +style='mso-bidi-font-style:normal'>/<span style='mso-bidi-font-style:italic'>Broker</span></i><span +style='mso-bidi-font-style:italic'> sub-directory, type the following command:</span><o:p></o:p></span></p> + +<p class=MsoNormal style='margin-left:.5in;text-indent:1.25in;line-height:150%'><span +style='font-family:"Courier New";color:black'>generate_component_mpc.pl -p <span +class=SpellE>Stock_Base</span> Broker<o:p></o:p></span></p> + +<p class=MsoNormal style='margin-left:.5in;text-indent:1.25in;line-height:150%'><span +style='font-family:"Courier New";color:black;mso-bidi-font-style:italic'><o:p> </o:p></span></p> + +<p class=MsoNormal style='margin-left:1.25in;line-height:150%'><span +style='color:black;mso-bidi-font-style:italic'>The command above will generate +a <span class=SpellE><i>Broker.mpc</i></span> file that contains three projects +<span class=SpellE><i>Broker_stub</i></span><i>, <span class=SpellE>Broker_svnt</span>, +and <span class=SpellE>Broker_exec</span> </i>for the Stub, Servant, and +Executor code respectively. In addition, the command above will generate export +files that will portably handle platform specific issues of import/export +declarations of dynamically linked libraries (DLLs). After executing the +command above you should see the following output on your screen.<o:p></o:p></span></p> + +<p class=MsoNormal style='margin-left:1.25in;text-indent:.75in;line-height: +150%'><span style='font-family:"Courier New";color:black;mso-bidi-font-style: +italic'><o:p> </o:p></span></p> + +<p class=MsoNormal style='margin-left:1.5in;line-height:150%'><span +style='font-family:"Courier New";color:black;mso-bidi-font-style:italic'>The +following commands have been executed:<o:p></o:p></span></p> + +<p class=MsoNormal style='margin-left:1.5in;line-height:150%'><span +style='font-family:"Courier New";color:black;mso-bidi-font-style:italic'><span +style='mso-spacerun:yes'> +</span>generate_export_file.pl BROKER_STUB > <span class=SpellE>Broker_stub_export.h</span><o:p></o:p></span></p> + +<p class=MsoNormal style='margin-left:1.5in;line-height:150%'><span +style='font-family:"Courier New";color:black;mso-bidi-font-style:italic'><span +style='mso-spacerun:yes'> +</span>generate_export_file.pl BROKER_SVNT > <span class=SpellE>Broker_svnt_export.h</span><o:p></o:p></span></p> + +<p class=MsoNormal style='margin-left:1.5in;line-height:150%'><span +style='font-family:"Courier New";color:black;mso-bidi-font-style:italic'><span +style='mso-spacerun:yes'> +</span>generate_export_file.pl BROKER_EXEC > <span class=SpellE>Broker_exec_export.h</span><o:p></o:p></span></p> + +<p class=MsoNormal style='line-height:150%'><span style='color:black'><o:p> </o:p></span></p> + +<p class=MsoNormal style='margin-left:1.25in;line-height:150%'><span +style='color:black'>We will modify the generated MPC file to add an additional +project later in the tutorial.<o:p></o:p></span></p> + +<p class=MsoNormal style='margin-left:1.75in;text-indent:-.75in;line-height: +150%;mso-list:l4 level1 lfo8;tab-stops:list 1.25in 1.75in'><![if !supportLists]><span +style='font-family:Symbol;mso-fareast-font-family:Symbol;mso-bidi-font-family: +Symbol;color:black;mso-bidi-font-style:italic'><span style='mso-list:Ignore'>·<span +style='font:7.0pt "Times New Roman"'> +</span></span></span><![endif]><span style='color:black;mso-bidi-font-style: +italic'>The </span><span class=SpellE><i><span style='font-family:"Courier New"; +color:black'>Stock_Base_Broker_stub</span></i></span><span style='color:black; +mso-bidi-font-style:italic'>, </span><span class=SpellE><i><span +style='font-family:"Courier New";color:black'>Stock_Base_Broker_svnt</span></i></span><span +style='color:black;mso-bidi-font-style:italic'>, and </span><span class=SpellE><i><span +style='font-family:"Courier New";color:black'>Stock_Base_Broker_exec</span></i></span><span +style='color:black;mso-bidi-font-style:italic'> projects in the MPC file should +look like <a href="Broker/Broker.mpc">this</a>. </span><span style='font-family: +"Courier New";color:black;mso-bidi-font-style:italic'><o:p></o:p></span></p> + +<p class=MsoNormal style='line-height:150%'><span style='color:black'><br> +<b style='mso-bidi-font-weight:normal'>Note:<o:p></o:p></b></span></p> + +<p class=MsoNormal style='line-height:150%'><span style='color:black'>To understand +the meaning of different parameters passed to </span><span style='font-family: +"Courier New";color:black;mso-bidi-font-style:italic'>generate_export_file.pl </span><span +style='color:black;mso-bidi-font-style:italic'>type the</span><span +style='color:black'> following command:<o:p></o:p></span></p> + +<p class=MsoNormal style='line-height:150%'><span style='font-family:"Courier New"; +color:black;mso-bidi-font-style:italic'>generate_export_file.pl -h</span><span +style='color:black'><br style='mso-special-character:line-break'> +<![if !supportLineBreakNewLine]><br style='mso-special-character:line-break'> +<![endif]><b style='mso-bidi-font-weight:normal'><o:p></o:p></b></span></p> + +<p class=MsoNormal style='line-height:150%'><span style='color:black'> +<o:p></o:p></span></p> + +<div class=MsoNormal align=center style='text-align:center;line-height:150%'><span +style='color:black'> + +<hr size=2 width="100%" align=center> + +</span></div> + +<address style='line-height:150%'><span style='color:black'><a +href="mailto:ming.xiong@vanderbilt.edu">Ming Xiong<br> +</a></span><a href="mailto:abdullah.sowayan@lmco.com">Abdullah Sowayan</a></address> + +<address style='line-height:150%'><span style='color:black'><o:p> </o:p></span></address> + +<p class=MsoNormal style='line-height:150%'><span style='color:black'><!-- Created: Sat Nov 27 15:25:06 CST 1999 --><!-- hhmts start -->Last +modified:<!-- hhmts end --> <o:p></o:p></span></p> + +</div> + +</body> + +</html> diff --git a/modules/CIAO/docs/tutorials/Quoter/Simple/02.html b/modules/CIAO/docs/tutorials/Quoter/Simple/02.html new file mode 100644 index 00000000000..9892e9722c8 --- /dev/null +++ b/modules/CIAO/docs/tutorials/Quoter/Simple/02.html @@ -0,0 +1,326 @@ +<!-- $Id$ --> +<html xmlns:v="urn:schemas-microsoft-com:vml" +xmlns:o="urn:schemas-microsoft-com:office:office" +xmlns:w="urn:schemas-microsoft-com:office:word" +xmlns:p="urn:schemas-microsoft-com:office:powerpoint" +xmlns:oa="urn:schemas-microsoft-com:office:activation" +xmlns="http://www.w3.org/TR/REC-html40"> + +<head> +<meta http-equiv=Content-Type content="text/html; charset=us-ascii"> +<meta name=ProgId content=Word.Document> +<meta name=Generator content="Microsoft Word 11"> +<meta name=Originator content="Microsoft Word 11"> +<link rel=File-List href="02_files/filelist.xml"> +<link rel=Edit-Time-Data href="02_files/editdata.mso"> +<!--[if !mso]> +<style> +v\:* {behavior:url(#default#VML);} +o\:* {behavior:url(#default#VML);} +w\:* {behavior:url(#default#VML);} +.shape {behavior:url(#default#VML);} +</style> +<![endif]--> +<title>Getting Started</title> +<!--[if gte mso 9]><xml> + <o:DocumentProperties> + <o:Author>Abdullah Sowayan</o:Author> + <o:LastAuthor>Abdullah Sowayan</o:LastAuthor> + <o:Revision>7</o:Revision> + <o:TotalTime>88</o:TotalTime> + <o:Created>2006-10-09T19:28:00Z</o:Created> + <o:LastSaved>2006-10-09T21:48:00Z</o:LastSaved> + <o:Pages>1</o:Pages> + <o:Words>415</o:Words> + <o:Characters>2370</o:Characters> + <o:Company>Maritime Systems & Sensors</o:Company> + <o:Lines>19</o:Lines> + <o:Paragraphs>5</o:Paragraphs> + <o:CharactersWithSpaces>2780</o:CharactersWithSpaces> + <o:Version>11.8036</o:Version> + </o:DocumentProperties> +</xml><![endif]--><!--[if gte mso 9]><xml> + <w:WordDocument> + <w:ValidateAgainstSchemas/> + <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid> + <w:IgnoreMixedContent>false</w:IgnoreMixedContent> + <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText> + <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel> + </w:WordDocument> +</xml><![endif]--><!--[if gte mso 9]><xml> + <w:LatentStyles DefLockedState="false" LatentStyleCount="156"> + </w:LatentStyles> +</xml><![endif]--> +<style> +<!-- + /* Font Definitions */ + @font-face + {font-family:Wingdings; + panose-1:5 0 0 0 0 0 0 0 0 0; + mso-font-charset:2; + mso-generic-font-family:auto; + mso-font-pitch:variable; + mso-font-signature:0 268435456 0 0 -2147483648 0;} + /* Style Definitions */ + p.MsoNormal, li.MsoNormal, div.MsoNormal + {mso-style-parent:""; + margin:0in; + margin-bottom:.0001pt; + mso-pagination:widow-orphan; + font-size:12.0pt; + font-family:"Times New Roman"; + mso-fareast-font-family:"Times New Roman";} +h3 + {mso-margin-top-alt:auto; + margin-right:0in; + mso-margin-bottom-alt:auto; + margin-left:0in; + mso-pagination:widow-orphan; + mso-outline-level:3; + font-size:13.5pt; + font-family:"Times New Roman";} +a:link, span.MsoHyperlink + {color:#000FFF; + text-decoration:underline; + text-underline:single;} +a:visited, span.MsoHyperlinkFollowed + {color:#FF0F0F; + text-decoration:underline; + text-underline:single;} +address + {margin:0in; + margin-bottom:.0001pt; + mso-pagination:widow-orphan; + font-size:12.0pt; + font-family:"Times New Roman";} +code + {font-family:"Courier New"; + mso-ascii-font-family:"Courier New"; + mso-fareast-font-family:"Times New Roman"; + mso-hansi-font-family:"Courier New"; + mso-bidi-font-family:"Courier New";} +@page Section1 + {size:8.5in 11.0in; + margin:1.0in 1.25in 1.0in 1.25in; + mso-header-margin:.5in; + mso-footer-margin:.5in; + mso-paper-source:0;} +div.Section1 + {page:Section1;} + /* List Definitions */ + @list l0 + {mso-list-id:555236070; + mso-list-type:hybrid; + mso-list-template-ids:2061531284 67698689 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;} +@list l0:level1 + {mso-level-number-format:bullet; + mso-level-text:\F0B7; + mso-level-tab-stop:1.25in; + mso-level-number-position:left; + margin-left:1.25in; + text-indent:-.25in; + font-family:Symbol;} +ol + {margin-bottom:0in;} +ul + {margin-bottom:0in;} +--> +</style> +<!--[if gte mso 10]> +<style> + /* Style Definitions */ + table.MsoNormalTable + {mso-style-name:"Table Normal"; + mso-tstyle-rowband-size:0; + mso-tstyle-colband-size:0; + mso-style-noshow:yes; + mso-style-parent:""; + mso-padding-alt:0in 5.4pt 0in 5.4pt; + mso-para-margin:0in; + mso-para-margin-bottom:.0001pt; + mso-pagination:widow-orphan; + font-size:10.0pt; + font-family:"Times New Roman"; + mso-ansi-language:#0400; + mso-fareast-language:#0400; + mso-bidi-language:#0400;} +</style> +<![endif]--><!-- 01.html,v 1.3 2006/02/10 14:34:35 mxiong Exp --><!--[if gte mso 9]><xml> + <o:shapedefaults v:ext="edit" spidmax="2050"/> +</xml><![endif]--><!--[if gte mso 9]><xml> + <o:shapelayout v:ext="edit"> + <o:idmap v:ext="edit" data="1"/> + </o:shapelayout></xml><![endif]--> +</head> + +<body bgcolor=white lang=EN-US link="#000FFF" vlink="#FF0F0F" style='tab-interval: +.5in'> + +<div class=Section1> + +<h3 align=center style='margin:0in;margin-bottom:.0001pt;text-align:center; +line-height:150%'><span style='color:black'>Step 2: Implement your components<o:p></o:p></span></h3> + +<h3 align=center style='text-align:center'><span style='color:black'><img +width=634 height=376 id="_x0000_i1026" src="images/Step2.JPG"><o:p></o:p></span></h3> + +<p class=MsoNormal style='margin-bottom:12.0pt'><b><span style='color:black'>Writing +CIDL files:<o:p></o:p></span></b></p> + +<p class=MsoNormal style='margin-top:0in;margin-right:0in;margin-bottom:12.0pt; +margin-left:.5in'><b><span style='color:black'>Distributor:<o:p></o:p></span></b></p> + +<p class=MsoNormal style='margin-top:0in;margin-right:0in;margin-bottom:12.0pt; +margin-left:1.25in;text-indent:-.25in;mso-list:l0 level1 lfo1;tab-stops:list 1.25in'><![if !supportLists]><span +style='font-family:Symbol;mso-fareast-font-family:Symbol;mso-bidi-font-family: +Symbol;color:black;mso-bidi-font-weight:bold'><span style='mso-list:Ignore'>·<span +style='font:7.0pt "Times New Roman"'> +</span></span></span><![endif]><span style='color:black;mso-bidi-font-weight: +bold'>In <i style='mso-bidi-font-style:normal'>Quoter/Distributor </i>sub-directory, +place a cidl file Distributor.cidl that looks like <a +href="Distributor/Distributor.cidl">this</a>. <o:p></o:p></span></p> + +<p class=MsoNormal style='margin-top:0in;margin-right:0in;margin-bottom:12.0pt; +margin-left:1.25in;text-indent:-.25in;mso-list:l0 level1 lfo1;tab-stops:list 1.25in'><![if !supportLists]><span +style='font-family:Symbol;mso-fareast-font-family:Symbol;mso-bidi-font-family: +Symbol;color:black;mso-bidi-font-weight:bold'><span style='mso-list:Ignore'>·<span +style='font:7.0pt "Times New Roman"'> +</span></span></span><![endif]><span style='color:black;mso-bidi-font-weight: +bold'>The MPC files we generated earlier automatically invoked the CIDLC +compiler to generate the Servants, Executors, and Contexts for us. To reduce +the amount of work and typing we need to do, we will next instruct the CIDLC +compiler to generate an empty Distributor Executor implementation (Object +implementation in the figure above). In the <i style='mso-bidi-font-style:normal'>Quoter/Distributor +</i>sub-directory, type the following:<o:p></o:p></span></p> + +<p class=MsoNormal style='margin-top:0in;margin-right:0in;margin-bottom:12.0pt; +margin-left:1.5in'><span style='font-family:"Courier New";color:black; +mso-bidi-font-weight:bold'>cidlc -I$TAO_ROOT -I$TAO_ROOT/tao -I$CIAO_ROOT/ciao +--gen-exec-impl -- Distributor.cidl<o:p></o:p></span></p> + +<p class=MsoNormal style='margin-top:0in;margin-right:0in;margin-bottom:12.0pt; +margin-left:1.25in'><span style='color:black'>The above command will generate a +<i style='mso-bidi-font-style:normal'>Distributor_exec.h </i>and <i +style='mso-bidi-font-style:normal'>Distributor_exec.cpp </i>files. These +generated files greatly reduced the amount of work we do. We’ll edit +those files later in the tutorial to insert our business logic in the +Distributor component.<o:p></o:p></span></p> + +<p class=MsoNormal style='margin-top:0in;margin-right:0in;margin-bottom:12.0pt; +margin-left:1.25in'><span style='color:black'><o:p> </o:p></span></p> + +<p class=MsoNormal style='margin-top:0in;margin-right:0in;margin-bottom:12.0pt; +margin-left:.5in'><b style='mso-bidi-font-weight:normal'><span +style='color:black'>Broker:<o:p></o:p></span></b></p> + +<p class=MsoNormal style='margin-top:0in;margin-right:0in;margin-bottom:12.0pt; +margin-left:1.25in;text-indent:-.25in;mso-list:l0 level1 lfo1;tab-stops:list 1.25in'><![if !supportLists]><span +style='font-family:Symbol;mso-fareast-font-family:Symbol;mso-bidi-font-family: +Symbol;color:black;mso-bidi-font-weight:bold'><span style='mso-list:Ignore'>·<span +style='font:7.0pt "Times New Roman"'> +</span></span></span><![endif]><span style='color:black;mso-bidi-font-weight: +bold'>In <i style='mso-bidi-font-style:normal'>Quoter/Broker </i>sub-directory, +place a cidl file Broker.cidl that looks like <a href="Broker/Broker.cidl">this</a>. +<o:p></o:p></span></p> + +<p class=MsoNormal style='margin-top:0in;margin-right:0in;margin-bottom:12.0pt; +margin-left:1.25in;text-indent:-.25in;mso-list:l0 level1 lfo1;tab-stops:list 1.25in'><![if !supportLists]><span +style='font-family:Symbol;mso-fareast-font-family:Symbol;mso-bidi-font-family: +Symbol;color:black;mso-bidi-font-weight:bold'><span style='mso-list:Ignore'>·<span +style='font:7.0pt "Times New Roman"'> +</span></span></span><![endif]><span style='color:black;mso-bidi-font-weight: +bold'>The MPC files we generated earlier automatically invoked the CIDLC +compiler to generate the Servants, Executors, and Contexts for us. To reduce +the amount of work and typing we need to do, we will next instruct the CIDLC +compiler to generate an empty Distributor Executor implementation (Object +implementation in the figure above). In the <i style='mso-bidi-font-style:normal'>Quoter/Broker +</i>sub-directory, type the following:<o:p></o:p></span></p> + +<p class=MsoNormal style='margin-top:0in;margin-right:0in;margin-bottom:12.0pt; +margin-left:1.5in'><span style='font-family:"Courier New";color:black; +mso-bidi-font-weight:bold'>cidlc -I$TAO_ROOT -I$TAO_ROOT/tao -I$CIAO_ROOT/ciao +--gen-exec-impl -- Broker.cidl<o:p></o:p></span></p> + +<p class=MsoNormal style='margin-top:0in;margin-right:0in;margin-bottom:12.0pt; +margin-left:1.25in'><span style='color:black'>The above command will generate a +<i style='mso-bidi-font-style:normal'>Broker_exec.h </i>and <i +style='mso-bidi-font-style:normal'>Broker_exec.cpp </i>files. These generated +files greatly reduced the amount of work we do. We’ll edit those files +later in the tutorial to insert our business logic in the Broker component.<o:p></o:p></span></p> + +<p class=MsoNormal style='line-height:150%'><span style='color:black'><br> +<b style='mso-bidi-font-weight:normal'>Note:<o:p></o:p></b></span></p> + +<p class=MsoNormal style='line-height:150%'><span style='color:black'>To +understand the meaning of different parameters passed to the CIDLC compiler <span +style='mso-bidi-font-style:italic'>type the</span> following command:<o:p></o:p></span></p> + +<p class=MsoNormal style='margin-bottom:12.0pt'><span style='font-family:"Courier New"; +color:black;mso-bidi-font-style:italic'>cidlc --h</span><span style='color: +black'><br> +<br style='mso-special-character:line-break'> +<![if !supportLineBreakNewLine]><br style='mso-special-character:line-break'> +<![endif]><o:p></o:p></span></p> + +<p class=MsoNormal style='margin-bottom:12.0pt'><b><span style='color:black'>Implement +the Components:<o:p></o:p></span></b></p> + +<p class=MsoNormal style='margin-top:0in;margin-right:0in;margin-bottom:12.0pt; +margin-left:.5in'><b><span style='color:black'>Distributor:<o:p></o:p></span></b></p> + +<p class=MsoNormal style='margin-top:0in;margin-right:0in;margin-bottom:12.0pt; +margin-left:1.25in;text-indent:-.25in;mso-list:l0 level1 lfo1;tab-stops:list 1.25in'><![if !supportLists]><span +style='font-family:Symbol;mso-fareast-font-family:Symbol;mso-bidi-font-family: +Symbol;color:black;mso-bidi-font-weight:bold'><span style='mso-list:Ignore'>·<span +style='font:7.0pt "Times New Roman"'> +</span></span></span><![endif]><span style='color:black;mso-bidi-font-weight: +bold'>The CIDLC compiler generated an empty </span><i style='mso-bidi-font-style: +normal'><span style='color:black'>Distributor_exec.h </span></i><span +style='color:black'>and <i style='mso-bidi-font-style:normal'>Distributor_exec.cpp +</i>files for us. You should now add your business logic to the executors. Look +into <i style='mso-bidi-font-style:normal'><a +href="Distributor/Distributor_exec.h">Distributor_exec.h</a> </i>and <i +style='mso-bidi-font-style:normal'><a href="Distributor/Distributor_exec.cpp">Distributor_exec.cpp</a> +</i>to see how we implemented this.<span style='mso-bidi-font-weight:bold'><o:p></o:p></span></span></p> + +<p class=MsoNormal style='margin-top:0in;margin-right:0in;margin-bottom:12.0pt; +margin-left:.5in'><b style='mso-bidi-font-weight:normal'><span +style='color:black'>Broker:<o:p></o:p></span></b></p> + +<p class=MsoNormal style='margin-top:0in;margin-right:0in;margin-bottom:12.0pt; +margin-left:1.25in;text-indent:-.25in;mso-list:l0 level1 lfo1;tab-stops:list 1.25in'><![if !supportLists]><span +style='font-family:Symbol;mso-fareast-font-family:Symbol;mso-bidi-font-family: +Symbol;color:black;mso-bidi-font-weight:bold'><span style='mso-list:Ignore'>·<span +style='font:7.0pt "Times New Roman"'> +</span></span></span><![endif]><span style='color:black;mso-bidi-font-weight: +bold'>The CIDLC compiler generated an empty </span><i style='mso-bidi-font-style: +normal'><span style='color:black'>Distributor_exec.h </span></i><span +style='color:black'>and <i style='mso-bidi-font-style:normal'>Distributor_exec.cpp +</i>files for us. You should now add your business logic to the executors. Look +into <i style='mso-bidi-font-style:normal'><a href="Broker/Broker_exec.h">Broker_exec.h</a> +</i>and <i style='mso-bidi-font-style:normal'><a href="Broker/Broker_exec.cpp">Broker_exec.cpp</a> +</i>to see how we implemented this.<span style='mso-bidi-font-weight:bold'><o:p></o:p></span></span></p> + +<p class=MsoNormal style='margin-bottom:12.0pt'><span style='color:black'><o:p> </o:p></span></p> + +<p class=MsoNormal><span style='color:black'> <o:p></o:p></span></p> + +<div class=MsoNormal align=center style='text-align:center'><span +style='color:black'> + +<hr size=2 width="100%" align=center> + +</span></div> + +<address><span style='color:black'><a href="mailto:ming.xiong@vanderbilt.edu">Ming +Xiong<br> +</a><o:p></o:p></span></address> + +<p class=MsoNormal><span style='color:black'><!-- Created: Sat Nov 27 15:25:06 CST 1999 --><!-- hhmts start -->Last +modified:<!-- hhmts end --> <o:p></o:p></span></p> + +</div> + +</body> + +</html> diff --git a/modules/CIAO/docs/tutorials/Quoter/Simple/03.html b/modules/CIAO/docs/tutorials/Quoter/Simple/03.html new file mode 100644 index 00000000000..5a60e6fa73b --- /dev/null +++ b/modules/CIAO/docs/tutorials/Quoter/Simple/03.html @@ -0,0 +1,1387 @@ +<html xmlns:v="urn:schemas-microsoft-com:vml" +xmlns:o="urn:schemas-microsoft-com:office:office" +xmlns:w="urn:schemas-microsoft-com:office:word" +xmlns:p="urn:schemas-microsoft-com:office:powerpoint" +xmlns:oa="urn:schemas-microsoft-com:office:activation" +xmlns:st1="urn:schemas-microsoft-com:office:smarttags" +xmlns="http://www.w3.org/TR/REC-html40"> + +<head> +<meta http-equiv=Content-Type content="text/html; charset=us-ascii"> +<meta name=ProgId content=Word.Document> +<meta name=Generator content="Microsoft Word 11"> +<meta name=Originator content="Microsoft Word 11"> +<link rel=File-List href="03_files/filelist.xml"> +<link rel=Edit-Time-Data href="03_files/editdata.mso"> +<!--[if !mso]> +<style> +v\:* {behavior:url(#default#VML);} +o\:* {behavior:url(#default#VML);} +w\:* {behavior:url(#default#VML);} +.shape {behavior:url(#default#VML);} +</style> +<![endif]--> +<title>Getting Started</title> +<o:SmartTagType namespaceuri="urn:schemas-microsoft-com:office:smarttags" + name="PlaceName"/> +<o:SmartTagType namespaceuri="urn:schemas-microsoft-com:office:smarttags" + name="PlaceType"/> +<o:SmartTagType namespaceuri="urn:schemas-microsoft-com:office:smarttags" + name="place"/> +<!--[if gte mso 9]><xml> + <o:DocumentProperties> + <o:Author>Abdullah Sowayan</o:Author> + <o:LastAuthor>Abdullah Sowayan</o:LastAuthor> + <o:Revision>11</o:Revision> + <o:TotalTime>51</o:TotalTime> + <o:Created>2006-10-09T22:26:00Z</o:Created> + <o:LastSaved>2006-11-06T21:25:00Z</o:LastSaved> + <o:Pages>1</o:Pages> + <o:Words>2514</o:Words> + <o:Characters>14330</o:Characters> + <o:Company>Maritime Systems & Sensors</o:Company> + <o:Lines>119</o:Lines> + <o:Paragraphs>33</o:Paragraphs> + <o:CharactersWithSpaces>16811</o:CharactersWithSpaces> + <o:Version>11.8107</o:Version> + </o:DocumentProperties> +</xml><![endif]--><!--[if gte mso 9]><xml> + <w:WordDocument> + <w:SpellingState>Clean</w:SpellingState> + <w:GrammarState>Clean</w:GrammarState> + <w:ValidateAgainstSchemas/> + <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid> + <w:IgnoreMixedContent>false</w:IgnoreMixedContent> + <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText> + <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel> + </w:WordDocument> +</xml><![endif]--><!--[if gte mso 9]><xml> + <w:LatentStyles DefLockedState="false" LatentStyleCount="156"> + </w:LatentStyles> +</xml><![endif]--><!--[if !mso]><object + classid="clsid:38481807-CA0E-42D2-BF39-B33AF135CC4D" id=ieooui></object> +<style> +st1\:*{behavior:url(#ieooui) } +</style> +<![endif]--> +<style> +<!-- + /* Font Definitions */ + @font-face + {font-family:Wingdings; + panose-1:5 0 0 0 0 0 0 0 0 0; + mso-font-charset:2; + mso-generic-font-family:auto; + mso-font-pitch:variable; + mso-font-signature:0 268435456 0 0 -2147483648 0;} + /* Style Definitions */ + p.MsoNormal, li.MsoNormal, div.MsoNormal + {mso-style-parent:""; + margin:0in; + margin-bottom:.0001pt; + mso-pagination:widow-orphan; + font-size:12.0pt; + font-family:"Times New Roman"; + mso-fareast-font-family:"Times New Roman";} +h3 + {mso-margin-top-alt:auto; + margin-right:0in; + mso-margin-bottom-alt:auto; + margin-left:0in; + mso-pagination:widow-orphan; + mso-outline-level:3; + font-size:13.5pt; + font-family:"Times New Roman"; + font-weight:bold;} +a:link, span.MsoHyperlink + {color:#000FFF; + text-decoration:underline; + text-underline:single;} +a:visited, span.MsoHyperlinkFollowed + {color:#FF0F0F; + text-decoration:underline; + text-underline:single;} +p + {mso-margin-top-alt:auto; + margin-right:0in; + mso-margin-bottom-alt:auto; + margin-left:0in; + mso-pagination:widow-orphan; + font-size:12.0pt; + font-family:"Times New Roman"; + mso-fareast-font-family:"Times New Roman";} +address + {margin:0in; + margin-bottom:.0001pt; + mso-pagination:widow-orphan; + font-size:12.0pt; + font-family:"Times New Roman"; + font-style:italic;} +code + {font-family:"Courier New"; + mso-ascii-font-family:"Courier New"; + mso-fareast-font-family:"Times New Roman"; + mso-hansi-font-family:"Courier New"; + mso-bidi-font-family:"Courier New";} +kbd + {font-family:"Courier New"; + mso-ascii-font-family:"Courier New"; + mso-fareast-font-family:"Times New Roman"; + mso-hansi-font-family:"Courier New"; + mso-bidi-font-family:"Courier New";} +pre + {margin:0in; + margin-bottom:.0001pt; + mso-pagination:widow-orphan; + tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt; + font-size:10.0pt; + font-family:"Courier New"; + mso-fareast-font-family:"Times New Roman";} +span.SpellE + {mso-style-name:""; + mso-spl-e:yes;} +span.GramE + {mso-style-name:""; + mso-gram-e:yes;} +@page Section1 + {size:8.5in 11.0in; + margin:1.0in 1.25in 1.0in 1.25in; + mso-header-margin:.5in; + mso-footer-margin:.5in; + mso-paper-source:0;} +div.Section1 + {page:Section1;} + /* List Definitions */ + @list l0 + {mso-list-id:154345203; + mso-list-template-ids:-289649766;} +@list l0:level1 + {mso-level-tab-stop:.5in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l0:level2 + {mso-level-tab-stop:1.0in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l0:level3 + {mso-level-tab-stop:1.5in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l0:level4 + {mso-level-tab-stop:2.0in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l0:level5 + {mso-level-tab-stop:2.5in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l0:level6 + {mso-level-tab-stop:3.0in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l0:level7 + {mso-level-tab-stop:3.5in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l0:level8 + {mso-level-tab-stop:4.0in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l0:level9 + {mso-level-tab-stop:4.5in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l1 + {mso-list-id:201526982; + mso-list-template-ids:-336678638;} +@list l1:level1 + {mso-level-tab-stop:.5in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l1:level2 + {mso-level-number-format:bullet; + mso-level-text:o; + mso-level-tab-stop:1.0in; + mso-level-number-position:left; + text-indent:-.25in; + mso-ansi-font-size:10.0pt; + font-family:"Courier New"; + mso-bidi-font-family:"Times New Roman";} +@list l1:level3 + {mso-level-tab-stop:1.5in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l1:level4 + {mso-level-tab-stop:2.0in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l1:level5 + {mso-level-tab-stop:2.5in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l1:level6 + {mso-level-tab-stop:3.0in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l1:level7 + {mso-level-tab-stop:3.5in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l1:level8 + {mso-level-tab-stop:4.0in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l1:level9 + {mso-level-tab-stop:4.5in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l2 + {mso-list-id:521090106; + mso-list-template-ids:-1911898580;} +@list l2:level1 + {mso-level-number-format:bullet; + mso-level-text:\F0B7; + mso-level-tab-stop:.5in; + mso-level-number-position:left; + text-indent:-.25in; + mso-ansi-font-size:10.0pt; + font-family:Symbol;} +@list l3 + {mso-list-id:657850502; + mso-list-template-ids:1783002094;} +@list l3:level1 + {mso-level-number-format:bullet; + mso-level-text:\F0B7; + mso-level-tab-stop:.5in; + mso-level-number-position:left; + text-indent:-.25in; + mso-ansi-font-size:10.0pt; + font-family:Symbol;} +@list l4 + {mso-list-id:777020325; + mso-list-template-ids:-483995422;} +@list l4:level1 + {mso-level-number-format:bullet; + mso-level-text:\F0B7; + mso-level-tab-stop:.5in; + mso-level-number-position:left; + text-indent:-.25in; + mso-ansi-font-size:10.0pt; + font-family:Symbol;} +@list l4:level2 + {mso-level-tab-stop:1.0in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l4:level3 + {mso-level-tab-stop:1.5in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l4:level4 + {mso-level-tab-stop:2.0in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l4:level5 + {mso-level-tab-stop:2.5in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l4:level6 + {mso-level-tab-stop:3.0in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l4:level7 + {mso-level-tab-stop:3.5in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l4:level8 + {mso-level-tab-stop:4.0in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l4:level9 + {mso-level-tab-stop:4.5in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l5 + {mso-list-id:907959882; + mso-list-template-ids:323885252;} +@list l5:level1 + {mso-level-tab-stop:.5in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l5:level2 + {mso-level-tab-stop:1.0in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l5:level3 + {mso-level-tab-stop:1.5in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l5:level4 + {mso-level-tab-stop:2.0in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l5:level5 + {mso-level-tab-stop:2.5in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l5:level6 + {mso-level-tab-stop:3.0in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l5:level7 + {mso-level-tab-stop:3.5in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l5:level8 + {mso-level-tab-stop:4.0in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l5:level9 + {mso-level-tab-stop:4.5in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l6 + {mso-list-id:1065254837; + mso-list-template-ids:1089662206;} +@list l6:level1 + {mso-level-tab-stop:.5in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l6:level2 + {mso-level-tab-stop:1.0in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l6:level3 + {mso-level-tab-stop:1.5in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l6:level4 + {mso-level-tab-stop:2.0in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l6:level5 + {mso-level-tab-stop:2.5in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l6:level6 + {mso-level-tab-stop:3.0in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l6:level7 + {mso-level-tab-stop:3.5in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l6:level8 + {mso-level-tab-stop:4.0in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l6:level9 + {mso-level-tab-stop:4.5in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l7 + {mso-list-id:1084494006; + mso-list-template-ids:-1504120978;} +@list l7:level1 + {mso-level-tab-stop:.5in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l7:level2 + {mso-level-tab-stop:1.0in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l7:level3 + {mso-level-tab-stop:1.5in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l7:level4 + {mso-level-tab-stop:2.0in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l7:level5 + {mso-level-tab-stop:2.5in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l7:level6 + {mso-level-tab-stop:3.0in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l7:level7 + {mso-level-tab-stop:3.5in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l7:level8 + {mso-level-tab-stop:4.0in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l7:level9 + {mso-level-tab-stop:4.5in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l8 + {mso-list-id:1153565371; + mso-list-template-ids:-169696680;} +@list l8:level1 + {mso-level-tab-stop:.5in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l8:level2 + {mso-level-tab-stop:1.0in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l8:level3 + {mso-level-tab-stop:1.5in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l8:level4 + {mso-level-tab-stop:2.0in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l8:level5 + {mso-level-tab-stop:2.5in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l8:level6 + {mso-level-tab-stop:3.0in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l8:level7 + {mso-level-tab-stop:3.5in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l8:level8 + {mso-level-tab-stop:4.0in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l8:level9 + {mso-level-tab-stop:4.5in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l9 + {mso-list-id:1784838673; + mso-list-template-ids:1110625472;} +@list l9:level1 + {mso-level-number-format:bullet; + mso-level-text:\F0B7; + mso-level-tab-stop:.5in; + mso-level-number-position:left; + text-indent:-.25in; + mso-ansi-font-size:10.0pt; + font-family:Symbol;} +@list l10 + {mso-list-id:1832599161; + mso-list-template-ids:-966728002;} +@list l10:level1 + {mso-level-tab-stop:.5in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l10:level2 + {mso-level-number-format:bullet; + mso-level-text:o; + mso-level-tab-stop:1.0in; + mso-level-number-position:left; + text-indent:-.25in; + mso-ansi-font-size:10.0pt; + font-family:"Courier New"; + mso-bidi-font-family:"Times New Roman";} +@list l10:level3 + {mso-level-tab-stop:1.5in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l10:level4 + {mso-level-tab-stop:2.0in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l10:level5 + {mso-level-tab-stop:2.5in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l10:level6 + {mso-level-tab-stop:3.0in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l10:level7 + {mso-level-tab-stop:3.5in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l10:level8 + {mso-level-tab-stop:4.0in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l10:level9 + {mso-level-tab-stop:4.5in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l11 + {mso-list-id:1956401533; + mso-list-template-ids:-909756440;} +@list l11:level1 + {mso-level-tab-stop:.5in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l11:level2 + {mso-level-tab-stop:1.0in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l11:level3 + {mso-level-tab-stop:1.5in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l11:level4 + {mso-level-tab-stop:2.0in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l11:level5 + {mso-level-tab-stop:2.5in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l11:level6 + {mso-level-tab-stop:3.0in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l11:level7 + {mso-level-tab-stop:3.5in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l11:level8 + {mso-level-tab-stop:4.0in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l11:level9 + {mso-level-tab-stop:4.5in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l12 + {mso-list-id:2012949130; + mso-list-type:hybrid; + mso-list-template-ids:990837084 67698703 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;} +@list l12:level1 + {mso-level-tab-stop:39.0pt; + mso-level-number-position:left; + margin-left:39.0pt; + text-indent:-.25in;} +@list l12:level2 + {mso-level-tab-stop:1.0in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l12:level3 + {mso-level-tab-stop:1.5in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l12:level4 + {mso-level-tab-stop:2.0in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l12:level5 + {mso-level-tab-stop:2.5in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l12:level6 + {mso-level-tab-stop:3.0in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l12:level7 + {mso-level-tab-stop:3.5in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l12:level8 + {mso-level-tab-stop:4.0in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l12:level9 + {mso-level-tab-stop:4.5in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l11:level1 lfo5 + {mso-level-start-at:4;} +@list l1:level2 lfo7 + {mso-level-number-format:arabic; + mso-level-numbering:continue; + mso-level-text:"%2\."; + mso-level-tab-stop:none; + mso-level-number-position:left; + margin-left:0in; + text-indent:0in; + mso-ansi-font-size:10.0pt; + font-family:"Courier New"; + mso-bidi-font-family:"Times New Roman";} +ol + {margin-bottom:0in;} +ul + {margin-bottom:0in;} +--> +</style> +<!--[if gte mso 10]> +<style> + /* Style Definitions */ + table.MsoNormalTable + {mso-style-name:"Table Normal"; + mso-tstyle-rowband-size:0; + mso-tstyle-colband-size:0; + mso-style-noshow:yes; + mso-style-parent:""; + mso-padding-alt:0in 5.4pt 0in 5.4pt; + mso-para-margin:0in; + mso-para-margin-bottom:.0001pt; + mso-pagination:widow-orphan; + font-size:10.0pt; + font-family:"Times New Roman"; + mso-ansi-language:#0400; + mso-fareast-language:#0400; + mso-bidi-language:#0400;} +</style> +<![endif]--><!-- $Id$ --><!--[if gte mso 9]><xml> + <o:shapedefaults v:ext="edit" spidmax="4098"/> +</xml><![endif]--><!--[if gte mso 9]><xml> + <o:shapelayout v:ext="edit"> + <o:idmap v:ext="edit" data="1"/> + </o:shapelayout></xml><![endif]--> +</head> + +<body bgcolor=white lang=EN-US link="#000FFF" vlink="#FF0F0F" style='tab-interval: +.5in'> + +<div class=Section1> + +<h3 align=center style='text-align:center'><span style='color:black'>Step 3: +Package your components<o:p></o:p></span></h3> + +<h3 align=center style='text-align:center'><span style='color:black'><img +width=572 height=358 id="_x0000_i1025" src="images/Step3.JPG"><o:p></o:p></span></h3> + +<p class=MsoNormal><b><span style='color:red'><o:p> </o:p></span></b></p> + +<p class=MsoNormal><b>Brief Introduction to <span class=SpellE>CosMIC</span>:<o:p></o:p></b></p> + +<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'>The +Component Synthesis using Model Integrated Computing (<span class=SpellE>CoSMIC</span>) +project is a MDA toolset being developed by the Institute for Software +Integrated Systems (ISIS) at <st1:place w:st="on"><st1:PlaceName w:st="on">Vanderbilt</st1:PlaceName> + <st1:PlaceType w:st="on">University</st1:PlaceType></st1:place> to:</p> + +<p class=MsoNormal style='margin-left:39.0pt;text-indent:-.25in;mso-list:l12 level1 lfo1; +tab-stops:list 39.0pt;mso-layout-grid-align:none;text-autospace:none'><![if !supportLists]><span +style='mso-list:Ignore'>1.<span style='font:7.0pt "Times New Roman"'> +</span></span><![endif]><i>Model and</i> <i>analyze </i>distributed real-time +and embedded application functionality and <span class=SpellE>QoS</span> +requirements.</p> + +<p class=MsoNormal style='margin-left:39.0pt;text-indent:-.25in;mso-list:l12 level1 lfo1; +tab-stops:list 39.0pt;mso-layout-grid-align:none;text-autospace:none'><![if !supportLists]><span +style='mso-list:Ignore'>2.<span style='font:7.0pt "Times New Roman"'> +</span></span><![endif]><i>Synthesize</i> CCM-specific deployment metadata +required to deliver end-to-end <span class=SpellE>QoS</span> to DRE +applications.</p> + +<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><o:p> </o:p></p> + +<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'>The <span +class=SpellE>CoSMIC</span> <span class=SpellE>toolsuite</span> provides +modeling of DRE systems, their <span class=SpellE>QoS</span> requirements, and <span +class=SpellE>QoS</span> adaptation policies used for DRE application <span +class=SpellE>QoS</span> management. The component behavior, their interactions, +and <span class=SpellE>QoS</span> requirements are modeled using a domain +specific modeling language that adheres to <span style='color:black'>the <a +href="http://www.omg.org/cgi-bin/doc?ptc/2003-07-08">OMG Deployment & +Configuration (D&C) specification (ptc/2003-07-08)</a></span>. <span +class=SpellE>CoSMIC</span> enables modeling the standards-based CCM components. +</p> + +<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><o:p> </o:p></p> + +<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'>Hand-writing +the required XML descriptors to configure our components is tedious and error +prone. We therefore utilize <span class=SpellE>CosMIC</span> (we specifically +use a subset of <span class=SpellE>CosMIC</span> called PICML, which stands for +Platform-Independent Component Modeling Language) to generate the bulk of +descriptors for us.</p> + +<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><o:p> </o:p></p> + +<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'>For +more information on <span class=SpellE>CosMIC</span>, please refer to the +following article:</p> + +<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span +style='mso-bidi-font-weight:bold'><a +href="http://www.cs.wustl.edu/~schmidt/PDF/mamad2003.pdf"><span class=SpellE>CoSMIC</span>: +An MDA Generative Tool for Distributed Real-time and Embedded Applications</a>.<o:p></o:p></span></p> + +<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span +style='mso-bidi-font-weight:bold'><o:p> </o:p></span></p> + +<div class=MsoNormal align=center style='text-align:center'><span +style='color:black'> + +<hr size=2 width="100%" align=center> + +</span></div> + +<p class=MsoNormal style='mso-layout-grid-align:none;text-autospace:none'><span +style='mso-bidi-font-weight:bold'><o:p> </o:p></span></p> + +<p class=MsoNormal><b><span style='color:black'>Importing IDL to PICML</span></b><span +style='color:black'><br> +<br> + To quick start our Stock <span class=SpellE>Quoter</span> modeling +process in GME, <span class=SpellE>CoSMIC</span> introduces <span class=SpellE><em>idl_to_<span +class=GramE>picml</span></em></span><span class=GramE> ,</span> which is an +executable program that imports the IDL files you just created into PICML.<o:p></o:p></span></p> + +<ol start=1 type=1> + <li class=MsoNormal style='color:black;mso-margin-top-alt:auto;mso-margin-bottom-alt: + auto;mso-list:l5 level1 lfo2;tab-stops:list .5in'>Make sure <code><span + style='font-size:10.0pt'>%COSMIC_ROOT%\bin</span></code> is included in + the PATH variable, e.g., c:\Program Files\ISIS\<span class=SpellE>CoSMIC</span>\bin.<o:p></o:p></li> + <li class=MsoNormal style='color:black;mso-margin-top-alt:auto;mso-margin-bottom-alt: + auto;mso-list:l5 level1 lfo2;tab-stops:list .5in'>Open a command prompt, + run VCVARS32.BAT from the MSVC .NET folder if you haven't done so. It will + set the environment for using Microsoft Visual Studio .NET tools so that <span + class=SpellE><i>idl_to_picml</i></span> works properly.<br> + in my machine, VCVARS32.bat is in C:\Program Files\Microsoft Visual Studio + .NET 2003\Vc7\bin<o:p></o:p></li> + <li class=MsoNormal style='color:black;mso-margin-top-alt:auto;mso-margin-bottom-alt: + auto;mso-list:l5 level1 lfo2;tab-stops:list .5in'>In the same command + prompt, change directory to <span class=SpellE><code><span + style='font-size:10.0pt'>MyQuoter</span></code></span><code><span + style='font-size:10.0pt'>\</span></code>, and type the following command:<br> + > <span class=SpellE><kbd><span style='font-size:10.0pt'>idl_to_picml</span></kbd></span><kbd><span + style='font-size:10.0pt'> -x <span class=SpellE>MyQuoter</span> -r . -I .\<span + class=SpellE>Stock_Base</span></span></kbd><br> + (if the above command does not work, you may also try this<br> + ><span class=SpellE><kbd><span style='font-size:10.0pt'>idl_to_picml</span></kbd></span><kbd><span + style='font-size:10.0pt'> -x <span class=SpellE>MyQuoter</span> -r + . -I .\<span class=SpellE>Stock_Base</span> -I %TAO_ROOT% -I + %TAO_ROOT%\<span class=SpellE>orbsvcs</span> -I %CIAO_ROOT%\ciao)</span></kbd><br> + <span class=SpellE><em>idl_to_picml</em></span> will parse your IDL + files and generated a <span class=SpellE><code><span style='font-size: + 10.0pt'>MyQuoter.xme</span></code></span> file in the <span class=SpellE><code><span + style='font-size:10.0pt'>MyQuoter</span></code></span> directory. Note + that if -x option is not used, the default <span class=SpellE>xme</span> + file name will be <span class=SpellE><code><span style='font-size:10.0pt'>PICML_default_xme_file.xme</span></code></span><code><span + style='font-size:10.0pt'>.</span></code><br> + 4. Start GME, select <strong>File->Import xml..</strong>, and choose + the <span class=SpellE>xme</span> file just generated. You should be able + to see an imported PICML model similar to the one shown in Figure 2.<o:p></o:p></li> +</ol> + +<p class=MsoNormal><span style='color:black'><o:p> </o:p></span></p> + +<p class=MsoNormal align=center style='text-align:center'><span +style='color:black'><img border=0 width=781 height=636 id="_x0000_i1026" +src="Images/fig2.jpg"><br> +<br> +Figure 2<o:p></o:p></span></p> + +<p><span style='color:black'> In the Browser of the generated model, the <span +class=SpellE><em>PredefinedTypes</em></span> folder contains a bunch of atomic <span +class=SpellE>datatype</span> elements that will be referenced by other modeling +parts later. You don't have to worry about them for now. The models in <span +class=SpellE><em>InterfaceDefinitions</em></span> folder are the PICML +representations <span class=SpellE>ofthe</span> IDL files you just imported. +Double-click to open <em>Broker</em>, it will show you a white, document-like +entity which represents a <<<span class=SpellE>FileRef</span>>> +instance and a yellow box-shaped entity representing a <<Package>> +instance. Their equivalent representations in IDL files are +"#include" and "module" respectively. Figure 3 gives you a +clear view of GME representation of all the 3 <span class=SpellE>idl</span> +files created. We will cover the other folders in the next section.<o:p></o:p></span></p> + +<p class=MsoNormal align=center style='margin-bottom:12.0pt;text-align:center'><span +style='color:black'><img border=0 width=223 height=336 id="_x0000_i1027" +src="Images/fig3.jpg"><br> +<br> +Figure 3<o:p></o:p></span></p> + +<p class=MsoNormal style='margin-bottom:12.0pt'><span style='color:black'>Now +we are ready to model the rest of the Stock <span class=SpellE>Quoter</span> +systems.<br> +<br style='mso-special-character:line-break'> +<![if !supportLineBreakNewLine]><br style='mso-special-character:line-break'> +<![endif]><o:p></o:p></span></p> + +<div class=MsoNormal align=center style='text-align:center'><span +style='color:black'> + +<hr size=2 width="100%" align=center> + +</span></div> + +<h3>Building Stock <span class=SpellE>Quoter</span> system in PICML<span +style='color:black'><o:p></o:p></span></h3> + +<p><span style='color:black'>This section describes modeling the <span +class=SpellE>Quoter</span> application using PICML. If you have trouble +producing a functioning model from this tutorial, please see the, <a +href="Model/Quoter.xme">pre-built <span class=SpellE>Quoter</span> model</a> +which is provided for your reference. This model contains all elements created +as part of this tutorial.<o:p></o:p></span></p> + +<div> + +<p class=MsoNormal><strong><span style='color:black'>Note:</span></strong><span +style='color:black'> To import an XML file in GME, select <em>File->Import +XML..</em> from GME and choose your XML model<o:p></o:p></span></p> + +</div> + +<p><span style='color:black'>The PICML paradigm is designed for the <a +href="http://www.omg.org/cgi-bin/doc?ptc/2003-07-08">OMG Deployment & +Configuration (D&C) specification (ptc/2003-07-08)</a>, so the modeling +process is straightforward if you are familiar with the specification. Please +see the <a href="../../releasenotes/dance.html"><span class=SpellE>DAnCE</span> +project</a> for more information. For those who hate specification +(including me, :-)), an <a +href="http://www.cs.wustl.edu/%7Eschmidt/PDF/DAnCE.pdf">overview of D&C</a> +and as well as a <a +href="http://www.cs.wustl.edu/%7Eschmidt/OMG-CCM-Tutorial.ppt">tutorial of +D&C and CCM</a> can help to reduce the learning curve. (Thanks to Sowayan, <span +class=SpellE>Abdulah</span> for pointing this out). In addition, it is also +helpful to read through Chapter 32 of <span class=SpellE>TAO's</span> +Developer's Guide 1.4a (CIAO and CCM) which thoroughly describes the various +descriptors required for a component (*.<span class=SpellE>iad</span>, *.<span +class=SpellE>ccd</span>, *.cid, etc). <o:p></o:p></span></p> + +<h3><span style='color:black'>Table of Contents<o:p></o:p></span></h3> + +<ul type=disc> + <li class=MsoNormal style='color:black;mso-margin-top-alt:auto;mso-margin-bottom-alt: + auto;mso-list:l4 level1 lfo3;tab-stops:list .5in'><a href="#1"><span + class=SpellE>ImplementationArtifacts</span></a><o:p></o:p></li> + <li class=MsoNormal style='color:black;mso-margin-top-alt:auto;mso-margin-bottom-alt: + auto;mso-list:l4 level1 lfo3;tab-stops:list .5in'><a href="#2"><span + class=SpellE>ComponentImplementations</span></a><o:p></o:p></li> + <li class=MsoNormal style='color:black;mso-margin-top-alt:auto;mso-margin-bottom-alt: + auto;mso-list:l4 level1 lfo3;tab-stops:list .5in'><a href="#3"><span + class=SpellE>ComponentPackages</span></a><o:p></o:p></li> + <li class=MsoNormal style='color:black;mso-margin-top-alt:auto;mso-margin-bottom-alt: + auto;mso-list:l4 level1 lfo3;tab-stops:list .5in'><a href="#4"><span + class=SpellE>PackageConfiguration</span></a><o:p></o:p></li> + <li class=MsoNormal style='color:black;mso-margin-top-alt:auto;mso-margin-bottom-alt: + auto;mso-list:l4 level1 lfo3;tab-stops:list .5in'><a href="#5"><span + class=SpellE>TopLevelPackage</span></a><o:p></o:p></li> + <li class=MsoNormal style='color:black;mso-margin-top-alt:auto;mso-margin-bottom-alt: + auto;mso-list:l4 level1 lfo3;tab-stops:list .5in'><a href="#6">Targets</a><o:p></o:p></li> + <li class=MsoNormal style='color:black;mso-margin-top-alt:auto;mso-margin-bottom-alt: + auto;mso-list:l4 level1 lfo3;tab-stops:list .5in'><a href="#7"><span + class=SpellE>DeploymentPlan</span></a><o:p></o:p></li> +</ul> + +<div class=MsoNormal align=center style='text-align:center'><span +style='color:black'> + +<hr size=2 width="100%" align=center> + +</span></div> + +<p><span style='color:black'>The complete PICML <span class=SpellE>Quoter</span> +model consists of modeling elements distributed across various folders. If you +used <span class=SpellE><em>idl_to_picml</em></span> to generate the initial +model, you will see that it has created all these folders and some of the +tedious boilerplate modeling for us. The rest of the section will explain the purpose +of each folder as well as the modeling entities contained in these folders. We +will also show how to model some of the folders that have to be done by hand.<o:p></o:p></span></p> + +<p><b><span style='font-variant:small-caps;color:red;background:silver; +mso-highlight:silver'>Important:</span></b><span style='color:black;background: +silver;mso-highlight:silver'> The interpreters that generate deployment +artifacts expect very strict constraints in the model. When you finish your +model, and any time you wish to generate anything, it is a good idea to check +constraints by clicking on <em>File->Check->Check All</em> in GME. This +will help you find many logic errors in your model.</span><span +style='color:black'><o:p></o:p></span></p> + +<h3><span class=SpellE><span style='color:black'>ImplementationArtifacts</span></span><span +style='color:black'><o:p></o:p></span></h3> + +<p><span style='color:black'>This folder contains implementation artifacts +associated with components. <span class=SpellE><em>idl_to_picml</em></span> has +created these artifacts for us, with their dependency relationships correctly +captured. Figure 4 shows the Implementation Artifacts for <em>Broker</em>.<o:p></o:p></span></p> + +<p class=MsoNormal align=center style='margin-bottom:12.0pt;text-align:center'><span +style='color:black'><img border=0 width=891 height=552 id="_x0000_i1030" +src="Images/fig4.jpg"><br> +<span class=GramE>Figure 4.</span><o:p></o:p></span></p> + +<div class=MsoNormal align=center style='text-align:center'><a name=1></a><span +style='color:black'> + +<hr size=2 width="100%" align=center> + +</span></div> + +<h3><span class=SpellE><span style='color:black'>ComponentImplementation</span></span><a +name=2></a><span style='color:black'><o:p></o:p></span></h3> + +<p><span style='color:black'>This folder contains models that describe the +implementations of component interfaces. In the <span class=SpellE>Quoter</span> +example, we will have two monolithic component implementations - named <span +class=SpellE><em>StockDistributorImplementation</em></span> and <span +class=SpellE><em>StockBrokerImplementation</em></span> - and an assembly +component implementation named <span class=SpellE><em>StockQuoter</em></span>, +which is an assembly of <span class=SpellE><em>StockDistributorImplementation</em></span> +and <span class=SpellE><em>StockBrokerImplementaion</em></span>. <span +class=SpellE><em>idl_to_picml</em></span> has created the monolithic component +implementations for us, as shown in figure 5 for example, but we have to +specify the connections between them in order to construct a <span +class=SpellE>Quoter</span> system.<o:p></o:p></span></p> + +<p class=MsoNormal align=center style='text-align:center'><span +style='color:black'><img border=0 width=922 height=639 id="_x0000_i1032" +src="Images/fig5.jpg"><br> +Figure 5<o:p></o:p></span></p> + +<p><span style='color:black'>Assembly components provide a boundary for the +composition of monolithic components and even other assemblies. Assembly +components do not provide actual implementations for their interface, it is a +virtual component that delegates its ports and attributes to one or more of the +entities it contains. There are slight differences between modeling an assembly +and modeling a monolithic component. Since the assembly is a virtual component, +it is not necessary to model a </span><span class=SpellE><code><span +style='font-size:10.0pt;color:black'>MonolithicImplementation</span></code></span><span +style='color:black'>. Instead, <em>instances</em> of other components are +placed within the assembly and connected. Let's try to assemble the <span +class=SpellE><em>StockQuoter</em></span>.<o:p></o:p></span></p> + +<ol start=1 type=1> + <li class=MsoNormal style='color:black;mso-margin-top-alt:auto;mso-margin-bottom-alt: + auto;mso-list:l0 level1 lfo4;tab-stops:list .5in'>Right click the <span + class=SpellE><em>ComponentImplementations</em></span> folder, choose <strong>Insert + Model-><span class=SpellE>ComponentImplementationContainer</span></strong>, + rename it as "<span class=SpellE>StockQuoterImplementation</span>" + in the Attribute Panel. Double click to open it.<o:p></o:p></li> + <li class=MsoNormal style='color:black;mso-margin-top-alt:auto;mso-margin-bottom-alt: + auto;mso-list:l0 level1 lfo4;tab-stops:list .5in'>From the Part Browser, + drag a <<<span class=SpellE>ComponentAssembly</span>>> to the + modeling window, name it "<span class=SpellE>StockQuoter</span>". + Double click to open it.<o:p></o:p></li> + <li class=MsoNormal style='color:black;mso-margin-top-alt:auto;mso-margin-bottom-alt: + auto;mso-list:l0 level1 lfo4;tab-stops:list .5in'>Now we will create two + instances for interfaces <span class=SpellE><em>StockBroker</em></span> + and <span class=SpellE><em>StockDistributor</em></span>. To do that, + expand the folder <span class=SpellE><em><span style='font-size:10.0pt; + font-family:"Courier New"'>InterfaceDefinitions</span></em></span>, then + expand the <span class=SpellE><em><span style='font-size:10.0pt; + font-family:"Courier New"'>InterfaceDefinitions</span></em></span><em><span + style='font-size:10.0pt;font-family:"Courier New"'>/</span></em> <em>Broker</em>, + then <span class=SpellE><em><span style='font-size:10.0pt;font-family: + "Courier New"'>InterfaceDefinitions</span></em></span><em><span + style='font-size:10.0pt;font-family:"Courier New"'>/</span></em> <em>Broker/ + Stock</em> until the interface definition of <span class=SpellE><em>StockBroker</em></span> + shows. While expanding the tree, always keep the "<span class=SpellE>StockQuoter</span>" + <<<span class=SpellE>ComponentAssembly</span>>> window open. + Then drag <span class=SpellE><code><span style='font-size:10.0pt'>MyQuoter/InterfaceDefinitions/Broker/Stock/StockBroker</span></code></span> + in the browser to the "<span class=SpellE>StockQuoter</span>" + <<<span class=SpellE>ComponentAssembly</span>>> window while + pressing ALT key. Repeat the same steps for <code><span style='font-size: + 10.0pt'>MyQuoter/InterfaceDefinitions/Distributor/Stock/StockDistributor</span></code>, + and you will see two instances of component interfaces have been created + as shown in Figure 6 (the black line in the figure only indicates + .mapping)<o:p></o:p></li> +</ol> + +<p class=MsoNormal><span style='color:black'><o:p> </o:p></span></p> + +<p class=MsoNormal align=center style='text-align:center'><span +style='color:black'><img border=0 width=972 height=714 id="_x0000_i1046" +src="Images/fig6.jpg"><br> +<br> +Figure 6<o:p></o:p></span></p> + +<ol start=4 type=1> + <li class=MsoNormal style='color:black;mso-margin-top-alt:auto;mso-margin-bottom-alt: + auto;mso-list:l11 level1 lfo5;tab-stops:list .5in'>Create an <<<span + class=SpellE>PublishConnector</span>>>.<o:p></o:p></li> + <li class=MsoNormal style='color:black;mso-margin-top-alt:auto;mso-margin-bottom-alt: + auto;mso-list:l11 level1 lfo5;tab-stops:list .5in'>Now assemble the + components together according to <a href="Images/fig1.jpg">Figure 1</a>(make + sure you change to connect <span class=GramE>mode </span><img border=0 + width=32 height=32 id="_x0000_i1047" src="Icons/AddConnMode.gif">) and the + resulting assembly model should look like Figure 7. Note that to create + connections between <span class=SpellE>StockDistributor.notify_out</span> + and <span class=SpellE>StockBroker.notify_in</span>, you will need the + intermediate connector <<<span class=SpellE>PublishConnector</span>>>.<o:p></o:p></li> +</ol> + +<p class=MsoNormal align=center style='text-align:center'><span +style='color:black'><img border=0 width=724 height=402 id="_x0000_i1048" +src="Images/fig7.jpg"><!-- hhmts end -->><br> +<br> +Figure 7<o:p></o:p></span></p> + +<div class=MsoNormal align=center style='text-align:center'><span +style='color:black'> + +<hr size=2 width="100%" align=center> + +</span></div> + +<h3><a name=3></a><span class=SpellE><span style='color:black'>ComponentPackage</span></span><span +style='color:black'><o:p></o:p></span></h3> + +<p class=MsoNormal><span style='color:black'>This folder contains deployable +component packages. Every instance in an assembly should have a corresponding monolithic +implementation and packaged in a <span class=SpellE>ComponentPackagebe</span> +To create a package for <span class=SpellE><em>StockBroker</em>.instance</span><o:p></o:p></span></p> + +<ol start=1 type=1> + <li class=MsoNormal style='color:black;mso-margin-top-alt:auto;mso-margin-bottom-alt: + auto;mso-list:l1 level1 lfo6;tab-stops:list .5in'>Right click folder <span + class=SpellE><em>ComponentPackage</em>s</span> , insert a <<<span + class=SpellE>PackageContainer</span>>>, name it "Broker"; + Double click to open it.<o:p></o:p></li> + <li class=MsoNormal style='color:black;mso-margin-top-alt:auto;mso-margin-bottom-alt: + auto;mso-list:l1 level1 lfo6;tab-stops:list .5in'>From the <span + class=SpellE>PartBrowser</span>, add the following:<o:p></o:p></li> + <ul type=circle> + <li class=MsoNormal style='color:black;mso-margin-top-alt:auto;mso-margin-bottom-alt: + auto;mso-list:l1 level2 lfo6;tab-stops:list 1.0in'>a <<<span + class=SpellE>ComponentPackage</span>>> named "Broker";<o:p></o:p></li> + <li class=MsoNormal style='color:black;mso-margin-top-alt:auto;mso-margin-bottom-alt: + auto;mso-list:l1 level2 lfo6;tab-stops:list 1.0in'>a <<<span + class=SpellE>ComponentImplementationReference</span>>> named + "Broker";<o:p></o:p></li> + <li class=MsoNormal style='color:black;mso-margin-top-alt:auto;mso-margin-bottom-alt: + auto;mso-list:l1 level2 lfo6;tab-stops:list 1.0in'>a <<<span + class=SpellE>ComponentRef</span>>> named "Broker";<o:p></o:p></li> + </ul> + <li class=MsoNormal style='color:black;mso-margin-top-alt:auto;mso-margin-bottom-alt: + auto;mso-list:l1 level1 lfo6;tab-stops:list .5in'>Refer the <<<span + class=SpellE>ComponentImplementationReference</span>>> <em>Broker</em> + to <code><span style='font-size:10.0pt'>MyQuoter/ComponentImplementations/StockBroker</span></code>Implementation/StockBrokerMonolithicImpl. + Refer the <<<span class=SpellE>ComponentRef</span>>> <em>Broker</em> + to <span class=SpellE><code><span style='font-size:10.0pt'>MyQuoter/InterfaceDefinitions/Broker/Stock/StockBroker</span></code></span>. + To create a reference in GME, simply drag the tree node in the Browser + "into" the reference model. For example, you should drag the + tree node <code><span style='font-size:10.0pt'>MyQuoter/ComponentImplementations/StockBroker</span></code>Implementation/StockBrokerMonolithicImpl + into <<<span class=SpellE>ComponentImplementationReference</span>>> + <em>Broker.</em> Check GME manual(tutorials) for more information.<o:p></o:p></li> + <li class=MsoNormal style='color:black;mso-margin-top-alt:auto;mso-margin-bottom-alt: + auto;mso-list:l1 level1 lfo6;tab-stops:list .5in'>Switch to Connect Mode + and create two connections according to the following relationship.<o:p></o:p></li> + <ul type=circle> + <li class=MsoNormal style='color:black;mso-margin-top-alt:auto;mso-margin-bottom-alt: + auto;mso-list:l1 level2 lfo6;tab-stops:list 1.0in'><<<span + class=SpellE>ComponentImplementationReference</span>>> <em>Broker</em> + implements <<<span class=SpellE>ComponentPackage</span>>> <em>Broker</em>;<o:p></o:p></li> + <li class=MsoNormal style='color:black;mso-margin-top-alt:auto;mso-margin-bottom-alt: + auto;mso-list:l1 level2 lfo6;tab-stops:list 1.0in'><<<span + class=SpellE>ComponentPackage</span>>> <em>Broker</em> realizes + <<<span class=SpellE>ComponentRef</span>>> <em>Broker</em>.<o:p></o:p></li> + </ul> +</ol> + +<p class=MsoNormal style='mso-margin-top-alt:auto;margin-bottom:12.0pt; +margin-left:.5in'><span style='color:black'><br> +<br> + The model you built should resemble Figure 8.<o:p></o:p></span></p> + +<p class=MsoNormal align=center style='mso-margin-top-alt:auto;margin-bottom: +12.0pt;margin-left:.5in;text-align:center'><span style='color:black'><img +border=0 width=675 height=497 id="_x0000_i1034" src="Images/fig8.jpg"><!-- hhmts start -->><br> +<br> +Figure 8<o:p></o:p></span></p> + +<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto; +margin-left:.5in'><span style='color:black'>Now create a <span class=SpellE>ComponentPackage/StockDistributor</span> +following the same steps. <o:p></o:p></span></p> + +<ol start=5 type=1> + <li class=MsoNormal style='color:black;mso-margin-top-alt:auto;mso-margin-bottom-alt: + auto;mso-list:l1 level1 lfo6;tab-stops:list .5in;list-style-position:outside'><br> + We will also need to create a package for the assembly component <span + class=SpellE>StockQuoter</span>. Remember assembly component is a virtual + component, it does not "realize" a certain interface, so + different from the Broker and Distributor packages, the <span + class=SpellE>StockQuoter</span> does not need a <<<span + class=SpellE>ComponentRef</span>>>. To create this model: <o:p></o:p></li> +</ol> + +<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto; +margin-left:.5in;text-indent:-.25in;mso-list:l1 level2 lfo7'><![if !supportLists]><span +style='font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:"Courier New"; +mso-fareast-font-family:"Courier New";color:black'><span style='mso-list:Ignore'>1.<span +style='font:7.0pt "Times New Roman"'> </span></span></span><![endif]><span +style='color:black'>Insert a <<<span class=SpellE>ComponentPackage</span>>> +named "<span class=SpellE>StockQuoter</span>"<o:p></o:p></span></p> + +<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto; +margin-left:1.0in;text-indent:-.25in;mso-list:l1 level2 lfo7'><![if !supportLists]><span +style='font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:"Courier New"; +mso-fareast-font-family:"Courier New";color:black'><span style='mso-list:Ignore'>2.<span +style='font:7.0pt "Times New Roman"'> </span></span></span><![endif]><span +style='color:black'>Add a <<<span class=SpellE>ComponentImplementationReference</span>>> +named "<span class=SpellE>StockQuoter</span>", refer it to <span +class=SpellE>MyQuoter<code><span style='font-size:10.0pt'>/ComponentImplementations/StockQuoter/StockQuoter</span></code></span><o:p></o:p></span></p> + +<p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto; +margin-left:1.0in;text-indent:-.25in;mso-list:l1 level2 lfo7'><![if !supportLists]><span +style='font-size:10.0pt;mso-bidi-font-size:12.0pt;font-family:"Courier New"; +mso-fareast-font-family:"Courier New";color:black'><span style='mso-list:Ignore'>3.<span +style='font:7.0pt "Times New Roman"'> </span></span></span><![endif]><span +style='color:black'>Switch to connect mode and connect <<<span +class=SpellE>ComponentImplementationReference</span>>> <span +class=SpellE>StockQuoter</span> with <<<span class=SpellE>ComponentPackage</span>>> +<span class=SpellE>StockQuoter</span>, as in Figure 9.<o:p></o:p></span></p> + +<p class=MsoNormal align=center style='margin-bottom:12.0pt;text-align:center'><span +style='color:black'><img border=0 width=549 height=354 id="_x0000_i1035" +src="Images/fig9.jpg"><!-- Created: Sat Nov 27 15:25:06 CST 1999 --><!-- hhmts start -->><br> +<br> +Figure 9<o:p></o:p></span></p> + +<div class=MsoNormal align=center style='text-align:center'><span +style='color:black'> + +<hr size=2 width="100%" align=center> + +</span></div> + +<h3><a name=4></a><span class=SpellE><span style='color:black'>PackageConfiguration</span></span><span +style='color:black'><o:p></o:p></span></h3> + +<p class=MsoNormal><span style='color:black'>This folder contains just one +model capturing specific configuration of Component packages.<o:p></o:p></span></p> + +<ol start=1 type=1> + <li class=MsoNormal style='color:black;mso-margin-top-alt:auto;mso-margin-bottom-alt: + auto;mso-list:l8 level1 lfo8;tab-stops:list .5in'>In the folder <span + class=SpellE><em>PackageConfiguratio</em>n</span>, and create a <<<span + class=SpellE>PackageConfigurationContainer</span>>>, name it + "Default", click to open it.<o:p></o:p></li> + <li class=MsoNormal style='color:black;mso-margin-top-alt:auto;mso-margin-bottom-alt: + auto;mso-list:l8 level1 lfo8;tab-stops:list .5in'>Add a <<<span + class=SpellE>PackageConfiguration</span>>> named "default" + and a <<<span class=SpellE>ComponentPackageReference</span>>>, + name it "<span class=SpellE>StockQuoter</span>", connect + "Default" to "<span class=SpellE>StockQuoter</span>"<o:p></o:p></li> + <li class=MsoNormal style='color:black;mso-margin-top-alt:auto;mso-margin-bottom-alt: + auto;mso-list:l8 level1 lfo8;tab-stops:list .5in'>Refer <<<span + class=SpellE>ComponentPackageReference</span>>> <span class=SpellE>StockQuoter</span> + to <<<span class=SpellE>ComponentPackage</span>>> <span + class=SpellE><code><span style='font-size:10.0pt'>MyQuoter/ComponentPackage/StockQuoter/StockQuoter</span></code></span><span + style='font-size:10.0pt;font-family:"Courier New"'><br> + <code>(Not <<<span class=SpellE>ComponentImplementationReference</span>>></code></span> + <span class=SpellE><code><span style='font-size:10.0pt'>MyQuoter/ComponentPackage/StockQuoter/StockQuoter</span></code></span><code><span + style='font-size:10.0pt'>!) </span></code><o:p></o:p></li> +</ol> + +<p class=MsoNormal><span style='color:black'><o:p> </o:p></span></p> + +<div class=MsoNormal align=center style='text-align:center'><span +style='color:black'> + +<hr size=2 width="100%" align=center> + +</span></div> + +<h3><a name=5></a><span class=SpellE><span style='color:black'>ToplevelPackage</span></span><span +style='color:black'><o:p></o:p></span></h3> + +<p class=MsoNormal><span style='color:black'>This folder contains one model +capturing information about the top-level element that will be fed to the +application.<o:p></o:p></span></p> + +<ol start=1 type=1> + <li class=MsoNormal style='color:black;mso-margin-top-alt:auto;mso-margin-bottom-alt: + auto;mso-list:l6 level1 lfo9;tab-stops:list .5in'>In the folder <span + class=SpellE><em>ToplevelPackage</em></span>, and create a <<<span + class=SpellE>ToplevelPackageContainer</span>>>, name it + "Default", double click to open it.<o:p></o:p></li> + <li class=MsoNormal style='color:black;mso-margin-top-alt:auto;mso-margin-bottom-alt: + auto;mso-list:l6 level1 lfo9;tab-stops:list .5in'>Add a <<<span + class=SpellE>ToplevelPackage</span>>> named "<span + class=SpellE>ToplevelPackage</span>" and a <<<span + class=SpellE>PackageConfigurationReference</span>>>, name it + "Default", connect "<span class=SpellE>ToplevelPackage</span>" + to "Default"<o:p></o:p></li> + <li class=MsoNormal style='color:black;mso-margin-top-alt:auto;mso-margin-bottom-alt: + auto;mso-list:l6 level1 lfo9;tab-stops:list .5in'>Refer + "Default" to <span class=SpellE>My<code><span style='font-size: + 10.0pt'>Quoter/PackageConfiguration/Default/Default</span></code></span><o:p></o:p></li> +</ol> + +<p class=MsoNormal><span style='color:black'><o:p> </o:p></span></p> + +<div class=MsoNormal align=center style='text-align:center'><span +style='color:black'> + +<hr size=2 width="100%" align=center> + +</span></div> + +<h3><a name=6></a><span style='color:black'>Targets<o:p></o:p></span></h3> + +<p class=MsoNormal><span style='color:black'>This folder contains +domain-specific models capturing information about the target environment in +which component-based application will be deployed. In this <span class=SpellE>Quoter</span> +example, we can either deploy the two components into ONE host, or into TWO +different host. We will deploy the <span class=SpellE>Quoter</span> into two +different host.<o:p></o:p></span></p> + +<ol start=1 type=1> + <li class=MsoNormal style='color:black;mso-margin-top-alt:auto;mso-margin-bottom-alt: + auto;mso-list:l7 level1 lfo10;tab-stops:list .5in'>In the folder <i>Targets</i>, + insert a new <<Domain>> named "Domain"; double click + to open it.<o:p></o:p></li> + <li class=MsoNormal style='color:black;mso-margin-top-alt:auto;mso-margin-bottom-alt: + auto;mso-list:l7 level1 lfo10;tab-stops:list .5in'>From the Part Browser, + add two <<Node>> named "Broker" and + "Distributor" respectively.<o:p></o:p></li> +</ol> + +<p class=MsoNormal><span style='color:black'><br> +Now we are ready to deploy our Components to the actual physical environment.<o:p></o:p></span></p> + +<div class=MsoNormal align=center style='text-align:center'><span +style='color:black'> + +<hr size=2 width="100%" align=center> + +</span></div> + +<h3><a name=7></a><span class=SpellE><span style='color:black'>DeploymentPlan</span></span><span +style='color:black'><o:p></o:p></span></h3> + +<p class=MsoNormal><span style='color:black'>This folder contains a plan model that +captures information about the assignment of component to nodes.<o:p></o:p></span></p> + +<ol start=1 type=1> + <li class=MsoNormal style='color:black;mso-margin-top-alt:auto;mso-margin-bottom-alt: + auto;mso-list:l10 level1 lfo11;tab-stops:list .5in'>In the folder <span + class=SpellE><em>DeploymentPlan</em></span>, insert a model <<<span + class=SpellE>DeploymentPlan</span>>>; name it "Plan", + click to open it<o:p></o:p></li> + <li class=MsoNormal style='color:black;mso-margin-top-alt:auto;mso-margin-bottom-alt: + auto;mso-list:l10 level1 lfo11;tab-stops:list .5in'>From the <span + class=SpellE>PartBrowser</span>, add the following:<o:p></o:p></li> + <ul type=circle> + <li class=MsoNormal style='color:black;mso-margin-top-alt:auto;mso-margin-bottom-alt: + auto;mso-list:l10 level2 lfo11;tab-stops:list 1.0in'>Two <<<span + class=SpellE>CollocationGroup</span>>><o:p></o:p></li> + <li class=MsoNormal style='color:black;mso-margin-top-alt:auto;mso-margin-bottom-alt: + auto;mso-list:l10 level2 lfo11;tab-stops:list 1.0in'>Two <<<span + class=SpellE>NodeReference</span>>> named "<span class=SpellE>Node_Broker</span>" + and "<span class=SpellE>Node_Distributor</span>" respectively, <span + class=SpellE>refering</span> to <span class=SpellE><code><span + style='font-size:10.0pt'>MyQuoter</span></code></span><code><span + style='font-size:10.0pt'>/Targets/Domain/Broker</span></code> and <span + class=SpellE><code><span style='font-size:10.0pt'>MyQuoter</span></code></span><code><span + style='font-size:10.0pt'>/Targets/Domain/Distributor</span></code> + respectively<o:p></o:p></li> + <li class=MsoNormal style='color:black;mso-margin-top-alt:auto;mso-margin-bottom-alt: + auto;mso-list:l10 level2 lfo11;tab-stops:list 1.0in'>Two <<<span + class=SpellE>ComponentRef</span>>> named "<span class=SpellE>StockBroker</span>" + and "<span class=SpellE>StockDistributor</span>" respectively, <span + class=SpellE>refering</span> to <code><span style='font-size:10.0pt'>MyQuoter/ComponentImplementations/StockQuoterImplementation/StockQuoter/StockBroker</span></code> + and <code><span style='font-size:10.0pt'>MyQuoter/ComponentImplementations/StockQuoterImplementation/StockQuoter/StockDistributor</span></code> + respectively. Note that the <<<span class=SpellE>ComponentRef</span>>> + in <span class=SpellE>DeploymentPlan</span> is not referring to the interface, + but rather the actual instance of the implementation.<o:p></o:p></li> + </ul> + <li class=MsoNormal style='color:black;mso-margin-top-alt:auto;margin-bottom: + 12.0pt;mso-list:l10 level1 lfo11;tab-stops:list .5in'>Switch to Connect + Mode, connect one <<<span class=SpellE>CollocationGroup</span>>> + to <<<span class=SpellE>NodeReference</span>>> <span + class=SpellE><em>Node_Broker</em></span>, connect another <<<span + class=SpellE>CollocationGroup</span>>> to <<<span + class=SpellE>NodeReference</span>>> <span class=SpellE><em>Node_Distributor</em></span>. + Now the model looks like the following.<o:p></o:p></li> +</ol> + +<p class=MsoNormal align=center style='mso-margin-top-alt:auto;margin-bottom: +12.0pt;margin-left:.5in;text-align:center'><span style='color:black'><img +border=0 width=752 height=530 id="_x0000_i1040" src="Images/fig10.jpg"><br> +<br> +<span class=GramE>Figure 10.</span><o:p></o:p></span></p> + +<ol start=4 type=1> + <li class=MsoNormal style='color:black;mso-margin-top-alt:auto;margin-bottom: + 12.0pt;mso-list:l10 level1 lfo11;tab-stops:list .5in'>Now we need to + associate <<<span class=SpellE>ComponentRef</span>>> <span + class=SpellE>StockBroker</span> to the <<<span class=SpellE>CollocationGroup</span>>> + running on the <<<span class=SpellE>NodeReference</span>>> + Broker, and <<<span class=SpellE>ComponentRef</span>>> <span + class=SpellE>StockDistributor</span> to the <<<span class=SpellE>CollocationGroup</span>>> + running on the <<<span class=SpellE>NodeReference</span>>> + Distributor. To do that, switch the Edit Mode Bar to Set Mode (<img + border=0 width=32 height=32 id="_x0000_i1041" src="Icons/SetMode.gif">), + and move the cursor to the <<<span class=SpellE>CollocationGroup</span>>> + running on <<<span class=SpellE>NodeReference</span>>> + Distributor, right-click on it. You will find the cursor is changed to set + mode cursor, and only the <<<span class=SpellE>CollocationGroup</span>>> + you clicked in is highlighted, as shown in Figure 11.<o:p></o:p></li> +</ol> + +<p class=MsoNormal align=center style='margin-bottom:12.0pt;text-align:center'><span +style='color:black'><img border=0 width=672 height=505 id="_x0000_i1042" +src="Images/fig11.jpg"><!-- 01.html,v 1.3 2006/02/10 14:34:35 mxiong Exp -->><br> +<br> +Figure 11<o:p></o:p></span></p> + +<p><span style='color:black'>Now move your cursor to <<<span +class=SpellE>ComponentRef</span>>> <span class=SpellE>StockDistributor</span>, +and left-click it, so that it looks like Figure 12.<o:p></o:p></span></p> + +<p class=MsoNormal align=center style='margin-bottom:12.0pt;text-align:center'><span +style='color:black'><img border=0 width=672 height=505 id="_x0000_i1043" +src="Images/fig12.jpg"> + +<!doctype HTML> + +><br> +<br> +Figure 12<o:p></o:p></span></p> + +<p style='margin-bottom:12.0pt'><span style='color:black'>This operation +associates <span class=SpellE><em>StockDistributor</em></span> component to the +<<<span class=SpellE>CollocationGroup</span>>> running on <em>Distributor</em> +node. To do the same with Broker, just right-click on another <<<span +class=SpellE>CollocationGroup</span>>>, and left-click on <span +class=SpellE>StockBroker</span> <<<span class=SpellE>CollocationGroup</span>>> +which is highlighted.<o:p></o:p></span></p> + +<div class=MsoNormal align=center style='text-align:center'><span +style='color:black'> + +<hr size=2 width="100%" align=center> + +</span></div> + +<p><a name=8></a><span style='color:black'>Up to this point, we are basically +done with the modeling part. Before we generate anything from this model +though, please <b>DO</b> remember to check the constraints of the model as we +mentioned earlier.<o:p></o:p></span></p> + +<p><span style='color:black'>After we are done with the modeling, the <span +class=SpellE>flattened_deploymentplan</span> interpreter that comes along with +PICML will help us to generate a <span class=SpellE>flattened_deploymentplan.cdp</span> +file. Please make sure you generate this file to <span class=SpellE>MyQuoter</span>/descriptors. +Note that to get the example <span class=SpellE>working<span style='font-family: +"Courier New"'>,</span>a</span> Node Map file should be created to map <span +class=SpellE>logicalnodes</span> to <span class=SpellE>NodeManager</span> +object <span class=SpellE>references,e.g</span>:<o:p></o:p></span></p> + +<pre wrap=""><span class=SpellE><span style='color:black'>DistributorNode</span></span><span +style='color:black'> corbaloc<span class=GramE>:iiop:localhost:30000</span>/NodeManager<o:p></o:p></span></pre><pre><span +class=SpellE><span style='color:black'>BrokerNode</span></span><span +style='color:black'><span style='mso-spacerun:yes'> </span>corbaloc<span +class=GramE>:iiop:localhost:40000</span>/NodeManager<o:p></o:p></span></pre><pre><span +style='color:black'><o:p> </o:p></span></pre><pre><span style='color:black'><o:p> </o:p></span></pre> + +<address style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span +style='color:black'><a href="mailto:ming.xiong@vanderbilt.edu">Ming Xiong<br> +</a></span><a href="mailto:abdullah.sowayan@lmco.com">Abdullah Sowayan</a></address> + +<address style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span +style='color:black'><o:p> </o:p></span></address> + +<p class=MsoNormal style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span +style='color:black'><!-- Created: Sat Nov 27 15:25:06 CST 1999 --><!-- hhmts start -->Last +modified:<!-- hhmts end --> <o:p></o:p></span></p> + +</div> + +</body> + +</html> diff --git a/modules/CIAO/docs/tutorials/Quoter/Simple/04.html b/modules/CIAO/docs/tutorials/Quoter/Simple/04.html new file mode 100644 index 00000000000..4e259355ba1 --- /dev/null +++ b/modules/CIAO/docs/tutorials/Quoter/Simple/04.html @@ -0,0 +1,413 @@ +<html xmlns:v="urn:schemas-microsoft-com:vml" +xmlns:o="urn:schemas-microsoft-com:office:office" +xmlns:w="urn:schemas-microsoft-com:office:word" +xmlns:p="urn:schemas-microsoft-com:office:powerpoint" +xmlns:oa="urn:schemas-microsoft-com:office:activation" +xmlns="http://www.w3.org/TR/REC-html40"> + +<head> +<meta http-equiv=Content-Type content="text/html; charset=us-ascii"> +<meta name=ProgId content=Word.Document> +<meta name=Generator content="Microsoft Word 11"> +<meta name=Originator content="Microsoft Word 11"> +<link rel=File-List href="04_files/filelist.xml"> +<link rel=Edit-Time-Data href="04_files/editdata.mso"> +<!--[if !mso]> +<style> +v\:* {behavior:url(#default#VML);} +o\:* {behavior:url(#default#VML);} +w\:* {behavior:url(#default#VML);} +.shape {behavior:url(#default#VML);} +</style> +<![endif]--> +<title>Building a Stock Quoter with TAO - A Tutorial</title> +<!--[if gte mso 9]><xml> + <o:DocumentProperties> + <o:Author>Abdullah Sowayan</o:Author> + <o:LastAuthor>Abdullah Sowayan</o:LastAuthor> + <o:Revision>3</o:Revision> + <o:TotalTime>1</o:TotalTime> + <o:Created>2006-11-06T21:26:00Z</o:Created> + <o:LastSaved>2006-11-06T21:34:00Z</o:LastSaved> + <o:Pages>1</o:Pages> + <o:Words>285</o:Words> + <o:Characters>1629</o:Characters> + <o:Company>Lockheed Martin</o:Company> + <o:Lines>13</o:Lines> + <o:Paragraphs>3</o:Paragraphs> + <o:CharactersWithSpaces>1911</o:CharactersWithSpaces> + <o:Version>11.8107</o:Version> + </o:DocumentProperties> +</xml><![endif]--><!--[if gte mso 9]><xml> + <w:WordDocument> + <w:ValidateAgainstSchemas/> + <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid> + <w:IgnoreMixedContent>false</w:IgnoreMixedContent> + <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText> + <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel> + </w:WordDocument> +</xml><![endif]--><!--[if gte mso 9]><xml> + <w:LatentStyles DefLockedState="false" LatentStyleCount="156"> + </w:LatentStyles> +</xml><![endif]--> +<style> +<!-- + /* Font Definitions */ + @font-face + {font-family:Wingdings; + panose-1:5 0 0 0 0 0 0 0 0 0; + mso-font-charset:2; + mso-generic-font-family:auto; + mso-font-pitch:variable; + mso-font-signature:0 268435456 0 0 -2147483648 0;} + /* Style Definitions */ + p.MsoNormal, li.MsoNormal, div.MsoNormal + {mso-style-parent:""; + margin:0in; + margin-bottom:.0001pt; + mso-pagination:widow-orphan; + font-size:12.0pt; + font-family:"Times New Roman"; + mso-fareast-font-family:"Times New Roman";} +h3 + {mso-margin-top-alt:auto; + margin-right:0in; + mso-margin-bottom-alt:auto; + margin-left:0in; + mso-pagination:widow-orphan; + mso-outline-level:3; + font-size:13.5pt; + font-family:"Times New Roman"; + font-weight:bold;} +a:link, span.MsoHyperlink + {color:#000FFF; + text-decoration:underline; + text-underline:single;} +a:visited, span.MsoHyperlinkFollowed + {color:#FF0F0F; + text-decoration:underline; + text-underline:single;} +p + {mso-margin-top-alt:auto; + margin-right:0in; + mso-margin-bottom-alt:auto; + margin-left:0in; + mso-pagination:widow-orphan; + font-size:12.0pt; + font-family:"Times New Roman"; + mso-fareast-font-family:"Times New Roman";} +address + {margin:0in; + margin-bottom:.0001pt; + mso-pagination:widow-orphan; + font-size:12.0pt; + font-family:"Times New Roman"; + font-style:italic;} +code + {font-family:"Courier New"; + mso-ascii-font-family:"Courier New"; + mso-fareast-font-family:"Times New Roman"; + mso-hansi-font-family:"Courier New"; + mso-bidi-font-family:"Courier New";} +@page Section1 + {size:8.5in 11.0in; + margin:1.0in 1.25in 1.0in 1.25in; + mso-header-margin:.5in; + mso-footer-margin:.5in; + mso-paper-source:0;} +div.Section1 + {page:Section1;} + /* List Definitions */ + @list l0 + {mso-list-id:20934335; + mso-list-template-ids:-306000872;} +@list l0:level1 + {mso-level-number-format:bullet; + mso-level-text:\F0B7; + mso-level-tab-stop:.5in; + mso-level-number-position:left; + text-indent:-.25in; + mso-ansi-font-size:10.0pt; + font-family:Symbol;} +@list l1 + {mso-list-id:67775701; + mso-list-template-ids:1355323582;} +@list l1:level1 + {mso-level-number-format:bullet; + mso-level-text:\F0B7; + mso-level-tab-stop:.5in; + mso-level-number-position:left; + text-indent:-.25in; + mso-ansi-font-size:10.0pt; + font-family:Symbol;} +@list l1:level2 + {mso-level-tab-stop:1.0in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l1:level3 + {mso-level-tab-stop:1.5in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l1:level4 + {mso-level-tab-stop:2.0in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l1:level5 + {mso-level-tab-stop:2.5in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l1:level6 + {mso-level-tab-stop:3.0in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l1:level7 + {mso-level-tab-stop:3.5in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l1:level8 + {mso-level-tab-stop:4.0in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l1:level9 + {mso-level-tab-stop:4.5in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l2 + {mso-list-id:170876734; + mso-list-template-ids:1310460404;} +@list l2:level1 + {mso-level-number-format:bullet; + mso-level-text:\F0B7; + mso-level-tab-stop:.5in; + mso-level-number-position:left; + text-indent:-.25in; + mso-ansi-font-size:10.0pt; + font-family:Symbol;} +@list l2:level2 + {mso-level-tab-stop:1.0in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l2:level3 + {mso-level-tab-stop:1.5in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l2:level4 + {mso-level-tab-stop:2.0in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l2:level5 + {mso-level-tab-stop:2.5in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l2:level6 + {mso-level-tab-stop:3.0in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l2:level7 + {mso-level-tab-stop:3.5in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l2:level8 + {mso-level-tab-stop:4.0in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l2:level9 + {mso-level-tab-stop:4.5in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l3 + {mso-list-id:232472744; + mso-list-template-ids:1463160066;} +@list l3:level1 + {mso-level-number-format:bullet; + mso-level-text:\F0A7; + mso-level-tab-stop:.5in; + mso-level-number-position:left; + text-indent:-.25in; + mso-ansi-font-size:10.0pt; + font-family:Wingdings;} +@list l4 + {mso-list-id:333609146; + mso-list-template-ids:-1273693138;} +@list l4:level1 + {mso-level-number-format:bullet; + mso-level-text:\F0A7; + mso-level-tab-stop:.5in; + mso-level-number-position:left; + text-indent:-.25in; + mso-ansi-font-size:10.0pt; + font-family:Wingdings;} +@list l4:level2 + {mso-level-tab-stop:1.0in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l4:level3 + {mso-level-tab-stop:1.5in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l4:level4 + {mso-level-tab-stop:2.0in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l4:level5 + {mso-level-tab-stop:2.5in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l4:level6 + {mso-level-tab-stop:3.0in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l4:level7 + {mso-level-tab-stop:3.5in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l4:level8 + {mso-level-tab-stop:4.0in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l4:level9 + {mso-level-tab-stop:4.5in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l5 + {mso-list-id:1166676480; + mso-list-template-ids:-2033257756;} +@list l5:level1 + {mso-level-number-format:bullet; + mso-level-text:\F0B7; + mso-level-tab-stop:.5in; + mso-level-number-position:left; + text-indent:-.25in; + mso-ansi-font-size:10.0pt; + font-family:Symbol;} +ol + {margin-bottom:0in;} +ul + {margin-bottom:0in;} +--> +</style> +<!--[if gte mso 10]> +<style> + /* Style Definitions */ + table.MsoNormalTable + {mso-style-name:"Table Normal"; + mso-tstyle-rowband-size:0; + mso-tstyle-colband-size:0; + mso-style-noshow:yes; + mso-style-parent:""; + mso-padding-alt:0in 5.4pt 0in 5.4pt; + mso-para-margin:0in; + mso-para-margin-bottom:.0001pt; + mso-pagination:widow-orphan; + font-size:10.0pt; + font-family:"Times New Roman"; + mso-ansi-language:#0400; + mso-fareast-language:#0400; + mso-bidi-language:#0400;} +</style> +<![endif]--><!-- $Id$ --><!--[if gte mso 9]><xml> + <o:shapedefaults v:ext="edit" spidmax="3074"/> +</xml><![endif]--><!--[if gte mso 9]><xml> + <o:shapelayout v:ext="edit"> + <o:idmap v:ext="edit" data="1"/> + </o:shapelayout></xml><![endif]--> +</head> + +<body bgcolor=white lang=EN-US link="#000FFF" vlink="#FF0F0F" style='tab-interval: +.5in'> + +<div class=Section1> + +<h3 align=center style='text-align:center'><span style='color:black'>Step 6: System +Deployment<o:p></o:p></span></h3> + +<h3 align=center style='text-align:center'><span style='color:black'><img +width=432 height=223 id="_x0000_i1025" src="images/Step6.JPG"><o:p></o:p></span></h3> + +<p class=MsoNormal><span style='color:black'>Now that we have all the +components and driver programs successfully built, along with the +flattened_deploymentplan generated by PICML, we will be able to run our +application<br> +<br> +From different command prompts in </span><code><span style='font-size:10.0pt; +color:black'>%CIAO_ROOT%/docs/tutorials/Quoter/Simple/descriptors/</span></code><span +style='color:black'> directory: <o:p></o:p></span></p> + +<ul type=disc> + <li class=MsoNormal style='color:black;mso-margin-top-alt:auto;mso-margin-bottom-alt: + auto;mso-list:l2 level1 lfo3;tab-stops:list .5in'>Start NodeManagers + (NodeDameon) by running <code><span style='font-size:10.0pt'>runNodeDaemon.pl</span></code><o:p></o:p></li> + <li class=MsoNormal style='color:black;mso-margin-top-alt:auto;mso-margin-bottom-alt: + auto;mso-list:l2 level1 lfo3;tab-stops:list .5in'>Start the execution + manager <code><span style='font-size:10.0pt'>%CIAO_ROOT%/DAnCE/ExecutionManager/Execution_Manager + -o ior -i Stock.dat</span></code> <o:p></o:p></li> +</ul> + +<p><span style='color:black'>The </span><code><span style='font-size:10.0pt; +color:black'>Stock.dat</span></code><span style='color:black'> file describes +the deployment daemons CIAO's Execution_Manager will contact to instantiate +ComponentServer's, home's, and component instances. Each line specify the name +of a installation "destination" and the corresponding IOR for the +CIAO_Daemon.<o:p></o:p></span></p> + +<ul type=square> + <li class=MsoNormal style='color:black;mso-margin-top-alt:auto;mso-margin-bottom-alt: + auto;mso-list:l4 level1 lfo6;tab-stops:list .5in'><em>NOTE</em>: As one + can see, we use the "Stock.dat" file to instruct the + Execution_Manager how to find the endpoint of each individual NodeManager + (i.e., Node Daemon) where component(s) will be deployed, so this is + non-standard. We plan to use Naming Service to do this in the future.<o:p></o:p></li> +</ul> + +<ul type=disc> + <li class=MsoNormal style='color:black;mso-margin-top-alt:auto;mso-margin-bottom-alt: + auto;mso-list:l1 level1 lfo9;tab-stops:list .5in'>Start the plan_launcher + by running <code><span style='font-size:10.0pt'>%CIAO_ROOT%/DAnCE/Plan_Launcher/Plan_Launcher + -p flattened_deploymentplan.cdp -k file://ior</span></code><o:p></o:p></li> + <li class=MsoNormal style='color:black;mso-margin-top-alt:auto;mso-margin-bottom-alt: + auto;mso-list:l1 level1 lfo9;tab-stops:list .5in'>By now the components + should be successfully deployed. You may run the driver program to start + the application. e.g. you can try the following<o:p></o:p></li> +</ul> + +<p class=MsoNormal style='margin-bottom:12.0pt'><span style='color:black'> +</span><code><span style='font-size:10.0pt;color:black'>%CIAO_ROOT%/docs/tutorials/Quoter/Simple/Distributor/Distributor.exe +-o</span></code><span style='color:black'><br> +<br> + </span><code><span style='font-size: +10.0pt;color:black'>%CIAO_ROOT%/docs/tutorials/Quoter/Simple/Broker/Broker.exe +-s MSFT</span></code><span style='color:black'><br> +<br> + </span><code><span style='font-size: +10.0pt;color:black'>%CIAO_ROOT%/docs/tutorials/Quoter/Simple/Broker/Broker.exe +-s IBM</span></code><span style='color:black'><br> +<br> + </span><code><span style='font-size: +10.0pt;color:black'>%CIAO_ROOT%/docs/tutorials/Quoter/Simple/Broker/Broker.exe +-u MSFT</span></code><span style='color:black'><br> +<br> + </span><code><span style='font-size: +10.0pt;color:black'>%CIAO_ROOT%/docs/tutorials/Quoter/Simple/Distributor/Distributor.exe +–f</span></code><code><span style='font-size:10.0pt'><o:p></o:p></span></code></p> + +<p class=MsoNormal style='margin-bottom:12.0pt'><code><span style='font-size: +10.0pt;color:black'><o:p> </o:p></span></code></p> + +<address style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span +style='color:black'><a href="mailto:ming.xiong@vanderbilt.edu">Ming Xiong<br> +</a></span><a href="mailto:abdullah.sowayan@lmco.com">Abdullah Sowayan</a></address> + +<address style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span +style='color:black'><o:p> </o:p></span></address> + +<p class=MsoNormal style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span +style='color:black'><!-- Created: Sat Nov 27 15:25:06 CST 1999 --><!-- hhmts start -->Last +modified:<!-- hhmts end --> <o:p></o:p></span></p> + +<p class=MsoNormal style='margin-bottom:12.0pt'><span style='color:black'><o:p> </o:p></span></p> + +</div> + +</body> + +</html> diff --git a/modules/CIAO/docs/tutorials/Quoter/Simple/Broker/Broker.cidl b/modules/CIAO/docs/tutorials/Quoter/Simple/Broker/Broker.cidl new file mode 100644 index 00000000000..a6d9bb29214 --- /dev/null +++ b/modules/CIAO/docs/tutorials/Quoter/Simple/Broker/Broker.cidl @@ -0,0 +1,22 @@ +//$Id$ + +//Stock.cidl,v 1.0 +/** + * @file Stock.cidl + * + * @author ming xiong <xiongm@isis.vanderbilt.edu> + */ + +#ifndef STOCK_CIDL +#define STOCK_CIDL + +#include "Broker.idl" + +composition session StockBroker_Impl { + home executor StockBrokerHome_Exec { + implements Stock::StockBrokerHome; + manages StockBroker_Exec; + }; +}; + +#endif /* STOCK_CIDL */ diff --git a/modules/CIAO/docs/tutorials/Quoter/Simple/Broker/Broker.cpp b/modules/CIAO/docs/tutorials/Quoter/Simple/Broker/Broker.cpp new file mode 100644 index 00000000000..fc059cc0d74 --- /dev/null +++ b/modules/CIAO/docs/tutorials/Quoter/Simple/Broker/Broker.cpp @@ -0,0 +1,110 @@ +//$Id$ +/* + * @file Broker.cpp + * + * @author Ming Xiong <mxiong@dre.vanderbilt.edu> + */ + +#include "BrokerC.h" +#include "ace/streams.h" +#include "ace/Get_Opt.h" + +const char *broker_ior = "file://Broker.ior"; +const char *subscribe_name = 0; +const char *unsubscribe_name = 0; + + +int +parse_args (int argc, char *argv[]) +{ + ACE_Get_Opt get_opts (argc, argv, "k:s:u:"); + int c; + + while ((c = get_opts ()) != -1) + { + switch (c) + { + case 'k': + broker_ior = get_opts.opt_arg (); + break; + + case 's': + subscribe_name = get_opts.opt_arg (); + break; + + case 'u': + unsubscribe_name = get_opts.opt_arg (); + break; + + case '?': + default: + ACE_ERROR_RETURN ((LM_ERROR, + "usage: %s\n" + "-k <Broker IOR> (default is file:\\broker.ior) \n" + "-s <stock name you wish to subscribe>\n" + "-u <stock name you wish to unsubscribe>\n" + "\n", + argv [0]), + -1); + } + } + + return 0; +} + +int main (int argc, char* argv[]) +{ + try + { + // initialize the ORB + CORBA::ORB_var orb = + CORBA::ORB_init (argc, argv,""); + + + if (parse_args (argc, argv) != 0) + return -1; + + // create the factory object reference of StockBrokerHome + CORBA::Object_var broker_obj = + orb->string_to_object (broker_ior); + + // downcast the object reference to the appropriate type + Stock::StockBroker_var broker = + Stock::StockBroker::_narrow (broker_obj.in ()); + + if (CORBA::is_nil (broker.in ())) + { + ACE_ERROR_RETURN ((LM_ERROR, + "Unable to acquire 'Broker' objref\n"), + -1); + } + + + if (subscribe_name != 0) + { + broker->stock_subscribe (subscribe_name); + + ACE_DEBUG ((LM_DEBUG, "Subscribe successful!\n")); + } + + if (unsubscribe_name != 0) + { + broker->stock_unsubscribe (unsubscribe_name); + + ACE_DEBUG ((LM_DEBUG, "Unsubscribe successful!\n")); + } + + // Finally destroy the ORB + orb->destroy (); + + } + catch (const CORBA::Exception& ex) + { + ex._tao_print_exception ("Who is the culprit \n"); + ACE_ERROR_RETURN ((LM_ERROR, + "Uncaught CORBA exception\n"), + 1); + } + + return 0; +} diff --git a/modules/CIAO/docs/tutorials/Quoter/Simple/Broker/Broker.idl b/modules/CIAO/docs/tutorials/Quoter/Simple/Broker/Broker.idl new file mode 100644 index 00000000000..dbe9a04364a --- /dev/null +++ b/modules/CIAO/docs/tutorials/Quoter/Simple/Broker/Broker.idl @@ -0,0 +1,35 @@ +//$Id$ + +#include "../Stock_Base/Stock_Base.idl" + +module Stock +{ + interface StockSubscriber { + /// subscribe to an interested stock + void stock_subscribe (in string stock_name) + raises (Invalid_Stock); + /// unsubscribe to an stock + void stock_unsubscribe (in string stock_name) + raises (Invalid_Stock); + }; + + /** + * @class StockBroker + * + * @brief component + */ + component StockBroker supports StockSubscriber + { + consumes StockName notify_in; + uses StockQuoter read_quoter; + }; + + /** + * @class StockBrokerHome + * + * @brief home for StockBroker component + */ + home StockBrokerHome manages StockBroker + { + }; +}; diff --git a/modules/CIAO/docs/tutorials/Quoter/Simple/Broker/Broker.mpc b/modules/CIAO/docs/tutorials/Quoter/Simple/Broker/Broker.mpc new file mode 100644 index 00000000000..627feb516a9 --- /dev/null +++ b/modules/CIAO/docs/tutorials/Quoter/Simple/Broker/Broker.mpc @@ -0,0 +1,84 @@ +// $Id$ +// This file is generated with "generate_component_mpc.pl -p Stock_Base Broker" + +project(Stock_Base_Broker_stub): ciao_client_dnc { + avoids += ace_for_tao + after += Stock_Base_stub + sharedname = Broker_stub + idlflags -= -GT + idlflags += -St \ + -Wb,stub_export_macro=BROKER_STUB_Export \ + -Wb,stub_export_include=Broker_stub_export.h \ + -Wb,skel_export_macro=BROKER_SVNT_Export \ + -Wb,skel_export_include=Broker_svnt_export.h + dynamicflags = BROKER_STUB_BUILD_DLL + libs += Stock_Base_stub + + IDL_Files { + Broker.idl + } + + Source_Files { + BrokerC.cpp + } +} + +project(Stock_Base_Broker_svnt) : ciao_servant_dnc { + avoids += ace_for_tao + after += Stock_Base_skel Stock_Base_Broker_stub + sharedname = Broker_svnt + libs += Broker_stub Stock_Base_stub Stock_Base_skel + + idlflags -= -GT + idlflags += -SS -St \ + -Wb,export_macro=BROKER_SVNT_Export \ + -Wb,export_include=Broker_svnt_export.h + dynamicflags = BROKER_SVNT_BUILD_DLL + + CIDL_Files { + Broker.cidl + } + + IDL_Files { + BrokerE.idl + } + + Source_Files { + BrokerEC.cpp + BrokerS.cpp + Broker_svnt.cpp + } +} + + +project(Stock_Base_Broker_exec) : ciao_component_dnc { + avoids += ace_for_tao + after += Stock_Base_Broker_svnt + sharedname = Broker_exec + libs += Broker_stub Broker_svnt Stock_Base_stub Stock_Base_skel + + dynamicflags = BROKER_EXEC_BUILD_DLL + + IDL_Files { + } + + Source_Files { + Broker_exec.cpp + } +} + + +project (Stock_Broker) : ciao_client_dnc, valuetype{ + avoids += ace_for_tao + exename = Broker + after += Stock_Base_Broker_stub + libs += Broker_stub Stock_Base_stub + + IDL_Files { + } + + Source_Files { + Broker.cpp + } +} + diff --git a/modules/CIAO/docs/tutorials/Quoter/Simple/Broker/Broker_exec.cpp b/modules/CIAO/docs/tutorials/Quoter/Simple/Broker/Broker_exec.cpp new file mode 100644 index 00000000000..4e85274ce8c --- /dev/null +++ b/modules/CIAO/docs/tutorials/Quoter/Simple/Broker/Broker_exec.cpp @@ -0,0 +1,200 @@ +//$Id$ +/* + * @file Broker_exec.cpp + * + * @author Ming Xiong <mxiong@dre.vanderbilt.edu> + */ + +#include "Broker_exec.h" +#include "ciao/CIAO_common.h" + + +namespace CIDL_StockBroker_Impl +{ + //================================================================== + // Component Executor Implementation Class: StockBroker_exec_i + //================================================================== + + StockBroker_exec_i::StockBroker_exec_i (void) + { + } + + StockBroker_exec_i::~StockBroker_exec_i (void) + { + } + + + // Supported or inherited operations. + + void + StockBroker_exec_i::stock_subscribe ( + const char * stock_name) + ACE_THROW_SPEC ((CORBA::SystemException, + Stock::Invalid_Stock)) + { + if ((strcmp (stock_name, "MSFT") == 0) || (strcmp (stock_name, "IBM") == 0)) + { + std::set<std::string>::iterator iter = this->subscribed_stock_list_.find (stock_name); + if (iter == this->subscribed_stock_list_.end ()) + { + this->subscribed_stock_list_.insert (stock_name); + } + } + else + { + throw Stock::Invalid_Stock (); + } + } + + void + StockBroker_exec_i::stock_unsubscribe ( + const char * stock_name) + ACE_THROW_SPEC ((CORBA::SystemException, + Stock::Invalid_Stock)) + { + if ((strcmp (stock_name, "MSFT") == 0) || (strcmp (stock_name, "IBM") == 0)) + { + std::set<std::string>::iterator iter = this->subscribed_stock_list_.find (stock_name); + if (iter != this->subscribed_stock_list_.end ()) + { + this->subscribed_stock_list_.erase (iter); + } + } + else + { + throw Stock::Invalid_Stock (); + } + + } + + + void + StockBroker_exec_i::push_notify_in ( + Stock::StockName *ev) + ACE_THROW_SPEC ((CORBA::SystemException)) + { + + ACE_DEBUG ((LM_INFO, + "Broker - Got message from Distributor\n")); + + CORBA::String_var stock_name = CORBA::string_dup (ev->name ()); + + // Retrieve stock information if the stock name is in the subscribed_stock_list + if (this->subscribed_stock_list_.find (stock_name.in ()) != this->subscribed_stock_list_.end ()) + { + Stock::StockQuoter_var quoter_obj = this->context_->get_connection_read_quoter (); + + if (CORBA::is_nil (quoter_obj.in ())) + { + throw CORBA::BAD_PARAM (); + } + + Stock::StockInfo_var info = quoter_obj->get_stock_info (stock_name.in ()); + + ACE_DEBUG ((LM_DEBUG, "Quoter - Current value of %s is %d\n", + stock_name.in (), + info->last)); + } + } + + // Operations from Components::SessionComponent + + void + StockBroker_exec_i::set_session_context ( + ::Components::SessionContext_ptr ctx) + ACE_THROW_SPEC (( + ::CORBA::SystemException, + ::Components::CCMException)) + { + this->context_ = StockBroker_Context::_narrow (ctx); + + if (0 == this->context_) + { + throw CORBA::INTERNAL (); + } + } + + void + StockBroker_exec_i::ciao_preactivate () + ACE_THROW_SPEC (( + ::CORBA::SystemException, + ::Components::CCMException)) + { + } + + void + StockBroker_exec_i::ciao_postactivate () + ACE_THROW_SPEC (( + ::CORBA::SystemException, + ::Components::CCMException)) + { + } + + void + StockBroker_exec_i::ccm_activate () + ACE_THROW_SPEC (( + ::CORBA::SystemException, + ::Components::CCMException)) + { + } + + void + StockBroker_exec_i::ccm_passivate () + ACE_THROW_SPEC (( + ::CORBA::SystemException, + ::Components::CCMException)) + { + } + + void + StockBroker_exec_i::ccm_remove () + ACE_THROW_SPEC (( + ::CORBA::SystemException, + ::Components::CCMException)) + { + } + + //================================================================== + // Home Executor Implementation Class: StockBrokerHome_exec_i + //================================================================== + + StockBrokerHome_exec_i::StockBrokerHome_exec_i (void) + { + } + + StockBrokerHome_exec_i::~StockBrokerHome_exec_i (void) + { + } + + ::Components::EnterpriseComponent_ptr + StockBrokerHome_exec_i::create () + ACE_THROW_SPEC (( + ::CORBA::SystemException, + ::Components::CCMException)) + { + ::Components::EnterpriseComponent_ptr retval = + ::Components::EnterpriseComponent::_nil (); + + ACE_NEW_THROW_EX ( + retval, + StockBroker_exec_i, + CORBA::NO_MEMORY ()); + + return retval; + } + + extern "C" BROKER_EXEC_Export ::Components::HomeExecutorBase_ptr + createStockBrokerHome_Impl (void) + { + ::Components::HomeExecutorBase_ptr retval = + ::Components::HomeExecutorBase::_nil (); + + ACE_NEW_RETURN ( + retval, + StockBrokerHome_exec_i, + ::Components::HomeExecutorBase::_nil ()); + + return retval; + } +} + diff --git a/modules/CIAO/docs/tutorials/Quoter/Simple/Broker/Broker_exec.h b/modules/CIAO/docs/tutorials/Quoter/Simple/Broker/Broker_exec.h new file mode 100644 index 00000000000..020acf28a12 --- /dev/null +++ b/modules/CIAO/docs/tutorials/Quoter/Simple/Broker/Broker_exec.h @@ -0,0 +1,141 @@ +//$Id$ +/* + * @file Broker_exec.h + * + * @author Ming Xiong <mxiong@dre.vanderbilt.edu> + */ + + +#ifndef CIAO_BROKER_EXEC_H +#define CIAO_BROKER_EXEC_H + +#include /**/ "ace/pre.h" + +#include "Broker_svnt.h" +#include "BrokerEC.h" +#include "Broker_exec_export.h" + +#include <set> +#include <string> + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include "tao/LocalObject.h" + +namespace CIDL_StockBroker_Impl +{ + + /** + * @class StockBroker_exec_i + * + * @brief Executor implementation + * + * This class implements Stock::StockBroker component + */ + class BROKER_EXEC_Export StockBroker_exec_i + : public virtual StockBroker_Exec, + public virtual TAO_Local_RefCounted_Object + { + public: + StockBroker_exec_i (void); + virtual ~StockBroker_exec_i (void); + + + // Supported or inherited operations. + + virtual void + stock_subscribe ( + const char * stock_name) + ACE_THROW_SPEC ((CORBA::SystemException, + Stock::Invalid_Stock)); + + virtual void + stock_unsubscribe ( + const char * stock_name) + ACE_THROW_SPEC ((CORBA::SystemException, + Stock::Invalid_Stock)); + + virtual void + push_notify_in ( + ::Stock::StockName *ev) + ACE_THROW_SPEC ((CORBA::SystemException)); + + // Operations from Components::SessionComponent + + virtual void + set_session_context ( + ::Components::SessionContext_ptr ctx) + ACE_THROW_SPEC (( + ::CORBA::SystemException, + ::Components::CCMException)); + + virtual void + ciao_preactivate () + ACE_THROW_SPEC (( + ::CORBA::SystemException, + ::Components::CCMException)); + + virtual void + ciao_postactivate () + ACE_THROW_SPEC (( + ::CORBA::SystemException, + ::Components::CCMException)); + + virtual void + ccm_activate () + ACE_THROW_SPEC (( + ::CORBA::SystemException, + ::Components::CCMException)); + + virtual void + ccm_passivate () + ACE_THROW_SPEC (( + ::CORBA::SystemException, + ::Components::CCMException)); + + virtual void + ccm_remove () + ACE_THROW_SPEC (( + ::CORBA::SystemException, + ::Components::CCMException)); + + protected: + StockBroker_Context *context_; + + private: + std::set<std::string> subscribed_stock_list_; + }; + + + /** + * @class StockBrokerHome_exec_i + * + * @brief Executor implementation + * + * This class implements Stock::StockBrokerHome component + */ + class BROKER_EXEC_Export StockBrokerHome_exec_i + : public virtual StockBrokerHome_Exec, + public virtual TAO_Local_RefCounted_Object + { + public: + StockBrokerHome_exec_i (void); + virtual ~StockBrokerHome_exec_i (void); + + virtual ::Components::EnterpriseComponent_ptr + create () + ACE_THROW_SPEC (( + ::CORBA::SystemException, + ::Components::CCMException)); + }; + + extern "C" BROKER_EXEC_Export ::Components::HomeExecutorBase_ptr + createStockBrokerHome_Impl (void); +} + +#include /**/ "ace/post.h" + +#endif /* CIAO_BROKER_EXEC_H */ + diff --git a/modules/CIAO/docs/tutorials/Quoter/Simple/Broker/Broker_exec_export.h b/modules/CIAO/docs/tutorials/Quoter/Simple/Broker/Broker_exec_export.h new file mode 100644 index 00000000000..cb7229d833e --- /dev/null +++ b/modules/CIAO/docs/tutorials/Quoter/Simple/Broker/Broker_exec_export.h @@ -0,0 +1,54 @@ + +// -*- C++ -*- +// $Id$ +// Definition for Win32 Export directives. +// This file is generated automatically by generate_export_file.pl BROKER_EXEC +// ------------------------------ +#ifndef BROKER_EXEC_EXPORT_H +#define BROKER_EXEC_EXPORT_H + +#include "ace/config-all.h" + +#if !defined (BROKER_EXEC_HAS_DLL) +# define BROKER_EXEC_HAS_DLL 1 +#endif /* ! BROKER_EXEC_HAS_DLL */ + +#if defined (BROKER_EXEC_HAS_DLL) && (BROKER_EXEC_HAS_DLL == 1) +# if defined (BROKER_EXEC_BUILD_DLL) +# define BROKER_EXEC_Export ACE_Proper_Export_Flag +# define BROKER_EXEC_SINGLETON_DECLARATION(T) ACE_EXPORT_SINGLETON_DECLARATION (T) +# define BROKER_EXEC_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) ACE_EXPORT_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) +# else /* BROKER_EXEC_BUILD_DLL */ +# define BROKER_EXEC_Export ACE_Proper_Import_Flag +# define BROKER_EXEC_SINGLETON_DECLARATION(T) ACE_IMPORT_SINGLETON_DECLARATION (T) +# define BROKER_EXEC_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) ACE_IMPORT_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) +# endif /* BROKER_EXEC_BUILD_DLL */ +#else /* BROKER_EXEC_HAS_DLL == 1 */ +# define BROKER_EXEC_Export +# define BROKER_EXEC_SINGLETON_DECLARATION(T) +# define BROKER_EXEC_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) +#endif /* BROKER_EXEC_HAS_DLL == 1 */ + +// Set BROKER_EXEC_NTRACE = 0 to turn on library specific tracing even if +// tracing is turned off for ACE. +#if !defined (BROKER_EXEC_NTRACE) +# if (ACE_NTRACE == 1) +# define BROKER_EXEC_NTRACE 1 +# else /* (ACE_NTRACE == 1) */ +# define BROKER_EXEC_NTRACE 0 +# endif /* (ACE_NTRACE == 1) */ +#endif /* !BROKER_EXEC_NTRACE */ + +#if (BROKER_EXEC_NTRACE == 1) +# define BROKER_EXEC_TRACE(X) +#else /* (BROKER_EXEC_NTRACE == 1) */ +# if !defined (ACE_HAS_TRACE) +# define ACE_HAS_TRACE +# endif /* ACE_HAS_TRACE */ +# define BROKER_EXEC_TRACE(X) ACE_TRACE_IMPL(X) +# include "ace/Trace.h" +#endif /* (BROKER_EXEC_NTRACE == 1) */ + +#endif /* BROKER_EXEC_EXPORT_H */ + +// End of auto generated file. diff --git a/modules/CIAO/docs/tutorials/Quoter/Simple/Broker/Broker_stub_export.h b/modules/CIAO/docs/tutorials/Quoter/Simple/Broker/Broker_stub_export.h new file mode 100644 index 00000000000..1d7c2c5fc2b --- /dev/null +++ b/modules/CIAO/docs/tutorials/Quoter/Simple/Broker/Broker_stub_export.h @@ -0,0 +1,54 @@ + +// -*- C++ -*- +// $Id$ +// Definition for Win32 Export directives. +// This file is generated automatically by generate_export_file.pl BROKER_STUB +// ------------------------------ +#ifndef BROKER_STUB_EXPORT_H +#define BROKER_STUB_EXPORT_H + +#include "ace/config-all.h" + +#if !defined (BROKER_STUB_HAS_DLL) +# define BROKER_STUB_HAS_DLL 1 +#endif /* ! BROKER_STUB_HAS_DLL */ + +#if defined (BROKER_STUB_HAS_DLL) && (BROKER_STUB_HAS_DLL == 1) +# if defined (BROKER_STUB_BUILD_DLL) +# define BROKER_STUB_Export ACE_Proper_Export_Flag +# define BROKER_STUB_SINGLETON_DECLARATION(T) ACE_EXPORT_SINGLETON_DECLARATION (T) +# define BROKER_STUB_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) ACE_EXPORT_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) +# else /* BROKER_STUB_BUILD_DLL */ +# define BROKER_STUB_Export ACE_Proper_Import_Flag +# define BROKER_STUB_SINGLETON_DECLARATION(T) ACE_IMPORT_SINGLETON_DECLARATION (T) +# define BROKER_STUB_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) ACE_IMPORT_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) +# endif /* BROKER_STUB_BUILD_DLL */ +#else /* BROKER_STUB_HAS_DLL == 1 */ +# define BROKER_STUB_Export +# define BROKER_STUB_SINGLETON_DECLARATION(T) +# define BROKER_STUB_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) +#endif /* BROKER_STUB_HAS_DLL == 1 */ + +// Set BROKER_STUB_NTRACE = 0 to turn on library specific tracing even if +// tracing is turned off for ACE. +#if !defined (BROKER_STUB_NTRACE) +# if (ACE_NTRACE == 1) +# define BROKER_STUB_NTRACE 1 +# else /* (ACE_NTRACE == 1) */ +# define BROKER_STUB_NTRACE 0 +# endif /* (ACE_NTRACE == 1) */ +#endif /* !BROKER_STUB_NTRACE */ + +#if (BROKER_STUB_NTRACE == 1) +# define BROKER_STUB_TRACE(X) +#else /* (BROKER_STUB_NTRACE == 1) */ +# if !defined (ACE_HAS_TRACE) +# define ACE_HAS_TRACE +# endif /* ACE_HAS_TRACE */ +# define BROKER_STUB_TRACE(X) ACE_TRACE_IMPL(X) +# include "ace/Trace.h" +#endif /* (BROKER_STUB_NTRACE == 1) */ + +#endif /* BROKER_STUB_EXPORT_H */ + +// End of auto generated file. diff --git a/modules/CIAO/docs/tutorials/Quoter/Simple/Broker/Broker_svnt_export.h b/modules/CIAO/docs/tutorials/Quoter/Simple/Broker/Broker_svnt_export.h new file mode 100644 index 00000000000..18f606e5539 --- /dev/null +++ b/modules/CIAO/docs/tutorials/Quoter/Simple/Broker/Broker_svnt_export.h @@ -0,0 +1,54 @@ + +// -*- C++ -*- +// $Id$ +// Definition for Win32 Export directives. +// This file is generated automatically by generate_export_file.pl BROKER_SVNT +// ------------------------------ +#ifndef BROKER_SVNT_EXPORT_H +#define BROKER_SVNT_EXPORT_H + +#include "ace/config-all.h" + +#if !defined (BROKER_SVNT_HAS_DLL) +# define BROKER_SVNT_HAS_DLL 1 +#endif /* ! BROKER_SVNT_HAS_DLL */ + +#if defined (BROKER_SVNT_HAS_DLL) && (BROKER_SVNT_HAS_DLL == 1) +# if defined (BROKER_SVNT_BUILD_DLL) +# define BROKER_SVNT_Export ACE_Proper_Export_Flag +# define BROKER_SVNT_SINGLETON_DECLARATION(T) ACE_EXPORT_SINGLETON_DECLARATION (T) +# define BROKER_SVNT_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) ACE_EXPORT_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) +# else /* BROKER_SVNT_BUILD_DLL */ +# define BROKER_SVNT_Export ACE_Proper_Import_Flag +# define BROKER_SVNT_SINGLETON_DECLARATION(T) ACE_IMPORT_SINGLETON_DECLARATION (T) +# define BROKER_SVNT_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) ACE_IMPORT_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) +# endif /* BROKER_SVNT_BUILD_DLL */ +#else /* BROKER_SVNT_HAS_DLL == 1 */ +# define BROKER_SVNT_Export +# define BROKER_SVNT_SINGLETON_DECLARATION(T) +# define BROKER_SVNT_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) +#endif /* BROKER_SVNT_HAS_DLL == 1 */ + +// Set BROKER_SVNT_NTRACE = 0 to turn on library specific tracing even if +// tracing is turned off for ACE. +#if !defined (BROKER_SVNT_NTRACE) +# if (ACE_NTRACE == 1) +# define BROKER_SVNT_NTRACE 1 +# else /* (ACE_NTRACE == 1) */ +# define BROKER_SVNT_NTRACE 0 +# endif /* (ACE_NTRACE == 1) */ +#endif /* !BROKER_SVNT_NTRACE */ + +#if (BROKER_SVNT_NTRACE == 1) +# define BROKER_SVNT_TRACE(X) +#else /* (BROKER_SVNT_NTRACE == 1) */ +# if !defined (ACE_HAS_TRACE) +# define ACE_HAS_TRACE +# endif /* ACE_HAS_TRACE */ +# define BROKER_SVNT_TRACE(X) ACE_TRACE_IMPL(X) +# include "ace/Trace.h" +#endif /* (BROKER_SVNT_NTRACE == 1) */ + +#endif /* BROKER_SVNT_EXPORT_H */ + +// End of auto generated file. diff --git a/modules/CIAO/docs/tutorials/Quoter/Simple/Distributor/Distributor.cidl b/modules/CIAO/docs/tutorials/Quoter/Simple/Distributor/Distributor.cidl new file mode 100644 index 00000000000..53268e84569 --- /dev/null +++ b/modules/CIAO/docs/tutorials/Quoter/Simple/Distributor/Distributor.cidl @@ -0,0 +1,21 @@ +//$Id$ +//Distributor.cidl,v 1.0 +/** + * @file Distributor.cidl + * + * @author ming xiong <xiongm@isis.vanderbilt.edu> + */ + +#ifndef DISTRIBUTOR_CIDL +#define DISTRIBUTOR_CIDL + +#include "Distributor.idl" + +composition session StockDistributor_Impl { + home executor StockDistributorHome_Exec { + implements Stock::StockDistributorHome; + manages StockDistributor_Exec; + }; +}; + +#endif /* DISTRIBUTOR_CIDL */ diff --git a/modules/CIAO/docs/tutorials/Quoter/Simple/Distributor/Distributor.cpp b/modules/CIAO/docs/tutorials/Quoter/Simple/Distributor/Distributor.cpp new file mode 100644 index 00000000000..d99fde85c7c --- /dev/null +++ b/modules/CIAO/docs/tutorials/Quoter/Simple/Distributor/Distributor.cpp @@ -0,0 +1,115 @@ +//$Id$ +/* + * @file Distributor.cpp + * + * @author Ming Xiong <mxiong@dre.vanderbilt.edu> + */ + + +#include "DistributorC.h" +#include "ace/streams.h" +#include "ace/Get_Opt.h" + +const char *distributor_ior = "file://Distributor.ior"; +int rate = 2; +int turn_on = 1; + +int +parse_args (int argc, char *argv[]) +{ + ACE_Get_Opt get_opts (argc, argv, "k:r:of"); + int c; + + while ((c = get_opts ()) != -1) + { + switch (c) + { + case 'k': + distributor_ior = get_opts.opt_arg (); + break; + + case 'o': + turn_on = 1; + break; + + case 'f': + turn_on = 0; + break; + + case 'r': + rate = ACE_OS::atoi (get_opts.opt_arg ()); + break; + + case '?': + default: + ACE_ERROR_RETURN ((LM_ERROR, + "usage: %s\n" + "-o (Start the distribution service)\n" + "-f (Stop the distribution service)\n" + "-k <Distributor IOR> (default is file:\\distributor.ior) \n" + "-r <broadcast frequency in Hertz> (default is 2)\n" + "\n", + argv [0]), + -1); + } + } + + return 0; +} + + +int main (int argc, char* argv[]) +{ + try + { + // initialize the ORB + CORBA::ORB_var orb = + CORBA::ORB_init (argc, argv,""); + + if (parse_args (argc, argv) != 0) + { + return -1; + } + + // create the factory object reference, + CORBA::Object_var distributor_obj = + orb->string_to_object (distributor_ior); + + // downcast the object reference to the appropriate type + Stock::StockDistributor_var distributor = + Stock::StockDistributor::_narrow (distributor_obj.in ()); + + if (CORBA::is_nil (distributor.in ())) + { + ACE_ERROR_RETURN ((LM_ERROR, + "Unable to acquire 'Distributor' objref\n"), + -1); + } + + if (turn_on) + { + distributor->rate (rate); + + ACE_DEBUG ((LM_DEBUG, "Start up the Distribution service\n")); + + distributor->start (); + } + else + { + ACE_DEBUG ((LM_DEBUG, "Stop the Distribution service\n")); + + distributor->stop (); + } + + orb->destroy (); + } + catch (const CORBA::Exception& ex) + { + ex._tao_print_exception ("Who is the culprit \n"); + ACE_ERROR_RETURN ((LM_ERROR, + "Uncaught CORBA exception\n"), + 1); + } + + return 0; +} diff --git a/modules/CIAO/docs/tutorials/Quoter/Simple/Distributor/Distributor.idl b/modules/CIAO/docs/tutorials/Quoter/Simple/Distributor/Distributor.idl new file mode 100644 index 00000000000..393f0fa94c1 --- /dev/null +++ b/modules/CIAO/docs/tutorials/Quoter/Simple/Distributor/Distributor.idl @@ -0,0 +1,42 @@ +//$Id$ + +#include "../Stock_Base/Stock_Base.idl" + +module Stock +{ + /** + * @class Trigger + * + * @brief supported interface + */ + interface Trigger { + /// Start the real-time monitoring service + void start (); + /// Stop the real-time monitoring service + void stop (); + }; + + + /** + * @class StockDistributor + * + * @brief component + */ + component StockDistributor supports Trigger + { + publishes StockName notify_out; + provides StockQuoter push_quoter; + attribute long rate; + }; + + + /** + * @class StockDistributorHome + * + * @brief home for StockDistributor component + */ + home StockDistributorHome manages StockDistributor + { + }; + +}; diff --git a/modules/CIAO/docs/tutorials/Quoter/Simple/Distributor/Distributor.mpc b/modules/CIAO/docs/tutorials/Quoter/Simple/Distributor/Distributor.mpc new file mode 100644 index 00000000000..aad6ad54195 --- /dev/null +++ b/modules/CIAO/docs/tutorials/Quoter/Simple/Distributor/Distributor.mpc @@ -0,0 +1,88 @@ +// $Id$ +// This file is generated with "generate_component_mpc.pl -p Stock_Base Distributor" + +project(Stock_Base_Distributor_stub): ciao_client_dnc { + avoids += ace_for_tao + after += Stock_Base_stub + sharedname = Distributor_stub + idlflags -= -GT + idlflags += -St \ + -Wb,stub_export_macro=DISTRIBUTOR_STUB_Export \ + -Wb,stub_export_include=Distributor_stub_export.h \ + -Wb,skel_export_macro=DISTRIBUTOR_SVNT_Export \ + -Wb,skel_export_include=Distributor_svnt_export.h + dynamicflags = DISTRIBUTOR_STUB_BUILD_DLL + + libs += Stock_Base_stub + + IDL_Files { + Distributor.idl + } + + Source_Files { + DistributorC.cpp + } +} + +project(Stock_Base_Distributor_svnt) : ciao_servant_dnc { + avoids += ace_for_tao + after += Stock_Base_skel Stock_Base_Distributor_stub + sharedname = Distributor_svnt + libs += Distributor_stub Stock_Base_stub Stock_Base_skel + + idlflags -= -GT + idlflags += -SS -St \ + -Wb,export_macro=DISTRIBUTOR_SVNT_Export \ + -Wb,export_include=Distributor_svnt_export.h + dynamicflags = DISTRIBUTOR_SVNT_BUILD_DLL + + CIDL_Files { + Distributor.cidl + } + + IDL_Files { + DistributorE.idl + } + + Source_Files { + DistributorEC.cpp + DistributorS.cpp + Distributor_svnt.cpp + } +} + + +project(Stock_Base_Distributor_exec) : ciao_component_dnc { + avoids += ace_for_tao + after += Stock_Base_Distributor_svnt + sharedname = Distributor_exec + libs += Distributor_stub \ + Distributor_svnt \ + Stock_Base_stub \ + Stock_Base_skel + + dynamicflags = DISTRIBUTOR_EXEC_BUILD_DLL + + IDL_Files { + } + + Source_Files { + Distributor_exec.cpp + } +} + + +project (Stock_Distributor) : ciao_client_dnc, valuetype{ + avoids += ace_for_tao + exename = Distributor + after += Stock_Base_Distributor_stub + libs += Distributor_stub Stock_Base_stub + + IDL_Files { + } + + Source_Files { + Distributor.cpp + } +} + diff --git a/modules/CIAO/docs/tutorials/Quoter/Simple/Distributor/Distributor_exec.cpp b/modules/CIAO/docs/tutorials/Quoter/Simple/Distributor/Distributor_exec.cpp new file mode 100644 index 00000000000..1eaafa0027d --- /dev/null +++ b/modules/CIAO/docs/tutorials/Quoter/Simple/Distributor/Distributor_exec.cpp @@ -0,0 +1,358 @@ +//$Id$ +/* + * @file Distributor_exec.cpp + * + * @author Ming Xiong <mxiong@dre.vanderbilt.edu> + */ + +#include "Distributor_exec.h" +#include "ciao/CIAO_common.h" +#include "ace/Reactor.h" + + +namespace CIDL_StockDistributor_Impl +{ + + // initialze the stock values + CORBA::Long + StockDistributor_exec_i::ibm_ = 100; + + CORBA::Long + StockDistributor_exec_i::msft_ = 101; + + //================================================================== + // C L A S S: pulse_Generator + //================================================================== + + pulse_Generator::pulse_Generator (StockDistributor_exec_i *callback) + : active_ (0), + pulse_callback_ (callback) + { + // initialize the reactor + this->reactor (ACE_Reactor::instance ()); + } + + pulse_Generator::~pulse_Generator () + { + } + + int + pulse_Generator::open_h () + { + // convert the task into a active object that runs in separate thread + return this->activate (); + } + + int + pulse_Generator::close_h () + { + this->reactor ()->end_reactor_event_loop (); + + // wait for all threads in the task to exit before it returns + return this->wait (); + } + + int + pulse_Generator::start (CORBA::Long hertz) + { + // return if not valid + if (hertz == 0 || this->active_ != 0) + { + return -1; + } + + // calculate the interval time + long usec = 1000000 / hertz; + + if (this->reactor ()->schedule_timer (this, + 0, + ACE_Time_Value (0, usec), + ACE_Time_Value (0, usec)) == -1) + { + ACE_ERROR_RETURN ((LM_ERROR, + "Unable to setup Timer\n"), + -1); + + } + + this->active_ = 1; + return 0; + } + + int + pulse_Generator::stop (void) + { + // return if not valid. + if (this->active_ == 0) + { + return -1; + } + // cancle the timer + this->reactor ()->cancel_timer (this); + this->active_ = 0; + return 0; + } + + int + pulse_Generator::active (void) + { + return this->active_; + } + + int + pulse_Generator::handle_close (ACE_HANDLE handle, + ACE_Reactor_Mask close_mask) + { + if (CIAO::debug_level () > 0) + { + ACE_DEBUG ((LM_DEBUG, + ACE_TEXT ("[%x] handle = %d, close_mask = %d\n"), + this, + handle, + close_mask)); + } + return 0; + } + + int + pulse_Generator::handle_timeout (const ACE_Time_Value &, + const void *) + { + // Notify the subscribers + this->pulse_callback_->push_notify_out (); + return 0; + } + + int + pulse_Generator::svc (void) + { + // define the owner of the reactor thread + this->reactor ()->owner (ACE_OS::thr_self ()); + + // run event loop to wait for event, and then dispatch them to corresponding handlers + this->reactor ()->run_reactor_event_loop (); + + return 0; + } + + + + //================================================================== + // Facet Executor Implementation Class: StockQuoter_exec_i + //================================================================== + + ::Stock::StockInfo * + StockQuoter_exec_i::get_stock_info (const char *stock_name) + ACE_THROW_SPEC (( + ::CORBA::SystemException, + ::Stock::Invalid_Stock)) + { + if (strcmp (stock_name, "MSFT") == 0) + { + Stock::StockInfo_var info = new Stock::StockInfo; + info->name = CORBA::string_dup ("MSFT"); + info->high = 10000; + info->low = 0; + info->last = this->distributor_.msft_; // retrieve the current stock value + return info._retn (); + } + else if (strcmp (stock_name, "IBM") == 0) + { + Stock::StockInfo_var info = new Stock::StockInfo; + info->name = CORBA::string_dup ("IBM"); + info->high = 10000; + info->low = 0; + info->last = this->distributor_.ibm_; // retrieve the current stock value + return info._retn (); + } + else + { + ACE_THROW_RETURN (Stock::Invalid_Stock (), 0); + } + } + + //================================================================== + // Component Executor Implementation Class: StockDistributor_exec_i + //================================================================== + + StockDistributor_exec_i::StockDistributor_exec_i (void) + : rate_ (0), pulser_ (this) + { + } + + StockDistributor_exec_i::~StockDistributor_exec_i (void) + { + } + + // Supported or inherited operations. + + void + StockDistributor_exec_i::start () + ACE_THROW_SPEC ((CORBA::SystemException)) + { + if (this->rate_ == 0 || this->pulser_.active()) + { + throw CORBA::BAD_PARAM (); + } + + this->pulser_.start (this->rate_); + } + + void + StockDistributor_exec_i::stop () + ACE_THROW_SPEC ((CORBA::SystemException)) + { + if (! this->pulser_.active ()) + { + throw CORBA::BAD_INV_ORDER (); + } + + this->pulser_.stop (); + } + + // Attribute operations. + + ::CORBA::Long + StockDistributor_exec_i::rate () + ACE_THROW_SPEC ((CORBA::SystemException)) + { + return this->rate_; + } + + void + StockDistributor_exec_i::rate ( + ::CORBA::Long rate) + ACE_THROW_SPEC ((CORBA::SystemException)) + { + this->rate_ = rate; + } + + // Port operations. + + ::Stock::CCM_StockQuoter_ptr + StockDistributor_exec_i::get_push_quoter () + ACE_THROW_SPEC ((CORBA::SystemException)) + { + return new StockQuoter_exec_i (*this); + } + + void + StockDistributor_exec_i::push_notify_out () + ACE_THROW_SPEC ((CORBA::SystemException)) + { + this->msft_++; + this->ibm_++; + + Stock::StockName_var ev_msft = new OBV_Stock::StockName; + ev_msft->name (CORBA::string_dup ("MSFT")); + this->context_->push_notify_out (ev_msft.in ()); + + Stock::StockName_var ev_ibm = new OBV_Stock::StockName; + ev_ibm->name (CORBA::string_dup ("IBM")); + this->context_->push_notify_out (ev_ibm.in ()); + } + + // Operations from Components::SessionComponent + + void + StockDistributor_exec_i::set_session_context ( + ::Components::SessionContext_ptr ctx) + ACE_THROW_SPEC (( + ::CORBA::SystemException, + ::Components::CCMException)) + { + this->context_ = StockDistributor_Context::_narrow (ctx); + + if (this->context_ == 0) + { + throw CORBA::INTERNAL (); + } + } + + void + StockDistributor_exec_i::ciao_preactivate () + ACE_THROW_SPEC (( + ::CORBA::SystemException, + ::Components::CCMException)) + { + } + + void + StockDistributor_exec_i::ciao_postactivate () + ACE_THROW_SPEC (( + ::CORBA::SystemException, + ::Components::CCMException)) + { + } + + void + StockDistributor_exec_i::ccm_activate () + ACE_THROW_SPEC (( + ::CORBA::SystemException, + ::Components::CCMException)) + { + // Start the active object + this->pulser_.open_h (); + } + + void + StockDistributor_exec_i::ccm_passivate () + ACE_THROW_SPEC (( + ::CORBA::SystemException, + ::Components::CCMException)) + { + // Deactivate the active object + this->pulser_.close_h (); + } + + void + StockDistributor_exec_i::ccm_remove () + ACE_THROW_SPEC (( + ::CORBA::SystemException, + ::Components::CCMException)) + { + } + + //================================================================== + // Home Executor Implementation Class: StockDistributorHome_exec_i + //================================================================== + + StockDistributorHome_exec_i::StockDistributorHome_exec_i (void) + { + } + + StockDistributorHome_exec_i::~StockDistributorHome_exec_i (void) + { + } + + ::Components::EnterpriseComponent_ptr + StockDistributorHome_exec_i::create () + ACE_THROW_SPEC (( + ::CORBA::SystemException, + ::Components::CCMException)) + { + ::Components::EnterpriseComponent_ptr retval = + ::Components::EnterpriseComponent::_nil (); + + ACE_NEW_THROW_EX ( + retval, + StockDistributor_exec_i, + CORBA::NO_MEMORY ()); + return retval; + } + + extern "C" DISTRIBUTOR_EXEC_Export ::Components::HomeExecutorBase_ptr + createStockDistributorHome_Impl (void) + { + ::Components::HomeExecutorBase_ptr retval = + ::Components::HomeExecutorBase::_nil (); + + ACE_NEW_RETURN ( + retval, + StockDistributorHome_exec_i, + ::Components::HomeExecutorBase::_nil ()); + + return retval; + } +} + diff --git a/modules/CIAO/docs/tutorials/Quoter/Simple/Distributor/Distributor_exec.h b/modules/CIAO/docs/tutorials/Quoter/Simple/Distributor/Distributor_exec.h new file mode 100644 index 00000000000..b890eb0365f --- /dev/null +++ b/modules/CIAO/docs/tutorials/Quoter/Simple/Distributor/Distributor_exec.h @@ -0,0 +1,258 @@ +//$Id$ +/* + * @file Distributor_exec.h + * + * @author Ming Xiong <mxiong@dre.vanderbilt.edu> + */ + + + +#ifndef CIAO_DISTRIBUTOR_EXEC_H +#define CIAO_DISTRIBUTOR_EXEC_H + +#include /**/ "ace/pre.h" +#include "ace/Thread_Manager.h" +#include "ace/Task.h" + + +#include "Distributor_svnt.h" +#include "DistributorEC.h" +#include "Distributor_exec_export.h" + + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include "tao/LocalObject.h" + +namespace CIDL_StockDistributor_Impl +{ + class StockDistributor_exec_i; + + /** + * @class StockQuoter_exec_i + * + * @brief Executor implementation + * + * This class implements Stock::StockQuoter interface. We use this interface + * to acquire the information of the stock + */ + class DISTRIBUTOR_EXEC_Export StockQuoter_exec_i + : public virtual ::Stock::CCM_StockQuoter, + public virtual TAO_Local_RefCounted_Object + { + public: + StockQuoter_exec_i (StockDistributor_exec_i &distributor) + :distributor_ (distributor) + { + } + + // Operations from ::Stock::StockQuoter + + virtual ::Stock::StockInfo * + get_stock_info ( + const char * stock_name) + ACE_THROW_SPEC (( + ::CORBA::SystemException, + ::Stock::Invalid_Stock)); + + /// User defined + + private: + /// Maintains a handle to the distributor so that the quoter can refer to it for latest quote + StockDistributor_exec_i &distributor_; + }; + + class StockDistributor_exec_i; + + /** + * @class pulse generator + * + * @brief an active object used by StockDistributor to perform periodical pulse generation + * + */ + class pulse_Generator : public ACE_Task_Base + { + public: + pulse_Generator (StockDistributor_exec_i *callback); + + ~pulse_Generator (); + + /// Hook method that performs application-defined initialization activities + int open_h (void); + + /// Hook method that performs application-defined destruction activites + int close_h (void); + + /// appliation-defined method for starting the pulse-generation service + int start (CORBA::Long hertz); + + /// application-defined method for stopping the pulse-generation service + int stop (void); + + /// Indicate whether the current object is active + int active (void); + + /// Handle the timeout. + virtual int handle_timeout (const ACE_Time_Value &tv, + const void *arg); + + /// Called when timer handler is removed. + virtual int handle_close (ACE_HANDLE handle, + ACE_Reactor_Mask close_mask); + + /// Hook methods implemnting the task's service processing, + /// invoked by all threads activated by activate () method + virtual int svc (void); + + private: + /// Tracking whether we are actively generating pulse or not. + int active_; + + /// Maintains a handle that actually process the event + StockDistributor_exec_i *pulse_callback_; + + }; + + + /** + * @class StockDistributor_exec_i + * + * @brief Executor implementation + * + * This class implements Stock::StockDistributor component + */ + class DISTRIBUTOR_EXEC_Export StockDistributor_exec_i + : public virtual StockDistributor_Exec, + public virtual TAO_Local_RefCounted_Object + { + public: + StockDistributor_exec_i (void); + virtual ~StockDistributor_exec_i (void); + + // Supported or inherited operations. + + virtual void + start () + ACE_THROW_SPEC ((CORBA::SystemException)); + + virtual void + stop () + ACE_THROW_SPEC ((CORBA::SystemException)); + + // Attribute operations. + + virtual ::CORBA::Long + rate () + ACE_THROW_SPEC ((CORBA::SystemException)); + + virtual void + rate ( + ::CORBA::Long) + ACE_THROW_SPEC ((CORBA::SystemException)); + + // Port operations. + + virtual ::Stock::CCM_StockQuoter_ptr + get_push_quoter () + ACE_THROW_SPEC ((CORBA::SystemException)); + + // Operations from Components::SessionComponent + + virtual void + set_session_context ( + ::Components::SessionContext_ptr ctx) + ACE_THROW_SPEC (( + ::CORBA::SystemException, + ::Components::CCMException)); + + virtual void + ciao_preactivate () + ACE_THROW_SPEC (( + ::CORBA::SystemException, + ::Components::CCMException)); + + virtual void + ciao_postactivate () + ACE_THROW_SPEC (( + ::CORBA::SystemException, + ::Components::CCMException)); + + virtual void + ccm_activate () + ACE_THROW_SPEC (( + ::CORBA::SystemException, + ::Components::CCMException)); + + virtual void + ccm_passivate () + ACE_THROW_SPEC (( + ::CORBA::SystemException, + ::Components::CCMException)); + + virtual void + ccm_remove () + ACE_THROW_SPEC (( + ::CORBA::SystemException, + ::Components::CCMException)); + + protected: + StockDistributor_Context *context_; + + /// User defined members + public: + + /// push event to all subscribers + void push_notify_out () + ACE_THROW_SPEC (( + ::CORBA::SystemException + )); + + private: + /// pulse generation rate + CORBA::Long rate_; + + /// pulser object + pulse_Generator pulser_; + + /// "real-time" stock value + static CORBA::Long msft_; + + /// "real-tiime" stock value + static CORBA::Long ibm_; + + friend class StockQuoter_exec_i; + }; + + + /** + * @class StockDistributorHome_exec_i + * + * @brief Executor implementation + * + * This class implements Stock::StockDistributorHome + */ + class DISTRIBUTOR_EXEC_Export StockDistributorHome_exec_i + : public virtual StockDistributorHome_Exec, + public virtual TAO_Local_RefCounted_Object + { + public: + StockDistributorHome_exec_i (void); + virtual ~StockDistributorHome_exec_i (void); + + virtual ::Components::EnterpriseComponent_ptr + create () + ACE_THROW_SPEC (( + ::CORBA::SystemException, + ::Components::CCMException)); + }; + + extern "C" DISTRIBUTOR_EXEC_Export ::Components::HomeExecutorBase_ptr + createStockDistributorHome_Impl (void); +} + +#include /**/ "ace/post.h" + +#endif /* CIAO_DISTRIBUTOR_EXEC_H */ + diff --git a/modules/CIAO/docs/tutorials/Quoter/Simple/Distributor/Distributor_exec_export.h b/modules/CIAO/docs/tutorials/Quoter/Simple/Distributor/Distributor_exec_export.h new file mode 100644 index 00000000000..a3509e015da --- /dev/null +++ b/modules/CIAO/docs/tutorials/Quoter/Simple/Distributor/Distributor_exec_export.h @@ -0,0 +1,54 @@ + +// -*- C++ -*- +// $Id$ +// Definition for Win32 Export directives. +// This file is generated automatically by generate_export_file.pl DISTRIBUTOR_EXEC +// ------------------------------ +#ifndef DISTRIBUTOR_EXEC_EXPORT_H +#define DISTRIBUTOR_EXEC_EXPORT_H + +#include "ace/config-all.h" + +#if !defined (DISTRIBUTOR_EXEC_HAS_DLL) +# define DISTRIBUTOR_EXEC_HAS_DLL 1 +#endif /* ! DISTRIBUTOR_EXEC_HAS_DLL */ + +#if defined (DISTRIBUTOR_EXEC_HAS_DLL) && (DISTRIBUTOR_EXEC_HAS_DLL == 1) +# if defined (DISTRIBUTOR_EXEC_BUILD_DLL) +# define DISTRIBUTOR_EXEC_Export ACE_Proper_Export_Flag +# define DISTRIBUTOR_EXEC_SINGLETON_DECLARATION(T) ACE_EXPORT_SINGLETON_DECLARATION (T) +# define DISTRIBUTOR_EXEC_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) ACE_EXPORT_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) +# else /* DISTRIBUTOR_EXEC_BUILD_DLL */ +# define DISTRIBUTOR_EXEC_Export ACE_Proper_Import_Flag +# define DISTRIBUTOR_EXEC_SINGLETON_DECLARATION(T) ACE_IMPORT_SINGLETON_DECLARATION (T) +# define DISTRIBUTOR_EXEC_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) ACE_IMPORT_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) +# endif /* DISTRIBUTOR_EXEC_BUILD_DLL */ +#else /* DISTRIBUTOR_EXEC_HAS_DLL == 1 */ +# define DISTRIBUTOR_EXEC_Export +# define DISTRIBUTOR_EXEC_SINGLETON_DECLARATION(T) +# define DISTRIBUTOR_EXEC_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) +#endif /* DISTRIBUTOR_EXEC_HAS_DLL == 1 */ + +// Set DISTRIBUTOR_EXEC_NTRACE = 0 to turn on library specific tracing even if +// tracing is turned off for ACE. +#if !defined (DISTRIBUTOR_EXEC_NTRACE) +# if (ACE_NTRACE == 1) +# define DISTRIBUTOR_EXEC_NTRACE 1 +# else /* (ACE_NTRACE == 1) */ +# define DISTRIBUTOR_EXEC_NTRACE 0 +# endif /* (ACE_NTRACE == 1) */ +#endif /* !DISTRIBUTOR_EXEC_NTRACE */ + +#if (DISTRIBUTOR_EXEC_NTRACE == 1) +# define DISTRIBUTOR_EXEC_TRACE(X) +#else /* (DISTRIBUTOR_EXEC_NTRACE == 1) */ +# if !defined (ACE_HAS_TRACE) +# define ACE_HAS_TRACE +# endif /* ACE_HAS_TRACE */ +# define DISTRIBUTOR_EXEC_TRACE(X) ACE_TRACE_IMPL(X) +# include "ace/Trace.h" +#endif /* (DISTRIBUTOR_EXEC_NTRACE == 1) */ + +#endif /* DISTRIBUTOR_EXEC_EXPORT_H */ + +// End of auto generated file. diff --git a/modules/CIAO/docs/tutorials/Quoter/Simple/Distributor/Distributor_stub_export.h b/modules/CIAO/docs/tutorials/Quoter/Simple/Distributor/Distributor_stub_export.h new file mode 100644 index 00000000000..1126c5bc355 --- /dev/null +++ b/modules/CIAO/docs/tutorials/Quoter/Simple/Distributor/Distributor_stub_export.h @@ -0,0 +1,54 @@ + +// -*- C++ -*- +// $Id$ +// Definition for Win32 Export directives. +// This file is generated automatically by generate_export_file.pl DISTRIBUTOR_STUB +// ------------------------------ +#ifndef DISTRIBUTOR_STUB_EXPORT_H +#define DISTRIBUTOR_STUB_EXPORT_H + +#include "ace/config-all.h" + +#if !defined (DISTRIBUTOR_STUB_HAS_DLL) +# define DISTRIBUTOR_STUB_HAS_DLL 1 +#endif /* ! DISTRIBUTOR_STUB_HAS_DLL */ + +#if defined (DISTRIBUTOR_STUB_HAS_DLL) && (DISTRIBUTOR_STUB_HAS_DLL == 1) +# if defined (DISTRIBUTOR_STUB_BUILD_DLL) +# define DISTRIBUTOR_STUB_Export ACE_Proper_Export_Flag +# define DISTRIBUTOR_STUB_SINGLETON_DECLARATION(T) ACE_EXPORT_SINGLETON_DECLARATION (T) +# define DISTRIBUTOR_STUB_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) ACE_EXPORT_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) +# else /* DISTRIBUTOR_STUB_BUILD_DLL */ +# define DISTRIBUTOR_STUB_Export ACE_Proper_Import_Flag +# define DISTRIBUTOR_STUB_SINGLETON_DECLARATION(T) ACE_IMPORT_SINGLETON_DECLARATION (T) +# define DISTRIBUTOR_STUB_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) ACE_IMPORT_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) +# endif /* DISTRIBUTOR_STUB_BUILD_DLL */ +#else /* DISTRIBUTOR_STUB_HAS_DLL == 1 */ +# define DISTRIBUTOR_STUB_Export +# define DISTRIBUTOR_STUB_SINGLETON_DECLARATION(T) +# define DISTRIBUTOR_STUB_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) +#endif /* DISTRIBUTOR_STUB_HAS_DLL == 1 */ + +// Set DISTRIBUTOR_STUB_NTRACE = 0 to turn on library specific tracing even if +// tracing is turned off for ACE. +#if !defined (DISTRIBUTOR_STUB_NTRACE) +# if (ACE_NTRACE == 1) +# define DISTRIBUTOR_STUB_NTRACE 1 +# else /* (ACE_NTRACE == 1) */ +# define DISTRIBUTOR_STUB_NTRACE 0 +# endif /* (ACE_NTRACE == 1) */ +#endif /* !DISTRIBUTOR_STUB_NTRACE */ + +#if (DISTRIBUTOR_STUB_NTRACE == 1) +# define DISTRIBUTOR_STUB_TRACE(X) +#else /* (DISTRIBUTOR_STUB_NTRACE == 1) */ +# if !defined (ACE_HAS_TRACE) +# define ACE_HAS_TRACE +# endif /* ACE_HAS_TRACE */ +# define DISTRIBUTOR_STUB_TRACE(X) ACE_TRACE_IMPL(X) +# include "ace/Trace.h" +#endif /* (DISTRIBUTOR_STUB_NTRACE == 1) */ + +#endif /* DISTRIBUTOR_STUB_EXPORT_H */ + +// End of auto generated file. diff --git a/modules/CIAO/docs/tutorials/Quoter/Simple/Distributor/Distributor_svnt_export.h b/modules/CIAO/docs/tutorials/Quoter/Simple/Distributor/Distributor_svnt_export.h new file mode 100644 index 00000000000..78debd1c32b --- /dev/null +++ b/modules/CIAO/docs/tutorials/Quoter/Simple/Distributor/Distributor_svnt_export.h @@ -0,0 +1,54 @@ + +// -*- C++ -*- +// $Id$ +// Definition for Win32 Export directives. +// This file is generated automatically by generate_export_file.pl DISTRIBUTOR_SVNT +// ------------------------------ +#ifndef DISTRIBUTOR_SVNT_EXPORT_H +#define DISTRIBUTOR_SVNT_EXPORT_H + +#include "ace/config-all.h" + +#if !defined (DISTRIBUTOR_SVNT_HAS_DLL) +# define DISTRIBUTOR_SVNT_HAS_DLL 1 +#endif /* ! DISTRIBUTOR_SVNT_HAS_DLL */ + +#if defined (DISTRIBUTOR_SVNT_HAS_DLL) && (DISTRIBUTOR_SVNT_HAS_DLL == 1) +# if defined (DISTRIBUTOR_SVNT_BUILD_DLL) +# define DISTRIBUTOR_SVNT_Export ACE_Proper_Export_Flag +# define DISTRIBUTOR_SVNT_SINGLETON_DECLARATION(T) ACE_EXPORT_SINGLETON_DECLARATION (T) +# define DISTRIBUTOR_SVNT_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) ACE_EXPORT_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) +# else /* DISTRIBUTOR_SVNT_BUILD_DLL */ +# define DISTRIBUTOR_SVNT_Export ACE_Proper_Import_Flag +# define DISTRIBUTOR_SVNT_SINGLETON_DECLARATION(T) ACE_IMPORT_SINGLETON_DECLARATION (T) +# define DISTRIBUTOR_SVNT_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) ACE_IMPORT_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) +# endif /* DISTRIBUTOR_SVNT_BUILD_DLL */ +#else /* DISTRIBUTOR_SVNT_HAS_DLL == 1 */ +# define DISTRIBUTOR_SVNT_Export +# define DISTRIBUTOR_SVNT_SINGLETON_DECLARATION(T) +# define DISTRIBUTOR_SVNT_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) +#endif /* DISTRIBUTOR_SVNT_HAS_DLL == 1 */ + +// Set DISTRIBUTOR_SVNT_NTRACE = 0 to turn on library specific tracing even if +// tracing is turned off for ACE. +#if !defined (DISTRIBUTOR_SVNT_NTRACE) +# if (ACE_NTRACE == 1) +# define DISTRIBUTOR_SVNT_NTRACE 1 +# else /* (ACE_NTRACE == 1) */ +# define DISTRIBUTOR_SVNT_NTRACE 0 +# endif /* (ACE_NTRACE == 1) */ +#endif /* !DISTRIBUTOR_SVNT_NTRACE */ + +#if (DISTRIBUTOR_SVNT_NTRACE == 1) +# define DISTRIBUTOR_SVNT_TRACE(X) +#else /* (DISTRIBUTOR_SVNT_NTRACE == 1) */ +# if !defined (ACE_HAS_TRACE) +# define ACE_HAS_TRACE +# endif /* ACE_HAS_TRACE */ +# define DISTRIBUTOR_SVNT_TRACE(X) ACE_TRACE_IMPL(X) +# include "ace/Trace.h" +#endif /* (DISTRIBUTOR_SVNT_NTRACE == 1) */ + +#endif /* DISTRIBUTOR_SVNT_EXPORT_H */ + +// End of auto generated file. diff --git a/modules/CIAO/docs/tutorials/Quoter/Simple/README.html b/modules/CIAO/docs/tutorials/Quoter/Simple/README.html new file mode 100644 index 00000000000..85e38e81150 --- /dev/null +++ b/modules/CIAO/docs/tutorials/Quoter/Simple/README.html @@ -0,0 +1,172 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> +<head> +<!--//$Id$ --> +</head> +<body> +<b><font size="5">Quoter example README</font></b> +<p>To download the source codes of this example please refer to the SVN +repository at <code>$CIAO_ROOT\docs\tutorials\Quoter\Simple</code> +</p> +<hr> +<h2>Example Description</h2> +<div align="left"> +<font face="Times New Roman" size="3">The <b>StockDistributor</b> +component would be monitoring a real-time stock database. When the +values of particular stocks change, it pushes a CCM <b>eventtype</b> +that contains the stock's name via a CCM event source to the +corresponding CCM </font> +</div> +<div align="left"> +<font face="Times New Roman" size="3">event sink implemented by one or +more <b>StockBroker</b> components. If these components are interested +in the stock they can obtain more information about it by invoking a +request/response operation via their CCM receptacle on a CCM facet +exported by the <b>StockDistributor</b> component. The diagram of this +example is shown in fig 1.</font> +</div> +<p align="center"><img alt="" src="images/quoter.jpg" + style="width: 362px; height: 212px;"><br> +figure 1<br> +</p> +<h2 align="justify"><span style="font-weight: 400;"><font size="3"></font></span><span + style="font-weight: 400;"><font size="3">This example +is based on a series of </font> <a + href="http://www.cs.wustl.edu/%7Eschmidt/report-doc.html"><font + size="3">CORBA Component Model</font></a><font size="3"> columns +written by <a href="http://www.cs.wustl.edu/%7Eschmidt/">Douglas +Schmidt</a> and <a href="http://www.iona.com/hyplan/vinoski/">Steve +Vinoski</a>, and has been consistently used as a example for <a + href="http://www.cs.wustl.edu/%7Eschmidt/TAO.html">TAO</a>. Please +refer to <a + href="../../../../../docs/tutorials/Quoter/index.html">TAO +online tutorial</a> for details. <br> +</font></span></h2> +<h2>The files you will find</h2> +<li>The interfaces, data types and exceptions shared by the components +of +this +application are specified in the <a href="Stock_Base/Stock_Base.idl"><code>Stock_Base.idl</code></a>.<code></code>The +lib +generated +from Stock_Base.idl is linked to all the components of this example.</li> +<li> mpc files for each of the components are available in the +components +directories. We use the <a + href="http://downloads.ociweb.com/MPC/MakeProjectCreator.pdf">MPC</a> +to +generate makefiles and Visual C++ project/solutions files for all <a + href="http://www.cs.wustl.edu/%7Eschmidt/ACE.html">ACE</a>, <a + href="http://www.cs.wustl.edu/%7Eschmidt/TAO.html">TAO</a> and <a + href="http://www.cs.wustl.edu/%7Eschmidt/CIAO.html">CIAO</a> +libraries. </li> +<li> idl and cidl files for each component are placed in +components directory. +</li> +<li> The <code>_exec.h</code> and <code>_exec.cpp</code> files +are the actual +implementation of the components.</li> +<hr> +<h3><font size="5">Make</font></h3> +Navigate to the directory <code>$CIAO_ROOT/docs/tutorials/Quoter/Simple</code> +and do:<br> +<code>$ACE_ROOT/bin/mwc.pl -type gnuace</code> (use different -type option +if you are using a +compiler/IDE other than GNU make) <br> +For example, use <code>%ACE_ROOT%/bin/mwc.pl -type vc71</code> if you +are using +Visual C++ 7.1 IDE.<br> +<br> +Then build/make the generated project/make files. Correct errors in the +source codes if necessary.<br> +<hr> +<h3><font size="5">Assemble</font></h3> +<p>Now we can step forward to build the assembly. </p> +<li>In the descriptor subdirectory, you'll find a XML descriptor file +that +describes your <em>deployment plan</em>, the +flattened_deploymentplan.cdp. This file declaratively specifies how the +component assembly is +constructed. +Specifically, it defines the component types, component instances, +component +connections and implementation artifact descriptions. <br> +</li> +<dd> + <li>Please make sure that the Modified_Deployment.xsd and XMI.xsd +files +are in the Display/descriptors directory. The former file could be +found in $CIAO_ROOT/docs/schema +directory. <br> + <br> +Note: Creating the deployment plan descriptor is a tedious and +error-prone job, +you can download <a href="http://www.dre.vanderbilt.edu/cosmic">CoSMIC</a> +to +assist you in this step. Please refer to <a + href="http://www.dre.vanderbilt.edu/%7Emxiong/tutorial">this tutorial</a> +to see how you can use CoSMIC to automatically generate the descriptor +file. + <p></p> + <hr></li> +</dd> +<h2>Running the program </h2> +>From different shells in <code>$CIAO_ROOT/docs/tutorials/Quoter/Simple/</code><code>descriptors/</code> +directory: +<ul> + <li>Start NodeManagers (NodeDameon) by running runNodeDaemon.pl </li> + <li>Start the execution manager +$CIAO_ROOT/DAnCE/ExecutionManager/Execution_Manager -o ior -i +Stock.dat </li> +</ul> +<p>The Stock.dat file describes the deployment daemons CIAO's +Execution_Manager +will contact to instantiate ComponentServer's, home's, and component +instances. +Each line specify the name of a installation "destination" and the +corresponding corbaloc IOR for the CIAO_Daemon.</p> +<ul type="square"> + <li><em>NOTE</em>: As one can see, we use the "Stock.dat" file to +instruct the Execution_Manager how to find the endpoint of each +individual NodeManager (i.e., Node Daemon) where component(s) will be +deployed, so this is non-standard. We plan to use Naming Service to do +this in the future. </li> +</ul> +<ul> + <li> Start the plan_launcher by running +$CIAO_ROOT/DAnCE/Plan_Launcher/plan_launcher -p +flattened_deploymentplan.cdp -k file://ior</li> + <li>By now the components should be successfully deployed. You may +run the driver program to start the application. Open a new shell, keep +in the /Quoter/descriptors directory, and try the following +commands, see what happens in the component server<br> + </li> +</ul> + <br> + Start the distributor +service at a frequency of 3 hertz:<br> + <span style="color: rgb(51, 102, 255);">../Distributor/Distributor.exe +-o -r3</span><br> +<br> + Use the broker program to +subscribe to MSFT stock<br> + <span + style="color: rgb(51, 102, 255);">../Broker/Broker.exe -s MSFT</span><br> +<br> + Subscribe to IBM stock<br> + <span + style="color: rgb(51, 102, 255);">../Broker/Broker.exe -s IBM</span><br> +<br> + Unsubscribe to MSFT stock<br> + <span + style="color: rgb(51, 102, 255);">../Broker/Broker -u MSFT</span><br> +<br> + Turn off the distribution +service:<br> + <span + style="color: rgb(51, 102, 255);">../Distributor/Distributor -f </span><br> +<br> +Please contact mxiong@dre.vanderbilt.edu if you have any questions. + <br> +</body> +</html> diff --git a/modules/CIAO/docs/tutorials/Quoter/Simple/Stock_Base/Stock_Base.idl b/modules/CIAO/docs/tutorials/Quoter/Simple/Stock_Base/Stock_Base.idl new file mode 100644 index 00000000000..b038cdca509 --- /dev/null +++ b/modules/CIAO/docs/tutorials/Quoter/Simple/Stock_Base/Stock_Base.idl @@ -0,0 +1,41 @@ +//$Id$ + +#include <Components.idl> + +module Stock +{ + exception Invalid_Stock {}; + typedef sequence<octet> ImageBlob; + + /** + * @struct StockInfo + */ + struct StockInfo { + string name; + long high; + long low; + long last; + }; + + /** + * @interface: StockQuoter + * + * @brief: component facet + */ + interface StockQuoter { + /// Returns the current stock info + StockInfo get_stock_info (in string stock_name) + raises (Invalid_Stock); + }; + + + /** + * @event StockName + * + * @brief component event + */ + eventtype StockName { + // Name of the stock. + public string name; + }; +}; diff --git a/modules/CIAO/docs/tutorials/Quoter/Simple/Stock_Base/Stock_Base.mpc b/modules/CIAO/docs/tutorials/Quoter/Simple/Stock_Base/Stock_Base.mpc new file mode 100644 index 00000000000..6f3cde298ff --- /dev/null +++ b/modules/CIAO/docs/tutorials/Quoter/Simple/Stock_Base/Stock_Base.mpc @@ -0,0 +1,46 @@ +// $Id$ +// This file is generated with "generate_component_mpc.pl -n Stock_Base" + +project(Stock_Base_stub): ciao_client_dnc { + + sharedname = Stock_Base_stub + idlflags -= -GT + idlflags += -Wb,stub_export_macro=STOCK_BASE_STUB_Export \ + -Wb,stub_export_include=Stock_Base_stub_export.h \ + -Wb,skel_export_macro=STOCK_BASE_SKEL_Export \ + -Wb,skel_export_include=Stock_Base_skel_export.h + dynamicflags = STOCK_BASE_STUB_BUILD_DLL + + IDL_Files { + Stock_Base.idl + } + + Source_Files { + Stock_BaseC.cpp + } +} + +project(Stock_Base_skel) : ciao_servant_dnc { + after += Stock_Base_stub + sharedname = Stock_Base_skel + libs += Stock_Base_stub + + idlflags -= -GT + idlflags += -Wb,stub_export_macro=STOCK_BASE_STUB_Export \ + -Wb,stub_export_include=Stock_Base_stub_export.h \ + -Wb,skel_export_macro=STOCK_BASE_SKEL_Export \ + -Wb,skel_export_include=Stock_Base_skel_export.h + dynamicflags = STOCK_BASE_SKEL_BUILD_DLL + + IDL_Files { + Stock_Base.idl + } + + Source_Files { + Stock_BaseS.cpp + } +} + + + + diff --git a/modules/CIAO/docs/tutorials/Quoter/Simple/Stock_Base/Stock_Base_skel_export.h b/modules/CIAO/docs/tutorials/Quoter/Simple/Stock_Base/Stock_Base_skel_export.h new file mode 100644 index 00000000000..262ab650fed --- /dev/null +++ b/modules/CIAO/docs/tutorials/Quoter/Simple/Stock_Base/Stock_Base_skel_export.h @@ -0,0 +1,54 @@ + +// -*- C++ -*- +// $Id$ +// Definition for Win32 Export directives. +// This file is generated automatically by generate_export_file.pl STOCK_BASE_SVNT +// ------------------------------ +#ifndef STOCK_BASE_SKEL_EXPORT_H +#define STOCK_BASE_SKEL_EXPORT_H + +#include "ace/config-all.h" + +#if !defined (STOCK_BASE_SKEL_HAS_DLL) +# define STOCK_BASE_SKEL_HAS_DLL 1 +#endif /* ! STOCK_BASE_SKEL_HAS_DLL */ + +#if defined (STOCK_BASE_SKEL_HAS_DLL) && (STOCK_BASE_SKEL_HAS_DLL == 1) +# if defined (STOCK_BASE_SKEL_BUILD_DLL) +# define STOCK_BASE_SKEL_Export ACE_Proper_Export_Flag +# define STOCK_BASE_SKEL_SINGLETON_DECLARATION(T) ACE_EXPORT_SINGLETON_DECLARATION (T) +# define STOCK_BASE_SKEL_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) ACE_EXPORT_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) +# else /* STOCK_BASE_SKEL_BUILD_DLL */ +# define STOCK_BASE_SKEL_Export ACE_Proper_Import_Flag +# define STOCK_BASE_SKEL_SINGLETON_DECLARATION(T) ACE_IMPORT_SINGLETON_DECLARATION (T) +# define STOCK_BASE_SKEL_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) ACE_IMPORT_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) +# endif /* STOCK_BASE_SKEL_BUILD_DLL */ +#else /* STOCK_BASE_SKEL_HAS_DLL == 1 */ +# define STOCK_BASE_SKEL_Export +# define STOCK_BASE_SKEL_SINGLETON_DECLARATION(T) +# define STOCK_BASE_SKEL_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) +#endif /* STOCK_BASE_SKEL_HAS_DLL == 1 */ + +// Set STOCK_BASE_SKEL_NTRACE = 0 to turn on library specific tracing even if +// tracing is turned off for ACE. +#if !defined (STOCK_BASE_SKEL_NTRACE) +# if (ACE_NTRACE == 1) +# define STOCK_BASE_SKEL_NTRACE 1 +# else /* (ACE_NTRACE == 1) */ +# define STOCK_BASE_SKEL_NTRACE 0 +# endif /* (ACE_NTRACE == 1) */ +#endif /* !STOCK_BASE_SKEL_NTRACE */ + +#if (STOCK_BASE_SKEL_NTRACE == 1) +# define STOCK_BASE_SKEL_TRACE(X) +#else /* (STOCK_BASE_SKEL_NTRACE == 1) */ +# if !defined (ACE_HAS_TRACE) +# define ACE_HAS_TRACE +# endif /* ACE_HAS_TRACE */ +# define STOCK_BASE_SKEL_TRACE(X) ACE_TRACE_IMPL(X) +# include "ace/Trace.h" +#endif /* (STOCK_BASE_SKEL_NTRACE == 1) */ + +#endif /* STOCK_BASE_SKEL_EXPORT_H */ + +// End of auto generated file. diff --git a/modules/CIAO/docs/tutorials/Quoter/Simple/Stock_Base/Stock_Base_stub_export.h b/modules/CIAO/docs/tutorials/Quoter/Simple/Stock_Base/Stock_Base_stub_export.h new file mode 100644 index 00000000000..1b73531da37 --- /dev/null +++ b/modules/CIAO/docs/tutorials/Quoter/Simple/Stock_Base/Stock_Base_stub_export.h @@ -0,0 +1,54 @@ + +// -*- C++ -*- +// $Id$ +// Definition for Win32 Export directives. +// This file is generated automatically by generate_export_file.pl STOCK_BASE_STUB +// ------------------------------ +#ifndef STOCK_BASE_STUB_EXPORT_H +#define STOCK_BASE_STUB_EXPORT_H + +#include "ace/config-all.h" + +#if !defined (STOCK_BASE_STUB_HAS_DLL) +# define STOCK_BASE_STUB_HAS_DLL 1 +#endif /* ! STOCK_BASE_STUB_HAS_DLL */ + +#if defined (STOCK_BASE_STUB_HAS_DLL) && (STOCK_BASE_STUB_HAS_DLL == 1) +# if defined (STOCK_BASE_STUB_BUILD_DLL) +# define STOCK_BASE_STUB_Export ACE_Proper_Export_Flag +# define STOCK_BASE_STUB_SINGLETON_DECLARATION(T) ACE_EXPORT_SINGLETON_DECLARATION (T) +# define STOCK_BASE_STUB_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) ACE_EXPORT_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) +# else /* STOCK_BASE_STUB_BUILD_DLL */ +# define STOCK_BASE_STUB_Export ACE_Proper_Import_Flag +# define STOCK_BASE_STUB_SINGLETON_DECLARATION(T) ACE_IMPORT_SINGLETON_DECLARATION (T) +# define STOCK_BASE_STUB_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) ACE_IMPORT_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) +# endif /* STOCK_BASE_STUB_BUILD_DLL */ +#else /* STOCK_BASE_STUB_HAS_DLL == 1 */ +# define STOCK_BASE_STUB_Export +# define STOCK_BASE_STUB_SINGLETON_DECLARATION(T) +# define STOCK_BASE_STUB_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) +#endif /* STOCK_BASE_STUB_HAS_DLL == 1 */ + +// Set STOCK_BASE_STUB_NTRACE = 0 to turn on library specific tracing even if +// tracing is turned off for ACE. +#if !defined (STOCK_BASE_STUB_NTRACE) +# if (ACE_NTRACE == 1) +# define STOCK_BASE_STUB_NTRACE 1 +# else /* (ACE_NTRACE == 1) */ +# define STOCK_BASE_STUB_NTRACE 0 +# endif /* (ACE_NTRACE == 1) */ +#endif /* !STOCK_BASE_STUB_NTRACE */ + +#if (STOCK_BASE_STUB_NTRACE == 1) +# define STOCK_BASE_STUB_TRACE(X) +#else /* (STOCK_BASE_STUB_NTRACE == 1) */ +# if !defined (ACE_HAS_TRACE) +# define ACE_HAS_TRACE +# endif /* ACE_HAS_TRACE */ +# define STOCK_BASE_STUB_TRACE(X) ACE_TRACE_IMPL(X) +# include "ace/Trace.h" +#endif /* (STOCK_BASE_STUB_NTRACE == 1) */ + +#endif /* STOCK_BASE_STUB_EXPORT_H */ + +// End of auto generated file. diff --git a/modules/CIAO/docs/tutorials/Quoter/Simple/descriptors/Broker.ccd b/modules/CIAO/docs/tutorials/Quoter/Simple/descriptors/Broker.ccd new file mode 100644 index 00000000000..c2a0630b87b --- /dev/null +++ b/modules/CIAO/docs/tutorials/Quoter/Simple/descriptors/Broker.ccd @@ -0,0 +1,33 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no" ?> +<Deployment:ComponentInterfaceDescription + xmlns:Deployment="http://www.omg.org/Deployment" + xmlns:xmi="http://www.omg.org/XMI" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.omg.org/Deployment Deployment.xsd"> + + <label>Broker Component</label> + <UUID>803f8fc7-55de-4a20-81eb-ae951d85b7f4</UUID> + <specificType>IDL:Stock/StockBroker:1.0</specificType> + <supportedType>IDL:Stock/StockBroker:1.0</supportedType> + <port> + <name>notify_in</name> + <exclusiveProvider>false</exclusiveProvider> + <exclusiveUser>false</exclusiveUser> + <optional>false</optional> + <provider>false</provider> + <supportedType>IDL:Stock/StockName:1.0</supportedType> + <specificType>IDL:Stock/StockName:1.0</specificType> + <kind>EventConsumer</kind> + </port> + <port> + <name>read_quoter</name> + <exclusiveProvider>false</exclusiveProvider> + <exclusiveUser>false</exclusiveUser> + <optional>false</optional> + <provider>false</provider> + <supportedType>IDL:Stock/StockQuoter:1.0</supportedType> + <specificType>IDL:Stock/StockQuoter:1.0</specificType> + <kind>SimplexReceptacle</kind> + </port> + +</Deployment:ComponentInterfaceDescription>
\ No newline at end of file diff --git a/modules/CIAO/docs/tutorials/Quoter/Simple/descriptors/Broker.cid b/modules/CIAO/docs/tutorials/Quoter/Simple/descriptors/Broker.cid new file mode 100644 index 00000000000..47f49102136 --- /dev/null +++ b/modules/CIAO/docs/tutorials/Quoter/Simple/descriptors/Broker.cid @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no" ?> +<Deployment:ComponentImplementationDescription + xmlns:Deployment="http://www.omg.org/Deployment" + xmlns:xmi="http://www.omg.org/XMI" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.omg.org/Deployment Deployment.xsd"> + <label>Broker Implementation</label> + <UUID>789e1be2-703f-4bd3-af50-b400eef91fd0</UUID> + <implements href="Broker.ccd"/> + <monolithicImpl> + <primaryArtifact> + <name>Broker_stub</name> + <referencedArtifact href="Broker_Stub.iad"/> + </primaryArtifact> + <primaryArtifact> + <name>Broker_svnt</name> + <referencedArtifact href="Broker_Svnt.iad"/> + </primaryArtifact> + <primaryArtifact> + <name>Broker_exec</name> + <referencedArtifact href="Broker_Exec.iad"/> + </primaryArtifact> + </monolithicImpl> + <configProperty> + <name>ComponentIOR</name> + <value> + <type> + <kind>tk_string</kind> + </type> + <value> + <string>Broker.ior</string> + </value> + </value> + </configProperty> +</Deployment:ComponentImplementationDescription>
\ No newline at end of file diff --git a/modules/CIAO/docs/tutorials/Quoter/Simple/descriptors/Broker.cpd b/modules/CIAO/docs/tutorials/Quoter/Simple/descriptors/Broker.cpd new file mode 100644 index 00000000000..cc6381b658a --- /dev/null +++ b/modules/CIAO/docs/tutorials/Quoter/Simple/descriptors/Broker.cpd @@ -0,0 +1,14 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no" ?> +<Deployment:ComponentPackageDescription + xmlns:Deployment="http://www.omg.org/Deployment" + xmlns:xmi="http://www.omg.org/XMI" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.omg.org/Deployment Deployment.xsd"> + <label>Broker Package</label> + <UUID>07ebf947-2174-4a3b-bd37-bcb92986eaf4</UUID> + <realizes href="Broker.ccd"/> + <implementation> + <name>Broker</name> + <referencedImplementation href="Broker.cid"/> + </implementation> +</Deployment:ComponentPackageDescription>
\ No newline at end of file diff --git a/modules/CIAO/docs/tutorials/Quoter/Simple/descriptors/Broker_Exec.iad b/modules/CIAO/docs/tutorials/Quoter/Simple/descriptors/Broker_Exec.iad new file mode 100644 index 00000000000..724a5b2c6bb --- /dev/null +++ b/modules/CIAO/docs/tutorials/Quoter/Simple/descriptors/Broker_Exec.iad @@ -0,0 +1,29 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no" ?> +<Deployment:ImplementationArtifactDescription + xmlns:Deployment="http://www.omg.org/Deployment" + xmlns:xmi="http://www.omg.org/XMI" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.omg.org/Deployment Deployment.xsd"> + <label>Broker Executor Artifact</label> + <UUID>5e4f2366-3810-4d4c-a269-5788a525cbe1</UUID> + <location>Broker_exec</location> + <dependsOn> + <name>ACE</name> + <referencedArtifact href="Libraries.iad"/> + </dependsOn> + <dependsOn> + <name>Broker_Stub</name> + <referencedArtifact href="Broker_Stub.iad"/> + </dependsOn> + <execParameter> + <name>entryPoint</name> + <value> + <type> + <kind>tk_string</kind> + </type> + <value> + <string>createStockBrokerHome_Impl</string> + </value> + </value> + </execParameter> +</Deployment:ImplementationArtifactDescription>
\ No newline at end of file diff --git a/modules/CIAO/docs/tutorials/Quoter/Simple/descriptors/Broker_Stub.iad b/modules/CIAO/docs/tutorials/Quoter/Simple/descriptors/Broker_Stub.iad new file mode 100644 index 00000000000..ac1f0834e19 --- /dev/null +++ b/modules/CIAO/docs/tutorials/Quoter/Simple/descriptors/Broker_Stub.iad @@ -0,0 +1,14 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no" ?> +<Deployment:ImplementationArtifactDescription + xmlns:Deployment="http://www.omg.org/Deployment" + xmlns:xmi="http://www.omg.org/XMI" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.omg.org/Deployment Deployment.xsd"> + <label>Broker Stub Artifact</label> + <UUID>93bbdf7d-d3f7-4227-bb75-b0562ac15b92</UUID> + <location>Broker_stub</location> + <dependsOn> + <name>ACE</name> + <referencedArtifact href="Libraries.iad"/> + </dependsOn> +</Deployment:ImplementationArtifactDescription>
\ No newline at end of file diff --git a/modules/CIAO/docs/tutorials/Quoter/Simple/descriptors/Broker_Svnt.iad b/modules/CIAO/docs/tutorials/Quoter/Simple/descriptors/Broker_Svnt.iad new file mode 100644 index 00000000000..2944181e015 --- /dev/null +++ b/modules/CIAO/docs/tutorials/Quoter/Simple/descriptors/Broker_Svnt.iad @@ -0,0 +1,29 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no" ?> +<Deployment:ImplementationArtifactDescription + xmlns:Deployment="http://www.omg.org/Deployment" + xmlns:xmi="http://www.omg.org/XMI" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.omg.org/Deployment Deployment.xsd"> + <label>Broker Servant Artifact</label> + <UUID>04e4d246-e6eb-4b0e-8e32-60b996497cea</UUID> + <location>Broker_svnt</location> + <dependsOn> + <name>ACE</name> + <referencedArtifact href="Libraries.iad"/> + </dependsOn> + <dependsOn> + <name>Broker_Stub</name> + <referencedArtifact href="Broker_Stub.iad"/> + </dependsOn> + <execParameter> + <name>entryPoint</name> + <value> + <type> + <kind>tk_string</kind> + </type> + <value> + <string>create_Stock_StockBrokerHome_Servant</string> + </value> + </value> + </execParameter> +</Deployment:ImplementationArtifactDescription>
\ No newline at end of file diff --git a/modules/CIAO/docs/tutorials/Quoter/Simple/descriptors/Distributor.ccd b/modules/CIAO/docs/tutorials/Quoter/Simple/descriptors/Distributor.ccd new file mode 100644 index 00000000000..7557e143c56 --- /dev/null +++ b/modules/CIAO/docs/tutorials/Quoter/Simple/descriptors/Distributor.ccd @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no" ?> +<Deployment:ComponentInterfaceDescription + xmlns:Deployment="http://www.omg.org/Deployment" + xmlns:xmi="http://www.omg.org/XMI" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.omg.org/Deployment Deployment.xsd"> + + <label>Distributor Component</label> + <UUID>803f8fc7-55de-4a20-81eb-ae951d85b7f4</UUID> + <specificType>IDL:Stock/StockDistributor:1.0</specificType> + <supportedType>IDL:Stock/StockDistributor:1.0</supportedType> + <port> + <name>supports</name> + <exclusiveProvider>false</exclusiveProvider> + <exclusiveUser>false</exclusiveUser> + <optional>false</optional> + <provider>true</provider> + <supportedType>IDL:Stock/Trigger:1.0</supportedType> + <kind>Facet</kind> + </port> + <port> + <name>notify_out</name> + <exclusiveProvider>false</exclusiveProvider> + <exclusiveUser>false</exclusiveUser> + <optional>false</optional> + <provider>true</provider> + <supportedType>IDL:Stock/StockName:1.0</supportedType> + <specificType>IDL:Stock/StockName:1.0</specificType> + <kind>EventPublisher</kind> + </port> + <port> + <name>push_quoter</name> + <exclusiveProvider>false</exclusiveProvider> + <exclusiveUser>false</exclusiveUser> + <optional>false</optional> + <provider>true</provider> + <supportedType>IDL:Stock/StockQuoter:1.0</supportedType> + <specificType>IDL:Stock/StockQuoter:1.0</specificType> + <kind>Facet</kind> + </port> +</Deployment:ComponentInterfaceDescription>
\ No newline at end of file diff --git a/modules/CIAO/docs/tutorials/Quoter/Simple/descriptors/Distributor.cid b/modules/CIAO/docs/tutorials/Quoter/Simple/descriptors/Distributor.cid new file mode 100644 index 00000000000..b5eac80c543 --- /dev/null +++ b/modules/CIAO/docs/tutorials/Quoter/Simple/descriptors/Distributor.cid @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no" ?> +<Deployment:ComponentImplementationDescription + xmlns:Deployment="http://www.omg.org/Deployment" + xmlns:xmi="http://www.omg.org/XMI" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.omg.org/Deployment Deployment.xsd"> + <label>Distributor Implementation</label> + <UUID>789e1be2-703f-4bd3-af50-b400eef91fd0</UUID> + <implements href="Distributor.ccd"/> + <monolithicImpl> + <primaryArtifact> + <name>Distributor_Stub</name> + <referencedArtifact href="Distributor_Stub.iad"/> + </primaryArtifact> + <primaryArtifact> + <name>Distributor_Svnt</name> + <referencedArtifact href="Distributor_Svnt.iad"/> + </primaryArtifact> + <primaryArtifact> + <name>Distributor_Exec</name> + <referencedArtifact href="Distributor_Exec.iad"/> + </primaryArtifact> + </monolithicImpl> + <configProperty> + <name>ComponentIOR</name> + <value> + <type> + <kind>tk_string</kind> + </type> + <value> + <string>Distributor.ior</string> + </value> + </value> + </configProperty> +</Deployment:ComponentImplementationDescription>
\ No newline at end of file diff --git a/modules/CIAO/docs/tutorials/Quoter/Simple/descriptors/Distributor.cpd b/modules/CIAO/docs/tutorials/Quoter/Simple/descriptors/Distributor.cpd new file mode 100644 index 00000000000..c451a5637e8 --- /dev/null +++ b/modules/CIAO/docs/tutorials/Quoter/Simple/descriptors/Distributor.cpd @@ -0,0 +1,14 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no" ?> +<Deployment:ComponentPackageDescription + xmlns:Deployment="http://www.omg.org/Deployment" + xmlns:xmi="http://www.omg.org/XMI" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.omg.org/Deployment Deployment.xsd"> + <label>Distributor Package</label> + <UUID>07ebf947-2174-4a3b-bd37-bcb92986eaf4</UUID> + <realizes href="Distributor.ccd"/> + <implementation> + <name>Distributor</name> + <referencedImplementation href="Distributor.cid"/> + </implementation> +</Deployment:ComponentPackageDescription>
\ No newline at end of file diff --git a/modules/CIAO/docs/tutorials/Quoter/Simple/descriptors/Distributor_Exec.iad b/modules/CIAO/docs/tutorials/Quoter/Simple/descriptors/Distributor_Exec.iad new file mode 100644 index 00000000000..784e11b99bf --- /dev/null +++ b/modules/CIAO/docs/tutorials/Quoter/Simple/descriptors/Distributor_Exec.iad @@ -0,0 +1,29 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no" ?> +<Deployment:ImplementationArtifactDescription + xmlns:Deployment="http://www.omg.org/Deployment" + xmlns:xmi="http://www.omg.org/XMI" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.omg.org/Deployment Deployment.xsd"> + <label>Distributor Executor Artifact</label> + <UUID>5e4f2366-3810-4d4c-a269-5788a525cbe1</UUID> + <location>Distributor_exec</location> + <dependsOn> + <name>ACE</name> + <referencedArtifact href="Libraries.iad"/> + </dependsOn> + <dependsOn> + <name>Distributor_Stub</name> + <referencedArtifact href="Distributor_Stub.iad"/> + </dependsOn> + <execParameter> + <name>entryPoint</name> + <value> + <type> + <kind>tk_string</kind> + </type> + <value> + <string>createStockDistributorHome_Impl</string> + </value> + </value> + </execParameter> +</Deployment:ImplementationArtifactDescription>
\ No newline at end of file diff --git a/modules/CIAO/docs/tutorials/Quoter/Simple/descriptors/Distributor_Stub.iad b/modules/CIAO/docs/tutorials/Quoter/Simple/descriptors/Distributor_Stub.iad new file mode 100644 index 00000000000..c55a74916ef --- /dev/null +++ b/modules/CIAO/docs/tutorials/Quoter/Simple/descriptors/Distributor_Stub.iad @@ -0,0 +1,14 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no" ?> +<Deployment:ImplementationArtifactDescription + xmlns:Deployment="http://www.omg.org/Deployment" + xmlns:xmi="http://www.omg.org/XMI" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.omg.org/Deployment Deployment.xsd"> + <label>Distributor Stub Artifact</label> + <UUID>93bbdf7d-d3f7-4227-bb75-b0562ac15b92</UUID> + <location>Distributor_stub</location> + <dependsOn> + <name>ACE</name> + <referencedArtifact href="Libraries.iad"/> + </dependsOn> +</Deployment:ImplementationArtifactDescription>
\ No newline at end of file diff --git a/modules/CIAO/docs/tutorials/Quoter/Simple/descriptors/Distributor_Svnt.iad b/modules/CIAO/docs/tutorials/Quoter/Simple/descriptors/Distributor_Svnt.iad new file mode 100644 index 00000000000..7643089044f --- /dev/null +++ b/modules/CIAO/docs/tutorials/Quoter/Simple/descriptors/Distributor_Svnt.iad @@ -0,0 +1,29 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no" ?> +<Deployment:ImplementationArtifactDescription + xmlns:Deployment="http://www.omg.org/Deployment" + xmlns:xmi="http://www.omg.org/XMI" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.omg.org/Deployment Deployment.xsd"> + <label>Distributor Servant Artifact</label> + <UUID>04e4d246-e6eb-4b0e-8e32-60b996497cea</UUID> + <location>Distributor_svnt</location> + <dependsOn> + <name>ACE</name> + <referencedArtifact href="Libraries.iad"/> + </dependsOn> + <dependsOn> + <name>Distributor_Stub</name> + <referencedArtifact href="Distributor_Stub.iad"/> + </dependsOn> + <execParameter> + <name>entryPoint</name> + <value> + <type> + <kind>tk_string</kind> + </type> + <value> + <string>create_Stock_StockDistributorHome_Servant</string> + </value> + </value> + </execParameter> +</Deployment:ImplementationArtifactDescription>
\ No newline at end of file diff --git a/modules/CIAO/docs/tutorials/Quoter/Simple/descriptors/Domain.cdd b/modules/CIAO/docs/tutorials/Quoter/Simple/descriptors/Domain.cdd new file mode 100644 index 00000000000..b4dd3c729ef --- /dev/null +++ b/modules/CIAO/docs/tutorials/Quoter/Simple/descriptors/Domain.cdd @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<Deployment:Domain + xmlns:Deployment="http://www.omg.org/Deployment" + xmlns:xmi="http://www.omg.org/XMI" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.omg.org/Deployment Deployment.xsd"> +<label>Stock Domain</label> +<UUID>effd4bd0-6db0-4c50-9bb7-db9decebae1c</UUID> +<node> + <name>Distributor</name> + <label>Distributor's Node</label> +</node> +<node> + <name>Broker</name> + <label>Broker's Node</label> +</node> +</Deployment:Domain> diff --git a/modules/CIAO/docs/tutorials/Quoter/Simple/descriptors/Libraries.iad b/modules/CIAO/docs/tutorials/Quoter/Simple/descriptors/Libraries.iad new file mode 100644 index 00000000000..720a7ce8219 --- /dev/null +++ b/modules/CIAO/docs/tutorials/Quoter/Simple/descriptors/Libraries.iad @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no" ?> +<Deployment:ImplementationArtifactDescription xmlns:Deployment="http://www.omg.org/Deployment" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.omg.org/Deployment Deployment.xsd"> + <label>Common Libraries</label> + <UUID>6bae4fcd-c71c-44b4-a0d4-0e4199ce1a49</UUID> + <location>$ACE_ROOT/lib/libACE</location> + <location>$ACE_ROOT/lib/libTAO</location> + <location>$ACE_ROOT/lib/libCIAO_Client</location> +</Deployment:ImplementationArtifactDescription> diff --git a/modules/CIAO/docs/tutorials/Quoter/Simple/descriptors/Stock.cdp b/modules/CIAO/docs/tutorials/Quoter/Simple/descriptors/Stock.cdp new file mode 100644 index 00000000000..4d327f991c2 --- /dev/null +++ b/modules/CIAO/docs/tutorials/Quoter/Simple/descriptors/Stock.cdp @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no" ?> +<Deployment:DeploymentPlan + xmlns:Deployment="http://www.omg.org/Deployment" + xmlns:xmi="http://www.omg.org/XMI" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.omg.org/Deployment Deployment.xsd"> + <label>Stock Deployment Plan</label> + <instance xmi:id="a_Distributor"> + <name>Distributor_Instance</name> + <node>Distributor</node> + </instance> + <instance xmi:id="a_Broker01"> + <name>Broker_Instance_01</name> + <node>Broker01</node> + </instance> +</Deployment:DeploymentPlan> diff --git a/modules/CIAO/docs/tutorials/Quoter/Simple/descriptors/Stock.cid b/modules/CIAO/docs/tutorials/Quoter/Simple/descriptors/Stock.cid new file mode 100644 index 00000000000..2d2160bba7d --- /dev/null +++ b/modules/CIAO/docs/tutorials/Quoter/Simple/descriptors/Stock.cid @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no" ?> +<Deployment:ComponentImplementationDescription + xmlns:Deployment="http://www.omg.org/Deployment" + xmlns:xmi="http://www.omg.org/XMI" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.omg.org/Deployment Deployment.xsd"> + <label>Stock Example Assembly</label> + <UUID>effd4bd0-6db0-4c50-9bb7-db9decebae1c</UUID> + <assemblyImpl> + <instance xmi:id="a_Distributor"> + <name>Distributor_Instance</name> + <package href="Distributor.cpd"/> + </instance> + <instance xmi:id="a_Broker01"> + <name>Broker_Instance_01</name> + <package href="Broker.cpd"/> + </instance> + <connection> + <name>quoter_conn</name> + <internalEndpoint> + <portName>read_quoter</portName> + <instance xmi:idref="a_Broker01"/> + </internalEndpoint> + <internalEndpoint> + <portName>push_quoter</portName> + <instance xmi:idref="a_Distributor"/> + </internalEndpoint> + </connection> + <connection> + <name>StockName_event</name> + <internalEndpoint> + <portName>notify_in</portName> + <instance xmi:idref="a_Broker01"/> + </internalEndpoint> + <internalEndpoint> + <portName>notify_out</portName> + <instance xmi:idref="a_Distributor"/> + </internalEndpoint> + </connection> + </assemblyImpl> +</Deployment:ComponentImplementationDescription> diff --git a/modules/CIAO/docs/tutorials/Quoter/Simple/descriptors/Stock.cpd b/modules/CIAO/docs/tutorials/Quoter/Simple/descriptors/Stock.cpd new file mode 100644 index 00000000000..6b2ece8e164 --- /dev/null +++ b/modules/CIAO/docs/tutorials/Quoter/Simple/descriptors/Stock.cpd @@ -0,0 +1,13 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no" ?> +<Deployment:ComponentPackageDescription + xmlns:Deployment="http://www.omg.org/Deployment" + xmlns:xmi="http://www.omg.org/XMI" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.omg.org/Deployment Deployment.xsd"> + <label>Stock Example Package</label> + <UUID>823e4287-f53c-4caa-8619-f3dfda4c4998</UUID> + <implementation> + <name>Stock</name> + <referencedImplementation href="Stock.cid"/> + </implementation> +</Deployment:ComponentPackageDescription> diff --git a/modules/CIAO/docs/tutorials/Quoter/Simple/descriptors/Stock.dat b/modules/CIAO/docs/tutorials/Quoter/Simple/descriptors/Stock.dat new file mode 100644 index 00000000000..6079555046c --- /dev/null +++ b/modules/CIAO/docs/tutorials/Quoter/Simple/descriptors/Stock.dat @@ -0,0 +1,3 @@ +DistributorNode corbaloc:iiop:localhost:30000/NodeManager
+BrokerNode corbaloc:iiop:localhost:40000/NodeManager
+
diff --git a/modules/CIAO/docs/tutorials/Quoter/Simple/descriptors/Stock.pcd b/modules/CIAO/docs/tutorials/Quoter/Simple/descriptors/Stock.pcd new file mode 100644 index 00000000000..d65c2d9f86b --- /dev/null +++ b/modules/CIAO/docs/tutorials/Quoter/Simple/descriptors/Stock.pcd @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no" ?> +<Deployment:PackageConfiguration +xmlns:Deployment="http://www.omg.org/Deployment" +xmlns:xmi="http://www.omg.org/XMI" +xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" +xsi:schemaLocation="http://www.omg.org/Deployment Deployment.xsd"> + <label>Stock Example Configuration for Unix machines</label> + <UUID>559d65e8-0407-48c0-a158-dafe21360fef</UUID> + <basePackage href="Stock.cpd"/> +</Deployment:PackageConfiguration> diff --git a/modules/CIAO/docs/tutorials/Quoter/Simple/descriptors/XMI.xsd b/modules/CIAO/docs/tutorials/Quoter/Simple/descriptors/XMI.xsd new file mode 100644 index 00000000000..f4adac91934 --- /dev/null +++ b/modules/CIAO/docs/tutorials/Quoter/Simple/descriptors/XMI.xsd @@ -0,0 +1,35 @@ +<?xml version="1.0" ?> +<xsd:schema targetNamespace="http://www.omg.org/XMI" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation='http://www.w3.org/2001/XMLSchema XMLSchema.xsd'> + <xsd:attribute name="id" type="xsd:ID" /> + <xsd:attributeGroup name="IdentityAttribs"> + <xsd:attribute form="qualified" name="label" type="xsd:string" use="optional" /> + <xsd:attribute form="qualified" name="uuid" type="xsd:string" use="optional" /> + </xsd:attributeGroup> + <xsd:attributeGroup name="LinkAttribs"> + <xsd:attribute name="href" type="xsd:string" use="optional" /> + <xsd:attribute form="qualified" name="idref" type="xsd:IDREF" use="optional" /> + </xsd:attributeGroup> + <xsd:attributeGroup name="ObjectAttribs"> + <xsd:attributeGroup ref="xmi:IdentityAttribs" /> + <xsd:attributeGroup ref="xmi:LinkAttribs" /> + <xsd:attribute fixed="2.0" form="qualified" name="version" type="xsd:string" use="optional" /> + <xsd:attribute form="qualified" name="type" type="xsd:QName" use="optional" /> + </xsd:attributeGroup> + <xsd:complexType name="Extension"> + <xsd:choice maxOccurs="unbounded" minOccurs="0"> + <xsd:any processContents="lax" /> + </xsd:choice> + <xsd:attribute ref="xmi:id" /> + <xsd:attributeGroup ref="xmi:ObjectAttribs" /> + <xsd:attribute name="extender" type="xsd:string" use="optional" /> + <xsd:attribute name="extenderID" type="xsd:string" use="optional" /> + </xsd:complexType> + <xsd:element name="Extension" type="xmi:Extension" /> + <xsd:complexType name="Any"> + <xsd:choice maxOccurs="unbounded" minOccurs="0"> + <xsd:any processContents="skip" /> + </xsd:choice> + <xsd:anyAttribute processContents="skip" /> + </xsd:complexType> +</xsd:schema> diff --git a/modules/CIAO/docs/tutorials/Quoter/Simple/descriptors/flattened_deploymentplan.cdp b/modules/CIAO/docs/tutorials/Quoter/Simple/descriptors/flattened_deploymentplan.cdp new file mode 100644 index 00000000000..86f7c27b786 --- /dev/null +++ b/modules/CIAO/docs/tutorials/Quoter/Simple/descriptors/flattened_deploymentplan.cdp @@ -0,0 +1,222 @@ +<Deployment:deploymentPlan + xmlns:Deployment="http://www.omg.org/Deployment" + xmlns:xmi="http://www.omg.org/XMI" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.omg.org/Deployment Deployment.xsd"> + + <label>Quoter-DeploymentPlan</label> + <!-- Could be ZERO --> + <realizes> + <label>Quoter-realizes-cid</label> + <UUID>c0965470-7b83-11d9-9669-0800200c9a66</UUID> + <specificType><!-- @@ What does here? --></specificType> + <supportedType>IDL:Quoter/EC:1.0</supportedType> + <port> + <name>read_quoter</name> + <specificType>IDL:Quoter/Read_Quoter:1.0</specificType> + <supportedType>IDL:Quoter/Read_Quoter:1.0</supportedType> + <provider>false></provider> + <exclusiveProvider>false</exclusiveProvider> + <exclusiveUser>true</exclusiveUser> + <optional>false</optional> + <kind>SimplexReceptacle</kind> + </port> + </realizes> + + <implementation id="Quoter-Distributor-mdd"> + <name>Quoter-Distributor-mdd</name> + <source><!-- @@ Don't know what goes here --></source> + <artifact>Quoter-Distributor_exec</artifact> + <artifact>Quoter-Distributor_svnt</artifact> + <artifact>Quoter-Distributor_stub</artifact> + <artifact>Quoter-Base_stub</artifact> + <artifact>Quoter-Base_svnt</artifact> + <!-- + <execParameter></execParameter> + <deployRequirement></deployRequirement> + --> + </implementation> + + <implementation id="Quoter-Broker-mdd"> + <name>Quoter-Broker-mdd</name> + <source><!-- @@ Don't know what goes here --></source> + <artifact>Quoter-Broker_exec</artifact> + <artifact>Quoter-Broker_svnt</artifact> + <artifact>Quoter-Broker_stub</artifact> + <artifact>Quoter-Base_stub</artifact> + <artifact>Quoter-Base_svnt</artifact> + <!-- + <execParameter></execParameter> + <deployRequirement></deployRequirement> + --> + </implementation> + + <instance id="Quoter-Distributor-idd"> + <name>Quoter-Distributor-idd</name> + <node>DistributorNode</node> + <source><!-- @@ What goes here --></source> + <implementation>Quoter-Distributor-mdd</implementation> + <configProperty> + <name>ComponentIOR</name> + <value> + <type> + <kind>tk_string</kind> + </type> + <value> + <string>Distributor.ior</string> + </value> + </value> + </configProperty> + </instance> + + <instance id="Quoter-Broker-idd"> + <name>Quoter-Broker-idd</name> + <node>BrokerNode</node> + <source><!-- @@ What goes here --></source> + <implementation>Quoter-Broker-mdd</implementation> + <configProperty> + <name>ComponentIOR</name> + <value> + <type> + <kind>tk_string</kind> + </type> + <value> + <string>Broker.ior</string> + </value> + </value> + </configProperty> + </instance> + + + <connection> + <name>Quoter_event_connection</name> + <internalEndpoint> + <portName>notify_out</portName> + <kind>EventPublisher</kind> + <instance>Quoter-Distributor-idd</instance> + </internalEndpoint> + <internalEndpoint> + <portName>notify_in</portName> + <kind>EventConsumer</kind> + <instance>Quoter-Broker-idd</instance> + </internalEndpoint> + </connection> + + <connection> + <name>Quoter_facet_connection</name> + <internalEndpoint> + <portName>push_quoter</portName> + <kind>Facet</kind> + <instance>Quoter-Distributor-idd</instance> + </internalEndpoint> + <internalEndpoint> + <portName>read_quoter</portName> + <kind>SimplexReceptacle</kind> + <instance>Quoter-Broker-idd</instance> + </internalEndpoint> + </connection> + + <!-- @@ Runtime library name must match exactly in "location" tag --> + <artifact id="Quoter-Distributor_exec"> + <name>Distributor_exec</name> + <source><!-- @@ Not sure about this--></source> + <node><!-- blank --></node> + <location>Distributor_exec</location> + <execParameter> + <name>entryPoint</name> + <value> + <type> + <kind>tk_string</kind> + </type> + <value> + <string>createStockDistributorHome_Impl</string> + </value> + </value> + </execParameter> + </artifact> + + <artifact id="Quoter-Distributor_svnt"> + <name>Distributor_svnt</name> + <source><!-- @@ Not sure --></source> + <node><!-- blank --></node> + <location>Distributor_svnt</location> + <execParameter> + <name>entryPoint</name> + <value> + <type> + <kind>tk_string</kind> + </type> + <value> + <string>create_Stock_StockDistributorHome_Servant</string> + </value> + </value> + </execParameter> + </artifact> + + <artifact id="Quoter-Distributor_stub"> + <name>Distributor_stub</name> + <source><!-- @@ Not sure --></source> + <node><!-- blank --></node> + <location>Distributor_stub</location> + </artifact> + + <artifact id="Quoter-Broker_exec"> + <name>Broker_exec</name> + <source><!-- @@ Not sure about this--></source> + <node><!-- blank --></node> + <location>Broker_exec</location> + <execParameter> + <name>entryPoint</name> + <value> + <type> + <kind>tk_string</kind> + </type> + <value> + <string>createStockBrokerHome_Impl</string> + </value> + </value> + </execParameter> + </artifact> + + <artifact id="Quoter-Broker_svnt"> + <name>Broker_svnt</name> + <source><!-- @@ Not sure --></source> + <node><!-- blank --></node> + <location>Broker_svnt</location> + <execParameter> + <name>entryPoint</name> + <value> + <type> + <kind>tk_string</kind> + </type> + <value> + <string>create_Stock_StockBrokerHome_Servant</string> + </value> + </value> + </execParameter> + </artifact> + + <artifact id="Quoter-Broker_stub"> + <name>Broker_stub</name> + <source><!-- @@ Not sure --></source> + <node><!-- blank --></node> + <location>Broker_stub</location> + </artifact> + + + <artifact id="Quoter-Base_stub"> + <name>Stock_Base_stub</name> + <source><!-- @@ Not sure --></source> + <node><!-- blank --></node> + <location>Stock_Base_stub</location> + </artifact> + + <artifact id="Quoter-Base_svnt"> + <name>Stock_Base_svnt</name> + <source><!-- @@ Not sure --></source> + <node><!-- blank --></node> + <location>Stock_Base_svnt</location> + </artifact> + +</Deployment:deploymentPlan> + diff --git a/modules/CIAO/docs/tutorials/Quoter/Simple/descriptors/package.tpd b/modules/CIAO/docs/tutorials/Quoter/Simple/descriptors/package.tpd new file mode 100644 index 00000000000..b753de7b7ff --- /dev/null +++ b/modules/CIAO/docs/tutorials/Quoter/Simple/descriptors/package.tpd @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no" ?> +<Deployment:TopLevelPackageDescription +xmlns:Deployment="http://www.omg.org/Deployment" +xmlns:xmi="http://www.omg.org/XMI" +xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" +xsi:schemaLocation="http://www.omg.org/Deployment Deployment.xsd"> + <package href="Stock.pcd"/> +</Deployment:TopLevelPackageDescription> diff --git a/modules/CIAO/docs/tutorials/Quoter/Simple/descriptors/runNodeDaemons.pl b/modules/CIAO/docs/tutorials/Quoter/Simple/descriptors/runNodeDaemons.pl new file mode 100644 index 00000000000..7437f0ed341 --- /dev/null +++ b/modules/CIAO/docs/tutorials/Quoter/Simple/descriptors/runNodeDaemons.pl @@ -0,0 +1,40 @@ +eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}' + & eval 'exec perl -S $0 $argv:q' + if 0; + +# $Id$ +# -*- perl -*- + +use lib "$ENV{ACE_ROOT}/bin"; +use PerlACE::Run_Test; + +$status = 0; +$iorfile1 = PerlACE::LocalFile ("NodeApp1.ior"); +$iorfile2 = PerlACE::LocalFile ("NodeApp2.ior"); + +#for ($iter = 0; $iter <= $#ARGV; $iter++) { +# if ($ARGV[$iter] eq "-h" || $ARGV[$iter] eq "-?") { +# print "Run_Test Perl script for NodeApplicationTest \n\n"; +# print "run_test \n"; +# print "\n"; +# print "-h -- prints this information\n"; +# exit 0; +# } +#} + + +unlink $iorfile1; +unlink $iorfile2; + +$CIAO_ROOT=$ENV{'CIAO_ROOT'}; + +$SV1 = new PerlACE::Process ("$CIAO_ROOT/DAnCE/NodeManager/NodeManager", + "-ORBEndpoint iiop://localhost:30000 -s $CIAO_ROOT/DAnCE/NodeApplication/NodeApplication"); + +$SV2 = new PerlACE::Process ("$CIAO_ROOT/DAnCE/NodeManager/NodeManager", + "-ORBEndpoint iiop://localhost:40000 -s $CIAO_ROOT/DAnCE/NodeApplication/NodeApplication"); + +$SV1->Spawn (); +$SV2->Spawn (); + +sleep (99999999999); diff --git a/modules/CIAO/docs/tutorials/Quoter/Simple/images/Step1.JPG b/modules/CIAO/docs/tutorials/Quoter/Simple/images/Step1.JPG Binary files differnew file mode 100644 index 00000000000..b0346ee841b --- /dev/null +++ b/modules/CIAO/docs/tutorials/Quoter/Simple/images/Step1.JPG diff --git a/modules/CIAO/docs/tutorials/Quoter/Simple/images/Step2.JPG b/modules/CIAO/docs/tutorials/Quoter/Simple/images/Step2.JPG Binary files differnew file mode 100644 index 00000000000..a4526901307 --- /dev/null +++ b/modules/CIAO/docs/tutorials/Quoter/Simple/images/Step2.JPG diff --git a/modules/CIAO/docs/tutorials/Quoter/Simple/images/Step3.JPG b/modules/CIAO/docs/tutorials/Quoter/Simple/images/Step3.JPG Binary files differnew file mode 100644 index 00000000000..d7687394851 --- /dev/null +++ b/modules/CIAO/docs/tutorials/Quoter/Simple/images/Step3.JPG diff --git a/modules/CIAO/docs/tutorials/Quoter/Simple/images/Step6.JPG b/modules/CIAO/docs/tutorials/Quoter/Simple/images/Step6.JPG Binary files differnew file mode 100644 index 00000000000..e1e3b28055d --- /dev/null +++ b/modules/CIAO/docs/tutorials/Quoter/Simple/images/Step6.JPG diff --git a/modules/CIAO/docs/tutorials/Quoter/Simple/images/Steps for Developing CCM Applications.jpg b/modules/CIAO/docs/tutorials/Quoter/Simple/images/Steps for Developing CCM Applications.jpg Binary files differnew file mode 100644 index 00000000000..ddccdc2b373 --- /dev/null +++ b/modules/CIAO/docs/tutorials/Quoter/Simple/images/Steps for Developing CCM Applications.jpg diff --git a/modules/CIAO/docs/tutorials/Quoter/Simple/images/fig1.jpg b/modules/CIAO/docs/tutorials/Quoter/Simple/images/fig1.jpg Binary files differnew file mode 100644 index 00000000000..a8550fe1176 --- /dev/null +++ b/modules/CIAO/docs/tutorials/Quoter/Simple/images/fig1.jpg diff --git a/modules/CIAO/docs/tutorials/Quoter/Simple/images/fig10.jpg b/modules/CIAO/docs/tutorials/Quoter/Simple/images/fig10.jpg Binary files differnew file mode 100644 index 00000000000..3db5ac174e0 --- /dev/null +++ b/modules/CIAO/docs/tutorials/Quoter/Simple/images/fig10.jpg diff --git a/modules/CIAO/docs/tutorials/Quoter/Simple/images/fig11.jpg b/modules/CIAO/docs/tutorials/Quoter/Simple/images/fig11.jpg Binary files differnew file mode 100644 index 00000000000..c5eaf705384 --- /dev/null +++ b/modules/CIAO/docs/tutorials/Quoter/Simple/images/fig11.jpg diff --git a/modules/CIAO/docs/tutorials/Quoter/Simple/images/fig12.jpg b/modules/CIAO/docs/tutorials/Quoter/Simple/images/fig12.jpg Binary files differnew file mode 100644 index 00000000000..ea2a885af6b --- /dev/null +++ b/modules/CIAO/docs/tutorials/Quoter/Simple/images/fig12.jpg diff --git a/modules/CIAO/docs/tutorials/Quoter/Simple/images/fig2.jpg b/modules/CIAO/docs/tutorials/Quoter/Simple/images/fig2.jpg Binary files differnew file mode 100644 index 00000000000..49d6f90c3b0 --- /dev/null +++ b/modules/CIAO/docs/tutorials/Quoter/Simple/images/fig2.jpg diff --git a/modules/CIAO/docs/tutorials/Quoter/Simple/images/fig3.jpg b/modules/CIAO/docs/tutorials/Quoter/Simple/images/fig3.jpg Binary files differnew file mode 100644 index 00000000000..0559dc7382b --- /dev/null +++ b/modules/CIAO/docs/tutorials/Quoter/Simple/images/fig3.jpg diff --git a/modules/CIAO/docs/tutorials/Quoter/Simple/images/fig4.jpg b/modules/CIAO/docs/tutorials/Quoter/Simple/images/fig4.jpg Binary files differnew file mode 100644 index 00000000000..8fb89eccb57 --- /dev/null +++ b/modules/CIAO/docs/tutorials/Quoter/Simple/images/fig4.jpg diff --git a/modules/CIAO/docs/tutorials/Quoter/Simple/images/fig5.jpg b/modules/CIAO/docs/tutorials/Quoter/Simple/images/fig5.jpg Binary files differnew file mode 100644 index 00000000000..e847b9290d6 --- /dev/null +++ b/modules/CIAO/docs/tutorials/Quoter/Simple/images/fig5.jpg diff --git a/modules/CIAO/docs/tutorials/Quoter/Simple/images/fig6.jpg b/modules/CIAO/docs/tutorials/Quoter/Simple/images/fig6.jpg Binary files differnew file mode 100644 index 00000000000..0a214c84ea8 --- /dev/null +++ b/modules/CIAO/docs/tutorials/Quoter/Simple/images/fig6.jpg diff --git a/modules/CIAO/docs/tutorials/Quoter/Simple/images/fig7.jpg b/modules/CIAO/docs/tutorials/Quoter/Simple/images/fig7.jpg Binary files differnew file mode 100644 index 00000000000..67d90b775b0 --- /dev/null +++ b/modules/CIAO/docs/tutorials/Quoter/Simple/images/fig7.jpg diff --git a/modules/CIAO/docs/tutorials/Quoter/Simple/images/fig8.jpg b/modules/CIAO/docs/tutorials/Quoter/Simple/images/fig8.jpg Binary files differnew file mode 100644 index 00000000000..a565c2ab989 --- /dev/null +++ b/modules/CIAO/docs/tutorials/Quoter/Simple/images/fig8.jpg diff --git a/modules/CIAO/docs/tutorials/Quoter/Simple/images/fig9.jpg b/modules/CIAO/docs/tutorials/Quoter/Simple/images/fig9.jpg Binary files differnew file mode 100644 index 00000000000..996d90d800b --- /dev/null +++ b/modules/CIAO/docs/tutorials/Quoter/Simple/images/fig9.jpg diff --git a/modules/CIAO/docs/tutorials/Quoter/Simple/images/quoter.jpg b/modules/CIAO/docs/tutorials/Quoter/Simple/images/quoter.jpg Binary files differnew file mode 100644 index 00000000000..2f3edd11329 --- /dev/null +++ b/modules/CIAO/docs/tutorials/Quoter/Simple/images/quoter.jpg diff --git a/modules/CIAO/docs/tutorials/Quoter/Simple/index.html b/modules/CIAO/docs/tutorials/Quoter/Simple/index.html new file mode 100644 index 00000000000..f865a43cc6c --- /dev/null +++ b/modules/CIAO/docs/tutorials/Quoter/Simple/index.html @@ -0,0 +1,655 @@ +<!-- $Id$ --> +<html xmlns:v="urn:schemas-microsoft-com:vml" +xmlns:o="urn:schemas-microsoft-com:office:office" +xmlns:w="urn:schemas-microsoft-com:office:word" +xmlns:p="urn:schemas-microsoft-com:office:powerpoint" +xmlns:oa="urn:schemas-microsoft-com:office:activation" +xmlns="http://www.w3.org/TR/REC-html40"> + +<head> +<meta http-equiv=Content-Type content="text/html; charset=us-ascii"> +<meta name=ProgId content=Word.Document> +<meta name=Generator content="Microsoft Word 11"> +<meta name=Originator content="Microsoft Word 11"> +<link rel=File-List href="index_files/filelist.xml"> +<link rel=Edit-Time-Data href="index_files/editdata.mso"> +<!--[if !mso]> +<style> +v\:* {behavior:url(#default#VML);} +o\:* {behavior:url(#default#VML);} +w\:* {behavior:url(#default#VML);} +.shape {behavior:url(#default#VML);} +</style> +<![endif]--> +<title>Building a Stock Quoter with TAO - A Tutorial</title> +<!--[if gte mso 9]><xml> + <o:DocumentProperties> + <o:Author>Abdullah Sowayan</o:Author> + <o:LastAuthor>Abdullah Sowayan</o:LastAuthor> + <o:Revision>13</o:Revision> + <o:TotalTime>64</o:TotalTime> + <o:Created>2006-10-06T22:35:00Z</o:Created> + <o:LastSaved>2006-11-06T21:35:00Z</o:LastSaved> + <o:Pages>1</o:Pages> + <o:Words>851</o:Words> + <o:Characters>4851</o:Characters> + <o:Company>Maritime Systems & Sensors</o:Company> + <o:Lines>40</o:Lines> + <o:Paragraphs>11</o:Paragraphs> + <o:CharactersWithSpaces>5691</o:CharactersWithSpaces> + <o:Version>11.8107</o:Version> + </o:DocumentProperties> +</xml><![endif]--><!--[if gte mso 9]><xml> + <w:WordDocument> + <w:ValidateAgainstSchemas/> + <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid> + <w:IgnoreMixedContent>false</w:IgnoreMixedContent> + <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText> + <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel> + </w:WordDocument> +</xml><![endif]--><!--[if gte mso 9]><xml> + <w:LatentStyles DefLockedState="false" LatentStyleCount="156"> + </w:LatentStyles> +</xml><![endif]--> +<style> +<!-- + /* Style Definitions */ + p.MsoNormal, li.MsoNormal, div.MsoNormal + {mso-style-parent:""; + margin:0in; + margin-bottom:.0001pt; + mso-pagination:widow-orphan; + font-size:12.0pt; + font-family:"Times New Roman"; + mso-fareast-font-family:"Times New Roman";} +h3 + {mso-margin-top-alt:auto; + margin-right:0in; + mso-margin-bottom-alt:auto; + margin-left:0in; + mso-pagination:widow-orphan; + mso-outline-level:3; + font-size:13.5pt; + font-family:"Times New Roman"; + font-weight:bold;} +a:link, span.MsoHyperlink + {color:#000FFF; + text-decoration:underline; + text-underline:single;} +a:visited, span.MsoHyperlinkFollowed + {color:#FF0F0F; + text-decoration:underline; + text-underline:single;} +p + {mso-margin-top-alt:auto; + margin-right:0in; + mso-margin-bottom-alt:auto; + margin-left:0in; + mso-pagination:widow-orphan; + font-size:12.0pt; + font-family:"Times New Roman"; + mso-fareast-font-family:"Times New Roman";} +address + {margin:0in; + margin-bottom:.0001pt; + mso-pagination:widow-orphan; + font-size:12.0pt; + font-family:"Times New Roman"; + font-style:italic;} +code + {font-family:"Courier New"; + mso-ascii-font-family:"Courier New"; + mso-fareast-font-family:"Times New Roman"; + mso-hansi-font-family:"Courier New"; + mso-bidi-font-family:"Courier New";} +span.intbody + {mso-style-name:intbody;} +@page Section1 + {size:8.5in 11.0in; + margin:1.0in 1.25in 1.0in 1.25in; + mso-header-margin:.5in; + mso-footer-margin:.5in; + mso-paper-source:0;} +div.Section1 + {page:Section1;} + /* List Definitions */ + @list l0 + {mso-list-id:137387275; + mso-list-type:hybrid; + mso-list-template-ids:-1837205732 67698689 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;} +@list l0:level1 + {mso-level-number-format:bullet; + mso-level-text:\F0B7; + mso-level-tab-stop:.75in; + mso-level-number-position:left; + margin-left:.75in; + text-indent:-.25in; + font-family:Symbol;} +@list l0:level2 + {mso-level-tab-stop:1.0in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l0:level3 + {mso-level-tab-stop:1.5in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l0:level4 + {mso-level-tab-stop:2.0in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l0:level5 + {mso-level-tab-stop:2.5in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l0:level6 + {mso-level-tab-stop:3.0in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l0:level7 + {mso-level-tab-stop:3.5in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l0:level8 + {mso-level-tab-stop:4.0in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l0:level9 + {mso-level-tab-stop:4.5in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l1 + {mso-list-id:271979655; + mso-list-template-ids:-2025148996;} +@list l1:level1 + {mso-level-number-format:bullet; + mso-level-text:\F0B7; + mso-level-tab-stop:.75in; + mso-level-number-position:left; + margin-left:.75in; + text-indent:-.25in; + font-family:Symbol;} +@list l1:level2 + {mso-level-tab-stop:1.0in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l1:level3 + {mso-level-tab-stop:1.5in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l1:level4 + {mso-level-tab-stop:2.0in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l1:level5 + {mso-level-tab-stop:2.5in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l1:level6 + {mso-level-tab-stop:3.0in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l1:level7 + {mso-level-tab-stop:3.5in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l1:level8 + {mso-level-tab-stop:4.0in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l1:level9 + {mso-level-tab-stop:4.5in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l2 + {mso-list-id:398870737; + mso-list-type:hybrid; + mso-list-template-ids:-1758177826 -1301365556 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;} +@list l2:level1 + {mso-level-tab-stop:.5in; + mso-level-number-position:left; + text-indent:-.25in; + mso-ansi-font-weight:bold;} +@list l2:level2 + {mso-level-number-format:alpha-lower; + mso-level-tab-stop:1.0in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l2:level3 + {mso-level-tab-stop:1.5in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l2:level4 + {mso-level-tab-stop:2.0in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l2:level5 + {mso-level-tab-stop:2.5in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l2:level6 + {mso-level-tab-stop:3.0in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l2:level7 + {mso-level-tab-stop:3.5in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l2:level8 + {mso-level-tab-stop:4.0in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l2:level9 + {mso-level-tab-stop:4.5in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l3 + {mso-list-id:1284144513; + mso-list-type:hybrid; + mso-list-template-ids:120510300 -1301365556 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;} +@list l3:level1 + {mso-level-tab-stop:.5in; + mso-level-number-position:left; + text-indent:-.25in; + mso-ansi-font-weight:bold;} +@list l3:level2 + {mso-level-tab-stop:1.0in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l3:level3 + {mso-level-tab-stop:1.5in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l3:level4 + {mso-level-tab-stop:2.0in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l3:level5 + {mso-level-tab-stop:2.5in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l3:level6 + {mso-level-tab-stop:3.0in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l3:level7 + {mso-level-tab-stop:3.5in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l3:level8 + {mso-level-tab-stop:4.0in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l3:level9 + {mso-level-tab-stop:4.5in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l4 + {mso-list-id:1734621206; + mso-list-type:hybrid; + mso-list-template-ids:-1370594096 67698689 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;} +@list l4:level1 + {mso-level-number-format:bullet; + mso-level-text:\F0B7; + mso-level-tab-stop:.75in; + mso-level-number-position:left; + margin-left:.75in; + text-indent:-.25in; + font-family:Symbol;} +@list l4:level2 + {mso-level-tab-stop:1.0in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l4:level3 + {mso-level-tab-stop:1.5in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l4:level4 + {mso-level-tab-stop:2.0in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l4:level5 + {mso-level-tab-stop:2.5in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l4:level6 + {mso-level-tab-stop:3.0in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l4:level7 + {mso-level-tab-stop:3.5in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l4:level8 + {mso-level-tab-stop:4.0in; + mso-level-number-position:left; + text-indent:-.25in;} +@list l4:level9 + {mso-level-tab-stop:4.5in; + mso-level-number-position:left; + text-indent:-.25in;} +ol + {margin-bottom:0in;} +ul + {margin-bottom:0in;} +--> +</style> +<!--[if gte mso 10]> +<style> + /* Style Definitions */ + table.MsoNormalTable + {mso-style-name:"Table Normal"; + mso-tstyle-rowband-size:0; + mso-tstyle-colband-size:0; + mso-style-noshow:yes; + mso-style-parent:""; + mso-padding-alt:0in 5.4pt 0in 5.4pt; + mso-para-margin:0in; + mso-para-margin-bottom:.0001pt; + mso-pagination:widow-orphan; + font-size:10.0pt; + font-family:"Times New Roman"; + mso-ansi-language:#0400; + mso-fareast-language:#0400; + mso-bidi-language:#0400;} +</style> +<![endif]--><!-- index.html,v 1.3 2006/05/06 02:29:31 schmidt Exp --><!--[if gte mso 9]><xml> + <o:shapedefaults v:ext="edit" spidmax="7170"/> +</xml><![endif]--><!--[if gte mso 9]><xml> + <o:shapelayout v:ext="edit"> + <o:idmap v:ext="edit" data="1"/> + </o:shapelayout></xml><![endif]--> +</head> + +<body bgcolor=white lang=EN-US link="#000FFF" vlink="#FF0F0F" style='tab-interval: +.5in'> + +<div class=Section1> + +<h3 align=center style='margin:0in;margin-bottom:.0001pt;text-align:center; +line-height:150%'><span style='color:black'>Building a Stock Quoter with CIAO, +CoSMIC, and DAnCE - A Tutorial<o:p></o:p></span></h3> + +<h3 align=center style='margin:0in;margin-bottom:.0001pt;text-align:center; +line-height:150%'><span style='color:black'><o:p> </o:p></span></h3> + +<p style='margin:0in;margin-bottom:.0001pt;line-height:150%'><span +style='color:black'>This tutorial provides a step-by-step lesson on developing +component-based distributed applications using <a +href="http://www.dre.vanderbilt.edu/cosmic/">CoSMIC</a> modeling toolkit and the +<a href="http://www.cs.wustl.edu/%7Eschmidt/CIAO.html">CIAO DAnCE</a> +framework. The example application used in this tutorial is a Stock Quoter that +consists of two components; the <i>StockDistributor</i> and the <i>StockBroker</i>. +The <i>StockDistributor</i> notifies one or more stock brokers whenever a stock +price changes. Upon receiving the notification, the <i>StockBroker</i> fetches +information about a particular stock from the <i>StockDistributor</i>. The +figure bellow shows the application diagram. This Stock Quoter application is +based on a series of <a +href="http://www.cs.wustl.edu/%7Eschmidt/report-doc.html">CORBA component model</a> +columns written by <a href="http://www.cs.wustl.edu/%7Eschmidt/">Doug Schmidt</a> +and <a href="http://www.iona.com/hyplan/vinoski/">Steve Vinoski</a> for <a +href="http://www.cuj.com">C/C++ Users Journal</a> and has consistently been +used as an example for <a href="http://www.cs.wustl.edu/%7Eschmidt/TAO.html">TAO</a>.<o:p></o:p></span></p> + +<p style='margin:0in;margin-bottom:.0001pt;line-height:150%'><span +style='color:black'><o:p> </o:p></span></p> + +<p class=MsoNormal align=center style='text-align:center;line-height:150%'><span +style='color:black'><img border=0 width=434 height=232 id="_x0000_i1025" +src="images/fig1.jpg"><br> +Stock Quoter application Diagram <o:p></o:p></span></p> + +<p class=MsoNormal style='line-height:150%'><span style='color:black'><o:p> </o:p></span></p> + +<p style='margin:0in;margin-bottom:.0001pt;line-height:150%'><span +style='color:black'>This is a step-by-step tutorial that will walk you through +the development and deployment phases of a CCM application (Stock Quoter). This +tutorial assumes that you have read and understood the following articles that +describe the example:<o:p></o:p></span></p> + +<p style='margin-top:0in;margin-right:0in;margin-bottom:0in;margin-left:.75in; +margin-bottom:.0001pt;text-indent:-.25in;line-height:150%;mso-list:l0 level1 lfo1; +tab-stops:list .75in'><![if !supportLists]><span style='font-family:Symbol; +mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol'><span +style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'> +</span></span></span><![endif]><a +href="http://www.cuj.com/documents/s=9039/cujexp0402vinoski/">The CORBA +Component Model, Part 1: Evolving Towards Component Middleware</a></p> + +<p style='margin-top:0in;margin-right:0in;margin-bottom:0in;margin-left:.75in; +margin-bottom:.0001pt;text-indent:-.25in;line-height:150%;mso-list:l0 level1 lfo1; +tab-stops:list .75in'><![if !supportLists]><span style='font-family:Symbol; +mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol'><span +style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'> +</span></span></span><![endif]><a +href="http://www.cuj.com/documents/s=9152/cujexp0404vinoski/">The CORBA +Component Model, Part 2: Defining Components with the IDL 3.x Types</a></p> + +<p style='margin-top:0in;margin-right:0in;margin-bottom:0in;margin-left:.75in; +margin-bottom:.0001pt;text-indent:-.25in;line-height:150%;mso-list:l0 level1 lfo1; +tab-stops:list .75in'><![if !supportLists]><span style='font-family:Symbol; +mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol'><span +style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'> +</span></span></span><![endif]><a +href="http://www.cuj.com/documents/s=9301/cujexp0409vinoski/">The CORBA +Component Model, Part 3: The CCM Container Architecture and Component +Implementation Framework</a></p> + +<p style='margin-top:0in;margin-right:0in;margin-bottom:0in;margin-left:.75in; +margin-bottom:.0001pt;text-indent:-.25in;line-height:150%;mso-list:l0 level1 lfo1; +tab-stops:list .75in'><![if !supportLists]><span style='font-family:Symbol; +mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol'><span +style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'> +</span></span></span><![endif]><a +href="http://www.cuj.com/documents/s=9360/cujexp0410vinoski/">The CORBA +Component Model Part 4: The CORBA Component Model Part 4: Implementing +Components with CCM</a></p> + +<p style='margin:0in;margin-bottom:.0001pt;line-height:150%'><span +style='color:black'><o:p> </o:p></span></p> + +<p style='margin:0in;margin-bottom:.0001pt;line-height:150%'><span +style='color:black'><span style='mso-spacerun:yes'> </span>In addition to +the articles above, reading and understanding the resources below will greatly +help you follow through this tutorial:<o:p></o:p></span></p> + +<p style='margin-top:0in;margin-right:0in;margin-bottom:0in;margin-left:.75in; +margin-bottom:.0001pt;text-indent:-.25in;line-height:150%;mso-list:l4 level1 lfo2; +tab-stops:list .75in'><![if !supportLists]><span style='font-family:Symbol; +mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;color:black'><span +style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'> +</span></span></span><![endif]><a +href="http://www.cs.wustl.edu/~schmidt/PDF/DAnCE.pdf">DAnCE: A QoS-enabled +Component Deployment and Conguration Engine</a><span style='color:black'><o:p></o:p></span></p> + +<p style='margin-top:0in;margin-right:0in;margin-bottom:0in;margin-left:.75in; +margin-bottom:.0001pt;text-indent:-.25in;line-height:150%;mso-list:l4 level1 lfo2; +tab-stops:list .75in'><![if !supportLists]><span style='font-family:Symbol; +mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol'><span +style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'> +</span></span></span><![endif]>TAO’s Developer’s Guide Version +1.4a. Chapter 32 : CIAO and CCM.</p> + +<p style='margin:0in;margin-bottom:.0001pt;line-height:150%'><span +style='color:black'><o:p> </o:p></span></p> + +<p class=MsoNormal style='line-height:150%'><b><span style='font-size:14.0pt; +line-height:150%;color:black'>Prerequisites:</span></b><b><span +style='font-size:13.5pt;line-height:150%;color:black'><br> +</span></b><span style='color:black'> Before you start, you need the +following: <o:p></o:p></span></p> + +<p class=MsoNormal style='margin-left:.75in;text-indent:-.25in;line-height: +150%;mso-list:l1 level1 lfo3;tab-stops:list .75in'><![if !supportLists]><span +style='font-family:Symbol;mso-fareast-font-family:Symbol;mso-bidi-font-family: +Symbol;color:black'><span style='mso-list:Ignore'>·<span +style='font:7.0pt "Times New Roman"'> +</span></span></span><![endif]><b><span style='color:black'>ACE+TAO+CIAO +(Component Integraated ACE ORB).</span></b><span style='color:black'> ACE + TAO ++ CIAO provide the CCM infrastructure necessary to enable the CCM-based distributed +component interaction. You can click <a +href="http://download.dre.vanderbilt.edu">here</a> to download the latest +ACE + TAO + CIAO and click <a +href="http://www.cs.wustl.edu/%7Eschmidt/ACE_wrappers/TAO/CIAO/CIAO-INSTALL.html">here</a> +for information on how to build ACE+TAO+CIAO.<o:p></o:p></span></p> + +<p class=MsoNormal style='margin-left:.75in;text-indent:-.25in;line-height: +150%;mso-list:l1 level1 lfo3;tab-stops:list .75in'><![if !supportLists]><span +style='font-family:Symbol;mso-fareast-font-family:Symbol;mso-bidi-font-family: +Symbol;color:black'><span style='mso-list:Ignore'>·<span +style='font:7.0pt "Times New Roman"'> +</span></span></span><![endif]><b><span style='color:black'>Generic Modeling +Environment (GME).</span></b><span style='color:black'> GME is a configurable +toolkit for creating domain-specific modeling and program synthesis +environments. It provides the execution environment for CoSMIC toolkits. Click <a +href="http://www.isis.vanderbilt.edu/Projects/gme/download.html">here</a> to +download GME.<o:p></o:p></span></p> + +<p class=MsoNormal style='margin-left:.75in;text-indent:-.25in;line-height: +150%;mso-list:l1 level1 lfo3;tab-stops:list .75in'><![if !supportLists]><span +style='font-family:Symbol;mso-fareast-font-family:Symbol;mso-bidi-font-family: +Symbol;color:black'><span style='mso-list:Ignore'>·<span +style='font:7.0pt "Times New Roman"'> +</span></span></span><![endif]><b><span style='color:black'>CoSMIC toolkit.</span></b><span +style='color:black'> Click <a href="http://www.dre.vanderbilt.edu/cosmic/">here</a> +to download the latest CoSMIC release.<o:p></o:p></span></p> + +<blockquote style='margin-top:5.0pt;margin-bottom:5.0pt'> + +<div style='margin-left:-.5in'> + +<div class=MsoNormal align=center style='text-align:center;line-height:150%'><span +style='color:black'> + +<hr size=2 width="100%" align=center> + +</span></div> + +</div> + +<p class=MsoNormal style='margin-left:-.5in;line-height:150%'><strong><span +style='color:black'>Note:</span></strong><strong><span style='font-weight:normal'><o:p></o:p></span></strong></p> + +<p class=MsoNormal style='margin-left:0in;text-indent:-.25in;line-height:150%; +mso-list:l3 level1 lfo4;tab-stops:list 0in .5in'><![if !supportLists]><b +style='mso-bidi-font-weight:normal'><span style='mso-list:Ignore'>1.<span +style='font:7.0pt "Times New Roman"'> </span></span></b><![endif]><span +style='color:black'>Usually you should download the latest GME, but it is +possible that CoSMIC hasn't been updated yet to support the very latest +GME..The installation process of CoSMIC will tell you which version it is +expecting. So <span class=intbody>please make sure the GME version you +are using is the version required by CoSMIC. A different version of </span>GME +may result in undefined errors. </span></p> + +<p class=MsoNormal style='margin-left:0in;text-indent:-.25in;line-height:150%; +mso-list:l3 level1 lfo4;tab-stops:list 0in .5in'><![if !supportLists]><b +style='mso-bidi-font-weight:normal'><span style='color:black'><span +style='mso-list:Ignore'>2.<span style='font:7.0pt "Times New Roman"'> +</span></span></span></b><![endif]><span style='color:black'>Make sure you +install GME first before you start with CoSMIC toolkits.<o:p></o:p></span></p> + +<div style='margin-left:-.5in'> + +<div class=MsoNormal align=center style='text-align:center;line-height:150%'><span +style='color:black'> + +<hr size=2 width="100%" align=center> + +</span></div> + +</div> + +</blockquote> + +<p class=MsoNormal style='line-height:150%'><span style='color:black'><o:p> </o:p></span></p> + +<p class=MsoNormal style='line-height:150%'><b style='mso-bidi-font-weight: +normal'><span style='font-size:14.0pt;line-height:150%;color:black'>Steps for +Developing the Stock Quoter Application:<o:p></o:p></span></b></p> + +<p class=MsoNormal style='line-height:150%'><b style='mso-bidi-font-weight: +normal'><span style='font-size:14.0pt;line-height:150%;color:black'><o:p> </o:p></span></b></p> + +<p class=MsoNormal align=center style='text-align:center;line-height:150%'><b +style='mso-bidi-font-weight:normal'><span style='font-size:14.0pt;line-height: +150%;color:black'><img border=0 width=960 height=521 id="_x0000_i1028" +src="images/Steps%20for%20Developing%20CCM%20Applications.jpg"><o:p></o:p></span></b></p> + +<p class=MsoNormal align=center style='text-align:center;line-height:150%'><span +style='color:black'>Steps for Developing Stock Quoter Application<o:p></o:p></span></p> + +<p class=MsoNormal style='line-height:150%'><span style='color:black'><o:p> </o:p></span></p> + +<p class=MsoNormal style='line-height:150%'><span style='color:black'>Listed +below are the steps for developing the Stock Quoter application. Each link is a +step-by-step tutorial of the specific step.</span><b style='mso-bidi-font-weight: +normal'><span style='font-size:14.0pt;line-height:150%;color:black'><o:p></o:p></span></b></p> + +<ol style='margin-top:0in' start=1 type=1> + <li class=MsoNormal style='color:black;line-height:150%;mso-list:l2 level1 lfo5; + tab-stops:list .5in'><b><a href="01.html">Define your interfaces and + component types</a>:</b><o:p></o:p></li> + <ol style='margin-top:0in' start=1 type=a> + <li class=MsoNormal style='color:black;line-height:150%;mso-list:l2 level2 lfo5; + tab-stops:list 1.0in'><b>Define your interfaces using IDL 2.x features</b>, + e.g., use the familiar CORBA types (such as <span style='mso-bidi-font-weight: + bold'>struct</span>, <span style='mso-bidi-font-weight:bold'>sequence</span>, + <span style='mso-bidi-font-weight:bold'>long</span>, <span + style='mso-bidi-font-weight:bold'>Object</span>, <span style='mso-bidi-font-weight: + bold'>interface</span>, <span style='mso-bidi-font-weight:bold'>raises</span>, + etc.) to define your interfaces & exceptions.<o:p></o:p></li> + <li class=MsoNormal style='color:black;line-height:150%;mso-list:l2 level2 lfo5; + tab-stops:list 1.0in'><b>Define your component types using IDL 3.x + features</b>, e.g., use the new CCM keywords (such as <span + style='mso-bidi-font-weight:bold'>component</span>, <span + style='mso-bidi-font-weight:bold'>provides</span>, <span + style='mso-bidi-font-weight:bold'>uses</span>, <span style='mso-bidi-font-weight: + bold'>publishes</span>, <span style='mso-bidi-font-weight:bold'>emits</span>, + & <span style='mso-bidi-font-weight:bold'>consumes</span>) to group + the IDL 2.x types together to form components.<b><o:p></o:p></b></li> + </ol> + <li class=MsoNormal style='color:black;line-height:150%;mso-list:l2 level1 lfo5; + tab-stops:list .5in'><b><a href="02.html">Implement your components</a></b>, + e.g., using C++ or Java & the Component Implementation Definition + Language (CIDL), which generates component servants, executor interfaces, + associated metadata, & compositions.<b><o:p></o:p></b></li> + <li class=MsoNormal style='color:black;line-height:150%;mso-list:l2 level1 lfo5; + tab-stops:list .5in'><b style='mso-bidi-font-weight:normal'><a + href="03.html">Package your components</a></b>, <span style='color:red'>[Ming, + can you add a brief description here?]</span><b><o:p></o:p></b></li> + <li class=MsoNormal style='color:black;line-height:150%;mso-list:l2 level1 lfo5; + tab-stops:list .5in'><b><a href="03.html">Assemble your components</a></b>, + e.g., group related components together & characterize their metadata + that describes the components present in the assembly.<span + style='mso-bidi-font-weight:bold'><o:p></o:p></span></li> + <li class=MsoNormal style='color:black;line-height:150%;mso-list:l2 level1 lfo5; + tab-stops:list .5in'><b style='mso-bidi-font-weight:normal'><a + href="03.html">Plan your deployment</a></b>, <span style='color:red'>[Ming, + can you add a brief description here?]</span><span style='mso-bidi-font-weight: + bold'><o:p></o:p></span></li> + <li class=MsoNormal style='color:black;line-height:150%;mso-list:l2 level1 lfo5; + tab-stops:list .5in'><b><a href="04.html">Deploy your components & run + your application</a></b>, e.g., move the component assembly packages to + the appropriate nodes in the distributed system & invoke operations on + components to perform the application logic.<b style='mso-bidi-font-weight: + normal'><o:p></o:p></b></li> +</ol> + +<div class=MsoNormal align=center style='text-align:center;line-height:150%'><span +style='color:black'> + +<hr size=2 width="100%" align=center> + +</span></div> + +<address style='line-height:150%'><a href="mailto:ming.xiong@vanderbilt.edu">Ming +Xiong<br> +</a><a href="mailto:abdullah.sowayan@lmco.com">Abdullah Sowayan</a></address> + +<address style='line-height:150%'>Last modified: Fri May 5 21:29:07 CDT 2006 <span +style='color:black'><o:p></o:p></span></address> + +</div> + +</body> + +</html> diff --git a/modules/CIAO/docs/value_factory_registration.html b/modules/CIAO/docs/value_factory_registration.html new file mode 100644 index 00000000000..3c2a45d6815 --- /dev/null +++ b/modules/CIAO/docs/value_factory_registration.html @@ -0,0 +1,49 @@ +<!DOCTYPE html PUBLIC "-//w3c//dtd html 4.0 transitional//en"> +<html> + <head> + <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> + <meta name="Author" content="Jeff Parsons"> + <meta name="GENERATOR" content="Mozilla/4.76 [en] (Windows NT 5.0; U) [Netscape]"> + <title>Registration of Valuetype Factories for Event Sinks</title> + <!-- $Id$ --> + </head> + <body> + <h3>Registration of Valuetype Factories for Event Sinks</h3> + <p>Components with one or more event sink (consumer) ports will need to have a + valuetype factory registered with the underlying ORB in order to correctly + demarshal the state of eventtypes it receives over the wire.</p> + <p>For the common case (eventtypes that contain only one or more state members), + the IDL compiler generates a concrete class with a name constructed from the + valuetype name and an '_init' suffix, and the CIDL compiler generates a macro + in the servant constructor that registers this factory with the container's + ORB. However, an eventtype, like any valuetype, may also contain operation + and/or factory declarations. In these cases things are not so simple. For + example a factory declaration in an IDL valuetype or eventtype will generate a + pure virtual function of the same name in the associated _init class, meaning + that ORB factory registration for this type must be with a derived factory + class written by the application developer. The table below shows all possible + cases of IDL compiler factory generation.</p> + <TABLE BORDER="4" CELLSPACING="4" CELLPADDING="4" ID="Table1"> + <TR> + <TD></TD> + <TD><b>Has Operation</b></TD> + <TD><b>Has No Operation</b></TD> + </TR> + <tr> + <td><b>Has Factory</b></td> + <td>ABSTRACT FACTORY</td> + <td>ABSTRACT FACTORY</td> + </tr> + <tr> + <td><b>Has No Factory</b></td> + <td>NO FACTORY</td> + <td>CONCRETE FACTORY</td> + </tr> + </TABLE> + <p>The CIAO CIDL compiler will generate a macro to register the factory with the + container's ORB only in the case where a concrete factory is generated by the + IDL compiler, and thus no subclassing is necessary. There is also a command + line option for the CIDL compiler, <tt>--suppress-register-factory</tt>, + that turns off generation of the macro in all cases.</p> + </body> +</html> |