diff options
Diffstat (limited to 'TAO/CIAO/docs/tutorials/CoSMIC/02.html')
-rw-r--r-- | TAO/CIAO/docs/tutorials/CoSMIC/02.html | 422 |
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->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 +& Configuration (D&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->Check->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->ComponentImplementationContainer</span>, rename it +as "StockQuoterImplementation" in the Attribute Panel. Double click to +open it.<br> + </li> + <li> From the Part Browser, drag a <<ComponentAssembly>> +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" <<ComponentAssembly>> window open. +Then drag <code style="font-style: italic;">MyQuoter/InterfaceDefinitions/Broker/Stock/StockBroker</code> +in the +browser to the "StockQuoter" <<ComponentAssembly>> 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 <<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> +</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 <<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. +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 <<ComponentImplementationReference>> <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> <<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 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 <<ComponentRef>>. To create +this model: </div> + </div> + <div style="text-align: center;"> + <div style="text-align: left;"> + <ol> + <il>1. Insert a <<ComponentPackage>> named "StockQuoter"<br> + </il><il><il>2. Add a +<<ComponentImplementationReference>> 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 +<<ComponentImplementationReference>> StockQuoter with +<<ComponentPackage>> 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 +<<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 <span style="font-style: italic;">ToplevelPackage</span>, +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 <span style="font-style: italic;">DeploymentPlan</span>, +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</code></code></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 refering 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>> <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 <<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> +<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;"> Now move your cursor to +<<ComponentRef>> 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;"> 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> +<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> |