<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Marco on CEP</title>
	<atom:link href="http://rulecore.com/CEPblog/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://rulecore.com/CEPblog</link>
	<description>Marco writes about Complex Event Processing</description>
	<lastBuildDate>Tue, 07 Sep 2010 10:53:27 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Reakt White Paper</title>
		<link>http://rulecore.com/CEPblog/?p=563</link>
		<comments>http://rulecore.com/CEPblog/?p=563#comments</comments>
		<pubDate>Mon, 06 Sep 2010 10:04:30 +0000</pubDate>
		<dc:creator>Marco</dc:creator>
				<category><![CDATA[Complex Event Processing]]></category>

		<guid isPermaLink="false">http://rulecore.com/CEPblog/?p=563</guid>
		<description><![CDATA[I&#160;have been writing on a small white paper on our Reakt language. There&#8217;s a first draft posted on this blog a while ago and here&#8217;s a second draft. Comments are most welcome. &#160; &#160; Reakt&#8482; &#8211; The ruleCore CEP language A White Paper from ruleCore DRAFT rev2 Introduction The Rulecore CEP Language &#8211; Reakt! &#8211; [...]]]></description>
			<content:encoded><![CDATA[<div style="text-align: center;" class="google_header" id="google_header">
<p style="font-family: Garamond; text-align: left;">I&nbsp;have been writing on a small white paper on our Reakt language. There&#8217;s a first draft posted on this blog a while ago and here&#8217;s a second draft. Comments are most welcome.</p>
<p style="font-family: Garamond; text-align: left;">&nbsp;</p>
<p style="font-family: Garamond; text-align: left;">&nbsp;</p>
<p style="font-family: Garamond;"><span style="font-size: medium;"><strong> Reakt&trade; &#8211; The  ruleCore CEP language </strong></span></p>
<p>A White Paper from ruleCore  <span style="color: rgb(153, 0, 0); font-size: large;"><strong>DRAFT</strong></span><span style="color: rgb(153, 0, 0);"><strong> </strong><sup><strong>rev2</strong></sup></span><span style="color: rgb(153, 0, 0); font-size: large;"><strong>  </strong></span></div>
<h2>Introduction</h2>
<p>The Rulecore CEP Language &#8211; Reakt! &#8211; When you need to react  immediately.  Reakt is a language for complex event processing, or CEP for short.  It is designed to provide a powerful and productive tool for developers,  allowing them to quickly create solutions for detecting critical business situations in real-time.  Reakt is not a traditional programming language. Reakt is a business  situation description language. By using a declarative approach it  allows the developer to concentrate on <em>what</em><span style="font-style: italic;"> </span>kind of situations to detect and not<em> how  </em>  The design goal of Reakt is to provide a way for organisations to  react immediately to critical situations. It achieves this goal by  finding related events from streams of inbound events. What events a  critical situation consists of, and how the events are related, are  defined by the user using Reakt. Reakt allows the user to specify  conditions and temporal relationships which must hold in order for the  events to be considered a noteworthy situation. When the situation is  detected by Reakt, an user defined real-time report is created which  provides actionable information about the situation. Allowing the enterprise to react immediately.  This short white paper gives an informal description of the language  and explains the different language elements using examples instead of  formal definitions.</p>
<h3>Overview</h3>
<p>Rulecore Reakt is a small domain specific complex event processing  language designed for detecting situations by observing streams of  events. An event is a description of something that happens. For example &#8216;engine started&#8217;, &#8216;order created&#8217;, &#8216;invoice sent&#8217; or other types of events which are relevant to your business. The events originate normally from your internal business systems, from your suppliers or other partners. You can also get events from public data sources like Facebook, Twitter or events extracted from news feeds or weather and traffic data feeds.  A situation is a formal description of a combination, a pattern,  of events as they happen over time along with optional restrictions  among the events. A simple example of situations that you might want to  detect:</p>
<p style="margin-left: 40px;">&quot;A vehicle has crossed River Thames in London more than 10  times during the last three hours<em>&quot; </em></p>
<p><em>or </em></p>
<p style="margin-left: 40px;"><em>&quot;</em><em>ParcelDelivery</em> event came before <em>Order</em> Event unless delivery is of type <em>priority one</em><em>&quot;</em></p>
<p>Main Reakt language features:</p>
<ul>
<li><strong>Continuous Evaluation</strong> &#8211; Designed to operate on live streams  of events as they happen.</li>
<li><strong>Declarative</strong> &#8211; Rules and other items are specified using a  high-level declarative approach.</li>
<li><strong>Modular</strong> &#8211; Rules are defined using modular and re-usable  building blocks.</li>
<li><strong>Temporal</strong> &#8211; Handling of time is an integral part of Reakt.  Timing restrictions and other temporal conditions can be stated using a  number of declarations.</li>
<li><strong>Location Aware</strong> &#8211; Reakt includes built in support to  understand location information and other geographical objects such as  zones.</li>
<li><strong>Implementation Independent &#8211; </strong>The elements of Reakt are  defined using standard XML and are implementation independent. Different  implementations can be created in order to provide specialized  execution environments.</li>
<li><strong>Automatic Life Cycle Management</strong> &#8211; Rule instances are created  and deleted automatically in response to events. Rule instances are  analyzed and deleted if their situation is determined to be  undetectable.</li>
<li><strong>Dynamic Context Management</strong> &#8211; Each rule instance maintains its  own virtual view into the streams of inbound events. The view provides a  window into the incoming event streams in order to create a dynamic  context for rule evaluation.</li>
<li><strong>Separation of Concerns</strong> &#8211; Reakt uses reusable blocks for;
<ul>
<li>Selection of events from the inbound stream</li>
<li>Rule life cycle management</li>
<li>Situation definition</li>
<li>Rule trigger reporting</li>
</ul>
</li>
</ul>
<p>The design goals of Reakt is to provide a language which allows the  user to describe complex situations consisting of multiple events with  non trivial temporal and geospatial relationships. The language is  declarative. Lacking any procedural elements provides a base for formal  verification and automated optimization and analysis of the language.  <strong>Machine Friendly</strong>. A design assumption made early in the language design was that it is  likely that computer systems will use Reakt to create and modify rules more  frequently than humans. The rate at which new rules need to be created  and old ones modified is assumed to be high. Thus the language was  designed to be easily understandable by machines and at the same time  being reasonably human readable for system developers.  <strong>Friendly XML.</strong> The current version of Reakt uses XML for its syntax. XML was chosen  to take advantage of existing knowledge among developers, known standards and existing tools for generating and  parsing. It would also be possible to create alternative syntaxes for  Reakt. For example to create a more compact human friendly  representation for business users.  <strong>EDA&nbsp;Building block. </strong>The Reakt language was designed to support execution environments  which fits into an architectural style called<em> Event Driven  Architecture (EDA).</em> In order be a natural building block in an EDA,  the ruleCore Reakt language and its supporting execution environment,  the ruleCore CEP Server, was designed to be completely event driven.  This purely event driven approach allows all systems in a distributed  messaging architecture to integrate with ruleCore using simple events as  their only communication mechanism.</p>
<h3>The System Information Model</h3>
<p>The System Information Model, or SIM for short, is both the name of  the information model used by ruleCore CEP Server and the name  of the run-time data structure modeled after the familiar DOM model,  commonly used to represent information originating from XML. The SIM&nbsp;contains all information  about different Reakt items such as rules, situations and other types of run-time information.  The SIM is  part of the ruleCore CEP Server implementation and not the language  definition. But as all the language elements are executed  against the SIM, it is described here briefly. Different implementations  can implement varying information models. The appearance of the SIM&nbsp;can also vary&nbsp; in ruleCore CEP&nbsp;Server depending on which dynamically loadable modules are present in the system.  The SIM is used for various purposes, for example:</p>
<ul>
<li><strong>Listing available definitions</strong> &#8211; All definitions of items such  as rules, views, zones, entities, situations and actions can be found  in the SIM. Definitions are created using the systems events, for  example <a href="../../../../../../support/wiki/index.php?title=AddRuleDef" title="AddRuleDef">AddRuleDef</a>,  <a href="../../../../../../support/wiki/index.php?title=AddSituationDef" title="AddSituationDef">AddSituationDef</a> and <a href="../../../../../../support/wiki/index.php?title=AddActionDef" title="AddActionDef">AddActionDef</a>.</li>
<li><strong>Listing user defined events</strong> &#8211; Before an event can be sent  into ruleCore CEP Server, it must be defined using the <a href="../../../../../../support/wiki/index.php?title=AddEventDef" title="AddEventDef">AddEventDef</a> system event. The SIM contains all user defined events.</li>
<li><strong>List of rule instances</strong> &#8211; When a rule instance is created,  it&#8217;s state and internal data structures can be monitored by querying the  SIM. The ruleCore CEP Server provides a query mechanism using XPath.  But other implementations might query the SIM using other methods.</li>
<li><strong>Monitoring situation progress</strong> &#8211; As a situation develops, its  progress can be monitored by querying the SIM.</li>
<li><strong>Examine view contents</strong> &#8211; Each rule instance is executed in an  unique context of events called the event stream view. The view contains  a window into the inbound stream of events and contains only  semantically related events.</li>
<li><strong>Referencing items</strong> &#8211; When an item such as a rule needs to  reference other items it is done using references through the SIM.</li>
<li><strong>Component Specific Data</strong> &#8211; Each plug-in component that extends  the engine creates an entry in the SIM and may add any component  specific information.</li>
</ul>
<p>The SIM consists internally of dynamic data structures which are  updated as needed when the internal state of the ruleCore CEP Server  changes in response to inbound events. These data structures have an  external representation which is the user&#8217;s view of the SIM.  The external representation of the SIM can be treated as a DOM  document which can be queried using XPath and transformed using XSLT.  XPath queries can be executed against the SIM using the <a href="../../../../../../support/wiki/index.php?title=SysInfoQuery" title="SysInfoQuery">SysInfoQuery</a> system event.  If is also useful to note that the ruleCore CEP Server uses events  for all tasks. Special pre-defined system events are used to create  rules and other items in ruleCore CEP Server in addition to monitor the  run-time state of the rule evaluation.</p>
<h2><span class="mw-headline">Structure of a Rule</span></h2>
<p>The main language element in Reakt is the rule. Reakt uses a class of  rules called <em>reactive rules</em> to provide its situation detection  capabilities. Reactive rules should not to be confused with production  rules or other types of rules which must be explicitly evaluated. A rule  in Reakt is never explicitly evaluated, its evaluation is  automatically managed by the execution environment in response to  inbound events.  A rule consists of a number of elements, the main ones being:</p>
<ul>
<li><strong>Initialization directives </strong>- Specifies which events can lead  to the creation of a rule instance</li>
<li><strong>Termination directives</strong> &#8211; Specifies what causes a rule  instance to be deleted.</li>
<li><strong>The rule level</strong> &#8211; Specifies on what level in the rule  hierarchy instances should be created.</li>
<li><strong>Trigger Directives</strong> &#8211; Controls how and when to report Rule  triggering.<strong>  </strong></li>
<li><strong>The View</strong> &#8211; A reference to a <a href="../../../../../../support/wiki/index.php?title=EventStreamView" title="EventStreamView"><strong>view</strong></a>,  providing execution context for the rule.</li>
<li><strong>The Situation</strong> &#8211; A reference to a <a href="../../../../../../support/wiki/index.php?title=Situation_Detection" title="Situation&lt;br &gt;&lt;/a&gt;&lt;br &gt;&lt;/a&gt;&lt;br &gt;&lt;/a&gt;&lt;br &gt;&lt;/a&gt;     Detection"><strong>situation</strong></a> to track and detect situations.</li>
<li><strong>The Action</strong> &#8211; A reference to an <a href="../../../../../../support/wiki/index.php?title=Action" title="Action"><strong>action</strong></a>,  which will generate an event when
<ul>
<li>the situation is detected, or</li>
<li>if the situation is determined to be undetectable.</li>
</ul>
</li>
</ul>
<h3>General Rule Attributes</h3>
<p>Each rule has a name and a attribute which can be used limit the  number of rule instances that can be created of a particular rule. A  common usage of the limit is to create a singleton rule, of which only  one single instance can exist.  Rules at every level can publish their trigger events externally so  that they are visible outside of the ruleCore CEP&nbsp;Server.  All rule declarations includes a level specification. Every rule instance is  created on a specific level in a hierarchy of rules. Level zero is the  level on which inbound events arrive. Thus the lowest level for a rule  is 1 (one). A rule will only see events from a level directly below it.  For example, three levels of rules where the rule at level one sees  the inbound events:</p>
<p style="font-family: Courier New; margin-left: 40px;"><span style="font-size: x-small;"><span style="color: rgb(0, 0, 0);">&lt;Rule name=&quot;New  Location&quot; limit=&quot;1000&quot; level=&quot;1&quot;&gt; &#8230; &lt;/Rule&gt;  </span></span></p>
<p style="font-family: Courier New; margin-left: 40px;"><span style="font-size: x-small;"><span style="color: rgb(0, 0, 0);">&lt;Rule name=&quot;Zone  Entry&quot; limit=&quot;1000&quot; level=&quot;2&quot;&gt; &#8230; &lt;/Rule&gt;  </span><span style="color: rgb(0, 0, 0);">&lt;Rule name=&quot;Zone Exit&quot; limit=&quot;1000&quot;  level=&quot;2&quot;&gt; &#8230; &lt;/Rule&gt; </span>  </span></p>
<p style="font-family: Courier New; margin-left: 40px;"><span style="font-size: x-small;"><span style="color: rgb(0, 0, 0);">&lt;Rule name=&quot;Zone  Visit&quot; limit=&quot;1000&quot; level=&quot;3&quot;&gt; &#8230; &lt;/Rule&gt;  </span></span></p>
<p style="font-family: Courier New;">&nbsp;</p>
<h3>Rule Life Cycle Management</h3>
<p>Rule instances are automatically created and deleted based on  directives in the rule declaration section.  <strong>Create</strong>. The &lt;Initialize&gt; declaration controls when a new rule instance  can be created. All rule instances are created in response to events.  The &lt;Initialize&gt; section lists those events which can lead to new  rule instances being created.  <span style="font-family: verdana;">Create a rule instance when an event of type </span><em>GPSPosition</em><span style="font-family: verdana;"> arrives.</span>  <span style="font-size: x-small;"><span style="font-family: courier new; color: rgb(0, 0, 0);"> &lt;Initialize&gt;  &lt;Assert&gt;  &lt;Event&gt;  &lt;base:XPath&gt;sim:EventDef[@eventType=&quot;GPSPosition&quot;]&lt;/base:XPath&gt;  &lt;/Event&gt;  &lt;/Assert&gt;  &lt;/Initialize&gt; </span>  </span>  The &lt;Key&gt; declaration is the unique key for each rule instance.  The key consists of one or multiple properties of the init events.  <span style="font-size: x-small;"><span style="font-family: courier new; color: rgb(0, 0, 0);"> &lt;Key&gt;  &lt;Property name=&quot;Vehicle&quot;/&gt;  &lt;Property name=&quot;Zone&quot;/&gt;  &lt;/Key&gt;</span></span>  The key declaration allows for easy detection of situations<span style="font-style: italic;"> </span>per something. For example, the above key declaration creates rule instances which  are per vehicle and zone. So there would be rule instances created for  each unique combination of vehicle and zone.  Terminate. The &lt;Terminate&gt; section determines when a rule instance is  deleted. The &lt;Terminate&gt; section consists of a number of  directives which allows for creation of flexible termination strategies.  A rule could for example be terminated when it has triggered three  times, when it&#8217;s view is empty, on a specific date and time or when a  particular event arrives.  <span style="font-size: x-small;"><span style="font-family: courier new; color: rgb(0, 0, 0);"> &lt;Terminate&gt;  &lt;Triggered count=&quot;3&quot;/&gt; </span></span></p>
<p style="font-family: Courier New;"><span style="font-size: x-small;"><span style="color: rgb(0, 0, 0);"> &lt;ViewEmpty name=&quot;ZoneEntry&quot;/&gt;  </span></span></p>
<p style="font-family: Courier New;"><span style="font-size: x-small;"><span style="color: rgb(0, 0, 0);"> &lt;Time&gt;2010-01-31T00:00:00Z&lt;/Time&gt;</span></span><span style="font-size: x-small;"><span style="color: rgb(0, 0, 0);">  &lt;Assert&gt;  &lt;Event&gt;  &lt;base:XPath&gt;sim:EventDef[@eventType=&quot;Location&quot;]&lt;/base:XPath&gt;  &lt;/Event&gt;  &lt;/Assert&gt;  &lt;/Terminate&gt;</span></span></p>
<h2>Rule Triggering</h2>
<p>A rule may trigger when one of two things happen; the situation is<span style="font-style: italic;"> </span>detected or it is automatically  determined that the situation is<span style="font-style: italic;"> </span>undetectable<em> in the future. Depending on the terminate declarations a rule can fire  one or multiple times.</em>  <span style="font-size: x-small;"><span style="font-size: x-small;">  </span></span></p>
<p style="font-family: Courier New;"><span style="color: rgb(0, 0, 0); font-size: x-small;"> &lt;Trigger&gt;  &lt;SituationDetected/&gt;  </span><span style="color: rgb(0, 0, 0); font-size: x-small;"> &lt;UndetectableSituation/&gt;  </span><span style="color: rgb(0, 0, 0); font-size: x-small;"> &lt;/Trigger&gt;  </span></p>
<p style="font-family: Courier New;">&nbsp;</p>
<p>When a rule triggers, its action part is executed. The action part  creates an event and thus the visible result when a rule triggers is a  new event, created according to your specification.</p>
<h3>Trigger Reporting</h3>
<p>Related to rule triggering is the reporting of the rule triggering.  The triggering of the rule and reporting that triggering is separated in  two stages. Thus it is possible to postpone the report of a rule  triggering. For example, it is possible to report rule triggering, or  multiple triggerings, each minute or when the rule has triggered five  times or whichever comes first. It is also possible to limit the trigger  reports so that only a specified number of reports are created. The  most common case is to create rules whose triggering is reported only  once.  <span style="font-family: courier new; color: rgb(0, 0, 0); font-size: x-small;"> &lt;Report&gt;  </span></p>
<p style="font-family: Courier New;"><span style="color: rgb(0, 0, 0); font-size: x-small;"> &lt;Every trigCount=&quot;10&quot; timeframe=&quot;00:10:00&quot;&gt;  &lt;Max count=&quot;234&quot;/&gt;  &lt;AtTermination/&gt;</span></p>
<p style="font-family: Courier New;"><span style="color: rgb(0, 0, 0); font-size: x-small;"> &lt;/Report&gt;</span></p>
<h3>References</h3>
<p>The rule also contains a reference to the rule&#8217;s view, situation and  action. All references in Reakt are specified using XPath and executed  against the SIM.  The view reference contains a reference to a view declaration. The  view provides the context in which the rule is executed</p>
<p style="font-family: Courier New;"><span style="color: rgb(0, 0, 0); font-size: x-small;"> &lt;Views&gt;  &lt;ViewRef name=&quot;ZoneEntry&quot;&gt;  &lt;base:XPath&gt;sim:ViewDef[@name='ZoneEntry']&lt;/base:XPath&gt;  &lt;/ViewRef&gt;  &lt;/Views&gt;  </span></p>
<p style="font-family: Courier New;">&nbsp;</p>
<p style="font-family: Courier New;"><span style="font-family: Verdana;">The situation  reference contains a reference to the situation which is evaluated in  the context of the view.</span></p>
<p style="font-family: Courier New;"><span style="font-size: x-small;">  </span></p>
<p style="font-family: Courier New;"><span style="color: rgb(0, 0, 0); font-size: x-small;"> &lt;Situations&gt;  &lt;SituationRef name=&quot;ZoneEntry&quot;&gt;  &lt;base:XPath&gt;sim:SituationDef[@name=&quot;ZoneEntry&quot;]&lt;/base:XPath&gt;  &lt;/SituationRef&gt;  &lt;/Situations&gt;  </span></p>
<p style="font-family: Courier New;"><span style="font-family: Verdana;">The action  reference contains a reference to the action part which generates a new  event when the rule triggers.</span></p>
<p style="font-family: Courier New;"><span style="font-size: x-small;">  </span></p>
<p style="font-family: Courier New;"><span style="color: rgb(0, 0, 0); font-size: x-small;"> <span style="font-size: x-small;"> &lt;Actions&gt;  &lt;SituationDetected situationName=&quot;ZoneEntry&quot;&gt;  &lt;ActionRef name=&quot;ZoneEntry&quot;  eventVisibility=&quot;external&quot;&gt;  &lt;base:XPath&gt;sim:ActionDef[@name=&quot;ZoneEntry&quot;]&lt;/base:XPath&gt;  &lt;/ActionRef&gt;  &lt;/SituationDetected&gt;  &lt;/Actions&gt; </span>  </span></p>
<p style="font-family: Courier New;"><span style="font-size: x-small;">  </span></p>
<h2>Complete Rule Example</h2>
<p>Here is a complete example of a rule.<span style="font-size: x-small;">  </span>  <span style="font-size: x-small;">  </span></p>
<p style="font-family: Courier New;"><span style="font-size: x-small;"><span style="color: rgb(0, 0, 0);">&lt;Rule name=&quot;ZoneEntry&quot; limit=&quot;1000&quot; level=&quot;1&quot;&gt;  </span></span></p>
<p style="font-family: Courier New;"><span style="font-size: x-small;">  </span></p>
<p style="font-family: Courier New;"><span style="font-size: x-small;"> &lt;!&#8211; Create rule instance per Vehicle and Zone &#8211;&gt;  </span></p>
<p style="font-family: Courier New;"><span style="font-size: x-small;"><span style="color: rgb(0, 0, 0);"> &lt;Key&gt;  &lt;Property name=&quot;Vehicle&quot;/&gt;  &lt;Property name=&quot;Zone&quot;/&gt;  &lt;/Key&gt;</span></span><span style="font-size: x-small;">  </span></p>
<p style="font-family: Courier New;"><span style="font-size: x-small;">  </span></p>
<p style="font-family: Courier New;"><span style="font-size: x-small;"><span style="color: rgb(0, 0, 0);"> &lt;!&#8211; Create a rule instance then the Location  event arrives,  </span></span></p>
<p style="font-family: Courier New;"><span style="font-size: x-small;"><span style="color: rgb(0, 0, 0);"> if one does not exists per the key above  &#8211;&gt;  </span></span></p>
<p style="font-family: Courier New;"><span style="font-size: x-small;"><span style="color: rgb(0, 0, 0);"> &lt;Initialize&gt;  &lt;Assert&gt;  &lt;Event&gt;  &lt;XPath&gt;EventDef[@eventType=&quot;Location&quot;]&lt;/XPath&gt;  &lt;/Event&gt;  &lt;/Assert&gt;  &lt;/Initialize&gt;  </span></span></p>
<p style="font-family: Courier New;"><span style="font-size: x-small;">  </span></p>
<p style="font-family: Courier New;"><span style="font-size: x-small;"><span style="color: rgb(0, 0, 0);"> &lt;!&#8211; Delete rule instance when rule has  triggered 300 times, the view is  </span></span></p>
<p style="font-family: Courier New;"><span style="font-size: x-small;"><span style="color: rgb(0, 0, 0);"> empty of at the specified time or when the  Reset event arrives &#8211;&gt;  </span></span></p>
<p style="font-family: Courier New;"><span style="font-size: x-small;"><span style="color: rgb(0, 0, 0);"> &lt;Terminate&gt;  &lt;Triggered count=&quot;300&quot;/&gt; </span></span></p>
<p style="font-family: Courier New;"><span style="font-size: x-small;"><span style="color: rgb(0, 0, 0);"> &lt;ViewEmpty name=&quot;ZoneEntry&quot;/&gt;  </span></span></p>
<p style="font-family: Courier New;"><span style="font-size: x-small;"><span style="color: rgb(0, 0, 0);"> &lt;Time&gt;2010-01-31T00:00:00Z&lt;/Time&gt;</span></span></p>
<p style="font-family: Courier New;"><span style="font-size: x-small;"><span style="color: rgb(0, 0, 0);"> &lt;Assert&gt;  &lt;Event&gt;  &lt;XPath&gt;EventDef[@eventType=&quot;Reset&quot;]&lt;/XPath&gt;  &lt;/Event&gt;  &lt;/Assert&gt;  &lt;/Terminate&gt;</span></span></p>
<p style="font-family: Courier New;"><span style="font-size: x-small;">  </span></p>
<p style="font-family: Courier New;"><span style="font-size: x-small;"><span style="color: rgb(0, 0, 0);"> &lt;!&#8211; Report rule triggerings every 10th  triggering of every tenth minute  </span></span></p>
<p style="font-family: Courier New;"><span style="font-size: x-small;"><span style="color: rgb(0, 0, 0);"> or at rule termination, report a maximum of  234 triggerings &#8211;&gt;  </span></span></p>
<p style="font-family: Courier New;"><span style="font-size: x-small;"><span style="color: rgb(0, 0, 0);"> &lt;Report&gt;  </span></span></p>
<p style="font-family: Courier New;"><span style="font-size: x-small;"><span style="color: rgb(0, 0, 0);"> &lt;Every trigCount=&quot;10&quot;  timeframe=&quot;00:10:00&quot;&gt;  &lt;Max count=&quot;234&quot;/&gt;  &lt;AtTermination/&gt;  &lt;/Report&gt;  </span></span></p>
<p style="font-family: Courier New;"><span style="font-size: x-small;">  </span></p>
<p style="font-family: Courier New;"><span style="font-size: x-small;"><span style="color: rgb(0, 0, 0);"> &lt;!&#8211; Trigger rule when situation is detected  &#8211;&gt;  </span></span></p>
<p style="font-family: Courier New;"><span style="font-size: x-small;"><span style="color: rgb(0, 0, 0);"> &lt;Trigger&gt;  &lt;SituationDetected/&gt;  &lt;/Trigger&gt; </span></span><span style="font-size: x-small;">  </span><span style="font-size: x-small;">  </span></p>
<p style="font-family: Courier New;"><span style="font-size: x-small;"><span style="color: rgb(0, 0, 0);"> &lt;Views&gt;  &lt;ViewRef name=&quot;ZoneEntry&quot;&gt;  &lt;XPath&gt;ViewDef[@name='ZoneEntry']&lt;/XPath&gt;  &lt;/ViewRef&gt;  &lt;/Views&gt; </span></span><span style="font-size: x-small;">  </span></p>
<p style="font-family: Courier New;"><span style="font-size: x-small;"><span style="color: rgb(0, 0, 0);"> &lt;Situations&gt;  &lt;SituationRef name=&quot;ZoneEntry&quot;&gt;  &lt;XPath&gt;SituationDef[@name=&quot;ZoneEntry&quot;]&lt;/XPath&gt;  &lt;/SituationRef&gt;  &lt;/Situations&gt;</span></span></p>
<p style="font-family: Courier New;"><span style="font-size: x-small;"><span style="color: rgb(0, 0, 0);"> &lt;Actions&gt;  &lt;SituationDetected situationName=&quot;ZoneEntry&quot;&gt;  &lt;ActionRef name=&quot;ZoneEntry&quot;  eventVisibility=&quot;external&quot;&gt;  &lt;XPath&gt;ActionDef[@name=&quot;ZoneEntry&quot;]&lt;/XPath&gt;  &lt;/ActionRef&gt;  &lt;/SituationDetected&gt;  &lt;/Actions&gt;  </span></span></p>
<p style="font-family: Courier New;"><span style="font-size: x-small;">  </span></p>
<p style="font-family: Courier New;"><span style="font-size: x-small;"><span style="color: rgb(0, 0, 0);">&lt;/Rule&gt;</span></span></p>
<p><span style="font-size: x-small;">  </span></p>
<h3><span class="mw-headline">The View</span></h3>
<p>The rule declaration contains a reference to a view. The view  provides the context in which the rule is evaluated. The view keeps  related events together and selects only interesting events from the  inbound stream of events.  Each rule instance contains its own private view instance. The view  contains a collection of events. The view is kept updated based the  stream of inbound events. The view provides a dynamically changing  execution environment for the rule as each rule instance is executed in  the context of its view.  The view consists of a number of declarations, each specifying a  property of an event that must be true in order for the event to be  present in the view.  All these declarations are evaluated to determine which events are  present in the view of each rule instance.  Example of properties available:</p>
<ul>
<li>The <strong>type</strong> view property is used to include events into the  view only if they are of the specified type.</li>
<li>The <strong>maxage </strong>view property defines the maximum age for each  event in the view. You could for example use the age property to let  each rule instance see only events from the past 10 minutes.</li>
<li>The <strong>maxcount</strong> property defines the maximum number of events in  the view. You could for example use this property to limit the view to  contain only the last 100 received events.</li>
<li>The <strong>match</strong> property defines which event properties must match  in order for them to be included in the same view. You could for example  require that the property <em>CustomerID </em>matches on all events in  the view, thereby creating a view which contains events about the same  customer.</li>
<li>The <strong>assert</strong> property defines an XPath expression that must  evaluate to true for all instances of a specified event type. The assert  property could for example be used to compare a certain element in the  event body with a constant.</li>
</ul>
<p><span style="font-size: x-small;">  </span><span style="font-size: x-small;"><span style="font-family: 'Courier New';">&lt;ViewDef  name=&quot;ZoneEntry&quot;&gt;</span></span><span style="font-size: x-small;">  </span>  <span style="font-size: x-small;"><span style="font-family: 'Courier New';"> &lt;Properties&gt;</span></span><span style="font-size: x-small;">  </span>  <span style="font-size: x-small;"><span style="font-family: 'Courier New';"> &lt;!&#8211; All events in the view must be of types InsideZone or  OutsideZone &#8211;&gt;  </span></span>  <span style="font-size: x-small;"><span style="font-family: 'Courier New';"> &lt;Type&gt;</span></span>  <span style="font-size: x-small;"><span style="font-family: 'Courier New';"> &lt;Event&gt;</span></span>  <span style="font-size: x-small;"><span style="font-family: 'Courier New';"> &lt;XPath&gt;EventDef[@eventType=&quot;InsideZone&quot;]&lt;/XPath&gt;</span></span>  <span style="font-size: x-small;"><span style="font-family: 'Courier New';"> &lt;/Event&gt;</span></span>  <span style="font-size: x-small;"><span style="font-family: 'Courier New';"> &lt;Event&gt;</span></span>  <span style="font-size: x-small;"><span style="font-family: 'Courier New';"> &lt;XPath&gt;EventDef[@eventType=&quot;OutsideZone&quot;]&lt;/XPath&gt;</span></span>  <span style="font-size: x-small;"><span style="font-family: 'Courier New';"> &lt;/Event&gt;</span></span>  <span style="font-size: x-small;"><span style="font-family: 'Courier New';"> &lt;/Type&gt;</span></span>  <span style="font-size: x-small;">  </span>  <span style="font-size: x-small;"><span style="font-family: 'Courier New';"> &lt;!&#8211; All events in the view must be from the same vehicle &#8211;&gt;  </span></span>  <span style="font-size: x-small;"><span style="font-family: 'Courier New';"> &lt;Match name=&quot;vehicle&quot;&gt;</span></span>  <span style="font-size: x-small;"><span style="font-family: 'Courier New';"> &lt;Value&gt;</span></span>  <span style="font-size: x-small;"><span style="font-family: 'Courier New';"> &lt;Event&gt;</span></span>  <span style="font-size: x-small;"><span style="font-family: 'Courier New';"> &lt;XPath&gt;EventDef[@eventType=&quot;OutsideZone&quot;]&lt;/XPath&gt;</span></span>  <span style="font-size: x-small;"><span style="font-family: 'Courier New';"> &lt;/Event&gt;</span></span>  <span style="font-size: x-small;"><span style="font-family: 'Courier New';"> &lt;Property name=&quot;Vehicle&quot;/&gt;</span></span>  <span style="font-size: x-small;"><span style="font-family: 'Courier New';"> &lt;/Value&gt;</span></span>  <span style="font-size: x-small;"><span style="font-family: 'Courier New';"> &lt;Value&gt;</span></span>  <span style="font-size: x-small;"><span style="font-family: 'Courier New';"> &lt;Event&gt;</span></span>  <span style="font-size: x-small;"><span style="font-family: 'Courier New';"> &lt;XPath&gt;EventDef[@eventType=&quot;InsideZone&quot;]&lt;/XPath&gt;</span></span>  <span style="font-size: x-small;"><span style="font-family: 'Courier New';"> &lt;/Event&gt;</span></span>  <span style="font-size: x-small;"><span style="font-family: 'Courier New';"> &lt;Property name=&quot;Vehicle&quot;/&gt;</span></span>  <span style="font-size: x-small;"><span style="font-family: 'Courier New';"> &lt;/Value&gt;</span></span>  <span style="font-size: x-small;"><span style="font-family: 'Courier New';"> &lt;/Match&gt;</span></span>  <span style="font-size: x-small;">  </span>  <span style="font-size: x-small;"><span style="font-family: 'Courier New';"> &lt;!&#8211; All events in the view must be from the same zone &#8211;&gt;  </span></span>  <span style="font-size: x-small;"><span style="font-family: 'Courier New';"> &lt;Match name=&quot;zone&quot;&gt;</span></span>  <span style="font-size: x-small;"><span style="font-family: 'Courier New';"> &lt;Value&gt;</span></span>  <span style="font-size: x-small;"><span style="font-family: 'Courier New';"> &lt;Event&gt;</span></span>  <span style="font-size: x-small;"><span style="font-family: 'Courier New';"> &lt;XPath&gt;EventDef[@eventType=&quot;InsideZone&quot;]&lt;/XPath&gt;</span></span>  <span style="font-size: x-small;"><span style="font-family: 'Courier New';"> &lt;/Event&gt;</span></span>  <span style="font-size: x-small;"><span style="font-family: 'Courier New';"> &lt;Property name=&quot;Zone&quot;/&gt;</span></span>  <span style="font-size: x-small;"><span style="font-family: 'Courier New';"> &lt;/Value&gt;</span></span>  <span style="font-size: x-small;"><span style="font-family: 'Courier New';"> &lt;Value&gt;</span></span>  <span style="font-size: x-small;"><span style="font-family: 'Courier New';"> &lt;Event&gt;</span></span>  <span style="font-size: x-small;"><span style="font-family: 'Courier New';"> &lt;XPath&gt;EventDef[@eventType=&quot;OutsideZone&quot;]&lt;/XPath&gt;</span></span>  <span style="font-size: x-small;"><span style="font-family: 'Courier New';"> &lt;/Event&gt;</span></span>  <span style="font-size: x-small;"><span style="font-family: 'Courier New';"> &lt;Property name=&quot;Zone&quot;/&gt;</span></span>  <span style="font-size: x-small;"><span style="font-family: 'Courier New';"> &lt;/Value&gt;</span></span>  <span style="font-size: x-small;"><span style="font-family: 'Courier New';"> &lt;/Match&gt;</span></span>  <span style="font-size: x-small;">  </span>  <span style="font-size: x-small;"><span style="font-family: 'Courier New';"> &lt;!&#8211; Keep only the last 100 events in the view &#8211;&gt;  </span></span>  <span style="font-size: x-small;"><span style="font-family: 'Courier New';"> &lt;MaxCount&gt;100&lt;/MaxCount&gt;</span></span>  <span style="font-size: x-small;">  </span>  <span style="font-size: x-small;"><span style="font-family: 'Courier New';"> &lt;/Properties&gt;</span></span>  <span style="font-size: x-small;"><span style="font-family: 'Courier New';">&lt;/ViewDef&gt;</span></span>  <span style="font-size: x-small;">  </span></p>
<h3><span class="mw-headline">Situation</span></h3>
<p>A <em>situation</em> describes an interesting combination of multiple  events as they occur over time.  The situation detection capability of Reakt have the following  features.</p>
<ol>
<li><strong>Declarative</strong> &#8211; Complex situations are described using a high  level declarative approach, avoiding complex procedural solutions using  traditional programming languages.</li>
<li><strong>Temporal support</strong> &#8211; Support for describing temporal  relationships between events. Timing restrictions such as deadlines for  detection can easily be added.</li>
<li><strong>Extensible</strong> &#8211; The situation detector is designed to be  extended with new task specific detector nodes.</li>
<li><strong>Monitoring</strong> &#8211; The detector is designed to be monitored and  thus the progress of situation detection can easily be tracked.</li>
</ol>
<p>As a situation describes an interesting combination of multiple  events as they occur over time, it must start somewhere. A situation  starts developing when a specific <em>initiator event</em> occurs. This is  the first event in what could possibly be a fully developed situation  consisting of multiple events. This also means that a situation has an  exact point in time where is starts developing, namely the timestamp of  the initiator event.  The situation develops over time and can either be detected at some  point in time or automatically determined to be <a href="../../../../../../support/wiki/index.php?title=Undetectable_Situation" title="Undetectable&lt;br &gt;&lt;/a&gt;&lt;br &gt;&lt;/a&gt;&lt;br &gt;&lt;/a&gt;&lt;br &gt;&lt;/a&gt; Situation">undetectable</a>.  A situation can develop over long periods of time and consist of a  large number of contributing events. The ruleCore CEP Server provides a  persistent rule state allowing rule instances and their situations to  survive restarts and unexpected crashes.  The progress of a situation, as it develops, can be followed by  submitting a query event to the ruleCore CEP Server about the state of a  particular rule&#8217;s situation detector. The degree of completion of a  situation can be monitored to provide an early warning about a situation  which could possibly be detected soon.  For example, detect when a vehicle has been outside a zone for at  least five seconds:  <span style="font-size: x-small;"><span style="font-family: 'Courier New';">&lt;SituationDef  name=&quot;OutsideZone5s&quot;&gt;</span></span>  <span style="font-size: x-small;"><span style="font-family: 'Courier New';"> &lt;Detector&gt;</span></span>  <span style="font-size: x-small;"><span style="font-family: 'courier new';"> &lt;After timeframe=&quot;00:00:05&quot;&gt;</span></span>  <span style="font-size: x-small;"><span style="font-family: 'Courier New';"> &lt;Not&gt;</span></span>  <span style="font-size: x-small;"><span style="font-family: 'Courier New';"> &lt;EventPickup&gt;</span></span>  <span style="font-size: x-small;"><span style="font-family: 'Courier New';"> &lt;XPath&gt;Views/View[@default='true']/Events/Event[@eventType=&quot;InsideZone&quot;]&lt;XPath&gt;</span></span>  <span style="font-size: x-small;"><span style="font-family: 'Courier New';"> &lt;/EventPickup&gt;</span></span>  <span style="font-size: x-small;"><span style="font-family: 'Courier New';"> &lt;/Not&gt;</span></span>  <span style="font-size: x-small;"><span style="font-family: 'Courier New';"> &lt;/After&gt;</span></span>  <span style="font-size: x-small;"><span style="font-family: 'courier new';"> &lt;/Detector&gt;</span></span>  <span style="font-size: x-small;"><span style="font-family: 'Courier New';">&lt;/SituationDef&gt;</span></span>  The above situation example is detected when the innermost event  pickup does not pick up any events from the view five seconds after the  rule instance was created. If<span style="font-style: italic;"> </span>InsideZone<em> events have arrived into the view during those five seconds the  situation is not detected.</em>  A situation is defined using a tree with detector nodes. The  &lt;Detector&gt; node is the root of the situation detector. Each node  can be either true or false depending on its semantics.  One of the central detector nodes is the &lt;EventPickup&gt; node  which selects events from the view. It selects events by executing a  XPath query against the view. If the query returns any events from the  view, the &lt;EventPickup&gt; node becomes true.  The detector is evaluated each time it is possible that changes in  the view or temporal conditions in detector nodes can affect the state  of the detector.</p>
<h3><span class="mw-headline">Action</span></h3>
<p>Actions are executed as the last part of a rule&#8217;s evaluation in  response to a detected situation, or optionally when it is determined  that a partially detected situation can&#8217;t be detected at any point in  the future.  An action is used to create a new event. The new event is called the  reaction event and is used to notify external systems about a detected  situation. Different events can be created for a detected situation and  for undetectable situations.  The outbound event created by the action is created using a XSLT  stylesheet. The stylesheet is executed in the context of the rule and  can access all the events that contributed to the detection of the  situation. The stylesheet can also access the events present in the view  at the time the action is evaluated.</p>
<div><span style="font-size: x-small;"><span style="font-family: 'Courier New';">&lt;ActionDef  name=&quot;OutsideZone&quot;&gt;</span></span></div>
<div><span style="font-size: x-small;"><span style="font-family: 'Courier New';"> &lt;Event&gt;</span></span></div>
<div><span style="font-size: x-small;"><span style="font-family: 'Courier New';"> &lt;EventDef&gt;</span></span></div>
<div><span style="font-size: x-small;"><span style="font-family: 'Courier New';"> &lt;XPath&gt;EventDef[@eventType=&quot;OutsideZone&quot; and  @eventClass=&quot;user&quot;]&lt;/XPath&gt;</span></span></div>
<div><span style="font-size: x-small;"><span style="font-family: 'Courier New';"> &lt;/EventDef&gt;</span></span></div>
<div><span style="font-size: x-small;"><span style="font-family: 'Courier New';"> &lt;Body&gt;</span></span></div>
<div><span style="font-size: x-small;"><span style="font-family: 'Courier New';"> &lt;XsltBuilder&gt;</span></span></div>
<div><span style="font-size: x-small;"><span style="font-family: 'Courier New';"> &lt;Stylesheet&gt;&lt;![CDATA[</span></span></div>
<div><span style="font-size: x-small;"><span style="font-family: 'Courier New';"> &lt;xsl:stylesheet&gt;</span></span></div>
<div><span style="font-size: x-small;"><span style="font-family: 'Courier New';"> &lt;xsl:template match=&quot;child::*&quot;&gt;</span></span></div>
<div><span style="font-size: x-small;"><span style="font-family: 'Courier New';"> &lt;base:EventBody&gt;</span></span></div>
<div><span style="font-size: x-small;"><span style="font-family: 'Courier New';"> &lt;xsl:for-each  select=&quot;user:Views/user:View[@default='true']/user:Properties&quot;&gt;</span></span></div>
<div><span style="font-size: x-small;"><span style="font-family: 'Courier New';"> &lt;user:VehicleId&gt;&lt;xsl:value-of  select=&quot;descendant::user:MatchedValue[@name='vehicle']&quot;/&gt;&lt;/user:VehicleId&gt;</span></span></div>
<div><span style="font-size: x-small;"><span style="font-family: 'Courier New';"> &lt;user:ZoneId&gt;&lt;xsl:value-of  select=&quot;descendant::user:MatchedZone/child::text()&quot;/&gt;&lt;/user:ZoneId&gt;</span></span></div>
<div><span style="font-size: x-small;"><span style="font-family: 'Courier New';"> &lt;/xsl:for-each&gt;</span></span></div>
<div><span style="font-size: x-small;"><span style="font-family: 'Courier New';"> &lt;/base:EventBody&gt;</span></span></div>
<div><span style="font-size: x-small;"><span style="font-family: 'Courier New';"> &lt;/xsl:template&gt;</span></span></div>
<div><span style="font-size: x-small;"><span style="font-family: 'Courier New';"> &lt;/xsl:stylesheet&gt;]]&gt;  &lt;/Stylesheet&gt;</span></span></div>
<div><span style="font-size: x-small;"><span style="font-family: 'Courier New';"> &lt;/XsltBuilder&gt;</span></span></div>
<div><span style="font-size: x-small;"><span style="font-family: 'Courier New';"> &lt;/Body&gt;</span></span></div>
<div><span style="font-size: x-small;"><span style="font-family: 'Courier New';"> &lt;/Event&gt;</span></span></div>
<div><span style="font-size: x-small;"><span style="font-family: 'Courier New';">&lt;/ActionDef&gt;</span></span></div>
<p style="text-align: center;"><span style="font-size: smaller;"><strong>Reakt is a trademark of Rulecore KB of Sweden. Rulecore is a registered trademark of Rulecore KB&nbsp;of Sweden</strong></span><strong>  </strong></p>
<p class="addtoany_share_save_container">
    <a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?sitename=Marco%20on%20CEP&amp;siteurl=http%3A%2F%2Frulecore.com%2FCEPblog%2F&amp;linkname=Reakt%20White%20Paper&amp;linkurl=http%3A%2F%2Frulecore.com%2FCEPblog%2F%3Fp%3D563"><img src="http://rulecore.com/CEPblog/wp-content/plugins/add-to-any/share_save_120_16.png" width="120" height="16" alt="Share/Save/Bookmark"/></a>

	</p>]]></content:encoded>
			<wfw:commentRss>http://rulecore.com/CEPblog/?feed=rss2&amp;p=563</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>In The Future</title>
		<link>http://rulecore.com/CEPblog/?p=560</link>
		<comments>http://rulecore.com/CEPblog/?p=560#comments</comments>
		<pubDate>Thu, 26 Aug 2010 09:34:50 +0000</pubDate>
		<dc:creator>Marco</dc:creator>
				<category><![CDATA[Complex Event Processing]]></category>

		<guid isPermaLink="false">http://rulecore.com/CEPblog/?p=560</guid>
		<description><![CDATA[Just some quick thoughts of what I&#160;think will emerge in CEP&#160;in the next couple of years: A small tailor made language. Maybe looking something like Erlang or F#?&#160; A formally defined model specially developed for event processing, think of the relational model as comparison, which provides a solid foundation. Small light weight libraries which contains [...]]]></description>
			<content:encoded><![CDATA[<p>Just some quick thoughts of what I&nbsp;think will emerge in CEP&nbsp;in the next couple of years:</p>
<ul>
<li>A small tailor made language. Maybe looking something like Erlang or F#?&nbsp;</li>
<li>A formally defined model specially developed for event processing, think of the relational model as comparison, which provides a solid foundation.</li>
<li>Small light weight libraries which contains the essentials needed for event processing. Used as a base for complete stand alone server of to implement CEP&nbsp;functionality in various k&iacute;nds of applications.</li>
<li>Services for processing live data targetting various domains. Like finance (already happening?), logistics, sensor networks, SCADA&nbsp;and that kind of things. </li>
<li>More specialised CEP&nbsp;tools which solve one particular problem in the CEP&nbsp;domain. For example event enrichment or aggregation. One size does not fit all, as the database community already knows.</li>
<li>Better GUI&nbsp;concepts, the ones today are too low level. </li>
</ul>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p class="addtoany_share_save_container">
    <a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?sitename=Marco%20on%20CEP&amp;siteurl=http%3A%2F%2Frulecore.com%2FCEPblog%2F&amp;linkname=In%20The%20Future&amp;linkurl=http%3A%2F%2Frulecore.com%2FCEPblog%2F%3Fp%3D560"><img src="http://rulecore.com/CEPblog/wp-content/plugins/add-to-any/share_save_120_16.png" width="120" height="16" alt="Share/Save/Bookmark"/></a>

	</p>]]></content:encoded>
			<wfw:commentRss>http://rulecore.com/CEPblog/?feed=rss2&amp;p=560</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CEP 2.0</title>
		<link>http://rulecore.com/CEPblog/?p=554</link>
		<comments>http://rulecore.com/CEPblog/?p=554#comments</comments>
		<pubDate>Wed, 18 Aug 2010 10:13:29 +0000</pubDate>
		<dc:creator>Marco</dc:creator>
				<category><![CDATA[Complex Event Processing]]></category>

		<guid isPermaLink="false">http://rulecore.com/CEPblog/?p=554</guid>
		<description><![CDATA[&#160; So, where&#8217;s CEP&#160;heading?&#160; That&#8217;s a question that I&#8217;m asked a couple of times each week. Those that know a bit about CEP&#160;are a bit worried that the current solutions have not caught on. Sure, in some sectors they have. For example in the capital markets there are now a decent number or installations from [...]]]></description>
			<content:encoded><![CDATA[<p>&nbsp;</p>
<p>So, where&#8217;s CEP&nbsp;heading?&nbsp;</p>
<p>That&#8217;s a question that I&#8217;m asked a couple of times each week. Those that know a bit about CEP&nbsp;are a bit worried that the current solutions have not caught on. Sure, in some sectors they have. For example in the capital markets there are now a decent number or installations from several vendors. But the real mainstream adaptation is not here if you ask the outsiders. We that work with CEP would really love to hear that CEP&nbsp;is now mainstream, but it is not there yet.</p>
<p>At least CEP&nbsp;have left the early adopter stage, the startups are now acquired or living a post-startup life. That is, those that are still alive.</p>
<p>It seems that those that made it as &#8216;independent&#8217; vendors, have gone after a solution approach and sell more of a solution to a specific domain instead of pure technology.</p>
<p>Many of the bigger vendors have now some kind of CEP&nbsp;capability to offer. Most of them bought one of the smaller vendors a while ago. Notably Microsoft seem to have created StreamInsight inhouse. But from what I&nbsp;hear, none of the big vendors are selling lots of CEP&nbsp;licenses.</p>
<p>So, there is some activity both at the smaller and bigger vendors, but the real rush seems to be a couple of years away.</p>
<p style="text-align: center;"><img src="http://rulecore.com/CEPblog/wp-content/uploads/CRW_9062.jpeg" style="width: 555px; height: 228px;" alt="" /></p>
<p>What I&nbsp;think is required is a better understanding of what CEP&nbsp;is and from that we need to create better tools, using better concepts. The current concepts in CEP&nbsp;looks to me as a first wave of something. Nothing wrong with them. But I&nbsp;would be very surprised if this would be the optimal way to do CEP.</p>
<p>We need better concepts, perhaps an underlying theory and some kind of collecting agreement on what it The Right Way to do CEP. That&#8217;s things that will take some time. Perhaps not a valid comparison, but it tool a while before SQL&nbsp;was The Way To Go in the data storage world.</p>
<p>But I&#8217;m sure there are interesting concepts coming. The current ideas seems all be rooted in the SQL&nbsp;or rules concepts. But I&nbsp;would love to see a new freash approach to CEP&nbsp;that treats CEP&nbsp;as an own field. I someone would do that I&#8217;m sure more creative ideas would emerge than reusing old concepts from other fields.</p>
<p>My be would be to use a small tailor made language as a base and then build some clever abstractions using that&#8230; The language has to be small and complete in order to be a good candidate to build future CEP&nbsp;solutions on. Flexible enough to give some headroom to build different kinds of product, but on the same base.</p>
<p>A good idea?&nbsp;A bad one?&nbsp;Do you have other ideas for CEP&nbsp;2.0?</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p class="addtoany_share_save_container">
    <a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?sitename=Marco%20on%20CEP&amp;siteurl=http%3A%2F%2Frulecore.com%2FCEPblog%2F&amp;linkname=CEP%202.0&amp;linkurl=http%3A%2F%2Frulecore.com%2FCEPblog%2F%3Fp%3D554"><img src="http://rulecore.com/CEPblog/wp-content/plugins/add-to-any/share_save_120_16.png" width="120" height="16" alt="Share/Save/Bookmark"/></a>

	</p>]]></content:encoded>
			<wfw:commentRss>http://rulecore.com/CEPblog/?feed=rss2&amp;p=554</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Update</title>
		<link>http://rulecore.com/CEPblog/?p=552</link>
		<comments>http://rulecore.com/CEPblog/?p=552#comments</comments>
		<pubDate>Wed, 11 Aug 2010 19:50:57 +0000</pubDate>
		<dc:creator>Marco</dc:creator>
				<category><![CDATA[Complex Event Processing]]></category>

		<guid isPermaLink="false">http://rulecore.com/CEPblog/?p=552</guid>
		<description><![CDATA[So, back from the summer vacation. This year I&#160;had a really long and nice time off and tried to do as little as possible. I tried to look through my google alerts on CEP&#160;and there seems not be much exciting news in the world of CEP. The best news is that Event Processing in Action [...]]]></description>
			<content:encoded><![CDATA[<p>So, back from the summer vacation. This year I&nbsp;had a really long and nice time off and tried to do as little as possible. </p>
<p>I tried to look through my google alerts on CEP&nbsp;and there seems not be much exciting news in the world of CEP. The best news is that Event Processing in Action (the book)&nbsp;is ready. I&nbsp;tried to read the PDF, but the acrobat on Linux was so slow that it took a minute or so to turn the page. The pdf format seems to be seriously broken considering other problems like painfully slow search, slower than text search used to be in 1987. </p>
<p>Apart from the book there seems to be very little new cool stuff. The existing projects seems to progress with a steady pace. In some cases there seems to have been very little action lately, but it seems hard for both the commercial vendors and the open source projects to find a way to the minds of the mainstream. Not sure what this is a sign off, have to think about that&#8230;</p>
<p>My guess is that the next 12 months will be critical for most CEP vendors and open source projects. I&nbsp;have the feel that there&#8217;s a new wave of solutions and tools coming up. It would be interesting to see what v2.0 of the event processing concepts are. </p>
<p>Now time for some CEP&nbsp;googling to get updated&#8230;</p>
<p class="addtoany_share_save_container">
    <a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?sitename=Marco%20on%20CEP&amp;siteurl=http%3A%2F%2Frulecore.com%2FCEPblog%2F&amp;linkname=Update&amp;linkurl=http%3A%2F%2Frulecore.com%2FCEPblog%2F%3Fp%3D552"><img src="http://rulecore.com/CEPblog/wp-content/plugins/add-to-any/share_save_120_16.png" width="120" height="16" alt="Share/Save/Bookmark"/></a>

	</p>]]></content:encoded>
			<wfw:commentRss>http://rulecore.com/CEPblog/?feed=rss2&amp;p=552</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Summer Break</title>
		<link>http://rulecore.com/CEPblog/?p=548</link>
		<comments>http://rulecore.com/CEPblog/?p=548#comments</comments>
		<pubDate>Mon, 12 Jul 2010 10:12:14 +0000</pubDate>
		<dc:creator>Marco</dc:creator>
				<category><![CDATA[Complex Event Processing]]></category>

		<guid isPermaLink="false">http://rulecore.com/CEPblog/?p=548</guid>
		<description><![CDATA[&#160; The blog is taking a short break while I&#8217;m relaxing away from office&#8230; See you all in the spring..&#160; in a couple of weeks&#8230; &#160;]]></description>
			<content:encoded><![CDATA[<p>&nbsp;</p>
<p>The blog is taking a short break while I&#8217;m relaxing away from office&#8230; See you <strike>all in the spring.</strike>.&nbsp; in a couple of weeks&#8230;</p>
<p>&nbsp;</p>
<p class="addtoany_share_save_container">
    <a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?sitename=Marco%20on%20CEP&amp;siteurl=http%3A%2F%2Frulecore.com%2FCEPblog%2F&amp;linkname=Summer%20Break&amp;linkurl=http%3A%2F%2Frulecore.com%2FCEPblog%2F%3Fp%3D548"><img src="http://rulecore.com/CEPblog/wp-content/plugins/add-to-any/share_save_120_16.png" width="120" height="16" alt="Share/Save/Bookmark"/></a>

	</p>]]></content:encoded>
			<wfw:commentRss>http://rulecore.com/CEPblog/?feed=rss2&amp;p=548</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Up for a Challenge?</title>
		<link>http://rulecore.com/CEPblog/?p=546</link>
		<comments>http://rulecore.com/CEPblog/?p=546#comments</comments>
		<pubDate>Thu, 08 Jul 2010 07:54:56 +0000</pubDate>
		<dc:creator>Marco</dc:creator>
				<category><![CDATA[Complex Event Processing]]></category>

		<guid isPermaLink="false">http://rulecore.com/CEPblog/?p=546</guid>
		<description><![CDATA[&#160; Show your latest work here! &#160; http://2010.ruleml.org/ruleml-2010-challenge.html]]></description>
			<content:encoded><![CDATA[<p>&nbsp;</p>
<p>Show your latest work here!</p>
<p>&nbsp;</p>
<pre wrap="">
   <a href="http://2010.ruleml.org/ruleml-2010-challenge.html" class="moz-txt-link-freetext">http://2010.ruleml.org/ruleml-2010-challenge.html</a></pre>
<p class="addtoany_share_save_container">
    <a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?sitename=Marco%20on%20CEP&amp;siteurl=http%3A%2F%2Frulecore.com%2FCEPblog%2F&amp;linkname=Up%20for%20a%20Challenge%3F&amp;linkurl=http%3A%2F%2Frulecore.com%2FCEPblog%2F%3Fp%3D546"><img src="http://rulecore.com/CEPblog/wp-content/plugins/add-to-any/share_save_120_16.png" width="120" height="16" alt="Share/Save/Bookmark"/></a>

	</p>]]></content:encoded>
			<wfw:commentRss>http://rulecore.com/CEPblog/?feed=rss2&amp;p=546</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Event Processing in Action &#8211; The Book</title>
		<link>http://rulecore.com/CEPblog/?p=544</link>
		<comments>http://rulecore.com/CEPblog/?p=544#comments</comments>
		<pubDate>Fri, 25 Jun 2010 07:27:33 +0000</pubDate>
		<dc:creator>Marco</dc:creator>
				<category><![CDATA[Complex Event Processing]]></category>

		<guid isPermaLink="false">http://rulecore.com/CEPblog/?p=544</guid>
		<description><![CDATA[Short summary:&#160;buy the book! I just started to read &#34;Event Processing in Action&#34;, the final version. It&#8217;s a brand new book coming to your favorite store any day. I&#160;really like this book. It&#8217;s so good. This is the kind of book on event processing that I&#160;have been waiting for. I think the authors, Opher Etzion [...]]]></description>
			<content:encoded><![CDATA[<p>Short summary:&nbsp;buy the book!</p>
<p>I just started to read &quot;Event Processing in Action&quot;, the final version. It&#8217;s a brand new book coming to your favorite store any day. </p>
<p>I&nbsp;really like this book. It&#8217;s so good. This is the kind of book on event processing that I&nbsp;have been waiting for. I think the authors, Opher Etzion and Peter Niblett, really gets event processing. </p>
<p>Hopefully this book will teach many professionals and students that there is something more to event processing than just real-time processing of data. The fact that we are processing events and not data should be obvious as one reads this book.</p>
<p>I&nbsp;wish I&nbsp;had more time to read. But today Sweden is closed. Nobody works. So don&#8217;t even think of calling anybody here today. We are celebrating Midsummer&#8217;s Eve. One of those really old traditions up here in the north. If you live in a place where it&#8217;s dark and cold most of the year you surely appreciate a good party around the time for summer solstice. If I were younger, I&nbsp;would have been drunk all day. Now, it&#8217;s more like spending time with my wonderful family and good friends and their kids.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p class="addtoany_share_save_container">
    <a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?sitename=Marco%20on%20CEP&amp;siteurl=http%3A%2F%2Frulecore.com%2FCEPblog%2F&amp;linkname=Event%20Processing%20in%20Action%20%26%238211%3B%20The%20Book&amp;linkurl=http%3A%2F%2Frulecore.com%2FCEPblog%2F%3Fp%3D544"><img src="http://rulecore.com/CEPblog/wp-content/plugins/add-to-any/share_save_120_16.png" width="120" height="16" alt="Share/Save/Bookmark"/></a>

	</p>]]></content:encoded>
			<wfw:commentRss>http://rulecore.com/CEPblog/?feed=rss2&amp;p=544</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Technology for the Benefit of Mankind (at least some selected men)</title>
		<link>http://rulecore.com/CEPblog/?p=543</link>
		<comments>http://rulecore.com/CEPblog/?p=543#comments</comments>
		<pubDate>Thu, 17 Jun 2010 13:15:41 +0000</pubDate>
		<dc:creator>Marco</dc:creator>
				<category><![CDATA[Complex Event Processing]]></category>

		<guid isPermaLink="false">http://rulecore.com/CEPblog/?p=543</guid>
		<description><![CDATA[&#160; At least a few high-frequency traders have learned to make a killing by detecting the more simplistic algo strategies deployed by basic pension funds and mutual funds, buying the next stock the funds plan to buy, and then selling it to them at a higher price. This may not be illegal, but it&#8217;s almost [...]]]></description>
			<content:encoded><![CDATA[<p>&nbsp;</p>
<blockquote>
<p>At least a few high-frequency traders have learned to make a killing by  detecting the more simplistic algo strategies deployed by basic pension  funds and mutual funds, buying the next stock the funds plan to buy, and  then selling it to them at a higher price. This may not be illegal, but  it&rsquo;s almost certainly unfair to the funds&rsquo; investors. &ldquo;It is  increasingly clear that there are quite a number of high-frequency  bandits in the high- frequency-trading community who pump up volume  statistics, front-run investor orders, increase transaction costs, and  hurt real liquidity,&rdquo; David Weild, an adviser at Grant Thornton and a  former vice chairman of <span style="text-transform: uppercase;">Nasdaq</span>,  told me.&nbsp; &#8211; <a href="http://www.theatlantic.com/magazine/archive/2010/07/monsters-in-the-market/8122/" target="_blank">http://www.theatlantic.com/magazine/archive/2010/07/monsters-in-the-market/8122/<br />
</a></p>
</blockquote>
<p>&nbsp;</p>
<p>When this is what the public reads about CEP, then I&nbsp;think we might have a minor image problem.</p>
<p>&nbsp;</p>
<p class="addtoany_share_save_container">
    <a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?sitename=Marco%20on%20CEP&amp;siteurl=http%3A%2F%2Frulecore.com%2FCEPblog%2F&amp;linkname=Technology%20for%20the%20Benefit%20of%20Mankind%20%28at%20least%20some%20selected%20men%29&amp;linkurl=http%3A%2F%2Frulecore.com%2FCEPblog%2F%3Fp%3D543"><img src="http://rulecore.com/CEPblog/wp-content/plugins/add-to-any/share_save_120_16.png" width="120" height="16" alt="Share/Save/Bookmark"/></a>

	</p>]]></content:encoded>
			<wfw:commentRss>http://rulecore.com/CEPblog/?feed=rss2&amp;p=543</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Wanna Read more about StreamInsight?</title>
		<link>http://rulecore.com/CEPblog/?p=539</link>
		<comments>http://rulecore.com/CEPblog/?p=539#comments</comments>
		<pubDate>Fri, 11 Jun 2010 08:33:53 +0000</pubDate>
		<dc:creator>Marco</dc:creator>
				<category><![CDATA[Complex Event Processing]]></category>

		<guid isPermaLink="false">http://rulecore.com/CEPblog/?p=539</guid>
		<description><![CDATA[Microsofts entry into CEP&#160;space starts to look good and here&#8217;s some links (courtesy of Badrish Chandramouli from the StreamInsight team, thanks!) to those interested in reading more. &#160; StreamInsight webpage (where you can find some more recent information such as white papers, help documents, examples, trial download): http://www.microsoft.com/sqlserver/2008/en/us/r2-complex-event.aspx StreamInsight blog and public forum: http://blogs.msdn.com/streaminsight/ http://social.msdn.microsoft.com/Forums/en-US/streaminsight [...]]]></description>
			<content:encoded><![CDATA[<p>Microsofts entry into CEP&nbsp;space starts to look good and here&#8217;s some links (courtesy of Badrish Chandramouli from the StreamInsight team, thanks!) to those interested in reading more.</p>
<p>&nbsp;</p>
<p class="MsoNormal">StreamInsight webpage (where you can find some more recent information such as white papers, help documents, examples, trial download):<o:p></o:p></p>
<ul>
<li><a href="http://www.microsoft.com/sqlserver/2008/en/us/r2-complex-event.aspx">http://www.microsoft.com/sqlserver/2008/en/us/r2-complex-event.aspx</a><o:p></o:p></li>
</ul>
<p class="MsoNormal"><o:p><br />
</o:p></p>
<p class="MsoNormal">StreamInsight blog and public forum:<o:p></o:p></p>
<ul>
<li><a href="http://blogs.msdn.com/streaminsight/">http://blogs.msdn.com/streaminsight/</a><o:p></o:p></li>
<li><a href="http://social.msdn.microsoft.com/Forums/en-US/streaminsight">http://social.msdn.microsoft.com/Forums/en-US/streaminsight</a><o:p></o:p></li>
</ul>
<p class="MsoNormal"><o:p>&nbsp;</o:p><o:p>&nbsp;</o:p></p>
<p class="MsoNormal">Research papers:<o:p></o:p><o:p>&nbsp;</o:p></p>
<p class="MsoNormal">The original CIDR paper (some of the stuff in this paper is out-dated, for example, the presence of transaction-time in the logical tables):<o:p></o:p></p>
<ul>
<li><a href="http://www.cidrdb.org/cidr2007/papers/cidr07p42.pdf">http://www.cidrdb.org/cidr2007/papers/cidr07p42.pdf</a><o:p></o:p></li>
</ul>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
<p class="MsoNormal">A technical report about some more detailed implementation aspects:<o:p></o:p></p>
<ul>
<li><a href="http://research.microsoft.com/pubs/70517/tr-2007-158.pdf">http://research.microsoft.com/pubs/70517/tr-2007-158.pdf</a><o:p></o:p></li>
</ul>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
<p class="MsoNormal">Two more recent papers from the StremInsight group:<o:p></o:p><o:p>&nbsp;</o:p></p>
<p class="MsoNormal">Recursive query processing in a streaming system with temporal algebra:<o:p></o:p></p>
<ul>
<li><a href="http://research.microsoft.com/pubs/101567/FFP-2009-camera.pdf">http://research.microsoft.com/pubs/101567/FFP-2009-camera.pdf</a><o:p></o:p></li>
</ul>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
<p class="MsoNormal">A description of StreamInsight and behavioral targeted advertising:<o:p></o:p></p>
<ul>
<li><a href="http://research.microsoft.com/pubs/101568/MicrosoftCEPDemo.pdf">http://research.microsoft.com/pubs/101568/MicrosoftCEPDemo.pdf</a><o:p></o:p></li>
</ul>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
<p class="addtoany_share_save_container">
    <a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?sitename=Marco%20on%20CEP&amp;siteurl=http%3A%2F%2Frulecore.com%2FCEPblog%2F&amp;linkname=Wanna%20Read%20more%20about%20StreamInsight%3F&amp;linkurl=http%3A%2F%2Frulecore.com%2FCEPblog%2F%3Fp%3D539"><img src="http://rulecore.com/CEPblog/wp-content/plugins/add-to-any/share_save_120_16.png" width="120" height="16" alt="Share/Save/Bookmark"/></a>

	</p>]]></content:encoded>
			<wfw:commentRss>http://rulecore.com/CEPblog/?feed=rss2&amp;p=539</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ETALIS &#8211; A new Declarative CEP Rule Language</title>
		<link>http://rulecore.com/CEPblog/?p=537</link>
		<comments>http://rulecore.com/CEPblog/?p=537#comments</comments>
		<pubDate>Wed, 02 Jun 2010 12:57:37 +0000</pubDate>
		<dc:creator>Marco</dc:creator>
				<category><![CDATA[Complex Event Processing]]></category>

		<guid isPermaLink="false">http://rulecore.com/CEPblog/?p=537</guid>
		<description><![CDATA[Many new developments in the CEP&#160;space seems to be searching for other types of languages than the popular streaming extension to SQL.&#160; ETALIS is one of them, it is an open source engine for event processing based on the Logic Programming paradigm. ETALIS engine implements a corresponding &#8220;ETALIS Language for Events&#8221; that is a rule-based [...]]]></description>
			<content:encoded><![CDATA[<p>Many new developments in the CEP&nbsp;space seems to be searching for other types of languages than the popular streaming extension to SQL.&nbsp; </p>
<p>ETALIS is one of them, it is an open source engine for event processing based on the Logic Programming paradigm. </p>
<p>ETALIS engine implements a corresponding &ldquo;ETALIS Language for Events&rdquo; that is a rule-based declarative language. ETALIS is a research prototype created by Darko Anicic at FZI Forschungszentrum Informatik an der Universit&auml;t Karlsruhe.</p>
<p>The ETALIS&nbsp;project is founded on novel algorithms, and implementing event-driven backward chaining rules. The rules enable derivation of complex events in a data-driven fashion. Apart from event processing, ETALIS features strong inference capabilities as well as easy integration with databases and transactions.</p>
<p>Future plans include to develop some unique features of ETALIS that can be particularly efficient or easy implemented in a *logic-based* EP.</p>
<p>For instance, event-driven workflows that are dynamically modified while executing can be one area of research. Workflow modifications, being done on-the-fly, need also to be verified at run time (as changes can disable workflow executions or make it infinite though workflows featured the finite termination property). This is one example where a logic approach can help. Event-driven dynamic workflows are useful in many areas including edBPM, Cloud Computing etc.</p>
<p>
Another use of ETALIS logic approach in EP is related to event revision and world of database transactions. ETALIS can handle transactions in a logic framework. When transactions are mixed with event processing, event revision become necessary. Transaction are executed in the all-or-nothing fashion. Now events that are triggered during executions of some transactions, that later turned out to be unsuccessful, need to be retracted (in the same vain as transactions are rolled back). These events can be already used in building more complex events. This implies that also these complex events should be retracted too. ETALIS is using the logic to find out the consequences of events retractions on other more complex events.</p>
<p>It&#8217;s nice to seen the addition of another declarative CEP&nbsp;rule languate apart from the Reakt language implemented by the ruleCore CEP&nbsp;Server. Even though both languages are rule based and declarative it shows that ETALIS comes from a more formal and theorethically correct research world whereas the Reakt language was designed by software developers without too much concerns of formal correctness.</p>
<p>I&nbsp;will follow ETALIS&nbsp;with great interest as I&nbsp;think it could evolve into a really powerful language.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p class="addtoany_share_save_container">
    <a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?sitename=Marco%20on%20CEP&amp;siteurl=http%3A%2F%2Frulecore.com%2FCEPblog%2F&amp;linkname=ETALIS%20%26%238211%3B%20A%20new%20Declarative%20CEP%20Rule%20Language&amp;linkurl=http%3A%2F%2Frulecore.com%2FCEPblog%2F%3Fp%3D537"><img src="http://rulecore.com/CEPblog/wp-content/plugins/add-to-any/share_save_120_16.png" width="120" height="16" alt="Share/Save/Bookmark"/></a>

	</p>]]></content:encoded>
			<wfw:commentRss>http://rulecore.com/CEPblog/?feed=rss2&amp;p=537</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
