Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/org.eclipse.etrice.doc/html/etrice-docse11.html')
-rw-r--r--plugins/org.eclipse.etrice.doc/html/etrice-docse11.html1086
1 files changed, 1054 insertions, 32 deletions
diff --git a/plugins/org.eclipse.etrice.doc/html/etrice-docse11.html b/plugins/org.eclipse.etrice.doc/html/etrice-docse11.html
index a8356a983..508ca26b6 100644
--- a/plugins/org.eclipse.etrice.doc/html/etrice-docse11.html
+++ b/plugins/org.eclipse.etrice.doc/html/etrice-docse11.html
@@ -4,66 +4,835 @@
<!--http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd-->
<html xmlns="http://www.w3.org/1999/xhtml"
>
-<head><title>Dynamic Actors 2</title>
+<head><title>The Java examples project</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<meta name="generator" content="TeX4ht (http://www.cse.ohio-state.edu/~gurari/TeX4ht/)" />
<meta name="originator" content="TeX4ht (http://www.cse.ohio-state.edu/~gurari/TeX4ht/)" />
<!-- xhtml,3,next,html -->
<meta name="src" content="etrice-doc.tex" />
-<meta name="date" content="2015-06-26 00:33:00" />
+<meta name="date" content="2015-06-30 18:08:00" />
<link rel="stylesheet" type="text/css" href="etrice-doc.css" />
</head><body
>
-<!--l. 129--><div class="crosslinks"><p class="noindent">[<a
-href="etrice-docse12.html" >next</a>] [<a
+<!--l. 190--><div class="crosslinks"><p class="noindent">[<a
+href="etrice-docch5.html" >next</a>] [<a
href="etrice-docse10.html" >prev</a>] [<a
href="etrice-docse10.html#tailetrice-docse10.html" >prev-tail</a>] [<a
href="#tailetrice-docse11.html">tail</a>] [<a
href="etrice-docch4.html#etrice-docse11.html" >up</a>] </p></div>
<h3 class="sectionHead"><span class="titlemark">4.2 </span> <a
- id="x17-730002"></a>Dynamic Actors 2</h3>
-<!--l. 131--><p class="noindent" >This example is contained in <span
-class="ec-lmtt-10">org.eclipse.etrice.examples.dynamicactors2</span>.
+ id="x17-860002"></a>The Java examples project</h3>
+<!--l. 192--><p class="noindent" >The example project <span
+class="ec-lmtt-10">org.eclipse.etrice.examples.java </span>currently contains a number of examples that are all related to
+dynamic actors.
+</p><!--l. 195--><p class="noindent" >The examples can be generated and executed one by one but not several at the same time. Inside the model folder there
+exists a sub folder for each example containing all models and launch configurations for code generation and to run the
+application.
<a
- id="x17-73001r95"></a>
+ id="x17-86001r103"></a>
</p>
<h4 class="subsectionHead"><span class="titlemark">4.2.1 </span> <a
- id="x17-740001"></a>Purpose</h4>
-<!--l. 135--><p class="noindent" >A modified version of <span
-class="ec-lmtt-10">dynamicactors1 </span>is used to analyze eventual memory leaks of the application.
+ id="x17-870001"></a>Dynamic Actors 1</h4>
+<!--l. 202--><p class="noindent" >This example is contained in <span
+class="ec-lmtt-10">model/dynamicactors1</span>.
+<a
+ id="x17-87001r106"></a>
+</p>
+<h5 class="subsubsectionHead"><span class="titlemark">4.2.1.1 </span> <a
+ id="x17-880001"></a>Purpose</h5>
+<!--l. 206--><p class="noindent" >The example demonstrates the usage of an optional actor. It is shown that several actor classes derived from the type of the
+optional actor reference can be optionally created in place of the optional actor reference. Optional actor instances can also
+be destroyed and another instance can be created in the free slot.
<a
- id="x17-74001r97"></a>
+ id="x17-88001r109"></a>
+</p>
+<h5 class="subsubsectionHead"><span class="titlemark">4.2.1.2 </span> <a
+ id="x17-890002"></a>Details</h5>
+<!--l. 213--><p class="noindent" >The structure of this system is simple.
+</p><!--l. 215--><p class="noindent" ><img
+src="images/039-DynAct1-Main_instanceTree.jpg" alt="PIC"
+ />
+</p><!--l. 217--><p class="noindent" >However, this is only the initial system structure. The leaf instance is just a place holder for an optional actor instance. In this
+place an instance of a compatible type can be created at run time. Compatible types are the type of the reference itself and
+all of its sub types as long as they are not abstract. Together with the instance all of its contained instances will be created
+and all ports are connected.
+</p><!--l. 223--><p class="noindent" >This example demonstrates how an optional actor is created and destroyed and another one of another type is created to hold
+the same place.
+</p><!--l. 226--><p class="noindent" ><img
+src="images/039-DynAct1-Container_behavior.jpg" alt="PIC"
+ />
+</p><!--l. 228--><p class="noindent" >When the example is executed the <span
+class="ec-lmtt-10">Container </span>actor first dumps the instance tree to the console (line 56 of the listing below).
+Then it creates an instance of <span
+class="ec-lmtt-10">Optional2 </span>(line 57). Now that the <span
+class="ec-lmtt-10">p0 </span>port of the container is connected a message
+<span
+class="ec-lmtt-10">sayHello() </span>is sent to the newly created actor instance and the instance tree is dumped a second time. As soon as it receives
+the answer it prints it to the console. Then the optional actor is destroyed again and another one, now of type <span
+class="ec-lmtt-10">Optional1</span>, is
+created and once more <span
+class="ec-lmtt-10">sayHello() </span>is sent.
</p>
+<!--l. 236--><div class="lstinputlisting">
+<a
+ id="x17-89001r1"></a>
+<a
+ id="x17-89002"></a>
+<span
+class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
+ id="x17-89003r36"></a></span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmssbx-10x-x-90">StateMachine</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">{</span><span
+class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
+ id="x17-89004r37"></a></span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmssbx-10x-x-90">Transition</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">init</span><span
+class="ec-lmtt-9">:</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmssbx-10x-x-90">initial</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">-&#x003E;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">CreateOptional2</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">{</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">}</span><span
+class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
+ id="x17-89005r38"></a></span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmssbx-10x-x-90">Transition</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">tr0</span><span
+class="ec-lmtt-9">:</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">CreateOptional2</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">-&#x003E;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">CreateOptional1</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">{</span><span
+class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
+ id="x17-89006r39"></a></span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmssbx-10x-x-90">triggers</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">{</span><span
+class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
+ id="x17-89007r40"></a></span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x003C;</span><span
+class="ec-lmtt-9">hello</span><span
+class="ec-lmtt-9">:</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">p0</span><span
+class="ec-lmtt-9">&#x003E;</span><span
+class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
+ id="x17-89008r41"></a></span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">}</span><span
+class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
+ id="x17-89009r42"></a></span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmssbx-10x-x-90">action</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">{</span><span
+class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
+ id="x17-89010r43"></a></span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">"</span><span
+class="ec-lmtt-9">System</span><span
+class="ec-lmtt-9">.</span><span
+class="ec-lmtt-9">out</span><span
+class="ec-lmtt-9">.</span><span
+class="ec-lmtt-9">println</span><span
+class="ec-lmtt-9">(</span><span
+class="ec-lmtt-9">txt</span><span
+class="ec-lmtt-9">+\"\\</span><span
+class="ec-lmtt-9">n</span><span
+class="ec-lmtt-9">\")</span><span
+class="ec-lmtt-9">;</span><span
+class="ec-lmtt-9">"</span><span
+class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
+ id="x17-89011r44"></a></span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">"</span><span
+class="ec-lmtt-9">opt</span><span
+class="ec-lmtt-9">.</span><span
+class="ec-lmtt-9">destroyOptionalActor</span><span
+class="ec-lmtt-9">()</span><span
+class="ec-lmtt-9">;</span><span
+class="ec-lmtt-9">"</span><span
+class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
+ id="x17-89012r45"></a></span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">"</span><span
+class="ec-lmtt-9">dumpTree</span><span
+class="ec-lmtt-9">(\"</span><span
+class="ec-lmtt-9">after</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">deletion</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">of</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">Optional2</span><span
+class="ec-lmtt-9">\")</span><span
+class="ec-lmtt-9">;</span><span
+class="ec-lmtt-9">"</span><span
+class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
+ id="x17-89013r46"></a></span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">}</span><span
+class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
+ id="x17-89014r47"></a></span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">}</span><span
+class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
+ id="x17-89015r48"></a></span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmssbx-10x-x-90">Transition</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">tr2</span><span
+class="ec-lmtt-9">:</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">CreateOptional1</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">-&#x003E;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">ReceivedHelloAgain</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">{</span><span
+class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
+ id="x17-89016r49"></a></span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmssbx-10x-x-90">triggers</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">{</span><span
+class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
+ id="x17-89017r50"></a></span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x003C;</span><span
+class="ec-lmtt-9">hello</span><span
+class="ec-lmtt-9">:</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">p0</span><span
+class="ec-lmtt-9">&#x003E;</span><span
+class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
+ id="x17-89018r51"></a></span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">}</span><span
+class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
+ id="x17-89019r52"></a></span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmssbx-10x-x-90">action</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">{</span><span
+class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
+ id="x17-89020r53"></a></span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">"</span><span
+class="ec-lmtt-9">System</span><span
+class="ec-lmtt-9">.</span><span
+class="ec-lmtt-9">out</span><span
+class="ec-lmtt-9">.</span><span
+class="ec-lmtt-9">println</span><span
+class="ec-lmtt-9">(</span><span
+class="ec-lmtt-9">txt</span><span
+class="ec-lmtt-9">+\"\\</span><span
+class="ec-lmtt-9">n</span><span
+class="ec-lmtt-9">\")</span><span
+class="ec-lmtt-9">;</span><span
+class="ec-lmtt-9">"</span><span
+class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
+ id="x17-89021r54"></a></span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">"</span><span
+class="ec-lmtt-9">opt</span><span
+class="ec-lmtt-9">.</span><span
+class="ec-lmtt-9">destroyOptionalActor</span><span
+class="ec-lmtt-9">()</span><span
+class="ec-lmtt-9">;</span><span
+class="ec-lmtt-9">"</span><span
+class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
+ id="x17-89022r55"></a></span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">}</span><span
+class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
+ id="x17-89023r56"></a></span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">}</span><span
+class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
+ id="x17-89024r57"></a></span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmssbx-10x-x-90">State</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">CreateOptional2</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">{</span><span
+class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
+ id="x17-89025r58"></a></span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmssbx-10x-x-90">entry</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">{</span><span
+class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
+ id="x17-89026r59"></a></span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">"</span><span
+class="ec-lmtt-9">dumpTree</span><span
+class="ec-lmtt-9">(\"</span><span
+class="ec-lmtt-9">before</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">creation</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">of</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">Optional2</span><span
+class="ec-lmtt-9">\")</span><span
+class="ec-lmtt-9">;</span><span
+class="ec-lmtt-9">"</span><span
+class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
+ id="x17-89027r60"></a></span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">"</span><span
+class="ec-lmtt-9">opt</span><span
+class="ec-lmtt-9">.</span><span
+class="ec-lmtt-9">createOptionalActor</span><span
+class="ec-lmtt-9">(\"</span><span
+class="ec-lmtt-9">Optional2</span><span
+class="ec-lmtt-9">\",</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">getThread</span><span
+class="ec-lmtt-9">()</span><span
+class="ec-lmtt-9">)</span><span
+class="ec-lmtt-9">;</span><span
+class="ec-lmtt-9">"</span><span
+class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
+ id="x17-89028r61"></a></span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">"</span><span
+class="ec-lmtt-9">p0</span><span
+class="ec-lmtt-9">.</span><span
+class="ec-lmtt-9">sayHello</span><span
+class="ec-lmtt-9">()</span><span
+class="ec-lmtt-9">;</span><span
+class="ec-lmtt-9">"</span><span
+class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
+ id="x17-89029r62"></a></span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">"</span><span
+class="ec-lmtt-9">dumpTree</span><span
+class="ec-lmtt-9">(\"</span><span
+class="ec-lmtt-9">after</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">creation</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">of</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">Optional2</span><span
+class="ec-lmtt-9">\")</span><span
+class="ec-lmtt-9">;</span><span
+class="ec-lmtt-9">"</span><span
+class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
+ id="x17-89030r63"></a></span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">}</span><span
+class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
+ id="x17-89031r64"></a></span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">}</span><span
+class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
+ id="x17-89032r65"></a></span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmssbx-10x-x-90">State</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">CreateOptional1</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">{</span><span
+class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
+ id="x17-89033r66"></a></span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmssbx-10x-x-90">entry</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">{</span><span
+class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
+ id="x17-89034r67"></a></span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">"</span><span
+class="ec-lmtt-9">opt</span><span
+class="ec-lmtt-9">.</span><span
+class="ec-lmtt-9">createOptionalActor</span><span
+class="ec-lmtt-9">(\"</span><span
+class="ec-lmtt-9">Optional1</span><span
+class="ec-lmtt-9">\",</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">getThread</span><span
+class="ec-lmtt-9">()</span><span
+class="ec-lmtt-9">)</span><span
+class="ec-lmtt-9">;</span><span
+class="ec-lmtt-9">"</span><span
+class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
+ id="x17-89035r68"></a></span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">"</span><span
+class="ec-lmtt-9">p0</span><span
+class="ec-lmtt-9">.</span><span
+class="ec-lmtt-9">sayHello</span><span
+class="ec-lmtt-9">()</span><span
+class="ec-lmtt-9">;</span><span
+class="ec-lmtt-9">"</span><span
+class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
+ id="x17-89036r69"></a></span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">"</span><span
+class="ec-lmtt-9">dumpTree</span><span
+class="ec-lmtt-9">(\"</span><span
+class="ec-lmtt-9">after</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">creation</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">of</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">Optional1</span><span
+class="ec-lmtt-9">\")</span><span
+class="ec-lmtt-9">;</span><span
+class="ec-lmtt-9">"</span><span
+class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
+ id="x17-89037r70"></a></span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">}</span><span
+class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
+ id="x17-89038r71"></a></span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">}</span><span
+class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
+ id="x17-89039r72"></a></span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmssbx-10x-x-90">State</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">ReceivedHelloAgain</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">{</span><span
+class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
+ id="x17-89040r73"></a></span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmssbx-10x-x-90">entry</span><span
+class="ec-lmtt-9">&#x00A0;</span><span
+class="ec-lmtt-9">{</span>
+<br />
+ <div class="caption"
+><span class="id">Listing&#x00A0;4.1:
+ </span><span
+class="content">Container
+ actor
+ state
+ machine</span></div><!--tex4ht:label?: x17-890004 -->
+
+
+</div>
+<!--l. 238--><p class="noindent" >The console output of the running application starts with
+
+
+</p>
+<div class="verbatim" id="verbatim-12">
+***&#x00A0;&#x00A0;&#x00A0;T&#x00A0;H&#x00A0;E&#x00A0;&#x00A0;&#x00A0;B&#x00A0;E&#x00A0;G&#x00A0;I&#x00A0;N&#x00A0;&#x00A0;&#x00A0;***
+&#x00A0;<br />***&#x00A0;MainComponent&#x00A0;/LS/main::init&#x00A0;***
+&#x00A0;<br />type&#x00A0;&#8217;quit&#8217;&#x00A0;to&#x00A0;exit
+&#x00A0;<br />before&#x00A0;creation&#x00A0;of&#x00A0;Optional2
+&#x00A0;<br />LS
+&#x00A0;<br />&#x00A0;&#x00A0;main
+&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;RTSystemPort
+&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;MessageService_MessageService_PhysicalThread1
+&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;Dispatcher
+&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;Queue
+&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;ActorClass(className=Appl,&#x00A0;instancePath=/LS/main/appl)
+&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;port&#x00A0;RTSystemPort
+&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;ActorClass(className=Container,&#x00A0;instancePath=/LS/main/appl/cont)
+&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;port&#x00A0;RTSystemPort
+&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;port&#x00A0;p0
+&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;ScalarOptionalActorInterface(className=Optional,&#x00A0;instancePath=/LS/main/appl/cont/opt)
+&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;RTSystemPort
+&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;port&#x00A0;p0
+&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;port&#x00A0;RTSystemPort0
+&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;port&#x00A0;RTSystemPort1
+</div>
+<!--l. 261--><p class="nopar" >
+</p><!--l. 263--><p class="noindent" >The <span
+class="ec-lmtt-10">ScalarOptionalActorInterface(className=Optional, instancePath=/LS/main/appl/cont/opt) </span>is an object
+which is responsible for the life cycle of the dynamic actor (including its contained instances) and for the mediation of the
+port connections. It contains a replicated <span
+class="ec-lmtt-10">RTSystemPort </span>which is used to trigger the initial transition and the port <span
+class="ec-lmtt-10">p0 </span>of the
+interface of the <span
+class="ec-lmtt-10">Optional </span>actor class.
+</p><!--l. 268--><p class="noindent" >After creation of <span
+class="ec-lmtt-10">Optional2 </span>the interesting part of the dumped tree is
+
+
+</p>
+<div class="verbatim" id="verbatim-13">
+&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;ScalarOptionalActorInterface(className=Optional,&#x00A0;instancePath=/LS/main/appl/cont/opt)
+&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;RTSystemPort
+&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;port&#x00A0;p0
+&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;ActorClass(className=Optional2,&#x00A0;instancePath=/LS/main/appl/cont/opt/opt)
+&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;port&#x00A0;RTSystemPort
+&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;ActorClass(className=AC2,&#x00A0;instancePath=/LS/main/appl/cont/opt/opt/sub2)
+&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;port&#x00A0;RTSystemPort
+&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;ActorClass(className=AC3,&#x00A0;instancePath=/LS/main/appl/cont/opt/opt/sub2/deep_sub)
+&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;port&#x00A0;RTSystemPort
+&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;port&#x00A0;p0
+&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;port&#x00A0;RTSystemPort0
+&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;port&#x00A0;RTSystemPort1
+&#x00A0;<br />&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;port&#x00A0;RTSystemPort2
+</div>
+<!--l. 284--><p class="nopar" >
+</p><!--l. 286--><p class="noindent" >It can be seen that the sub tree corresponding to <span
+class="ec-lmtt-10">Optional2 </span>was inserted right below the <span
+class="ec-lmtt-10">ScalarOptionalActorInterface</span>.
+</p><!--l. 289--><p class="noindent" >After deletion of the optional actor the dumped instance tree looks exactly as in the beginning.
+</p><!--l. 291--><p class="noindent" >To illustrate the dynamic behavior of the system we can finally have a look at the generated sequence diagram <a
+href="#x17-89041r1">4.1<!--tex4ht:ref: fig:dynact1_msc --></a>.
+During the sub system initialization three actor instances are created. Then the system is started and the
+<span
+class="ec-lmtt-10">Container </span>actor dynamically creates an instance of <span
+class="ec-lmtt-10">Optional2</span>. This is indicated by the note on the life line of
+<span
+class="ec-lmtt-10">/LS/main/appl/cont</span>. Then <span
+class="ec-lmtt-10">sayHello() </span>is sent and the answer <span
+class="ec-lmtt-10">hello() </span>is received and the optional actor is destroyed
+again.
+</p><!--l. 298--><p class="noindent" >The same is repeated with a new optional instance of <span
+class="ec-lmtt-10">Optional1</span>.
+</p>
+<hr class="figure" /><div class="figure"
+>
+
+
+<a
+ id="x17-89041r1"></a>
+
+
+<!--l. 301--><p class="noindent" ><img
+src="images/039-DynAct1-MSC.jpg" alt="PIC"
+ />
+<br /> </p><div class="caption"
+><span class="id">Figure&#x00A0;4.1: </span><span
+class="content">Sequence diagram of Dynamic Actors Example 1</span></div><!--tex4ht:label?: x17-89041r1 -->
+
+
+</div><hr class="endfigure" />
+<a
+ id="x17-89042r110"></a>
+<h5 class="subsubsectionHead"><span class="titlemark">4.2.1.3 </span> <a
+ id="x17-900003"></a>Noteworthy</h5>
+ <ul class="itemize1">
+ <li class="itemize">To obtain an executable the launch configuration <span
+class="ec-lmtt-10">gen_DynAct1_sys.launch </span>has to be executed. In this case
+ also the SubsystemClass <span
+class="ec-lmtt-10">Node_nodeRef1_main </span>is generated as well as factory classes for the valid optional
+ actors. If <span
+class="ec-lmtt-10">Optional </span>were not <span
+class="ec-lmtt-10">abstract </span>then also for this class a factory is created. However, in this class the
+ relay port isn&#8217;t connected and a request <span
+class="ec-lmtt-10">sayHello() </span>would be left without reply.
+ </li>
+ <li class="itemize">To generate a library the launch configuration <span
+class="ec-lmtt-10">gen_DynAct1.launch </span>has to be executed. In this case no factory
+ classes are generated.</li></ul>
+<a
+ id="x17-90001r108"></a>
<h4 class="subsectionHead"><span class="titlemark">4.2.2 </span> <a
- id="x17-750002"></a>Details</h4>
-<!--l. 139--><p class="noindent" >In this modified version creation and deletion of optional actors is looped. Each loop consists of 4 steps:
+ id="x17-910002"></a>Dynamic Actors 2</h4>
+<!--l. 321--><p class="noindent" >This example is contained in <span
+class="ec-lmtt-10">model/dynamicactors2</span>.
+<a
+ id="x17-91001r113"></a>
+</p>
+<h5 class="subsubsectionHead"><span class="titlemark">4.2.2.1 </span> <a
+ id="x17-920001"></a>Purpose</h5>
+<!--l. 325--><p class="noindent" >A modified version of <span
+class="ec-lmtt-10">dynamicactors1 </span>is used to analyze eventual memory leaks of the application.
+<a
+ id="x17-92001r115"></a>
+</p>
+<h5 class="subsubsectionHead"><span class="titlemark">4.2.2.2 </span> <a
+ id="x17-930002"></a>Details</h5>
+<!--l. 329--><p class="noindent" >In this modified version creation and deletion of optional actors is looped. Each loop consists of 4 steps:
</p><ol class="enumerate1" >
<li
- class="enumerate" id="x17-75002x1">create an instance of <span
+ class="enumerate" id="x17-93002x1">create an instance of <span
class="ec-lmtt-10">Optional2</span>
</li>
<li
- class="enumerate" id="x17-75004x2">destroy the instance
+ class="enumerate" id="x17-93004x2">destroy the instance
</li>
<li
- class="enumerate" id="x17-75006x3">create an instance of <span
+ class="enumerate" id="x17-93006x3">create an instance of <span
class="ec-lmtt-10">Optional1</span>
</li>
<li
- class="enumerate" id="x17-75008x4">destroy the instance</li></ol>
-<!--l. 149--><p class="noindent" >All together 600 steps are performed which corresponds to 300 creations and deletions.
-</p><!--l. 151--><p class="noindent" >The free memory is printed to the console. Also the overall execution time is measured. After the loop is finished the heap is
+ class="enumerate" id="x17-93008x4">destroy the instance</li></ol>
+<!--l. 339--><p class="noindent" >All together 600 steps are performed which corresponds to 300 creations and deletions.
+</p><!--l. 341--><p class="noindent" >The free memory is printed to the console. Also the overall execution time is measured. After the loop is finished the heap is
analyzed using <span
class="ec-lmtt-10">JConsole </span>(which is a part of the Java6 distribution) to dump the heap and <a
href="http://www.eclipse.org/mat/" ><span
class="ec-lmtt-10">org.eclipse.mat</span></a> to analyze
it.
-</p><!--l. 156--><p class="noindent" >The measured total execution time on a Intel Core 2 Duo at 2.66 GHz was 110 ms. This corresponds to about 370
+</p><!--l. 346--><p class="noindent" >The measured total execution time on a Intel Core 2 Duo at 2.66 GHz was 110 ms. This corresponds to about 370
<span
class="lmmi-10">&#x03BC;</span>s.
-</p><!--l. 159--><p class="noindent" >The result of the heap analysis for <span
+</p><!--l. 349--><p class="noindent" >The result of the heap analysis for <span
class="ec-lmtt-10">org.eclipse.etrice.* </span>objects is listed in figure <a
-href="#x17-75009r2">4.2<!--tex4ht:ref: fig:dynact2_heap --></a>. The small numbers per object and
+href="#x17-93009r2">4.2<!--tex4ht:ref: fig:dynact2_heap --></a>. The small numbers per object and
the retained heap size indicate that the application has no memory leak.
</p>
<hr class="figure" /><div class="figure"
@@ -71,35 +840,288 @@ the retained heap size indicate that the application has no memory leak.
<a
- id="x17-75009r2"></a>
+ id="x17-93009r2"></a>
-<!--l. 163--><p class="noindent" ><img
+<!--l. 353--><p class="noindent" ><img
src="images/039-DynAct2-HeapAnalysis.jpg" alt="PIC"
/>
<br /> </p><div class="caption"
><span class="id">Figure&#x00A0;4.2: </span><span
-class="content">Heap analysis after 600 steps</span></div><!--tex4ht:label?: x17-75009r2 -->
+class="content">Heap analysis after 600 steps</span></div><!--tex4ht:label?: x17-93009r2 -->
</div><hr class="endfigure" />
<a
- id="x17-75010r98"></a>
-<h4 class="subsectionHead"><span class="titlemark">4.2.3 </span> <a
- id="x17-760003"></a>Noteworthy</h4>
+ id="x17-93010r116"></a>
+<h5 class="subsubsectionHead"><span class="titlemark">4.2.2.3 </span> <a
+ id="x17-940003"></a>Noteworthy</h5>
<ul class="itemize1">
<li class="itemize">Calling the garbage collector every time before the free memory is dumped costs a significant amount of time
and the execution time is increased to the order of seconds.
</li>
<li class="itemize">The measured free memory is close to constant. Only a small step is observed which wasn&#8217;t analyzed further.</li></ul>
+<a
+ id="x17-94001r114"></a>
+<h4 class="subsectionHead"><span class="titlemark">4.2.3 </span> <a
+ id="x17-950003"></a>Dynamic Actors 3</h4>
+<!--l. 368--><p class="noindent" >This example is contained in <span
+class="ec-lmtt-10">model/dynamicactors3</span>.
+<a
+ id="x17-95001r118"></a>
+</p>
+<h5 class="subsubsectionHead"><span class="titlemark">4.2.3.1 </span> <a
+ id="x17-960001"></a>Purpose</h5>
+<!--l. 372--><p class="noindent" >The example demonstrates the usage of an optional actor array. It is shown that several actor classes derived from the type of
+the optional actor reference can be created as array members. The array members can be destroyed in arbitrary order and the
+array size grows and shrinks as appropriate.
+<a
+ id="x17-96001r120"></a>
+</p>
+<h5 class="subsubsectionHead"><span class="titlemark">4.2.3.2 </span> <a
+ id="x17-970002"></a>Details</h5>
+<!--l. 378--><p class="noindent" >This example again is similar to example 1. One difference is that the (scalar) optional actor is replaced by a replicated
+optional actor (or array of optional actors if you wish). The port of the <span
+class="ec-lmtt-10">Container </span>was also changed to a replicated port. All
+replication factors in this example are of arbitrary multiplicity (*). The sizes vary dynamically and are unbound as far as the
+model is concerned.
+</p><!--l. 383--><p class="noindent" >The behavior was changed to the following: Two instances of different classes are created as members of this array and both
+are deleted and one is created again. The replicated port is used to send (broadcast) messages to the optional
+actors.
+<a
+ id="x17-97001r121"></a>
+</p>
+<h5 class="subsubsectionHead"><span class="titlemark">4.2.3.3 </span> <a
+ id="x17-980003"></a>Noteworthy</h5>
+ <ul class="itemize1">
+ <li class="itemize">the generated MSC <span
+class="ec-lmtt-10">main_Async.seq </span>is a good illustration of the dynamic changes in the system structure
+ </li>
+ <li class="itemize">careful inspection of the console output reveals that objects are created and destroyed as expected</li></ul>
+<a
+ id="x17-98001r119"></a>
+<h4 class="subsectionHead"><span class="titlemark">4.2.4 </span> <a
+ id="x17-990004"></a>Dynamic Actors 4</h4>
+<!--l. 396--><p class="noindent" >This example is contained in <span
+class="ec-lmtt-10">model/dynamicactors4</span>.
+<a
+ id="x17-99001r122"></a>
+</p>
+<h5 class="subsubsectionHead"><span class="titlemark">4.2.4.1 </span> <a
+ id="x17-1000001"></a>Purpose</h5>
+<!--l. 400--><p class="noindent" >The example demonstrates the usage of an optional actor. But here not the actor containing the optional reference is
+communicating with the optional actor but one level above.
+<a
+ id="x17-100001r124"></a>
+</p>
+<h5 class="subsubsectionHead"><span class="titlemark">4.2.4.2 </span> <a
+ id="x17-1010002"></a>Details</h5>
+<!--l. 405--><p class="noindent" >The <span
+class="ec-lmtt-10">Controller </span>which has a reference to the <span
+class="ec-lmtt-10">Container </span>is asking the latter for the creation of the dynamic actor. When it
+receives <span
+class="ec-lmtt-10">ok() </span>it is requesting <span
+class="ec-lmtt-10">sayHello() </span>from the newly created actor.
+
+
+</p><!--l. 409--><p class="noindent" >After the <span
+class="ec-lmtt-10">Controller </span>receives <span
+class="ec-lmtt-10">hello() </span>it tells the <span
+class="ec-lmtt-10">Container </span>to create another actor which fails because the old one is still
+in place.
+<a
+ id="x17-101001r125"></a>
+</p>
+<h5 class="subsubsectionHead"><span class="titlemark">4.2.4.3 </span> <a
+ id="x17-1020003"></a>Noteworthy</h5>
+ <ul class="itemize1">
+ <li class="itemize">the generated MSC <span
+class="ec-lmtt-10">main_Async.seq </span>is a good illustration of the dynamic changes in the system structure</li></ul>
+<a
+ id="x17-102001r123"></a>
+<h4 class="subsectionHead"><span class="titlemark">4.2.5 </span> <a
+ id="x17-1030005"></a>Dynamic Actors 5</h4>
+<!--l. 420--><p class="noindent" >This example is contained in <span
+class="ec-lmtt-10">model/dynamicactors5</span>.
+<a
+ id="x17-103001r126"></a>
+</p>
+<h5 class="subsubsectionHead"><span class="titlemark">4.2.5.1 </span> <a
+ id="x17-1040001"></a>Purpose</h5>
+<!--l. 424--><p class="noindent" >The example shows that the optional actor can not only have relay ports but also external end ports.
+<a
+ id="x17-104001r128"></a>
+</p>
+<h5 class="subsubsectionHead"><span class="titlemark">4.2.5.2 </span> <a
+ id="x17-1050002"></a>Details</h5>
+<!--l. 428--><p class="noindent" >This simple example just shows that the optional actor may directly handle inbound messages by using an external end port
+rather than the relay port of the previous examples.
+<a
+ id="x17-105001r129"></a>
+</p>
+<h5 class="subsubsectionHead"><span class="titlemark">4.2.5.3 </span> <a
+ id="x17-1060003"></a>Noteworthy</h5>
+ <ul class="itemize1">
+ <li class="itemize">the generated MSC <span
+class="ec-lmtt-10">main_Async.seq </span>is a good illustration of the dynamic changes in the system structure</li></ul>
+<a
+ id="x17-106001r127"></a>
+<h4 class="subsectionHead"><span class="titlemark">4.2.6 </span> <a
+ id="x17-1070006"></a>Dynamic Actors 6</h4>
+<!--l. 439--><p class="noindent" >This example is contained in <span
+class="ec-lmtt-10">model/dynamicactors6</span>.
+<a
+ id="x17-107001r130"></a>
+</p>
+<h5 class="subsubsectionHead"><span class="titlemark">4.2.6.1 </span> <a
+ id="x17-1080001"></a>Purpose</h5>
+<!--l. 443--><p class="noindent" >The example demonstrates the use of nested dynamic actors.
+<a
+ id="x17-108001r132"></a>
+</p>
+<h5 class="subsubsectionHead"><span class="titlemark">4.2.6.2 </span> <a
+ id="x17-1090002"></a>Details</h5>
+<!--l. 447--><p class="noindent" >In this example the dynamically created actor <span
+class="ec-lmtt-10">Optional2 </span>has again an optional reference two levels down in its hierarchy. On
+creation it immediately creates a nested dynamic actor of class <span
+class="ec-lmtt-10">Optional1 </span>which is sending <span
+class="ec-lmtt-10">hello() </span>back to the outer
+<span
+class="ec-lmtt-10">Container</span>.
+<a
+ id="x17-109001r133"></a>
+</p>
+<h5 class="subsubsectionHead"><span class="titlemark">4.2.6.3 </span> <a
+ id="x17-1100003"></a>Noteworthy</h5>
+ <ul class="itemize1">
+ <li class="itemize">the generated MSC <span
+class="ec-lmtt-10">main_Async.seq </span>is a good illustration of the dynamic changes in the system structure
+ </li>
+ <li class="itemize">when a dynamic actor is created its structure is there immediately and all ports are connected. But the initial
+ transition is executed asynchronously. So after the outer dynamic actor is created the port of the <span
+class="ec-lmtt-10">Container</span>
+ is not yet connected because the initial transition which is responsible for the creation of the inner dynamic
+ actor wasn&#8217;t executed yet. So a message sent from this port directly after creation of the outer dynamic actor
+ would get lost.</li></ul>
-<!--l. 176--><div class="crosslinks"><p class="noindent">[<a
-href="etrice-docse12.html" >next</a>] [<a
+<a
+ id="x17-110001r131"></a>
+<h4 class="subsectionHead"><span class="titlemark">4.2.7 </span> <a
+ id="x17-1110007"></a>Dynamic Actors 7</h4>
+<!--l. 463--><p class="noindent" >This example is contained in <span
+class="ec-lmtt-10">model/dynamicactors7</span>.
+<a
+ id="x17-111001r134"></a>
+</p>
+<h5 class="subsubsectionHead"><span class="titlemark">4.2.7.1 </span> <a
+ id="x17-1120001"></a>Purpose</h5>
+<!--l. 467--><p class="noindent" >The example demonstrates the use of communication between two optional actors.
+<a
+ id="x17-112001r136"></a>
+</p>
+<h5 class="subsubsectionHead"><span class="titlemark">4.2.7.2 </span> <a
+ id="x17-1130002"></a>Details</h5>
+<!--l. 471--><p class="noindent" >In this example two sub trees of dynamic actors are created. The container is sending a message to one of them which is
+forwarding it to the other one which in turn is replying back to the container.
+<a
+ id="x17-113001r137"></a>
+</p>
+<h5 class="subsubsectionHead"><span class="titlemark">4.2.7.3 </span> <a
+ id="x17-1140003"></a>Noteworthy</h5>
+ <ul class="itemize1">
+ <li class="itemize">the generated MSC <span
+class="ec-lmtt-10">main_Async.seq </span>is a good illustration of the dynamic changes in the system structure</li></ul>
+<a
+ id="x17-114001r135"></a>
+<h4 class="subsectionHead"><span class="titlemark">4.2.8 </span> <a
+ id="x17-1150008"></a>Dynamic Actors 8</h4>
+<!--l. 482--><p class="noindent" >This example is contained in <span
+class="ec-lmtt-10">model/dynamicactors8</span>.
+<a
+ id="x17-115001r138"></a>
+</p>
+<h5 class="subsubsectionHead"><span class="titlemark">4.2.8.1 </span> <a
+ id="x17-1160001"></a>Purpose</h5>
+<!--l. 486--><p class="noindent" >The example demonstrates the use of the persistence interface for dynamic actors.
+<a
+ id="x17-116001r140"></a>
+</p>
+<h5 class="subsubsectionHead"><span class="titlemark">4.2.8.2 </span> <a
+ id="x17-1170002"></a>Details</h5>
+<!--l. 490--><p class="noindent" >Dynamic actors can be persisted and restored. To this end the user has to pass an <span
+class="ec-lmtt-10">java.io.ObjectOutput </span>to
+the creation method (<span
+class="ec-lmtt-10">createOptionalActor()</span>) and an <span
+class="ec-lmtt-10">java.io.ObjectInput </span>to the deletion method
+(<span
+class="ec-lmtt-10">destroyOptionalActor()</span>).
+</p><!--l. 493--><p class="noindent" >The code generation has to be invoked with the <span
+class="ec-lmtt-10">-persistable </span>(e.g. by setting the &#8217;generate persistence interface&#8217; flag in the
+Java Generator tab of the launch configuration). This lets the generator implement the <span
+class="ec-lmtt-10">IPersistable </span>interface for actor
+classes.
+</p><!--l. 496--><p class="noindent" >The example adds a manually coded very simple <span
+class="ec-lmtt-10">FilePersistor </span>with four static methods for creation and deletion of scalar
+and replicated dynamic actors.
+</p><!--l. 499--><p class="noindent" >The <span
+class="ec-lmtt-10">Container </span>class first creates an optional actor of type <span
+class="ec-lmtt-10">Optional1 </span>in the scalar reference <span
+class="ec-lmtt-10">opt</span>. Then messages are sent
+to this actor instance which lead to some state changes. Finally it is saved and destroyed. Now another actor class is
+instantiated in the same actor reference and also destroyed. Then the first instance is loaded from file. It directly starts in the
+state it had when it was saved. The second part of the example loads copies of the two instances created in the beginning
+into the <span
+class="ec-lmtt-10">optarr </span>reference.
+<a
+ id="x17-117001r141"></a>
+</p>
+<h5 class="subsubsectionHead"><span class="titlemark">4.2.8.3 </span> <a
+ id="x17-1180003"></a>Noteworthy</h5>
+ <ul class="itemize1">
+ <li class="itemize">the generated MSC <span
+class="ec-lmtt-10">main_Async.seq </span>is a good illustration of the dynamic changes in the system structure</li></ul>
+<a
+ id="x17-118001r139"></a>
+<h4 class="subsectionHead"><span class="titlemark">4.2.9 </span> <a
+ id="x17-1190009"></a>Dynamic Actors 9</h4>
+<!--l. 513--><p class="noindent" >This example is contained in <span
+class="ec-lmtt-10">model/dynamicactors9</span>.
+
+
+<a
+ id="x17-119001r142"></a>
+</p>
+<h5 class="subsubsectionHead"><span class="titlemark">4.2.9.1 </span> <a
+ id="x17-1200001"></a>Purpose</h5>
+<!--l. 517--><p class="noindent" >The example demonstrates the use of SAPs in dynamic actors.
+<a
+ id="x17-120001r144"></a>
+</p>
+<h5 class="subsubsectionHead"><span class="titlemark">4.2.9.2 </span> <a
+ id="x17-1210002"></a>Details</h5>
+<!--l. 521--><p class="noindent" >This simple example re-uses the PingPong tutorial. The static part of the system introduces a <span
+class="ec-lmtt-10">TimingService </span>as SPP and
+the <span
+class="ec-lmtt-10">Receiver </span>embedded in the optional part uses a SAP of this protocol.
+</p><!--l. 524--><p class="noindent" >The sub system during initialization adds broker ports to the optional actor interface that are connected to all available
+services.
+</p><!--l. 527--><p class="noindent" >On the other hand the factory for the optional actor maps SAPs to those broker ports.
+<a
+ id="x17-121001r145"></a>
+</p>
+<h5 class="subsubsectionHead"><span class="titlemark">4.2.9.3 </span> <a
+ id="x17-1220003"></a>Noteworthy</h5>
+ <ul class="itemize1">
+ <li class="itemize"><span
+class="ec-lmsso-10">Caution: </span>currently the generator informs about unsatisfied services in dynamic actors. But it is still possible to
+ create such an instance. The consequence is an unbound SAP</li></ul>
+<!--l. 1--><div class="crosslinks"><p class="noindent">[<a
+href="etrice-docch5.html" >next</a>] [<a
href="etrice-docse10.html" >prev</a>] [<a
href="etrice-docse10.html#tailetrice-docse10.html" >prev-tail</a>] [<a
href="etrice-docse11.html" >front</a>] [<a
href="etrice-docch4.html#etrice-docse11.html" >up</a>] </p></div>
-<!--l. 176--><p class="noindent" ><a
+<!--l. 1--><p class="noindent" ><a
id="tailetrice-docse11.html"></a></p>
</body></html>

Back to the top