summaryrefslogtreecommitdiff
path: root/TAO/CIAO/docs/tutorials/CoSMIC/02.html
diff options
context:
space:
mode:
Diffstat (limited to 'TAO/CIAO/docs/tutorials/CoSMIC/02.html')
-rw-r--r--TAO/CIAO/docs/tutorials/CoSMIC/02.html422
1 files changed, 422 insertions, 0 deletions
diff --git a/TAO/CIAO/docs/tutorials/CoSMIC/02.html b/TAO/CIAO/docs/tutorials/CoSMIC/02.html
new file mode 100644
index 00000000000..6c8cee01aa2
--- /dev/null
+++ b/TAO/CIAO/docs/tutorials/CoSMIC/02.html
@@ -0,0 +1,422 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+<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>Building Stock Quoter system in PICML<br>
+</h3>
+Now we can start modelling the Quoter system using PICML. If there's
+anything that confuses you as we go through each step, <a
+ href="Model/Quoter.xme">here</a> is a pre-built Quoter model for your
+reference.
+It has everything that we will be achieving in this section.
+<blockquote>
+ <hr><strong>Note:</strong>
+In case you don't know, to importa a XML file, just select <span
+ style="font-weight: bold;">File-&gt;Import XML..</span> from
+GME and choose your XML model <br>
+ <hr></blockquote>
+The paradigm of PICML is designed keeping in mind the <a
+ href="http://www.omg.org/cgi-bin/doc?ptc/2003-07-08">OMG Deployment
+&amp; Configuration (D&amp;C) specification (ptc/2003-07-08)</a>, so
+the modeling process is straightforwrd if you are familar
+with the specification. Please go to <a
+ href="http://www.cs.wustl.edu/%7Eschmidt/ACE_wrappers/TAO/CIAO/docs/releasenotes/dance.html">DAnCE
+project</a> for more information. <br>
+<br>
+<hr>
+<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>
+The complete PICML Quoter model consists of modeling elements
+distributed in various folders.. <span style="font-style: italic;">idl_to_picml</span>
+has created
+all these folders and some of the modeling entities for us, as you
+might have seen. In
+the rest of the section, we 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.
+Before we start, it is worth reminding you that, please don't forget to
+check the constraints when you are done with your model. In particular,
+whenever you are about to generate something from your model, check the
+constraint first by choosing <br>
+<span style="font-weight: bold;">File-&gt;Check-&gt;Check All</span> in
+GME. This will help you find a lot of logic error in your model.<br>
+<a name="1">
+<h3>ImplementationArtifacts<br>
+</h3>
+</a>This folder contains implementation artifacts associated with
+components. <span style="font-style: italic;">idl_to_picml</span> has
+created these artifacts for us, with their dependency relationships
+correctly captured. Figure 4 shows the Implementation Artifacts for <span
+ style="font-style: italic;">Broker</span>.
+<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 style="text-align: left;"><a name="1"></a>
+<hr><a name="2">
+<h3>ComponentImplementation<br>
+</h3>
+</a>This folder contains models that describes the implementations of
+component interfaces. In the Quoter example, we will have two
+monolithic component implementations; respectively <span
+ style="font-style: italic;">StockDistributorImplementation </span><span
+ style="font-style: italic;">StockBroker</span>Implementation, and an
+assembly
+component implementation: <span style="font-style: italic;">StockQuoter</span>,
+which is an assembly of <span style="font-style: italic;">StockDistributorImplementation
+</span>and <span style="font-style: italic;">StockBrokerImplementaion</span>.
+<span style="font-style: italic;">idl_to_picml</span> has created the
+monolithic component implementations for us, as shown in figure 5 for
+example, but we have to put them together by hand in order to construct
+a Quoter system. <br>
+<br>
+<br>
+<div style="text-align: center;"><img alt="" src="Images/fig5.jpg"
+ style="border: 1px solid ; width: 922px; height: 639px;"><br>
+Figure 5<br>
+<div style="text-align: left;"><br>
+Assembly component is a recursive concept. It provides a boundary for
+the composition of monolithic components.Assembly component does not
+provide real implementation for any interface, i.e., it is a virtual
+component. Modeling an assembly component is different from modeling a
+monolithic component: you don't need to worry about the
+artifacts.Instead, you need to create connections between monolithic
+components so that they can talk via ports. Let's try to assemble the <span
+ style="font-style: italic;">StockQuoter</span>.<br>
+<ol>
+ <li>Right click folder <span style="font-style: italic;">ComponentImplementations</span>,
+choose <span style="font-weight: bold;">Insert
+Model-&gt;ComponentImplementationContainer</span>, rename it
+as "StockQuoterImplementation" in the Attribute Panel. Double click to
+open it.<br>
+ </li>
+ <li> From the Part Browser, drag a &lt;&lt;ComponentAssembly&gt;&gt;
+to the modeling window,
+name it "StockQuoter". Double click to open it.<br>
+ </li>
+ <li> Now we will create two instances for interfaces<span
+ style="font-style: italic;"> StockBroker </span>and <span
+ style="font-style: italic;">StockDistributor</span>. To do
+that, expand the folder <code><span style="font-style: italic;">InterfaceDefinitions</span></code>,
+then expand the <code><span style="font-style: italic;">InterfaceDefinitions/</span></code><span
+ style="font-style: italic;">Broker</span>, then <code><span
+ style="font-style: italic;">InterfaceDefinitions/</span></code><span
+ style="font-style: italic;">Broker/</span><span
+ style="font-style: italic;">Stock</span> until the interface
+definition of <span style="font-style: italic;">StockBroker </span>shows.
+While expanding the tree, always keep
+the "StockQuoter" &lt;&lt;ComponentAssembly&gt;&gt; window open.
+Then drag <code style="font-style: italic;">MyQuoter/InterfaceDefinitions/Broker/Stock/StockBroker</code>
+in the
+browser to the "StockQuoter" &lt;&lt;ComponentAssembly&gt;&gt; window
+while pressing ALT key. Repeat the
+same steps for <span style="font-style: italic;">My</span><code
+ style="font-style: italic;">Quoter/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>
+<ol style="text-align: left;">
+ <li value="4"> Create an &lt;&lt;PublishConnector&gt;&gt;.<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 &lt;&lt;PublishConnector&gt;&gt;. <br>
+ </li>
+</ol>
+<img alt="" src="Images/fig7.jpg" style="width: 724px; height: 402px;"><br>
+<br>
+Figure 7<br>
+</div>
+<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 <span style="font-style: italic;">ComponentPackage</span>s
+,
+insert a &lt;&lt;PackageContainer&gt;&gt;, name it "Broker"; Double
+click to open it.<br>
+ </li>
+ <li> From the PartBrowser, add the following:<br>
+ <ul>
+ <li>a &lt;&lt;ComponentPackage&gt;&gt; named "Broker";</li>
+ <li>a &lt;&lt;ComponentImplementationReference&gt;&gt; named
+"Broker";</li>
+ <li>a &lt;&lt;ComponentRef&gt;&gt; named "Broker";</li>
+ </ul>
+ </li>
+ <li> Refer the &lt;&lt;ComponentImplementationReference&gt;&gt; <em>Broker</em>
+to <code>MyQuoter/ComponentImplementations/StockBroker</code>Implementation/StockBrokerMonolithicImpl.
+Refer the
+&lt;&lt;ComponentRef&gt;&gt; <em>Broker</em> to <code>MyQuoter/InterfaceDefinitions/Broker/Stock/StockBroker.
+To do a refering in GME, simply drage the tree node in the Browser
+"into" the reference model. For example, you should drage the tree node
+ </code><code>MyQuoter/ComponentImplementations/StockBroker</code>Implementation/StockBrokerMonolithicImpl
+into &lt;&lt;ComponentImplementationReference&gt;&gt; <em>Broker. </em><code>Check
+GME manual(tutorials) for more information.</code> </li>
+ <li> Switch to Connect Mode and create two connections according to
+the following relationship.<br>
+ <ul>
+ <li> &lt;&lt;ComponentImplementationReference&gt;&gt; <em>Broker</em>
+implements &lt;&lt;ComponentPackage&gt;&gt; <em>Broker</em>; </li>
+ <li> &lt;&lt;ComponentPackage&gt;&gt; <em>Broker </em>realizes
+&lt;&lt;ComponentRef&gt;&gt; <em>Broker</em>. </li>
+ </ul>
+ <br>
+ <br>
+&nbsp;&nbsp;&nbsp;&nbsp; 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 style="text-align: left;">Now create a
+ComponentPackage/StockDistributor following the same steps.</div>
+ </div>
+ </li>
+ <br>
+ <div style="text-align: center;">
+ <div style="text-align: left;">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 &lt;&lt;ComponentRef&gt;&gt;. To create
+this model: </div>
+ </div>
+ <div style="text-align: center;">
+ <div style="text-align: left;">
+ <ol>
+ <il>1. Insert a &lt;&lt;ComponentPackage&gt;&gt; named "StockQuoter"<br>
+ </il><il><il>2. Add a
+&lt;&lt;ComponentImplementationReference&gt;&gt; named "StockQuoter",
+refer it to MyQuoter<span style="font-family: monospace;">/ComponentImplementations/StockQuoter/StockQuoter</span></il></il>
+ </ol>
+ <ol>
+ <il><il>3. Switch to connect mode and connect
+&lt;&lt;ComponentImplementationReference&gt;&gt; StockQuoter with
+&lt;&lt;ComponentPackage&gt;&gt; StockQuoter, as in Figure 9.<br>
+ </il></il>
+ </ol>
+ <ol>
+ <ul>
+ </ul>
+ </ol>
+ </div>
+ </div>
+ <div style="text-align: center;">
+ <div style="text-align: left;"> <br>
+ <br>
+ </div>
+ <div style="text-align: center;"><img alt="" src="Images/fig9.jpg"
+ style="width: 549px; height: 354px;"><br>
+ <br>
+Figure 9<br>
+ <br>
+ </div>
+ </div>
+</ol>
+<hr>
+<div style="text-align: left;"> <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 <span style="font-style: italic;">PackageConfiguratio</span>n,
+and create a
+&lt;&lt;PackageConfigurationContainer&gt;&gt;, name it "Default", click
+to
+open it.<br>
+ </li>
+ <li> Add a &lt;&lt;PackageConfiguration&gt;&gt; named "default" and a
+&lt;&lt;ComponentPackageReference&gt;&gt;, name it "StockQuoter",
+connect "Default" to "StockQuoter"<br>
+ </li>
+ <li> Refer &lt;&lt;ComponentPackageReference&gt;&gt; StockQuoter to
+&lt;&lt;ComponentPackage&gt;&gt; <code>MyQuoter/ComponentPackage/StockQuoter/StockQuoter
+ <br>
+(Not &lt;&lt;ComponentImplementationReference&gt;&gt; </code><code>MyQuoter/ComponentPackage/StockQuoter/StockQuoter!)&nbsp;</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 <span style="font-style: italic;">ToplevelPackage</span>,
+and create a
+&lt;&lt;ToplevelPackageContainer&gt;&gt;, name it "Default", double
+click to open it.<br>
+ </li>
+ <li> Add a &lt;&lt;ToplevelPackage&gt;&gt; named "ToplevelPackage"
+and a &lt;&lt;PackageConfigurationReference&gt;&gt;, 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 &lt;&lt;Domain&gt;&gt; named "Domain"; double click to
+open it.<br>
+ </li>
+ <li> From the Part Browser, add two &lt;&lt;Node&gt;&gt; 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 <span style="font-style: italic;">DeploymentPlan</span>,
+insert a model
+&lt;&lt;DeploymentPlan&gt;&gt;; name it "Plan", click to open it<br>
+ </li>
+ <li> From the PartBrowser, add the following:<br>
+ <ul>
+ <li>Two &lt;&lt;CollocationGroup&gt;&gt;</li>
+ <li>Two &lt;&lt;NodeReference&gt;&gt; named "Node_Broker" and
+"Node_Distributor" respectively, refering to <code>MyQuoter/Targets/Domain/Broker</code>
+and <code>MyQuoter/Targets/Domain/Distributor<code> respectively</code></code></li>
+ <li>Two &lt;&lt;ComponentRef&gt;&gt; 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 &lt;&lt;ComponentRef&gt;&gt; in
+DeploymentPlan is not refering to the interface, but rather, the actual
+instance of the implementation.</li>
+ </ul>
+ </li>
+ <li> Switch to Connect Mode, connect one
+&lt;&lt;CollocationGroup&gt;&gt; to &lt;&lt;NodeReference&gt;&gt; <em>Node_Broker</em>,
+connect another
+&lt;&lt;CollocationGroup&gt;&gt; to &lt;&lt;NodeReference&gt;&gt; <span
+ style="font-style: italic;">Node_</span><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 &lt;&lt;ComponentRef&gt;&gt;
+StockBroker to the
+&lt;&lt;CollocationGroup&gt;&gt; running on the
+&lt;&lt;NodeReference&gt;&gt; Broker, and &lt;&lt;ComponentRef&gt;&gt;
+StockDistributor to the &lt;&lt;CollocationGroup&gt;&gt; running on the
+&lt;&lt;NodeReference&gt;&gt; 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 &lt;&lt;CollocationGroup&gt;&gt; running on
+&lt;&lt;NodeReference&gt;&gt; Distributor, right-click on it. You will
+find the cursor is changed to set mode cursor, and only the
+&lt;&lt;CollocationGroup&gt;&gt; you clicked in is highlighted, as
+shown
+in Figure 11.<br>
+ <br>
+ </li>
+</ol>
+</div>
+<div style="text-align: center;"><img alt="" src="Images/fig11.jpg"
+ style="width: 672px; height: 505px;"><br>
+<br>
+Figure 11<br>
+<br>
+</div>
+<div style="text-align: left;">&nbsp;Now move your cursor to
+&lt;&lt;ComponentRef&gt;&gt;&nbsp; StockDistributor, and left-click it,
+so that it looks like Figure 12.<br>
+</div>
+<br>
+<div style="text-align: center;"><img alt="" src="Images/fig12.jpg"
+ style="width: 672px; height: 505px;"><br>
+<br>
+Figure 12<br>
+<br>
+</div>
+<div style="text-align: left;">&nbsp;&nbsp; This operation
+associates <em>StockDistributor</em> component to the
+&lt;&lt;CollocationGroup&gt;&gt; running on <em>Distributor</em> node.
+To do the same with
+Broker, just right-click on another &lt;&lt;CollocationGroup&gt;&gt;,
+and left-click on StockBroker &lt;&lt;CollocationGroup&gt;&gt; which is
+highlighted. <br>
+<br>
+<hr>
+<a name="8"></a></div>
+<br>
+Up to this point, we are basiclly 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.<br>
+<br>
+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.
+<address><span style="font-style: italic;"></span><br>
+<span style="font-style: italic;"></span><br>
+<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 -->
+</div>
+</div>
+</div>
+</div>
+</body>
+</html>