You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mina.apache.org by bu...@apache.org on 2012/11/01 06:13:21 UTC

svn commit: r836837 [2/7] - in /websites/staging/mina/trunk/content: ./ mina/ mina/userguide/ mina/userguide/ch1-getting-started/ mina/userguide/ch12-logging-filter/ mina/userguide/ch14-state-machine/ mina/userguide/ch16-jmx-support/ mina/userguide/ch1...

Modified: websites/staging/mina/trunk/content/mina/userguide/ch14-state-machine/ch14-state-machine.html
==============================================================================
--- websites/staging/mina/trunk/content/mina/userguide/ch14-state-machine/ch14-state-machine.html (original)
+++ websites/staging/mina/trunk/content/mina/userguide/ch14-state-machine/ch14-state-machine.html Thu Nov  1 05:13:20 2012
@@ -182,77 +182,77 @@
 <p><img alt="" src="../../../staticresources/images/mina/state-diagram.png" /></p>
 <p>Initially, the tape deck is in the <strong>Empty</strong> state. When a tape is inserted the <strong>load</strong> event is fired and the tape deck moves to the <strong>Loaded</strong> state. In <strong>Loaded</strong> the <strong>eject</strong> event will trigger a move back to <strong>Empty</strong> while the <strong>play</strong> event will trigger a move to the <strong>Playing</strong> state. And so on... I think you can work out the rest on your own.</p>
 <p>Now let's write some code. The outside world (the code interfacing with the tape deck) will only see the TapeDeck interface:</p>
-<div class="codehilite"><pre><span class="n">public</span> <span class="n">interface</span> <span class="n">TapeDeck</span> <span class="p">{</span>
-    <span class="n">void</span> <span class="n">load</span><span class="p">(</span><span class="n">String</span> <span class="n">nameOfTape</span><span class="p">);</span>
-    <span class="n">void</span> <span class="n">eject</span><span class="p">();</span>
-    <span class="n">void</span> <span class="n">start</span><span class="p">();</span>
-    <span class="n">void</span> <span class="n">pause</span><span class="p">();</span>
-    <span class="n">void</span> <span class="n">stop</span><span class="p">();</span>
-<span class="p">}</span>
+<div class="codehilite"><pre><span class="kd">public</span> <span class="kd">interface</span> <span class="nc">TapeDeck</span> <span class="o">{</span>
+    <span class="kt">void</span> <span class="nf">load</span><span class="o">(</span><span class="n">String</span> <span class="n">nameOfTape</span><span class="o">);</span>
+    <span class="kt">void</span> <span class="nf">eject</span><span class="o">();</span>
+    <span class="kt">void</span> <span class="nf">start</span><span class="o">();</span>
+    <span class="kt">void</span> <span class="nf">pause</span><span class="o">();</span>
+    <span class="kt">void</span> <span class="nf">stop</span><span class="o">();</span>
+<span class="o">}</span>
 </pre></div>
 
 
 <p>Next we will write the class which contains the actual code executed when a transition occurs in the state machine. First we will define the states. The states are all defined as constant String objects and are annotated using the @State annotation:</p>
-<div class="codehilite"><pre><span class="n">public</span> <span class="n">class</span> <span class="n">TapeDeckHandler</span> <span class="p">{</span>
-    <span class="nv">@State</span> <span class="n">public</span> <span class="n">static</span> <span class="n">final</span> <span class="n">String</span> <span class="n">EMPTY</span>   <span class="o">=</span> <span class="s">&quot;Empty&quot;</span><span class="p">;</span>
-    <span class="nv">@State</span> <span class="n">public</span> <span class="n">static</span> <span class="n">final</span> <span class="n">String</span> <span class="n">LOADED</span>  <span class="o">=</span> <span class="s">&quot;Loaded&quot;</span><span class="p">;</span>
-    <span class="nv">@State</span> <span class="n">public</span> <span class="n">static</span> <span class="n">final</span> <span class="n">String</span> <span class="n">PLAYING</span> <span class="o">=</span> <span class="s">&quot;Playing&quot;</span><span class="p">;</span>
-    <span class="nv">@State</span> <span class="n">public</span> <span class="n">static</span> <span class="n">final</span> <span class="n">String</span> <span class="n">PAUSED</span>  <span class="o">=</span> <span class="s">&quot;Paused&quot;</span><span class="p">;</span>
-<span class="p">}</span>
+<div class="codehilite"><pre><span class="kd">public</span> <span class="kd">class</span> <span class="nc">TapeDeckHandler</span> <span class="o">{</span>
+    <span class="nd">@State</span> <span class="kd">public</span> <span class="kd">static</span> <span class="kd">final</span> <span class="n">String</span> <span class="n">EMPTY</span>   <span class="o">=</span> <span class="s">&quot;Empty&quot;</span><span class="o">;</span>
+    <span class="nd">@State</span> <span class="kd">public</span> <span class="kd">static</span> <span class="kd">final</span> <span class="n">String</span> <span class="n">LOADED</span>  <span class="o">=</span> <span class="s">&quot;Loaded&quot;</span><span class="o">;</span>
+    <span class="nd">@State</span> <span class="kd">public</span> <span class="kd">static</span> <span class="kd">final</span> <span class="n">String</span> <span class="n">PLAYING</span> <span class="o">=</span> <span class="s">&quot;Playing&quot;</span><span class="o">;</span>
+    <span class="nd">@State</span> <span class="kd">public</span> <span class="kd">static</span> <span class="kd">final</span> <span class="n">String</span> <span class="n">PAUSED</span>  <span class="o">=</span> <span class="s">&quot;Paused&quot;</span><span class="o">;</span>
+<span class="o">}</span>
 </pre></div>
 
 
 <p>Now when we have the states defined we can set up the code corresponding to each transition. Each transition will correspond to a method in TapeDeckHandler. Each transition method is annotated using the @Transition annotation which defines the event id which triggers the transition (on), the start state of the transition (in) and the end state of the transition (next):</p>
