summaryrefslogtreecommitdiff
path: root/modules/CIAO/examples/Display/README.html
blob: 3f6958893dbb51fe55079413350b86321e583c20 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><!--//$Id$  -->
  <title>CIAO application</title></head>


<body alink="#0000ff" bgcolor="#ffffff" link="#000fff" text="#000000" vlink="#ff0f0f">

<h2>Display example README</h2>
<li>To download the code of this example please refer to the CVS repository at <code>$CIAO_ROOT/DAnCE/examples/Display</code>.</li>
<hr>

<h2>Example Description</h2>

<font face="Times New Roman" size="4">This example is an imaginary car
(software) instrument assembly which updates the display of
current coordination of the airplane periodically.  It consists of
the following three components:
<ul>
  <li>The <font face="Courier New">RateGen</font> component sends periodic
  <font face="Courier New">Pulse</font> events to consumers according to the
  rate specified in its attribute <font face="Courier New">Rate</font>, it
  allows a client (CORBA client <font face="Courier New">controller</font>) to
  start and stop the rate generating event.</li>
  <li>The <font face="Courier New">GPS</font> component interacts with a GPS
  hardware. When the <font face="Courier New">GPS</font> component receives
  <font face="Courier New">Refresh</font> events from <font face="Courier New">
  RateGen</font>, it queries the GPS hardware and updates the internal cached
  coordination (so that the current location can be read by accessing the
  <font face="Courier New">MyLocation</font> interface) and generates an event
  on its <font face="Courier New">Ready</font> port to inform the event
  consumers that a new GPS reading is available. </li>
  <li>The <font face="Courier New">NavDisplay</font> component displays the
  current location of the vehicle on the windshield. When a
  <font face="Courier New">NavDisplay</font> receives an event notifying the
  availability of new data on its <font face="Courier New">Refresh</font> port,
  it will acquire the current location of the vehicle by querying the interface
  connected to the <font face="Courier New">GPSLocation</font> receptacle.</li>
  <li>The <font face="Courier New">NavDisplayGUI</font> directory contains
  implementations for a <font face="Courier New">NavDisplay</font> with
  graphical interface. To use this graphical interface you need to install qt
  libraries and have qt enabled (qt = 1) in your <font face="Courier New">$ACE_ROOT/bin/MakeProjectCreator/config/global.features</font>.
  In some Linux distributions qt is installed by default. There is a
  non-commercial version of qt libraries for Windows
  <a href="http://www.dre.vanderbilt.edu/%7Edengg/ITS/qt-win-noncommercial-msvc-3.2.1.exe">
  here</a> and more information about qt
  <a href="http://www.trolltech.com/products/qt/index.html">here</a>. </li>
  <li>If you just want to run the application, just go to the last section of
  this page.</li>
</ul>
<hr>

<h2>The files you will find.</h2>


<li>1. The interfaces,
data types and exceptions used by the components of this application are 
specified in the
<a href="HUDisplay.idl"> <code>
HUDisplay.idl</code></a> file, placed in this example root directory ($CIAO_ROOT/examples/Display).
This is a IDL2 file and uses the familiar CORBA data types. The lib generated
from HUDisplay.idl is linked to all the components of this example. <p></p>

</li><li>2. 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>3. idl and cidl files for each component are placed in components directory.  </li>

<li>4. The <code>_exec.h</code> and <code>_exec.cpp</code> files are the actual implementation of the components.</li>

<li>5. The <code>NavDisplayGUI_exec</code> directory:
<font face="Times New Roman">The <code>NavDisplayGUI_exec.cpp</code> is just an executor version
for NavDisplay. In NavDisplayGUI_exec directory you'll find only the the
NavDisplayGUI_exec (and files for the GUI), which can be deployed with the
NavDisplay stub and servant. So, if you deploy the NavDisplay component
using NavDisplay_exec you'll be able to see the application running in the shell
you triggered the NodeDaemon, and if you deploy the NavDisplay component using
<code>NavDisplayGUI_exec</code> a graphical interface will show you a red dot moving over a
map according to the location being generated by GPS component when you start
the application. Notice that the <code>NavDisplayGUI.mpc</code> file includes <em>qt</em>, used for
graphical interface. You must give the right location of qt libraries in your mpc file.</font>
</li>

<li>6. The <code>controller</code>:
<font face="Times New Roman">The <code>RateGen</code>component is started and stopped by the <code>controller</code>, a CORBA client application.
The <code>controller</code> source is in <code>RateGen</code> directory, so the <code>RateGen.mpc</code> file also
include instructions for the <code>controller</code>
build.</font>

</li>



<hr>

<h3><font size="5">Make</font></h3>
<li>Go to the directory <code>$CIAO_ROOT/DAnCE/examples/Display</code> and do:<br>
    <code>$ACE_ROOT/bin/mwc.pl</code> (use -type option if you are using a compiler/IDE other than gnuace -which by default generates GNU makefiles)</li>
    <br>For example, using <code>$ACE_ROOT/bin/mwc.pl -type vc71</code> if you are using Visual C++ 7.1 IDE.


<hr>

<h3><font size="5">Assemble</font></h3>
Now we can step forward to build the assembly.

<li> In the descriptor subdirectory, you'll find a XML descriptor file that describes your <em>deployment plan</em>, the flattened_deploymentplan.cdp:
  <dd>
This file declaratively specifies how the component assembly is
constructed. Specifically, it specifies the component types, component
instances, component connections and implementation artifact
descriptions. </dd>
<br>
</li><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.
</li>

<p>&nbsp;</p>

<hr align="justify">
<h3><font size="5">Run</font></h3>
Finally you are ready to test the application you have made. From different shells in <code>$CIAO_ROOT/DAnCE/examples/Display/descriptors/</code> directory:
<br><br>

<ul>
  <li> Start NodeManagers (NodeDameon) by running <code> basicNodeDaemons.pl </code>

  </li><li> Start the execution manager:
  <code>$CIAO_ROOT/DAnCE/ExecutionManager/Execution_Manager -o EM.ior -i NodeManagerMap.dat </code>
  The NodeManagerMap.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 IOR for
  the CIAO_Daemon. For example, the NodeManagerMap.dat contains:

      AirFrameDevice corbaloc:iiop:localhost:10000/NodeManager
      TimerDevice  corbaloc:iiop:localhost:12000/NodeManager

  You can copy and modify the copy to deploy the components in various
  different locations to let the application truely "distributed".

  Remember to start up the Execution_Manager  using the
  revised .dat file you created, and start up the CIAO_Daemon according to the specification.

  </li>

  <ul type="square"> <li> <em>NOTE</em>: As one can see, we use the "NodeManagerMap.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>

  <li> Start the plan_launcher:
  <code> $CIAO_ROOT/DAnCE/Plan_Launcher/plan_launcher -p flattened_deploymentplan.cdp -k file://EM.ior </code>

  After this, components should be deployed successfully.

  </li><li> The Assembly_Manager is instructed to write the IOR of the RateGen
  component to a file called "rategen.ior" in this
  directory.  You will then need to use a controller program in a
  separate shell window to switch on/off the Rate Generator.
  Go to the <em> $CIAO_ROOT/DAnCE/examples/Display/descriptor </em> directory and run the <code>$CIAO_ROOT/DAnCE/examples/Display/RateGen/controller
  -o </code> to start the application. To stop the application run <code>$CIAO_ROOT/DAnCE/examples/Display/RateGen/controller
  -f </code>
  </li>
</ul>



<hr>
<b>Email: </b><a href="mailto:"></a><address>ciao-users@cse.wustl.edu</address>
</body></html>