diff options
Diffstat (limited to 'CIAO/docs/tutorials/CoSMIC/02.html')
-rw-r--r-- | CIAO/docs/tutorials/CoSMIC/02.html | 554 |
1 files changed, 554 insertions, 0 deletions
diff --git a/CIAO/docs/tutorials/CoSMIC/02.html b/CIAO/docs/tutorials/CoSMIC/02.html new file mode 100644 index 00000000000..8f4e7decc11 --- /dev/null +++ b/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> |