-<div class="codehilite"><pre><span class="n">public</span> <span class="n">class</span> <span class="n">TapeDeckHandler</span> <span class="p">{</span>
-    <span class="nv">@State</span> <span class="n">public</span> <span class="n">static</span> <span class="n">final</span> <span class="n">String</span> <span class="n">EMPTY</span> <span class="o">=</span> <span class="s">&quot;Empty&quot;</span><span class="p">;</span>
-    <span class="nv">@State</span> <span class="n">public</span> <span class="n">static</span> <span class="n">final</span> <span class="n">String</span> <span class="n">LOADED</span> <span class="o">=</span> <span class="s">&quot;Loaded&quot;</span><span class="p">;</span>
-    <span class="nv">@State</span> <span class="n">public</span> <span class="n">static</span> <span class="n">final</span> <span class="n">String</span> <span class="n">PLAYING</span> <span class="o">=</span> <span class="s">&quot;Playing&quot;</span><span class="p">;</span>
-    <span class="nv">@State</span> <span class="n">public</span> <span class="n">static</span> <span class="n">final</span> <span class="n">String</span> <span class="n">PAUSED</span> <span class="o">=</span> <span class="s">&quot;Paused&quot;</span><span class="p">;</span>
-
-    <span class="nv">@Transition</span><span class="p">(</span><span class="n">on</span> <span class="o">=</span> <span class="s">&quot;load&quot;</span><span class="p">,</span> <span class="n">in</span> <span class="o">=</span> <span class="n">EMPTY</span><span class="p">,</span> <span class="k">next</span> <span class="o">=</span> <span class="n">LOADED</span><span class="p">)</span>
-    <span class="n">public</span> <span class="n">void</span> <span class="n">loadTape</span><span class="p">(</span><span class="n">String</span> <span class="n">nameOfTape</span><span class="p">)</span> <span class="p">{</span>
-        <span class="n">System</span><span class="o">.</span><span class="n">out</span><span class="o">.</span><span class="n">println</span><span class="p">(</span><span class="s">&quot;Tape &#39;&quot;</span> <span class="o">+</span> <span class="n">nameOfTape</span> <span class="o">+</span> <span class="s">&quot;&#39; loaded&quot;</span><span class="p">);</span>
-    <span class="p">}</span>
-
-    <span class="nv">@Transitions</span><span class="p">({</span>
-        <span class="nv">@Transition</span><span class="p">(</span><span class="n">on</span> <span class="o">=</span> <span class="s">&quot;play&quot;</span><span class="p">,</span> <span class="n">in</span> <span class="o">=</span> <span class="n">LOADED</span><span class="p">,</span> <span class="k">next</span> <span class="o">=</span> <span class="n">PLAYING</span><span class="p">),</span>
-        <span class="nv">@Transition</span><span class="p">(</span><span class="n">on</span> <span class="o">=</span> <span class="s">&quot;play&quot;</span><span class="p">,</span> <span class="n">in</span> <span class="o">=</span> <span class="n">PAUSED</span><span class="p">,</span> <span class="k">next</span> <span class="o">=</span> <span class="n">PLAYING</span><span class="p">)</span>
-    <span class="p">})</span>
-    <span class="n">public</span> <span class="n">void</span> <span class="n">playTape</span><span class="p">()</span> <span class="p">{</span>
-        <span class="n">System</span><span class="o">.</span><span class="n">out</span><span class="o">.</span><span class="n">println</span><span class="p">(</span><span class="s">&quot;Playing tape&quot;</span><span class="p">);</span>
-    <span class="p">}</span>
-
-    <span class="nv">@Transition</span><span class="p">(</span><span class="n">on</span> <span class="o">=</span> <span class="s">&quot;pause&quot;</span><span class="p">,</span> <span class="n">in</span> <span class="o">=</span> <span class="n">PLAYING</span><span class="p">,</span> <span class="k">next</span> <span class="o">=</span> <span class="n">PAUSED</span><span class="p">)</span>
-    <span class="n">public</span> <span class="n">void</span> <span class="n">pauseTape</span><span class="p">()</span> <span class="p">{</span>
-        <span class="n">System</span><span class="o">.</span><span class="n">out</span><span class="o">.</span><span class="n">println</span><span class="p">(</span><span class="s">&quot;Tape paused&quot;</span><span class="p">);</span>
-    <span class="p">}</span>
-
-    <span class="nv">@Transition</span><span class="p">(</span><span class="n">on</span> <span class="o">=</span> <span class="s">&quot;stop&quot;</span><span class="p">,</span> <span class="n">in</span> <span class="o">=</span> <span class="n">PLAYING</span><span class="p">,</span> <span class="k">next</span> <span class="o">=</span> <span class="n">LOADED</span><span class="p">)</span>
-    <span class="n">public</span> <span class="n">void</span> <span class="n">stopTape</span><span class="p">()</span> <span class="p">{</span>
-        <span class="n">System</span><span class="o">.</span><span class="n">out</span><span class="o">.</span><span class="n">println</span><span class="p">(</span><span class="s">&quot;Tape stopped&quot;</span><span class="p">);</span>
-    <span class="p">}</span>
-
-    <span class="nv">@Transition</span><span class="p">(</span><span class="n">on</span> <span class="o">=</span> <span class="s">&quot;eject&quot;</span><span class="p">,</span> <span class="n">in</span> <span class="o">=</span> <span class="n">LOADED</span><span class="p">,</span> <span class="k">next</span> <span class="o">=</span> <span class="n">EMPTY</span><span class="p">)</span>
-    <span class="n">public</span> <span class="n">void</span> <span class="n">ejectTape</span><span class="p">()</span> <span class="p">{</span>
-        <span class="n">System</span><span class="o">.</span><span class="n">out</span><span class="o">.</span><span class="n">println</span><span class="p">(</span><span class="s">&quot;Tape ejected&quot;</span><span class="p">);</span>
-    <span class="p">}</span>
-<span class="p">}</span>
+<div class="codehilite"><pre><span class="kd">public</span> <span class="kd">class</span> <span class="nc">TapeDeckHandler</span> <span class="o">{</span>
+    <span class="nd">@State</span> <span class="kd">public</span> <span class="kd">static</span> <span class="kd">final</span> <span class="n">String</span> <span class="n">EMPTY</span> <span class="o">=</span> <span class="s">&quot;Empty&quot;</span><span class="o">;</span>
+    <span class="nd">@State</span> <span class="kd">public</span> <span class="kd">static</span> <span class="kd">final</span> <span class="n">String</span> <span class="n">LOADED</span> <span class="o">=</span> <span class="s">&quot;Loaded&quot;</span><span class="o">;</span>
+    <span class="nd">@State</span> <span class="kd">public</span> <span class="kd">static</span> <span class="kd">final</span> <span class="n">String</span> <span class="n">PLAYING</span> <span class="o">=</span> <span class="s">&quot;Playing&quot;</span><span class="o">;</span>
+    <span class="nd">@State</span> <span class="kd">public</span> <span class="kd">static</span> <span class="kd">final</span> <span class="n">String</span> <span class="n">PAUSED</span> <span class="o">=</span> <span class="s">&quot;Paused&quot;</span><span class="o">;</span>
+
+    <span class="nd">@Transition</span><span class="o">(</span><span class="n">on</span> <span class="o">=</span> <span class="s">&quot;load&quot;</span><span class="o">,</span> <span class="n">in</span> <span class="o">=</span> <span class="n">EMPTY</span><span class="o">,</span> <span class="n">next</span> <span class="o">=</span> <span class="n">LOADED</span><span class="o">)</span>
+    <span class="kd">public</span> <span class="kt">void</span> <span class="nf">loadTape</span><span class="o">(</span><span class="n">String</span> <span class="n">nameOfTape</span><span class="o">)</span> <span class="o">{</span>
+        <span class="n">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span><span class="s">&quot;Tape &#39;&quot;</span> <span class="o">+</span> <span class="n">nameOfTape</span> <span class="o">+</span> <span class="s">&quot;&#39; loaded&quot;</span><span class="o">);</span>
+    <span class="o">}</span>
+
+    <span class="nd">@Transitions</span><span class="o">({</span>
+        <span class="nd">@Transition</span><span class="o">(</span><span class="n">on</span> <span class="o">=</span> <span class="s">&quot;play&quot;</span><span class="o">,</span> <span class="n">in</span> <span class="o">=</span> <span class="n">LOADED</span><span class="o">,</span> <span class="n">next</span> <span class="o">=</span> <span class="n">PLAYING</span><span class="o">),</span>
+        <span class="nd">@Transition</span><span class="o">(</span><span class="n">on</span> <span class="o">=</span> <span class="s">&quot;play&quot;</span><span class="o">,</span> <span class="n">in</span> <span class="o">=</span> <span class="n">PAUSED</span><span class="o">,</span> <span class="n">next</span> <span class="o">=</span> <span class="n">PLAYING</span><span class="o">)</span>
+    <span class="o">})</span>
+    <span class="kd">public</span> <span class="kt">void</span> <span class="nf">playTape</span><span class="o">()</span> <span class="o">{</span>
+        <span class="n">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span><span class="s">&quot;Playing tape&quot;</span><span class="o">);</span>
+    <span class="o">}</span>
+
+    <span class="nd">@Transition</span><span class="o">(</span><span class="n">on</span> <span class="o">=</span> <span class="s">&quot;pause&quot;</span><span class="o">,</span> <span class="n">in</span> <span class="o">=</span> <span class="n">PLAYING</span><span class="o">,</span> <span class="n">next</span> <span class="o">=</span> <span class="n">PAUSED</span><span class="o">)</span>
+    <span class="kd">public</span> <span class="kt">void</span> <span class="nf">pauseTape</span><span class="o">()</span> <span class="o">{</span>
+        <span class="n">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span><span class="s">&quot;Tape paused&quot;</span><span class="o">);</span>
+    <span class="o">}</span>
+
+    <span class="nd">@Transition</span><span class="o">(</span><span class="n">on</span> <span class="o">=</span> <span class="s">&quot;stop&quot;</span><span class="o">,</span> <span class="n">in</span> <span class="o">=</span> <span class="n">PLAYING</span><span class="o">,</span> <span class="n">next</span> <span class="o">=</span> <span class="n">LOADED</span><span class="o">)</span>
+    <span class="kd">public</span> <span class="kt">void</span> <span class="nf">stopTape</span><span class="o">()</span> <span class="o">{</span>
+        <span class="n">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span><span class="s">&quot;Tape stopped&quot;</span><span class="o">);</span>
+    <span class="o">}</span>
+
+    <span class="nd">@Transition</span><span class="o">(</span><span class="n">on</span> <span class="o">=</span> <span class="s">&quot;eject&quot;</span><span class="o">,</span> <span class="n">in</span> <span class="o">=</span> <span class="n">LOADED</span><span class="o">,</span> <span class="n">next</span> <span class="o">=</span> <span class="n">EMPTY</span><span class="o">)</span>
+    <span class="kd">public</span> <span class="kt">void</span> <span class="nf">ejectTape</span><span class="o">()</span> <span class="o">{</span>
+        <span class="n">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span><span class="s">&quot;Tape ejected&quot;</span><span class="o">);</span>
+    <span class="o">}</span>
+<span class="o">}</span>
 </pre></div>
 
 
 <p>Please note that the TapeDeckHandler class does not implement the TapeDeck interface. That's intentional.</p>
 <p>Now, let's have a closer look at some of this code. The @Transition annotation on the loadTape method</p>
