From ede333c0b16d3058f264b2e50b6e7c75ea8ab199 Mon Sep 17 00:00:00 2001
From: mxiong This section describes modeling the Quoter application using PICML. If you have trouble producing a functioning model from this tutorial, please see the, pre-built Quoter model which is provided for your reference. This model contains all elements created as part of this tutorial. This section describes modeling the Quoter application using
+PICML. If you have trouble producing a functioning model from this
+tutorial, please see the, pre-built
+Quoter model which is provided for your reference. This model
+contains all elements created as part of this tutorial. The PICML paradigm is designed for the OMG
+Deployment & Configuration (D&C) specification
+(ptc/2003-07-08), so the modeling process is straightforward
+if you are familiar with the specification. Please see the DAnCE
+project for more information. For those who hate specification (including me, :-)), an overview of D&C and as well as a tutorial of D&C and CCM 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). The complete PICML Quoter model consists of modeling elements
+distributed across various folders. If you used idl_to_picml
+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. This folder contains implementation artifacts associated with
+components. idl_to_picml has created these
+artifacts for us, with their dependency relationships correctly
+captured. Figure 4 shows the Implementation Artifacts for Broker. This folder contains models that describe the implementations
+of component interfaces. In the Quoter example, we will have two
+monolithic component implementations - named StockDistributorImplementation
+and StockBrokerImplementation - and an assembly
+component implementation named StockQuoter, which
+is an assembly of StockDistributorImplementation
+and StockBrokerImplementaion. idl_to_picml
+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. 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 The PICML paradigm is designed for the OMG Deployment & Configuration (D&C) specification (ptc/2003-07-08), so the modeling process is straightforward if you are familiar with the specification. Please see the DAnCE project for more information. The complete PICML Quoter model consists of modeling elements distributed across various folders. If you used idl_to_picml 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. This folder contains implementation artifacts associated with components. idl_to_picml has created these artifacts for us, with their dependency relationships correctly captured. Figure 4 shows the Implementation Artifacts for Broker. This folder contains models that describe the implementations of component interfaces. In the Quoter example, we will have two monolithic component implementations - named StockDistributorImplementation and StockBrokerImplementation - and an assembly component implementation named StockQuoter, which is an assembly of StockDistributorImplementation and StockBrokerImplementaion. idl_to_picml 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. 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 Now move your cursor to
+<<ComponentRef>>
+StockDistributor, and left-click it, so that it looks like Figure 12.Building Stock Quoter system in PICML
-
- Building Stock Quoter system in PICML
+
+
+
+
+
+Table of Contents
+
+
+
+
+
+
+ImplementationArtifacts
+
+
+
+Figure 4.
+
+
+
+
+ComponentImplementation
+
+
+
+Figure 5
+
+MonolithicImplementation
.
+Instead, instances of other components are placed
+within the assembly and connected. Let's try to assemble the StockQuoter.
+
+
+
+InterfaceDefinitions
,
+then expand the InterfaceDefinitions/
+ Broker, then InterfaceDefinitions/
+ Broker/ Stock until the interface definition
+of StockBroker shows. While expanding the tree,
+always keep the "StockQuoter"
+<<ComponentAssembly>> window open. Then
+drag MyQuoter/InterfaceDefinitions/Broker/Stock/StockBroker
+in the browser to the "StockQuoter"
+<<ComponentAssembly>> window while pressing
+ALT key. Repeat the same steps for MyQuoter/InterfaceDefinitions/Distributor/Stock/StockDistributor
,
+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)
+
+
+
+
+
+
+
+Figure 6
+
+
+
+
+
+
+
+
+
+
+
+
+
+Figure 7
+
+
+ComponentPackage
+
+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 StockBroker.instance
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MyQuoter/ComponentImplementations/StockBroker
Implementation/StockBrokerMonolithicImpl.
+Refer the <<ComponentRef>> Broker
+to MyQuoter/InterfaceDefinitions/Broker/Stock/StockBroker
.
+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 MyQuoter/ComponentImplementations/StockBroker
Implementation/StockBrokerMonolithicImpl
+into <<ComponentImplementationReference>> Broker.
+Check GME manual(tutorials) for more information.
+
+
+
+
+
+
+
+
+
+ The model you built should
+resemble Figure 8.
+
+
+
+
+
+
+
+Figure 8
+
+
+
+
+
+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:
+
+
+
+
+
+
+ /ComponentImplementations/StockQuoter/StockQuoter
+
+
+
+
+
+Figure 9
+
+
+
+
+PackageConfiguration
+
+This folder contains just one model capturing specific configuration of
+Component packages.
+
+
+
+
+
+
+
+
+
+
+
+ MyQuoter/ComponentPackage/StockQuoter/StockQuoter
+
+
+(Not <<ComponentImplementationReference>>MyQuoter/ComponentPackage/StockQuoter/StockQuoter!)
+
+
+ToplevelPackage
-
+
+
+This folder contains one model capturing information about the
+top-level element that will be fed to the application.
- Table of Contents
+
-
-
-
-
-
- Quoter/PackageConfiguration/Default/Default
-
+
-
+Targets
-
- ImplementationArtifacts
+
-
- Figure 4.
-
+
-
ComponentImplementation
+
-
- Figure 5
-
- MonolithicImplementation
. Instead, instances of other components are placed within the assembly and connected. Let's try to assemble the StockQuoter.
-
-
- InterfaceDefinitions
, then expand the InterfaceDefinitions/
Broker, then InterfaceDefinitions/
Broker/ Stock until the interface definition of StockBroker shows. While expanding the tree, always keep the "StockQuoter" <<ComponentAssembly>> window open. Then drag MyQuoter/InterfaceDefinitions/Broker/Stock/StockBroker
in the browser to the "StockQuoter" <<ComponentAssembly>> window while pressing ALT key. Repeat the same steps for MyQuoter/InterfaceDefinitions/Distributor/Stock/StockDistributor
, 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)
+Now we are ready to deploy our Components to the actual physical
+environment.
-
-
- Figure 6
-
+DeploymentPlan
-
-
-
-
- Figure 7
-
-
+This folder contains a plan model that captures information about the
+assignment of component to nodes.
- ComponentPackage
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 StockBroker.instance
+
-
-
-
+
-
-
-
-
+ MyQuoter/ComponentImplementations/StockBroker
Implementation/StockBrokerMonolithicImpl. Refer the <<ComponentRef>> Broker to MyQuoter/InterfaceDefinitions/Broker/Stock/StockBroker
. 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 MyQuoter/ComponentImplementations/StockBroker
Implementation/StockBrokerMonolithicImpl into <<ComponentImplementationReference>> Broker. Check GME manual(tutorials) for more information.MyQuoter/Targets/Domain/Broker
+and MyQuoter/Targets/Domain/Distributor
+respectively
+ MyQuoter/ComponentImplementations/StockQuoterImplementation/StockQuoter/StockBroker
+and MyQuoter/ComponentImplementations/StockQuoterImplementation/StockQuoter/StockDistributor
+respectively. Note that the
+<<ComponentRef>> in DeploymentPlan is not
+referring to the interface, but rather the actual instance of the
+implementation.
-
-
-
- The model you built should resemble Figure 8.
-
+
-
-
- Figure 8
-
-
-
- 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:
+
-
-
- /ComponentImplementations/StockQuoter/StockQuoter
-
-
-
- Figure 9
-
-
-
+
- PackageConfiguration
This folder contains just one model capturing specific configuration of Component packages.
+
-
- MyQuoter/ComponentPackage/StockQuoter/StockQuoter
- (Not <<ComponentImplementationReference>>MyQuoter/ComponentPackage/StockQuoter/StockQuoter!)
-
-
+
- ToplevelPackage
This folder contains one model capturing information about the top-level element that will be fed to the application.
+
-
-
-
- Quoter/PackageConfiguration/Default/Default
-
-
+
- Targets
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.
+Figure 11
-
-
-
- Now we are ready to deploy our Components to the actual physical environment.
-
-
+DeploymentPlan
This folder contains a plan model that captures information about the assignment of component to nodes.
+
-
-
MyQuoter/Targets/Domain/Broker
and MyQuoter/Targets/Domain/Distributor
respectivelyMyQuoter/ComponentImplementations/StockQuoterImplementation/StockQuoter/StockBroker
and MyQuoter/ComponentImplementations/StockQuoterImplementation/StockQuoter/StockDistributor
respectively. Note that the <<ComponentRef>> in DeploymentPlan is not referring to the interface, but rather the actual instance of the implementation.This operation associates StockDistributor
+component to the <<CollocationGroup>>
+running on Distributor node. To do the same with
+Broker, just right-click on another
+<<CollocationGroup>>, and left-click on
+StockBroker <<CollocationGroup>> which is
+highlighted.
-
Now move your cursor to <<ComponentRef>> StockDistributor, and left-click it, so that it looks like Figure 12.
Up to this point, we are basically done with the modeling +part. Before we generate anything from this model though, please DO remember to check +the constraints of the model as we mentioned earlier.
-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,a Node Map file should be created to map logical nodes to NodeManager object references,e.g:
+
DistributorNode corbaloc:iiop:localhost:30000/NodeManager-
BrokerNode corbaloc:iiop:localhost:40000/NodeManager
This operation associates StockDistributor component to the <<CollocationGroup>> running on Distributor node. To do the same with Broker, just right-click on another <<CollocationGroup>>, and left-click on StockBroker <<CollocationGroup>> which is highlighted.
-
Up to this point, we are basically done with the modeling part. Before we generate anything from this model though, please DO remember to check the constraints of the model as we mentioned earlier.
+Ming XiongAfter 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.
+ - -