View Source

{color:#ff0033}{*}Warning{*}{color}

{color:#ff0000}{_}This, by no stretch of the imagination, is meant to control life weaponery, or even machinery for that matter... this is meant as a training exercise ONLY\!_{color}

h2. CEP Example, a Missile Launch Control


h3. Technical Complexity

Medium

h3. Purpose

* Allow the triggering of an outbound event, when receiving multiple synchronous inbound events.
* Provide a sample of an CEP processing, where the interrellation of multiple events is what is of business relevance, and not a single event.

h3. Situation

We've all seen the war movies (or end of the world movies...) where you have two soldiers that have to secure the launch, and press a button at the same time  for a missile launch to occur. We will take a look at how this could be done here, using IEP.
* The soldiers receive the order to launch the missile
** Key A, Key B and the fire button have to be pressed at the same time (within a span of 1 second).
** As a consequence, a file is written with the fire order.
* This could also be used as a mean to detect conflicting events that should not happen at the same time, or that should respect black out periods.

h3.


h3. Design

* We need capture the inbound stream, and keep the events that just occurred in the last second.
** For simplicity's sake, we will consider that only one event of each type can happen at any single second.
* When the events are captured, we will do a union in the key streams, and if we have more than 1 key, we will trigger that the security criteria has been observed.
* With the security criteria and the fire button pressed, we will send the order message to launch the missile.

h3. IEP Constructs Used


h4. Process Flow
\\ !AnnotatedProcess.PNG|align=center!
 
//
\\

h5. NOTES:

* The inbound streams are routed through a time based window of 1 second.

* The security check is in green
* All blue boxes are not necessary for the process to work. But they do provide valuable debugging information.
* The authorized fire is a check that
** the count(turnedkey)>=2 and that the fire=1
* We only take new authorization to be placed in the output stream

h4.

[Sample Files|http://mediacast.sun.com/users/Serge_Blais/media/CEPSample_MissileControl|Source code, as Netbeans Projects (iep and CA)]

h3. Example Limitations

* This is a exercise only....
* The first run may not work, as the service assembly needs to be loaded, the 1 second criteria may not be met.
** Run it a second time.
** If it still doesn't work, you may need to increase the time window, rebuild and redeploy.
* To test it, you will need to use the test at the project level. Running the tests one at a time, is just not fast enough, and will never trigger the outbound event (unless your name is [lucky luke|http://en.wikipedia.org/wiki/Lucky_Luke]...)

The individuals who post here are part of the extended Sun Microsystems community and they might not be employed or in any way formally affiliated with Sun Microsystems. The opinions expressed here are their own, are not necessarily reviewed in advance by anyone but the individual authors, and neither Sun nor any other party necessarily agrees with them.

Copyright 1994-2009 Sun Microsystems, Inc.
Powered by Atlassian Confluence
Sun Guidelines on Public Discourse Privacy Policy Terms of Use Trademarks Site Map Employment Investor Relations Contact