-<div class="codehilite"><pre><span class="nv">@Transition</span><span class="p">(</span><span class="n">on</span> <span class="o">=</span> <span class="s">&quot;load&quot;</span><span class="p">,</span> <span class="n">in</span> <span class="o">=</span> <span class="n">EMPTY</span><span class="p">,</span> <span class="k">next</span> <span class="o">=</span> <span class="n">LOADED</span><span class="p">)</span>
-<span class="n">public</span> <span class="n">void</span> <span class="n">loadTape</span><span class="p">(</span><span class="n">String</span> <span class="n">nameOfTape</span><span class="p">)</span> <span class="p">{</span>
+<div class="codehilite"><pre><span class="nd">@Transition</span><span class="o">(</span><span class="n">on</span> <span class="o">=</span> <span class="s">&quot;load&quot;</span><span class="o">,</span> <span class="n">in</span> <span class="o">=</span> <span class="n">EMPTY</span><span class="o">,</span> <span class="n">next</span> <span class="o">=</span> <span class="n">LOADED</span><span class="o">)</span>
+<span class="kd">public</span> <span class="kt">void</span> <span class="nf">loadTape</span><span class="o">(</span><span class="n">String</span> <span class="n">nameOfTape</span><span class="o">)</span> <span class="o">{</span>
 </pre></div>
 
 
 <p>specifies that when the tape deck is in the EMPTY state and the load event occurs the loadTape method will be invoked and then the tape deck will move on to the LOADED state. The @Transition annotations on the pauseTape, stopTape and ejectTape methods should not require any further explanation. The annotation on the playTape method looks slightly different though. As can be seen in the diagram above, when the tape deck is in either the LOADED or in the PAUSED state the play event will play the tape. To have the same method called for multiple transitions the @Transitions annotation has to be used:</p>
-<div class="codehilite"><pre><span class="nv">@Transitions</span><span class="p">({</span>
-    <span class="nv">@Transition</span><span class="p">(</span><span class="n">on</span> <span class="o">=</span> <span class="s">&quot;play&quot;</span><span class="p">,</span> <span class="n">in</span> <span class="o">=</span> <span class="n">LOADED</span><span class="p">,</span> <span class="k">next</span> <span class="o">=</span> <span class="n">PLAYING</span><span class="p">),</span>
-    <span class="nv">@Transition</span><span class="p">(</span><span class="n">on</span> <span class="o">=</span> <span class="s">&quot;play&quot;</span><span class="p">,</span> <span class="n">in</span> <span class="o">=</span> <span class="n">PAUSED</span><span class="p">,</span> <span class="k">next</span> <span class="o">=</span> <span class="n">PLAYING</span><span class="p">)</span>
-<span class="p">})</span>
-<span class="n">public</span> <span class="n">void</span> <span class="n">playTape</span><span class="p">()</span> <span class="p">{</span>
+<div class="codehilite"><pre><span class="nd">@Transitions</span><span class="o">({</span>
+    <span class="nd">@Transition</span><span class="o">(</span><span class="n">on</span> <span class="o">=</span> <span class="s">&quot;play&quot;</span><span class="o">,</span> <span class="n">in</span> <span class="o">=</span> <span class="n">LOADED</span><span class="o">,</span> <span class="n">next</span> <span class="o">=</span> <span class="n">PLAYING</span><span class="o">),</span>
+    <span class="nd">@Transition</span><span class="o">(</span><span class="n">on</span> <span class="o">=</span> <span class="s">&quot;play&quot;</span><span class="o">,</span> <span class="n">in</span> <span class="o">=</span> <span class="n">PAUSED</span><span class="o">,</span> <span class="n">next</span> <span class="o">=</span> <span class="n">PLAYING</span><span class="o">)</span>
+<span class="o">})</span>
+<span class="kd">public</span> <span class="kt">void</span> <span class="nf">playTape</span><span class="o">()</span> <span class="o">{</span>
 </pre></div>
 
 
@@ -266,24 +266,24 @@
     </UL>
 </DIV></p>
 <p>Now the final step is to create a StateMachine object from the annotated class and use it to create a proxy object which implements TapeDeck:</p>
-<div class="codehilite"><pre><span class="n">public</span> <span class="n">static</span> <span class="n">void</span> <span class="n">main</span><span class="p">(</span><span class="n">String</span><span class="o">[]</span> <span class="n">args</span><span class="p">)</span> <span class="p">{</span>
-    <span class="n">TapeDeckHandler</span> <span class="n">handler</span> <span class="o">=</span> <span class="k">new</span> <span class="n">TapeDeckHandler</span><span class="p">();</span>
-    <span class="n">StateMachine</span> <span class="n">sm</span> <span class="o">=</span> <span class="n">StateMachineFactory</span><span class="o">.</span><span class="n">getInstance</span><span class="p">(</span><span class="n">Transition</span><span class="o">.</span><span class="n">class</span><span class="p">)</span><span class="o">.</span><span class="n">create</span><span class="p">(</span><span class="n">TapeDeckHandler</span><span class="o">.</span><span class="n">EMPTY</span><span class="p">,</span> <span class="n">handler</span><span class="p">);</span>
-    <span class="n">TapeDeck</span> <span class="n">deck</span> <span class="o">=</span> <span class="k">new</span> <span class="n">StateMachineProxyBuilder</span><span class="p">()</span><span class="o">.</span><span class="n">create</span><span class="p">(</span><span class="n">TapeDeck</span><span class="o">.</span><span class="n">class</span><span class="p">,</span> <span class="n">sm</span><span class="p">);</span>
-
-    <span class="n">deck</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="s">&quot;The Knife - Silent Shout&quot;</span><span class="p">);</span>
-    <span class="n">deck</span><span class="o">.</span><span class="n">play</span><span class="p">();</span>
-    <span class="n">deck</span><span class="o">.</span><span class="n">pause</span><span class="p">();</span>
-    <span class="n">deck</span><span class="o">.</span><span class="n">play</span><span class="p">();</span>
-    <span class="n">deck</span><span class="o">.</span><span class="n">stop</span><span class="p">();</span>
-    <span class="n">deck</span><span class="o">.</span><span class="n">eject</span><span class="p">();</span>
-<span class="p">}</span>
+<div class="codehilite"><pre><span class="kd">public</span> <span class="kd">static</span> <span class="kt">void</span> <span class="nf">main</span><span class="o">(</span><span class="n">String</span><span class="o">[]</span> <span class="n">args</span><span class="o">)</span> <span class="o">{</span>
+    <span class="n">TapeDeckHandler</span> <span class="n">handler</span> <span class="o">=</span> <span class="k">new</span> <span class="n">TapeDeckHandler</span><span class="o">();</span>
+    <span class="n">StateMachine</span> <span class="n">sm</span> <span class="o">=</span> <span class="n">StateMachineFactory</span><span class="o">.</span><span class="na">getInstance</span><span class="o">(</span><span class="n">Transition</span><span class="o">.</span><span class="na">class</span><span class="o">).</span><span class="na">create</span><span class="o">(</span><span class="n">TapeDeckHandler</span><span class="o">.</span><span class="na">EMPTY</span><span class="o">,</span> <span class="n">handler</span><span class="o">);</span>
+    <span class="n">TapeDeck</span> <span class="n">deck</span> <span class="o">=</span> <span class="k">new</span> <span class="n">StateMachineProxyBuilder</span><span class="o">().</span><span class="na">create</span><span class="o">(</span><span class="n">TapeDeck</span><span class="o">.</span><span class="na">class</span><span class="o">,</span> <span class="n">sm</span><span class="o">);</span>
+
+    <span class="n">deck</span><span class="o">.</span><span class="na">load</span><span class="o">(</span><span class="s">&quot;The Knife - Silent Shout&quot;</span><span class="o">);</span>
+    <span class="n">deck</span><span class="o">.</span><span class="na">play</span><span class="o">();</span>
+    <span class="n">deck</span><span class="o">.</span><span class="na">pause</span><span class="o">();</span>
+    <span class="n">deck</span><span class="o">.</span><span class="na">play</span><span class="o">();</span>
+    <span class="n">deck</span><span class="o">.</span><span class="na">stop</span><span class="o">();</span>
+    <span class="n">deck</span><span class="o">.</span><span class="na">eject</span><span class="o">();</span>
+<span class="o">}</span>
 </pre></div>
 
 
 <p>The lines</p>
-<div class="codehilite"><pre><span class="n">TapeDeckHandler</span> <span class="n">handler</span> <span class="o">=</span> <span class="k">new</span> <span class="n">TapeDeckHandler</span><span class="p">();</span>
-<span class="n">StateMachine</span> <span class="n">sm</span> <span class="o">=</span> <span class="n">StateMachineFactory</span><span class="o">.</span><span class="n">getInstance</span><span class="p">(</span><span class="n">Transition</span><span class="o">.</span><span class="n">class</span><span class="p">)</span><span class="o">.</span><span class="n">create</span><span class="p">(</span><span class="n">TapeDeckHandler</span><span class="o">.</span><span class="n">EMPTY</span><span class="p">,</span> <span class="n">handler</span><span class="p">);</span>
+<div class="codehilite"><pre><span class="n">TapeDeckHandler</span> <span class="n">handler</span> <span class="o">=</span> <span class="k">new</span> <span class="n">TapeDeckHandler</span><span class="o">();</span>
+<span class="n">StateMachine</span> <span class="n">sm</span> <span class="o">=</span> <span class="n">StateMachineFactory</span><span class="o">.</span><span class="na">getInstance</span><span class="o">(</span><span class="n">Transition</span><span class="o">.</span><span class="na">class</span><span class="o">).</span><span class="na">create</span><span class="o">(</span><span class="n">TapeDeckHandler</span><span class="o">.</span><span class="na">EMPTY</span><span class="o">,</span> <span class="n">handler</span><span class="o">);</span>
 </pre></div>
 
 
@@ -293,18 +293,18 @@
     <TT>@Transition</TT> is the annotation you use to mark a method which should be used when a transition between states occur. Behind the scenes <TT>mina-statemachine</TT> will create instances of the <TT>MethodTransition</TT> class for each <TT>@Transition</TT> annotated method. <TT>MethodTransition</TT> implements the <TT>Transition</TT> interface. As a <TT>mina-statemachine</TT> user you will never use the <TT>Transition</TT> or <TT>MethodTransition</TT> types directly.
 </DIV></p>
 <p>The TapeDeck instance is created by calling StateMachineProxyBuilder:</p>
-<div class="codehilite"><pre><span class="n">TapeDeck</span> <span class="n">deck</span> <span class="o">=</span> <span class="k">new</span> <span class="n">StateMachineProxyBuilder</span><span class="p">()</span><span class="o">.</span><span class="n">create</span><span class="p">(</span><span class="n">TapeDeck</span><span class="o">.</span><span class="n">class</span><span class="p">,</span> <span class="n">sm</span><span class="p">);</span>
+<div class="codehilite"><pre><span class="n">TapeDeck</span> <span class="n">deck</span> <span class="o">=</span> <span class="k">new</span> <span class="n">StateMachineProxyBuilder</span><span class="o">().</span><span class="na">create</span><span class="o">(</span><span class="n">TapeDeck</span><span class="o">.</span><span class="na">class</span><span class="o">,</span> <span class="n">sm</span><span class="o">);</span>
 </pre></div>
 
 
 <p>The StateMachineProxyBuilder.create() method takes the interfaces the returned proxy object should implement and the StateMachine instance which will receive the events generated by the method calls on the proxy.</p>
 <p>When the code is executed the output should be:</p>
-<div class="codehilite"><pre><span class="n">Tape</span> <span class="s">&#39;The Knife - Silent Shout&#39;</span> <span class="n">loaded</span>
-<span class="n">Playing</span> <span class="n">tape</span>
-<span class="n">Tape</span> <span class="n">paused</span>
-<span class="n">Playing</span> <span class="n">tape</span>
-<span class="n">Tape</span> <span class="n">stopped</span>
-<span class="n">Tape</span> <span class="n">ejected</span>
+<div class="codehilite"><pre>Tape &#39;The Knife - Silent Shout&#39; loaded
+Playing tape
+Tape paused
+Playing tape
+Tape stopped
+Tape ejected
 </pre></div>
 
 
@@ -332,13 +332,13 @@
 <h1 id="methodtransition">MethodTransition</h1>
 <p>MethodTransition is very important and requires some further explanation. MethodTransition matches an Event if the event's id matches the on parameter of the @Transition annotation and the annotated method's arguments are assignment compatible with a subset of the event's arguments.</p>
 <p>So, if the Event looks like {id = "foo", arguments = [a, b, c]} the method</p>
-<div class="codehilite"><pre><span class="nv">@Transition</span><span class="p">(</span><span class="n">on</span> <span class="o">=</span> <span class="s">&quot;foo&quot;</span><span class="p">)</span>
-<span class="n">public</span> <span class="n">void</span> <span class="n">someMethod</span><span class="p">(</span><span class="n">One</span> <span class="n">one</span><span class="p">,</span> <span class="n">Two</span> <span class="n">two</span><span class="p">,</span> <span class="n">Three</span> <span class="n">three</span><span class="p">)</span> <span class="p">{</span> <span class="o">...</span> <span class="p">}</span>
+<div class="codehilite"><pre><span class="nd">@Transition</span><span class="o">(</span><span class="n">on</span> <span class="o">=</span> <span class="s">&quot;foo&quot;</span><span class="o">)</span>
+<span class="kd">public</span> <span class="kt">void</span> <span class="nf">someMethod</span><span class="o">(</span><span class="n">One</span> <span class="n">one</span><span class="o">,</span> <span class="n">Two</span> <span class="n">two</span><span class="o">,</span> <span class="n">Three</span> <span class="n">three</span><span class="o">)</span> <span class="o">{</span> <span class="o">...</span> <span class="o">}</span>
 </pre></div>
 
 
 <p>matches if and only if ((a instanceof One &amp;&amp; b instanceof Two &amp;&amp; c instanceof Three) == true). On match the method will be called with the matching event arguments bound to the method's arguments:</p>
-<div class="codehilite"><pre><span class="n">someMethod</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">,</span> <span class="n">c</span><span class="p">);</span>
+<div class="codehilite"><pre><span class="n">someMethod</span><span class="o">(</span><span class="n">a</span><span class="o">,</span> <span class="n">b</span><span class="o">,</span> <span class="n">c</span><span class="o">);</span>
 </pre></div>
 
 
@@ -346,32 +346,32 @@
     <TT>Integer</TT>, <TT>Double</TT>, <TT>Float</TT>, etc also match their primitive counterparts <TT>int</TT>, <TT>double</TT>, <TT>float</TT>, etc.
 </DIV></p>
 <p>As stated above also a subset would match:</p>
-<div class="codehilite"><pre><span class="nv">@Transition</span><span class="p">(</span><span class="n">on</span> <span class="o">=</span> <span class="s">&quot;foo&quot;</span><span class="p">)</span>
-<span class="n">public</span> <span class="n">void</span> <span class="n">someMethod</span><span class="p">(</span><span class="n">Two</span> <span class="n">two</span><span class="p">)</span> <span class="p">{</span> <span class="o">...</span> <span class="p">}</span>
+<div class="codehilite"><pre><span class="nd">@Transition</span><span class="o">(</span><span class="n">on</span> <span class="o">=</span> <span class="s">&quot;foo&quot;</span><span class="o">)</span>
+<span class="kd">public</span> <span class="kt">void</span> <span class="nf">someMethod</span><span class="o">(</span><span class="n">Two</span> <span class="n">two</span><span class="o">)</span> <span class="o">{</span> <span class="o">...</span> <span class="o">}</span>
 </pre></div>
 
 
 <p>matches if ((a instanceof Two || b instanceof Two || c instanceof Two) == true). In this case the first matching event argument will be bound to the method argument named two when someMethod is called.</p>
 <p>A method which takes no arguments always matches if the event id matches:</p>
-<div class="codehilite"><pre><span class="nv">@Transition</span><span class="p">(</span><span class="n">on</span> <span class="o">=</span> <span class="s">&quot;foo&quot;</span><span class="p">)</span>
-<span class="n">public</span> <span class="n">void</span> <span class="n">someMethod</span><span class="p">()</span> <span class="p">{</span> <span class="o">...</span> <span class="p">}</span>
+<div class="codehilite"><pre><span class="nd">@Transition</span><span class="o">(</span><span class="n">on</span> <span class="o">=</span> <span class="s">&quot;foo&quot;</span><span class="o">)</span>
+<span class="kd">public</span> <span class="kt">void</span> <span class="nf">someMethod</span><span class="o">()</span> <span class="o">{</span> <span class="o">...</span> <span class="o">}</span>
 </pre></div>
 
 
 <p>To make things even more complicated the first two method arguments also matches against the Event class and the StateContext interface. This means that</p>
-<div class="codehilite"><pre><span class="nv">@Transition</span><span class="p">(</span><span class="n">on</span> <span class="o">=</span> <span class="s">&quot;foo&quot;</span><span class="p">)</span>
-<span class="n">public</span> <span class="n">void</span> <span class="n">someMethod</span><span class="p">(</span><span class="n">Event</span> <span class="n">event</span><span class="p">,</span> <span class="n">StateContext</span> <span class="n">context</span><span class="p">,</span> <span class="n">One</span> <span class="n">one</span><span class="p">,</span> <span class="n">Two</span> <span class="n">two</span><span class="p">,</span> <span class="n">Three</span> <span class="n">three</span><span class="p">)</span> <span class="p">{</span> <span class="o">...</span> <span class="p">}</span>
-<span class="nv">@Transition</span><span class="p">(</span><span class="n">on</span> <span class="o">=</span> <span class="s">&quot;foo&quot;</span><span class="p">)</span>
-<span class="n">public</span> <span class="n">void</span> <span class="n">someMethod</span><span class="p">(</span><span class="n">Event</span> <span class="n">event</span><span class="p">,</span> <span class="n">One</span> <span class="n">one</span><span class="p">,</span> <span class="n">Two</span> <span class="n">two</span><span class="p">,</span> <span class="n">Three</span> <span class="n">three</span><span class="p">)</span> <span class="p">{</span> <span class="o">...</span> <span class="p">}</span>
-<span class="nv">@Transition</span><span class="p">(</span><span class="n">on</span> <span class="o">=</span> <span class="s">&quot;foo&quot;</span><span class="p">)</span>
-<span class="n">public</span> <span class="n">void</span> <span class="n">someMethod</span><span class="p">(</span><span class="n">StateContext</span> <span class="n">context</span><span class="p">,</span> <span class="n">One</span> <span class="n">one</span><span class="p">,</span> <span class="n">Two</span> <span class="n">two</span><span class="p">,</span> <span class="n">Three</span> <span class="n">three</span><span class="p">)</span> <span class="p">{</span> <span class="o">...</span> <span class="p">}</span>
+<div class="codehilite"><pre><span class="nd">@Transition</span><span class="o">(</span><span class="n">on</span> <span class="o">=</span> <span class="s">&quot;foo&quot;</span><span class="o">)</span>
+<span class="kd">public</span> <span class="kt">void</span> <span class="nf">someMethod</span><span class="o">(</span><span class="n">Event</span> <span class="n">event</span><span class="o">,</span> <span class="n">StateContext</span> <span class="n">context</span><span class="o">,</span> <span class="n">One</span> <span class="n">one</span><span class="o">,</span> <span class="n">Two</span> <span class="n">two</span><span class="o">,</span> <span class="n">Three</span> <span class="n">three</span><span class="o">)</span> <span class="o">{</span> <span class="o">...</span> <span class="o">}</span>
+<span class="nd">@Transition</span><span class="o">(</span><span class="n">on</span> <span class="o">=</span> <span class="s">&quot;foo&quot;</span><span class="o">)</span>
+<span class="kd">public</span> <span class="kt">void</span> <span class="nf">someMethod</span><span class="o">(</span><span class="n">Event</span> <span class="n">event</span><span class="o">,</span> <span class="n">One</span> <span class="n">one</span><span class="o">,</span> <span class="n">Two</span> <span class="n">two</span><span class="o">,</span> <span class="n">Three</span> <span class="n">three</span><span class="o">)</span> <span class="o">{</span> <span class="o">...</span> <span class="o">}</span>
+<span class="nd">@Transition</span><span class="o">(</span><span class="n">on</span> <span class="o">=</span> <span class="s">&quot;foo&quot;</span><span class="o">)</span>
+<span class="kd">public</span> <span class="kt">void</span> <span class="nf">someMethod</span><span class="o">(</span><span class="n">StateContext</span> <span class="n">context</span><span class="o">,</span> <span class="n">One</span> <span class="n">one</span><span class="o">,</span> <span class="n">Two</span> <span class="n">two</span><span class="o">,</span> <span class="n">Three</span> <span class="n">three</span><span class="o">)</span> <span class="o">{</span> <span class="o">...</span> <span class="o">}</span>
 </pre></div>
 
 
 <p>also matches the Event {id = "foo", arguments = [a, b, c]} if ((a instanceof One &amp;&amp; b instanceof Two &amp;&amp; c instanceof Three) == true). The current Event object will be bound to the event method argument and the current StateContext will be bound to context when someMethod is invoked.</p>
 <p>As before a subset of the event arguments can be used. Also, a specific StateContext implementation may be specified instead of using the generic interface:</p>
-<div class="codehilite"><pre><span class="nv">@Transition</span><span class="p">(</span><span class="n">on</span> <span class="o">=</span> <span class="s">&quot;foo&quot;</span><span class="p">)</span>
-<span class="n">public</span> <span class="n">void</span> <span class="n">someMethod</span><span class="p">(</span><span class="n">MyStateContext</span> <span class="n">context</span><span class="p">,</span> <span class="n">Two</span> <span class="n">two</span><span class="p">)</span> <span class="p">{</span> <span class="o">...</span> <span class="p">}</span>
+<div class="codehilite"><pre><span class="nd">@Transition</span><span class="o">(</span><span class="n">on</span> <span class="o">=</span> <span class="s">&quot;foo&quot;</span><span class="o">)</span>
+<span class="kd">public</span> <span class="kt">void</span> <span class="nf">someMethod</span><span class="o">(</span><span class="n">MyStateContext</span> <span class="n">context</span><span class="o">,</span> <span class="n">Two</span> <span class="n">two</span><span class="o">)</span> <span class="o">{</span> <span class="o">...</span> <span class="o">}</span>
 </pre></div>
 
 
@@ -380,100 +380,100 @@
 </DIV></p>
 <p>If you've made it this far, congratulations! I realize that the section above might be a little hard to digest. Hopefully some examples could make things clearer:</p>
 <p>Consider the Event {id = "messageReceived", arguments = [ArrayList a = [...], Integer b = 1024]}. The following methods match this Event:</p>
-<div class="codehilite"><pre><span class="sr">//</span> <span class="n">All</span> <span class="n">method</span> <span class="n">arguments</span> <span class="n">matches</span> <span class="n">all</span> <span class="n">event</span> <span class="n">arguments</span> <span class="n">directly</span>
-<span class="nv">@Transition</span><span class="p">(</span><span class="n">on</span> <span class="o">=</span> <span class="s">&quot;messageReceived&quot;</span><span class="p">)</span>
-<span class="n">public</span> <span class="n">void</span> <span class="n">messageReceived</span><span class="p">(</span><span class="n">ArrayList</span> <span class="n">l</span><span class="p">,</span> <span class="n">Integer</span> <span class="n">i</span><span class="p">)</span> <span class="p">{</span> <span class="o">...</span> <span class="p">}</span>
-
-<span class="sr">//</span> <span class="n">Matches</span> <span class="n">since</span> <span class="p">((</span><span class="n">a</span> <span class="n">instanceof</span> <span class="n">List</span> <span class="o">&amp;&amp;</span> <span class="n">b</span> <span class="n">instanceof</span> <span class="n">Number</span><span class="p">)</span> <span class="o">==</span> <span class="n">true</span><span class="p">)</span>
-<span class="nv">@Transition</span><span class="p">(</span><span class="n">on</span> <span class="o">=</span> <span class="s">&quot;messageReceived&quot;</span><span class="p">)</span>
-<span class="n">public</span> <span class="n">void</span> <span class="n">messageReceived</span><span class="p">(</span><span class="n">List</span> <span class="n">l</span><span class="p">,</span> <span class="n">Number</span> <span class="n">n</span><span class="p">)</span> <span class="p">{</span> <span class="o">...</span> <span class="p">}</span>
-
-<span class="sr">//</span> <span class="n">Matches</span> <span class="n">since</span> <span class="p">((</span><span class="n">b</span> <span class="n">instanceof</span> <span class="n">Number</span><span class="p">)</span> <span class="o">==</span> <span class="n">true</span><span class="p">)</span>
-<span class="nv">@Transition</span><span class="p">(</span><span class="n">on</span> <span class="o">=</span> <span class="s">&quot;messageReceived&quot;</span><span class="p">)</span>
-<span class="n">public</span> <span class="n">void</span> <span class="n">messageReceived</span><span class="p">(</span><span class="n">Number</span> <span class="n">n</span><span class="p">)</span> <span class="p">{</span> <span class="o">...</span> <span class="p">}</span>
-
-<span class="sr">//</span> <span class="n">Methods</span> <span class="n">with</span> <span class="nb">no</span> <span class="n">arguments</span> <span class="n">always</span> <span class="n">matches</span>
-<span class="nv">@Transition</span><span class="p">(</span><span class="n">on</span> <span class="o">=</span> <span class="s">&quot;messageReceived&quot;</span><span class="p">)</span>
-<span class="n">public</span> <span class="n">void</span> <span class="n">messageReceived</span><span class="p">()</span> <span class="p">{</span> <span class="o">...</span> <span class="p">}</span>
-
-<span class="sr">//</span> <span class="n">Methods</span> <span class="n">only</span> <span class="n">interested</span> <span class="n">in</span> <span class="n">the</span> <span class="n">current</span> <span class="n">Event</span> <span class="ow">or</span> <span class="n">StateContext</span> <span class="n">always</span> <span class="n">matches</span>
-<span class="nv">@Transition</span><span class="p">(</span><span class="n">on</span> <span class="o">=</span> <span class="s">&quot;messageReceived&quot;</span><span class="p">)</span>
-<span class="n">public</span> <span class="n">void</span> <span class="n">messageReceived</span><span class="p">(</span><span class="n">StateContext</span> <span class="n">context</span><span class="p">)</span> <span class="p">{</span> <span class="o">...</span> <span class="p">}</span>
-
-<span class="sr">//</span> <span class="n">Matches</span> <span class="n">since</span> <span class="p">((</span><span class="n">a</span> <span class="n">instanceof</span> <span class="n">Collection</span><span class="p">)</span> <span class="o">==</span> <span class="n">true</span><span class="p">)</span>
-<span class="nv">@Transition</span><span class="p">(</span><span class="n">on</span> <span class="o">=</span> <span class="s">&quot;messageReceived&quot;</span><span class="p">)</span>
-<span class="n">public</span> <span class="n">void</span> <span class="n">messageReceived</span><span class="p">(</span><span class="n">Event</span> <span class="n">event</span><span class="p">,</span> <span class="n">Collection</span> <span class="n">c</span><span class="p">)</span> <span class="p">{</span> <span class="o">...</span> <span class="p">}</span>
+<div class="codehilite"><pre><span class="c1">// All method arguments matches all event arguments directly</span>
+<span class="nd">@Transition</span><span class="o">(</span><span class="n">on</span> <span class="o">=</span> <span class="s">&quot;messageReceived&quot;</span><span class="o">)</span>
+<span class="kd">public</span> <span class="kt">void</span> <span class="nf">messageReceived</span><span class="o">(</span><span class="n">ArrayList</span> <span class="n">l</span><span class="o">,</span> <span class="n">Integer</span> <span class="n">i</span><span class="o">)</span> <span class="o">{</span> <span class="o">...</span> <span class="o">}</span>
+
+<span class="c1">// Matches since ((a instanceof List &amp;&amp; b instanceof Number) == true)</span>
+<span class="nd">@Transition</span><span class="o">(</span><span class="n">on</span> <span class="o">=</span> <span class="s">&quot;messageReceived&quot;</span><span class="o">)</span>
+<span class="kd">public</span> <span class="kt">void</span> <span class="nf">messageReceived</span><span class="o">(</span><span class="n">List</span> <span class="n">l</span><span class="o">,</span> <span class="n">Number</span> <span class="n">n</span><span class="o">)</span> <span class="o">{</span> <span class="o">...</span> <span class="o">}</span>
+
+<span class="c1">// Matches since ((b instanceof Number) == true)</span>
+<span class="nd">@Transition</span><span class="o">(</span><span class="n">on</span> <span class="o">=</span> <span class="s">&quot;messageReceived&quot;</span><span class="o">)</span>
+<span class="kd">public</span> <span class="kt">void</span> <span class="nf">messageReceived</span><span class="o">(</span><span class="n">Number</span> <span class="n">n</span><span class="o">)</span> <span class="o">{</span> <span class="o">...</span> <span class="o">}</span>
+
+<span class="c1">// Methods with no arguments always matches</span>
+<span class="nd">@Transition</span><span class="o">(</span><span class="n">on</span> <span class="o">=</span> <span class="s">&quot;messageReceived&quot;</span><span class="o">)</span>
+<span class="kd">public</span> <span class="kt">void</span> <span class="nf">messageReceived</span><span class="o">()</span> <span class="o">{</span> <span class="o">...</span> <span class="o">}</span>
+
+<span class="c1">// Methods only interested in the current Event or StateContext always matches</span>
+<span class="nd">@Transition</span><span class="o">(</span><span class="n">on</span> <span class="o">=</span> <span class="s">&quot;messageReceived&quot;</span><span class="o">)</span>
+<span class="kd">public</span> <span class="kt">void</span> <span class="nf">messageReceived</span><span class="o">(</span><span class="n">StateContext</span> <span class="n">context</span><span class="o">)</span> <span class="o">{</span> <span class="o">...</span> <span class="o">}</span>
+
+<span class="c1">// Matches since ((a instanceof Collection) == true)</span>
+<span class="nd">@Transition</span><span class="o">(</span><span class="n">on</span> <span class="o">=</span> <span class="s">&quot;messageReceived&quot;</span><span class="o">)</span>
+<span class="kd">public</span> <span class="kt">void</span> <span class="nf">messageReceived</span><span class="o">(</span><span class="n">Event</span> <span class="n">event</span><span class="o">,</span> <span class="n">Collection</span> <span class="n">c</span><span class="o">)</span> <span class="o">{</span> <span class="o">...</span> <span class="o">}</span>
 </pre></div>
 
 
 <p>The following would not match:</p>
-<div class="codehilite"><pre><span class="sr">//</span> <span class="n">Incorrect</span> <span class="n">ordering</span>
-<span class="nv">@Transition</span><span class="p">(</span><span class="n">on</span> <span class="o">=</span> <span class="s">&quot;messageReceived&quot;</span><span class="p">)</span>
-<span class="n">public</span> <span class="n">void</span> <span class="n">messageReceived</span><span class="p">(</span><span class="n">Integer</span> <span class="n">i</span><span class="p">,</span> <span class="n">List</span> <span class="n">l</span><span class="p">)</span> <span class="p">{</span> <span class="o">...</span> <span class="p">}</span>
-
-<span class="sr">//</span> <span class="p">((</span><span class="n">a</span> <span class="n">instanceof</span> <span class="n">LinkedList</span><span class="p">)</span> <span class="o">==</span> <span class="n">false</span><span class="p">)</span>
-<span class="nv">@Transition</span><span class="p">(</span><span class="n">on</span> <span class="o">=</span> <span class="s">&quot;messageReceived&quot;</span><span class="p">)</span>
-<span class="n">public</span> <span class="n">void</span> <span class="n">messageReceived</span><span class="p">(</span><span class="n">LinkedList</span> <span class="n">l</span><span class="p">,</span> <span class="n">Number</span> <span class="n">n</span><span class="p">)</span> <span class="p">{</span> <span class="o">...</span> <span class="p">}</span>
-
-<span class="sr">//</span> <span class="n">Event</span> <span class="n">must</span> <span class="n">be</span> <span class="n">first</span> <span class="n">argument</span>
-<span class="nv">@Transition</span><span class="p">(</span><span class="n">on</span> <span class="o">=</span> <span class="s">&quot;messageReceived&quot;</span><span class="p">)</span>
-<span class="n">public</span> <span class="n">void</span> <span class="n">messageReceived</span><span class="p">(</span><span class="n">ArrayList</span> <span class="n">l</span><span class="p">,</span> <span class="n">Event</span> <span class="n">event</span><span class="p">)</span> <span class="p">{</span> <span class="o">...</span> <span class="p">}</span>
-
-<span class="sr">//</span> <span class="n">StateContext</span> <span class="n">must</span> <span class="n">be</span> <span class="n">second</span> <span class="n">argument</span> <span class="k">if</span> <span class="n">Event</span> <span class="n">is</span> <span class="n">used</span>
-<span class="nv">@Transition</span><span class="p">(</span><span class="n">on</span> <span class="o">=</span> <span class="s">&quot;messageReceived&quot;</span><span class="p">)</span>
-<span class="n">public</span> <span class="n">void</span> <span class="n">messageReceived</span><span class="p">(</span><span class="n">Event</span> <span class="n">event</span><span class="p">,</span> <span class="n">ArrayList</span> <span class="n">l</span><span class="p">,</span> <span class="n">StateContext</span> <span class="n">context</span><span class="p">)</span> <span class="p">{</span> <span class="o">...</span> <span class="p">}</span>
-
-<span class="sr">//</span> <span class="n">Event</span> <span class="n">must</span> <span class="n">come</span> <span class="n">before</span> <span class="n">StateContext</span>
-<span class="nv">@Transition</span><span class="p">(</span><span class="n">on</span> <span class="o">=</span> <span class="s">&quot;messageReceived&quot;</span><span class="p">)</span>
-<span class="n">public</span> <span class="n">void</span> <span class="n">messageReceived</span><span class="p">(</span><span class="n">StateContext</span> <span class="n">context</span><span class="p">,</span> <span class="n">Event</span> <span class="n">event</span><span class="p">)</span> <span class="p">{</span> <span class="o">...</span> <span class="p">}</span>
+<div class="codehilite"><pre><span class="c1">// Incorrect ordering</span>
+<span class="nd">@Transition</span><span class="o">(</span><span class="n">on</span> <span class="o">=</span> <span class="s">&quot;messageReceived&quot;</span><span class="o">)</span>
+<span class="kd">public</span> <span class="kt">void</span> <span class="nf">messageReceived</span><span class="o">(</span><span class="n">Integer</span> <span class="n">i</span><span class="o">,</span> <span class="n">List</span> <span class="n">l</span><span class="o">)</span> <span class="o">{</span> <span class="o">...</span> <span class="o">}</span>
+
+<span class="c1">// ((a instanceof LinkedList) == false)</span>
+<span class="nd">@Transition</span><span class="o">(</span><span class="n">on</span> <span class="o">=</span> <span class="s">&quot;messageReceived&quot;</span><span class="o">)</span>
+<span class="kd">public</span> <span class="kt">void</span> <span class="nf">messageReceived</span><span class="o">(</span><span class="n">LinkedList</span> <span class="n">l</span><span class="o">,</span> <span class="n">Number</span> <span class="n">n</span><span class="o">)</span> <span class="o">{</span> <span class="o">...</span> <span class="o">}</span>
+
+<span class="c1">// Event must be first argument</span>
+<span class="nd">@Transition</span><span class="o">(</span><span class="n">on</span> <span class="o">=</span> <span class="s">&quot;messageReceived&quot;</span><span class="o">)</span>
+<span class="kd">public</span> <span class="kt">void</span> <span class="nf">messageReceived</span><span class="o">(</span><span class="n">ArrayList</span> <span class="n">l</span><span class="o">,</span> <span class="n">Event</span> <span class="n">event</span><span class="o">)</span> <span class="o">{</span> <span class="o">...</span> <span class="o">}</span>
+
+<span class="c1">// StateContext must be second argument if Event is used</span>
+<span class="nd">@Transition</span><span class="o">(</span><span class="n">on</span> <span class="o">=</span> <span class="s">&quot;messageReceived&quot;</span><span class="o">)</span>
+<span class="kd">public</span> <span class="kt">void</span> <span class="nf">messageReceived</span><span class="o">(</span><span class="n">Event</span> <span class="n">event</span><span class="o">,</span> <span class="n">ArrayList</span> <span class="n">l</span><span class="o">,</span> <span class="n">StateContext</span> <span class="n">context</span><span class="o">)</span> <span class="o">{</span> <span class="o">...</span> <span class="o">}</span>
+
+<span class="c1">// Event must come before StateContext</span>
+<span class="nd">@Transition</span><span class="o">(</span><span class="n">on</span> <span class="o">=</span> <span class="s">&quot;messageReceived&quot;</span><span class="o">)</span>
+<span class="kd">public</span> <span class="kt">void</span> <span class="nf">messageReceived</span><span class="o">(</span><span class="n">StateContext</span> <span class="n">context</span><span class="o">,</span> <span class="n">Event</span> <span class="n">event</span><span class="o">)</span> <span class="o">{</span> <span class="o">...</span> <span class="o">}</span>
 </pre></div>
 
 
 <h2 id="state-inheritance">State inheritance</h2>
 <p>State instances may have a parent State. If StateMachine.handle(Event) cannot find a Transition matching the current Event in the current State it will search the parent State. If no match is found there either the parent's parent will be searched and so on.</p>
 <p>This feature is useful when you want to add some generic code to all states without having to specify @Transition annotations for each state. Here's how you create a hierarchy of states using the @State annotation:</p>
-<div class="codehilite"><pre><span class="nv">@State</span>    <span class="n">public</span> <span class="n">static</span> <span class="n">final</span> <span class="n">String</span> <span class="n">A</span> <span class="o">=</span> <span class="s">&quot;A&quot;</span><span class="p">;</span>
-<span class="nv">@State</span><span class="p">(</span><span class="n">A</span><span class="p">)</span> <span class="n">public</span> <span class="n">static</span> <span class="n">final</span> <span class="n">String</span> <span class="n">B</span> <span class="o">=</span> <span class="s">&quot;A-&gt;B&quot;</span><span class="p">;</span>
-<span class="nv">@State</span><span class="p">(</span><span class="n">A</span><span class="p">)</span> <span class="n">public</span> <span class="n">static</span> <span class="n">final</span> <span class="n">String</span> <span class="n">C</span> <span class="o">=</span> <span class="s">&quot;A-&gt;C&quot;</span><span class="p">;</span>
-<span class="nv">@State</span><span class="p">(</span><span class="n">B</span><span class="p">)</span> <span class="n">public</span> <span class="n">static</span> <span class="n">final</span> <span class="n">String</span> <span class="n">D</span> <span class="o">=</span> <span class="s">&quot;A-&gt;B-&gt;D&quot;</span><span class="p">;</span>
-<span class="nv">@State</span><span class="p">(</span><span class="n">C</span><span class="p">)</span> <span class="n">public</span> <span class="n">static</span> <span class="n">final</span> <span class="n">String</span> <span class="n">E</span> <span class="o">=</span> <span class="s">&quot;A-&gt;C-&gt;E&quot;</span><span class="p">;</span>
+<div class="codehilite"><pre><span class="nd">@State</span>    <span class="kd">public</span> <span class="kd">static</span> <span class="kd">final</span> <span class="n">String</span> <span class="n">A</span> <span class="o">=</span> <span class="s">&quot;A&quot;</span><span class="o">;</span>
+<span class="nd">@State</span><span class="o">(</span><span class="n">A</span><span class="o">)</span> <span class="kd">public</span> <span class="kd">static</span> <span class="kd">final</span> <span class="n">String</span> <span class="n">B</span> <span class="o">=</span> <span class="s">&quot;A-&gt;B&quot;</span><span class="o">;</span>
+<span class="nd">@State</span><span class="o">(</span><span class="n">A</span><span class="o">)</span> <span class="kd">public</span> <span class="kd">static</span> <span class="kd">final</span> <span class="n">String</span> <span class="n">C</span> <span class="o">=</span> <span class="s">&quot;A-&gt;C&quot;</span><span class="o">;</span>
+<span class="nd">@State</span><span class="o">(</span><span class="n">B</span><span class="o">)</span> <span class="kd">public</span> <span class="kd">static</span> <span class="kd">final</span> <span class="n">String</span> <span class="n">D</span> <span class="o">=</span> <span class="s">&quot;A-&gt;B-&gt;D&quot;</span><span class="o">;</span>
+<span class="nd">@State</span><span class="o">(</span><span class="n">C</span><span class="o">)</span> <span class="kd">public</span> <span class="kd">static</span> <span class="kd">final</span> <span class="n">String</span> <span class="n">E</span> <span class="o">=</span> <span class="s">&quot;A-&gt;C-&gt;E&quot;</span><span class="o">;</span>
 </pre></div>
 
 
 <h2 id="error-handling-using-state-inheritance">Error handling using state inheritance</h2>
 <p>Let's go back to the TapeDeck example. What happens if you call deck.play() when there's no tape in the deck? Let's try:</p>
-<div class="codehilite"><pre><span class="n">public</span> <span class="n">static</span> <span class="n">void</span> <span class="n">main</span><span class="p">(</span><span class="n">String</span><span class="o">[]</span> <span class="n">args</span><span class="p">)</span> <span class="p">{</span>
+<div class="codehilite"><pre><span class="kd">public</span> <span class="kd">static</span> <span class="kt">void</span> <span class="nf">main</span><span class="o">(</span><span class="n">String</span><span class="o">[]</span> <span class="n">args</span><span class="o">)</span> <span class="o">{</span>
     <span class="o">...</span>
-    <span class="n">deck</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="s">&quot;The Knife - Silent Shout&quot;</span><span class="p">);</span>
-    <span class="n">deck</span><span class="o">.</span><span class="n">play</span><span class="p">();</span>
-    <span class="n">deck</span><span class="o">.</span><span class="n">pause</span><span class="p">();</span>
-    <span class="n">deck</span><span class="o">.</span><span class="n">play</span><span class="p">();</span>
-    <span class="n">deck</span><span class="o">.</span><span class="n">stop</span><span class="p">();</span>
-    <span class="n">deck</span><span class="o">.</span><span class="n">eject</span><span class="p">();</span>
-    <span class="n">deck</span><span class="o">.</span><span class="n">play</span><span class="p">();</span>
-<span class="p">}</span>
+    <span class="n">deck</span><span class="o">.</span><span class="na">load</span><span class="o">(</span><span class="s">&quot;The Knife - Silent Shout&quot;</span><span class="o">);</span>
+    <span class="n">deck</span><span class="o">.</span><span class="na">play</span><span class="o">();</span>
+    <span class="n">deck</span><span class="o">.</span><span class="na">pause</span><span class="o">();</span>
+    <span class="n">deck</span><span class="o">.</span><span class="na">play</span><span class="o">();</span>
+    <span class="n">deck</span><span class="o">.</span><span class="na">stop</span><span class="o">();</span>
+    <span class="n">deck</span><span class="o">.</span><span class="na">eject</span><span class="o">();</span>
+    <span class="n">deck</span><span class="o">.</span><span class="na">play</span><span class="o">();</span>
+<span class="o">}</span>
 
 <span class="o">...</span>
 <span class="n">Tape</span> <span class="n">stopped</span>
 <span class="n">Tape</span> <span class="n">ejected</span>
-<span class="n">Exception</span> <span class="n">in</span> <span class="n">thread</span> <span class="s">&quot;main&quot;</span> <span class="n">o</span><span class="o">.</span><span class="n">a</span><span class="o">.</span><span class="n">m</span><span class="o">.</span><span class="n">sm</span><span class="o">.</span><span class="n">event</span><span class="o">.</span><span class="n">UnhandledEventException:</span> 
-<span class="n">Unhandled</span> <span class="n">event:</span> <span class="n">org</span><span class="o">.</span><span class="n">apache</span><span class="o">.</span><span class="n">mina</span><span class="o">.</span><span class="n">statemachine</span><span class="o">.</span><span class="n">event</span><span class="o">.</span><span class="n">Event</span><span class="nv">@15eb0a9</span><span class="p">[</span><span class="n">id</span><span class="o">=</span><span class="n">play</span><span class="p">,</span><span class="o">...</span><span class="p">]</span>
-    <span class="n">at</span> <span class="n">org</span><span class="o">.</span><span class="n">apache</span><span class="o">.</span><span class="n">mina</span><span class="o">.</span><span class="n">statemachine</span><span class="o">.</span><span class="n">StateMachine</span><span class="o">.</span><span class="n">handle</span><span class="p">(</span><span class="n">StateMachine</span><span class="o">.</span><span class="n">java:285</span><span class="p">)</span>
-    <span class="n">at</span> <span class="n">org</span><span class="o">.</span><span class="n">apache</span><span class="o">.</span><span class="n">mina</span><span class="o">.</span><span class="n">statemachine</span><span class="o">.</span><span class="n">StateMachine</span><span class="o">.</span><span class="n">processEvents</span><span class="p">(</span><span class="n">StateMachine</span><span class="o">.</span><span class="n">java:142</span><span class="p">)</span>
+<span class="n">Exception</span> <span class="n">in</span> <span class="n">thread</span> <span class="s">&quot;main&quot;</span> <span class="n">o</span><span class="o">.</span><span class="na">a</span><span class="o">.</span><span class="na">m</span><span class="o">.</span><span class="na">sm</span><span class="o">.</span><span class="na">event</span><span class="o">.</span><span class="na">UnhandledEventException</span><span class="o">:</span> 
+<span class="n">Unhandled</span> <span class="nl">event:</span> <span class="n">org</span><span class="o">.</span><span class="na">apache</span><span class="o">.</span><span class="na">mina</span><span class="o">.</span><span class="na">statemachine</span><span class="o">.</span><span class="na">event</span><span class="o">.</span><span class="na">Event</span><span class="err">@</span><span class="mi">15</span><span class="n">eb0a9</span><span class="o">[</span><span class="n">id</span><span class="o">=</span><span class="n">play</span><span class="o">,...]</span>
+    <span class="n">at</span> <span class="n">org</span><span class="o">.</span><span class="na">apache</span><span class="o">.</span><span class="na">mina</span><span class="o">.</span><span class="na">statemachine</span><span class="o">.</span><span class="na">StateMachine</span><span class="o">.</span><span class="na">handle</span><span class="o">(</span><span class="n">StateMachine</span><span class="o">.</span><span class="na">java</span><span class="o">:</span><span class="mi">285</span><span class="o">)</span>
+    <span class="n">at</span> <span class="n">org</span><span class="o">.</span><span class="na">apache</span><span class="o">.</span><span class="na">mina</span><span class="o">.</span><span class="na">statemachine</span><span class="o">.</span><span class="na">StateMachine</span><span class="o">.</span><span class="na">processEvents</span><span class="o">(</span><span class="n">StateMachine</span><span class="o">.</span><span class="na">java</span><span class="o">:</span><span class="mi">142</span><span class="o">)</span>
     <span class="o">...</span>
 </pre></div>
 
 
 <p>Oops! We get an UnhandledEventException because when we're in the Empty state there's no transition which handles the play event. We could add a special transition to all states which handles unmatched Event objects:</p>
-<div class="codehilite"><pre><span class="nv">@Transitions</span><span class="p">({</span>
-    <span class="nv">@Transition</span><span class="p">(</span><span class="n">on</span> <span class="o">=</span> <span class="s">&quot;*&quot;</span><span class="p">,</span> <span class="n">in</span> <span class="o">=</span> <span class="n">EMPTY</span><span class="p">,</span> <span class="n">weight</span> <span class="o">=</span> <span class="mi">100</span><span class="p">),</span>
-    <span class="nv">@Transition</span><span class="p">(</span><span class="n">on</span> <span class="o">=</span> <span class="s">&quot;*&quot;</span><span class="p">,</span> <span class="n">in</span> <span class="o">=</span> <span class="n">LOADED</span><span class="p">,</span> <span class="n">weight</span> <span class="o">=</span> <span class="mi">100</span><span class="p">),</span>
-    <span class="nv">@Transition</span><span class="p">(</span><span class="n">on</span> <span class="o">=</span> <span class="s">&quot;*&quot;</span><span class="p">,</span> <span class="n">in</span> <span class="o">=</span> <span class="n">PLAYING</span><span class="p">,</span> <span class="n">weight</span> <span class="o">=</span> <span class="mi">100</span><span class="p">),</span>
-    <span class="nv">@Transition</span><span class="p">(</span><span class="n">on</span> <span class="o">=</span> <span class="s">&quot;*&quot;</span><span class="p">,</span> <span class="n">in</span> <span class="o">=</span> <span class="n">PAUSED</span><span class="p">,</span> <span class="n">weight</span> <span class="o">=</span> <span class="mi">100</span><span class="p">)</span>
-<span class="p">})</span>
-<span class="n">public</span> <span class="n">void</span> <span class="n">error</span><span class="p">(</span><span class="n">Event</span> <span class="n">event</span><span class="p">)</span> <span class="p">{</span>
-    <span class="n">System</span><span class="o">.</span><span class="n">out</span><span class="o">.</span><span class="n">println</span><span class="p">(</span><span class="s">&quot;Cannot &#39;&quot;</span> <span class="o">+</span> <span class="n">event</span><span class="o">.</span><span class="n">getId</span><span class="p">()</span> <span class="o">+</span> <span class="s">&quot;&#39; at this time&quot;</span><span class="p">);</span>
-<span class="p">}</span>
+<div class="codehilite"><pre><span class="nd">@Transitions</span><span class="o">({</span>
+    <span class="nd">@Transition</span><span class="o">(</span><span class="n">on</span> <span class="o">=</span> <span class="s">&quot;*&quot;</span><span class="o">,</span> <span class="n">in</span> <span class="o">=</span> <span class="n">EMPTY</span><span class="o">,</span> <span class="n">weight</span> <span class="o">=</span> <span class="mi">100</span><span class="o">),</span>
+    <span class="nd">@Transition</span><span class="o">(</span><span class="n">on</span> <span class="o">=</span> <span class="s">&quot;*&quot;</span><span class="o">,</span> <span class="n">in</span> <span class="o">=</span> <span class="n">LOADED</span><span class="o">,</span> <span class="n">weight</span> <span class="o">=</span> <span class="mi">100</span><span class="o">),</span>
+    <span class="nd">@Transition</span><span class="o">(</span><span class="n">on</span> <span class="o">=</span> <span class="s">&quot;*&quot;</span><span class="o">,</span> <span class="n">in</span> <span class="o">=</span> <span class="n">PLAYING</span><span class="o">,</span> <span class="n">weight</span> <span class="o">=</span> <span class="mi">100</span><span class="o">),</span>
+    <span class="nd">@Transition</span><span class="o">(</span><span class="n">on</span> <span class="o">=</span> <span class="s">&quot;*&quot;</span><span class="o">,</span> <span class="n">in</span> <span class="o">=</span> <span class="n">PAUSED</span><span class="o">,</span> <span class="n">weight</span> <span class="o">=</span> <span class="mi">100</span><span class="o">)</span>
+<span class="o">})</span>
+<span class="kd">public</span> <span class="kt">void</span> <span class="nf">error</span><span class="o">(</span><span class="n">Event</span> <span class="n">event</span><span class="o">)</span> <span class="o">{</span>
+    <span class="n">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span><span class="s">&quot;Cannot &#39;&quot;</span> <span class="o">+</span> <span class="n">event</span><span class="o">.</span><span class="na">getId</span><span class="o">()</span> <span class="o">+</span> <span class="s">&quot;&#39; at this time&quot;</span><span class="o">);</span>
+<span class="o">}</span>
 </pre></div>
 
 
@@ -486,20 +486,20 @@
 
 
 <p>Now this seems to work very well, right? But what if we had 30 states instead of only 4? Then we would need 30 @Transition annotations on the error() method. Not good. Let's use state inheritance instead:</p>
-<div class="codehilite"><pre><span class="n">public</span> <span class="n">static</span> <span class="n">class</span> <span class="n">TapeDeckHandler</span> <span class="p">{</span>
-    <span class="nv">@State</span> <span class="n">public</span> <span class="n">static</span> <span class="n">final</span> <span class="n">String</span> <span class="n">ROOT</span> <span class="o">=</span> <span class="s">&quot;Root&quot;</span><span class="p">;</span>
-    <span class="nv">@State</span><span class="p">(</span><span class="n">ROOT</span><span class="p">)</span> <span class="n">public</span> <span class="n">static</span> <span class="n">final</span> <span class="n">String</span> <span class="n">EMPTY</span> <span class="o">=</span> <span class="s">&quot;Empty&quot;</span><span class="p">;</span>
-    <span class="nv">@State</span><span class="p">(</span><span class="n">ROOT</span><span class="p">)</span> <span class="n">public</span> <span class="n">static</span> <span class="n">final</span> <span class="n">String</span> <span class="n">LOADED</span> <span class="o">=</span> <span class="s">&quot;Loaded&quot;</span><span class="p">;</span>
-    <span class="nv">@State</span><span class="p">(</span><span class="n">ROOT</span><span class="p">)</span> <span class="n">public</span> <span class="n">static</span> <span class="n">final</span> <span class="n">String</span> <span class="n">PLAYING</span> <span class="o">=</span> <span class="s">&quot;Playing&quot;</span><span class="p">;</span>
-    <span class="nv">@State</span><span class="p">(</span><span class="n">ROOT</span><span class="p">)</span> <span class="n">public</span> <span class="n">static</span> <span class="n">final</span> <span class="n">String</span> <span class="n">PAUSED</span> <span class="o">=</span> <span class="s">&quot;Paused&quot;</span><span class="p">;</span>
+<div class="codehilite"><pre><span class="kd">public</span> <span class="kd">static</span> <span class="kd">class</span> <span class="nc">TapeDeckHandler</span> <span class="o">{</span>
+    <span class="nd">@State</span> <span class="kd">public</span> <span class="kd">static</span> <span class="kd">final</span> <span class="n">String</span> <span class="n">ROOT</span> <span class="o">=</span> <span class="s">&quot;Root&quot;</span><span class="o">;</span>
+    <span class="nd">@State</span><span class="o">(</span><span class="n">ROOT</span><span class="o">)</span> <span class="kd">public</span> <span class="kd">static</span> <span class="kd">final</span> <span class="n">String</span> <span class="n">EMPTY</span> <span class="o">=</span> <span class="s">&quot;Empty&quot;</span><span class="o">;</span>
+    <span class="nd">@State</span><span class="o">(</span><span class="n">ROOT</span><span class="o">)</span> <span class="kd">public</span> <span class="kd">static</span> <span class="kd">final</span> <span class="n">String</span> <span class="n">LOADED</span> <span class="o">=</span> <span class="s">&quot;Loaded&quot;</span><span class="o">;</span>
+    <span class="nd">@State</span><span class="o">(</span><span class="n">ROOT</span><span class="o">)</span> <span class="kd">public</span> <span class="kd">static</span> <span class="kd">final</span> <span class="n">String</span> <span class="n">PLAYING</span> <span class="o">=</span> <span class="s">&quot;Playing&quot;</span><span class="o">;</span>
+    <span class="nd">@State</span><span class="o">(</span><span class="n">ROOT</span><span class="o">)</span> <span class="kd">public</span> <span class="kd">static</span> <span class="kd">final</span> <span class="n">String</span> <span class="n">PAUSED</span> <span class="o">=</span> <span class="s">&quot;Paused&quot;</span><span class="o">;</span>
 
     <span class="o">...</span>
 
-    <span class="nv">@Transition</span><span class="p">(</span><span class="n">on</span> <span class="o">=</span> <span class="s">&quot;*&quot;</span><span class="p">,</span> <span class="n">in</span> <span class="o">=</span> <span class="n">ROOT</span><span class="p">)</span>
-    <span class="n">public</span> <span class="n">void</span> <span class="n">error</span><span class="p">(</span><span class="n">Event</span> <span class="n">event</span><span class="p">)</span> <span class="p">{</span>
-        <span class="n">System</span><span class="o">.</span><span class="n">out</span><span class="o">.</span><span class="n">println</span><span class="p">(</span><span class="s">&quot;Cannot &#39;&quot;</span> <span class="o">+</span> <span class="n">event</span><span class="o">.</span><span class="n">getId</span><span class="p">()</span> <span class="o">+</span> <span class="s">&quot;&#39; at this time&quot;</span><span class="p">);</span>
-    <span class="p">}</span>
-<span class="p">}</span>
+    <span class="nd">@Transition</span><span class="o">(</span><span class="n">on</span> <span class="o">=</span> <span class="s">&quot;*&quot;</span><span class="o">,</span> <span class="n">in</span> <span class="o">=</span> <span class="n">ROOT</span><span class="o">)</span>
+    <span class="kd">public</span> <span class="kt">void</span> <span class="nf">error</span><span class="o">(</span><span class="n">Event</span> <span class="n">event</span><span class="o">)</span> <span class="o">{</span>
+        <span class="n">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span><span class="s">&quot;Cannot &#39;&quot;</span> <span class="o">+</span> <span class="n">event</span><span class="o">.</span><span class="na">getId</span><span class="o">()</span> <span class="o">+</span> <span class="s">&quot;&#39; at this time&quot;</span><span class="o">);</span>
+    <span class="o">}</span>
+<span class="o">}</span>
 </pre></div>
 
 
@@ -533,36 +533,36 @@
 
 <p>The complete code for the TapeDeckServer described in this section is available in the org.apache.mina.example.tapedeck package in the mina-example module in the Subversion repository. The code uses a MINA ProtocolCodecFilter to convert bytes from/to Command objects. There is one Command implementation for each type of request the server recognizes. We will not describe the codec implementation here in any detail.</p>
 <p>Now, let's have a look at how this server works. The important class which implements the state machine is the TapeDeckServer class. The first thing we do is to define the states:</p>
-<div class="codehilite"><pre><span class="nv">@State</span> <span class="n">public</span> <span class="n">static</span> <span class="n">final</span> <span class="n">String</span> <span class="n">ROOT</span> <span class="o">=</span> <span class="s">&quot;Root&quot;</span><span class="p">;</span>
-<span class="nv">@State</span><span class="p">(</span><span class="n">ROOT</span><span class="p">)</span> <span class="n">public</span> <span class="n">static</span> <span class="n">final</span> <span class="n">String</span> <span class="n">EMPTY</span> <span class="o">=</span> <span class="s">&quot;Empty&quot;</span><span class="p">;</span>
-<span class="nv">@State</span><span class="p">(</span><span class="n">ROOT</span><span class="p">)</span> <span class="n">public</span> <span class="n">static</span> <span class="n">final</span> <span class="n">String</span> <span class="n">LOADED</span> <span class="o">=</span> <span class="s">&quot;Loaded&quot;</span><span class="p">;</span>
-<span class="nv">@State</span><span class="p">(</span><span class="n">ROOT</span><span class="p">)</span> <span class="n">public</span> <span class="n">static</span> <span class="n">final</span> <span class="n">String</span> <span class="n">PLAYING</span> <span class="o">=</span> <span class="s">&quot;Playing&quot;</span><span class="p">;</span>
-<span class="nv">@State</span><span class="p">(</span><span class="n">ROOT</span><span class="p">)</span> <span class="n">public</span> <span class="n">static</span> <span class="n">final</span> <span class="n">String</span> <span class="n">PAUSED</span> <span class="o">=</span> <span class="s">&quot;Paused&quot;</span><span class="p">;</span>
+<div class="codehilite"><pre><span class="nd">@State</span> <span class="kd">public</span> <span class="kd">static</span> <span class="kd">final</span> <span class="n">String</span> <span class="n">ROOT</span> <span class="o">=</span> <span class="s">&quot;Root&quot;</span><span class="o">;</span>
+<span class="nd">@State</span><span class="o">(</span><span class="n">ROOT</span><span class="o">)</span> <span class="kd">public</span> <span class="kd">static</span> <span class="kd">final</span> <span class="n">String</span> <span class="n">EMPTY</span> <span class="o">=</span> <span class="s">&quot;Empty&quot;</span><span class="o">;</span>
+<span class="nd">@State</span><span class="o">(</span><span class="n">ROOT</span><span class="o">)</span> <span class="kd">public</span> <span class="kd">static</span> <span class="kd">final</span> <span class="n">String</span> <span class="n">LOADED</span> <span class="o">=</span> <span class="s">&quot;Loaded&quot;</span><span class="o">;</span>
+<span class="nd">@State</span><span class="o">(</span><span class="n">ROOT</span><span class="o">)</span> <span class="kd">public</span> <span class="kd">static</span> <span class="kd">final</span> <span class="n">String</span> <span class="n">PLAYING</span> <span class="o">=</span> <span class="s">&quot;Playing&quot;</span><span class="o">;</span>
+<span class="nd">@State</span><span class="o">(</span><span class="n">ROOT</span><span class="o">)</span> <span class="kd">public</span> <span class="kd">static</span> <span class="kd">final</span> <span class="n">String</span> <span class="n">PAUSED</span> <span class="o">=</span> <span class="s">&quot;Paused&quot;</span><span class="o">;</span>
 </pre></div>
 
 
 <p>Nothing new there. However, the methods which handle the events now look different. Let's look at the playTape method:</p>
-<div class="codehilite"><pre><span class="nv">@IoHandlerTransitions</span><span class="p">({</span>
-    <span class="nv">@IoHandlerTransition</span><span class="p">(</span><span class="n">on</span> <span class="o">=</span> <span class="n">MESSAGE_RECEIVED</span><span class="p">,</span> <span class="n">in</span> <span class="o">=</span> <span class="n">LOADED</span><span class="p">,</span> <span class="k">next</span> <span class="o">=</span> <span class="n">PLAYING</span><span class="p">),</span>
-    <span class="nv">@IoHandlerTransition</span><span class="p">(</span><span class="n">on</span> <span class="o">=</span> <span class="n">MESSAGE_RECEIVED</span><span class="p">,</span> <span class="n">in</span> <span class="o">=</span> <span class="n">PAUSED</span><span class="p">,</span> <span class="k">next</span> <span class="o">=</span> <span class="n">PLAYING</span><span class="p">)</span>
-<span class="p">})</span>
-<span class="n">public</span> <span class="n">void</span> <span class="n">playTape</span><span class="p">(</span><span class="n">TapeDeckContext</span> <span class="n">context</span><span class="p">,</span> <span class="n">IoSession</span> <span class="n">session</span><span class="p">,</span> <span class="n">PlayCommand</span> <span class="n">cmd</span><span class="p">)</span> <span class="p">{</span>
-    <span class="n">session</span><span class="o">.</span><span class="nb">write</span><span class="p">(</span><span class="s">&quot;+ Playing \&quot;&quot;</span> <span class="o">+</span> <span class="n">context</span><span class="o">.</span><span class="n">tapeName</span> <span class="o">+</span> <span class="s">&quot;\&quot;&quot;</span><span class="p">);</span>
-<span class="p">}</span>
+<div class="codehilite"><pre><span class="nd">@IoHandlerTransitions</span><span class="o">({</span>
+    <span class="nd">@IoHandlerTransition</span><span class="o">(</span><span class="n">on</span> <span class="o">=</span> <span class="n">MESSAGE_RECEIVED</span><span class="o">,</span> <span class="n">in</span> <span class="o">=</span> <span class="n">LOADED</span><span class="o">,</span> <span class="n">next</span> <span class="o">=</span> <span class="n">PLAYING</span><span class="o">),</span>
+    <span class="nd">@IoHandlerTransition</span><span class="o">(</span><span class="n">on</span> <span class="o">=</span> <span class="n">MESSAGE_RECEIVED</span><span class="o">,</span> <span class="n">in</span> <span class="o">=</span> <span class="n">PAUSED</span><span class="o">,</span> <span class="n">next</span> <span class="o">=</span> <span class="n">PLAYING</span><span class="o">)</span>
+<span class="o">})</span>
+<span class="kd">public</span> <span class="kt">void</span> <span class="nf">playTape</span><span class="o">(</span><span class="n">TapeDeckContext</span> <span class="n">context</span><span class="o">,</span> <span class="n">IoSession</span> <span class="n">session</span><span class="o">,</span> <span class="n">PlayCommand</span> <span class="n">cmd</span><span class="o">)</span> <span class="o">{</span>
+    <span class="n">session</span><span class="o">.</span><span class="na">write</span><span class="o">(</span><span class="s">&quot;+ Playing \&quot;&quot;</span> <span class="o">+</span> <span class="n">context</span><span class="o">.</span><span class="na">tapeName</span> <span class="o">+</span> <span class="s">&quot;\&quot;&quot;</span><span class="o">);</span>
+<span class="o">}</span>
 </pre></div>
 
 
 <p>This code doesn't use the general @Transition and @Transitions annotations used previously but rather the MINA specific @IoHandlerTransition and @IoHandlerTransitions annotations. This are preferred when creating state machines for MINA's IoHandler interface as they let you use a Java enum for the event ids instead of strings as we used before. There are also corresponding annotations for MINA's IoFilter interface.</p>
 <p>We're now using MESSAGE_RECEIVED instead of "play" for the event name (the on attribute in @IoHandlerTransition). This constant is defined in org.apache.mina.statemachine.event.IoHandlerEvents and has the value "messageReceived" which of course corresponds to the messageReceived() method in MINA's IoHandler interface. Thanks to Java5's static imports we don't have to write out the name of the class holding the constant. We just need to put the</p>
-<div class="codehilite"><pre><span class="nb">import</span> <span class="n">static</span> <span class="n">org</span><span class="o">.</span><span class="n">apache</span><span class="o">.</span><span class="n">mina</span><span class="o">.</span><span class="n">statemachine</span><span class="o">.</span><span class="n">event</span><span class="o">.</span><span class="n">IoHandlerEvents</span><span class="o">.*</span><span class="p">;</span>
+<div class="codehilite"><pre><span class="kn">import</span> <span class="nn">static</span> <span class="n">org</span><span class="o">.</span><span class="na">apache</span><span class="o">.</span><span class="na">mina</span><span class="o">.</span><span class="na">statemachine</span><span class="o">.</span><span class="na">event</span><span class="o">.</span><span class="na">IoHandlerEvents</span><span class="o">.*;</span>
 </pre></div>
 
 
 <p>statement in the imports section.</p>
 <p>Another thing that has changed is that we're using a custom StateContext implementation, TapeDeckContext. This class is used to keep track of the name of the current tape:</p>
-<div class="codehilite"><pre><span class="n">static</span> <span class="n">class</span> <span class="n">TapeDeckContext</span> <span class="n">extends</span> <span class="n">AbstractStateContext</span> <span class="p">{</span>
-    <span class="n">public</span> <span class="n">String</span> <span class="n">tapeName</span><span class="p">;</span>
-<span class="p">}</span>
+<div class="codehilite"><pre><span class="kd">static</span> <span class="kd">class</span> <span class="nc">TapeDeckContext</span> <span class="kd">extends</span> <span class="n">AbstractStateContext</span> <span class="o">{</span>
+    <span class="kd">public</span> <span class="n">String</span> <span class="n">tapeName</span><span class="o">;</span>
+<span class="o">}</span>
 </pre></div>
 
 
@@ -572,41 +572,41 @@
 </DIV></p>

[... 133 lines stripped ...]