[jboss-svn-commits] JBL Code SVN: r34397 - labs/jbossrules/trunk/drools-docs/drools-docs-introduction/src/main/docbook/en-US/Chapter-Release_Notes.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Fri Jul 30 00:30:24 EDT 2010
Author: tirelli
Date: 2010-07-30 00:30:23 -0400 (Fri, 30 Jul 2010)
New Revision: 34397
Modified:
labs/jbossrules/trunk/drools-docs/drools-docs-introduction/src/main/docbook/en-US/Chapter-Release_Notes/Section-What_is_new_Drools_5.1.0.xml
Log:
Adding known issues comment on release notes
Modified: labs/jbossrules/trunk/drools-docs/drools-docs-introduction/src/main/docbook/en-US/Chapter-Release_Notes/Section-What_is_new_Drools_5.1.0.xml
===================================================================
--- labs/jbossrules/trunk/drools-docs/drools-docs-introduction/src/main/docbook/en-US/Chapter-Release_Notes/Section-What_is_new_Drools_5.1.0.xml 2010-07-30 03:59:28 UTC (rev 34396)
+++ labs/jbossrules/trunk/drools-docs/drools-docs-introduction/src/main/docbook/en-US/Chapter-Release_Notes/Section-What_is_new_Drools_5.1.0.xml 2010-07-30 04:30:23 UTC (rev 34397)
@@ -1,1239 +1,1252 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<section version="5.0"
- xsi:schemaLocation="http://docbook.org/ns/docbook http://www.docbook.org/xml/5.0/xsd/docbook.xsd http://www.w3.org/1999/xlink http://www.docbook.org/xml/5.0/xsd/xlink.xsd"
- xml:base="../" xmlns="http://docbook.org/ns/docbook"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:xs="http://www.w3.org/2001/XMLSchema"
- xmlns:xlink="http://www.w3.org/1999/xlink"
- xmlns:xi="http://www.w3.org/2001/XInclude"
- xmlns:ns="http://docbook.org/ns/docbook">
- <title>What is New and Noteworthy in Drools 5.1.0</title>
-
- <section>
- <title>Drools API</title>
-
- <para>As in Drools 5.0 it is still possible to configure a <code>KnowledgeBase</code>
- using configuration, via a xml change set, instead of programmatically. However the change-set namespace
- is now versioned. This means that for Drools 5.1, the 1.0.0 xsd should be referenced.
- </para>
- <example>
- <title>Here is a simple version 1.0.0 change set</title>
-
- <programlisting>
-<change-set xmlns='http://drools.org/drools-5.0/change-set'
-xmlns:xs='http://www.w3.org/2001/XMLSchema-instance'
-xs:schemaLocation='http://drools.org/drools-5.0/change-set change-set-5.0.xsd http://anonsvn.jboss.org/repos/labs/labs/jbossrules/trunk/drools-api/src/main/resources/change-set-1.0.0.xsd' >
- <add>
- <resource source='classpath:org/domain/someRules.drl' type='DRL' />
- <resource source='classpath:org/domain/aFlow.drf' type='DRF' />
- </add>
-</change-set>
-</programlisting>
- </example>
- </section>
-
- <section>
- <title>Core</title>
-
- <section>
- <title>JMX Monitoring</title>
-
- <para>JMX monitoring was added to support KnowledgeBase monitoring. This
- is specially importand for long running processes like the ones usually
- required for event processing. Initial integration with JOPR was also
- added. JMX can be inabled with using the properties setting the
- knowledge base:</para>
-
- <para>drools.mbeans = <enabled|disabled></para>
-
- <para>or this option at runtime</para>
-
- <para>kbaseConf.setOption( MBeansOption.ENABLED )</para>
- </section>
-
- <section>
- <title>Spring</title>
-
- <para>Drools now has extensive Spring support, the XSD can be found in
- the the drools-spring jar. The namespace is
- "http://drools.org/schema/drools-spring"</para>
-
- <example>
- <title>KnowledgeBuilder example</title>
-
- <programlisting language="xml"><?xml version="1.0" encoding="UTF-8"?>
-<beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:drools="http://drools.org/schema/drools-spring"
- xmlns:camel="http://camel.apache.org/schema/spring"
- xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
- http://drools.org/schema/drools-spring http://anonsvn.jboss.org/repos/labs/labs/jbossrules/trunk/drools-container/drools-spring/src/main/resources/org/drools/container/spring/drools-spring-1.0.0.xsd
- http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd">
- <drools:resource id="resource1" type="DRL" source="classpath:org/drools/container/spring/testSpring.drl"/>
-
- <drools:kbase id="kbase1">
- <drools:resources>
- <drools:resource type="DRL" source="classpath:org/drools/container/spring/testSpring.drl"/>
- <drools:resource ref="resource1"/>
- <drools:resource source="classpath:org/drools/container/spring/IntegrationExampleTest.xls" type="DTABLE">
- <drools:decisiontable-conf input-type="XLS" worksheet-name="Tables_2" />
- </drools:resource>
- </drools:resources>
-
- <drools:configuration>
- <drools:mbeans enabled="true" />
- <drools:event-processing-mode mode="STREAM" />
- </drools:configuration>
- </drools:kbase>
-</beans></programlisting>
- </example>
-
- <para>KnowledgeBase takes the following configurations:
- "advanced-process-rule-integration, multithread, mbeans,
- event-processing-mode, accumulate-functions, evaluators and
- assert-behavior".</para>
-
- <para>From the the kbase reference ksessions can be created</para>
-
- <example>
- <title>Knowlege Sessions</title>
-
- <programlisting language="xml"><drools:ksession id="ksession1" type="stateless" name="stateless1" kbase="kbase1" />
-
-<drools:ksession id="ksession2" type="stateful" kbase="kbase1" /></programlisting>
- </example>
-
- <para>Like KnowledgeBases Knowlege sessions can take a number of
- configurations, including "work-item-handlers, "keep-references",
- "clock-type", "jpa-persistence".</para>
-
- <example>
- <title>Knowlege Sessions Configurations</title>
-
- <programlisting language="xml"><drools:ksession id="ksession1" type="stateful" kbase="kbase1" >
- <drools:configuration>
- <drools:work-item-handlers>
- <drools:work-item-handler name="handlername" ref="handlerid" />
- </drools:work-item-handlers>
- <drools:keep-reference enabled="true" />
- <drools:clock-type type="REALTIME" />
- </drools:configuration>
-</drools:ksession></programlisting>
- </example>
-
- <para>StatefulKnowledgeSessions can be configured for JPA
- persistence</para>
-
- <example>
- <title>JPA configuration for StatefulKnowledgeSessions</title>
-
- <programlisting language="xml"><bean id="ds" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
- <property name="driverClassName" value="org.h2.Driver" />
- <property name="url" value="jdbc:h2:tcp://localhost/DroolsFlow" />
- <property name="username" value="sa" />
- <property name="password" value="" />
-</bean>
-
-<bean id="myEmf" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
- <property name="dataSource" ref="ds" />
- <property name="persistenceUnitName" value="org.drools.persistence.jpa.local" />
-</bean>
-
-<bean id="txManager" class="org.springframework.orm.jpa.JpaTransactionManager">
- <property name="entityManagerFactory" ref="myEmf" />
-</bean>
-
-<drools:ksession id="jpaSingleSessionCommandService" type="stateful" kbase="kbase1">
- <drools:configuration>
- <drools:jpa-persistence>
- <drools:transaction-manager ref="txManager" />
- <drools:entity-manager-factory ref="myEmf" />
- <drools:variable-persisters>
- <drools:persister for-class="javax.persistence.Entity" implementation="org.drools.persistence.processinstance.persisters.JPAVariablePersister"/>
- <drools:persister for-class="java.lang.String" implementation="org.drools.container.spring.beans.persistence.StringVariablePersister"/>
- <drools:persister for-class="java.io.Serializable" implementation="org.drools.persistence.processinstance.persisters.SerializableVariablePersister"/>
- </drools:variable-persisters>
- </drools:jpa-persistence>
- </drools:configuration>
-</drools:ksession>
-</programlisting>
- </example>
-
- <para>Knowledge Sessions can support startup batch scripts, previous
- versions used the "script" element name, this will be updated to
- "batch". The following commands are supported: "insert-object",
- "set-global", "fire-all-rules", "fire-until-halt", "start-process",
- "signal-event". Anonymous beans or named "ref" attributes may be
- used.</para>
-
- <example>
- <title>Startup Batch Commands</title>
-
- <programlisting language="xml"><drools:ksession id="jpaSingleSessionCommandService" type="stateful" kbase="kbase1">
- <drools:script>
- <drools:insert-object ref="person1" />
- <drools:start-process process-id="proc name">
- <drools:parameter identifier="varName" ref="varRef" />
- </drools:start-process>
- <drools:fire-all-rules />
- </drools:script>
-</drools:ksession>
-</programlisting>
- </example>
-
- <para>ExecutionNodes are supported in Spring , these provide a Context
- of registered ksessions; this can be used with Camel to provide ksession
- routing.</para>
-
- <example>
- <title>Execution Nodes</title>
-
- <programlisting language="xml"><execution-node id="node1" />
-
-<drools:ksession id="ksession1" type="stateless" name="stateless1" kbase="kbase1" node="node1"/>
-
-<drools:ksession id="ksession2" type="stateful" kbase="kbase1" node="node1"/></programlisting>
- </example>
- </section>
-
- <section>
- <title>Camel</title>
-
- <para>Spring can be combined with Camel to provide declarative rule
- services. a Camel Policy is added from Drools which provides magic for
- injecting the ClassLoader used by the ksession for any data formatters,
- it also augments the Jaxb and XStream data formatters. In the case lf
- Jaxb it adds additional Drools related path info and with XStream it
- registers Drools related converters and aliases.</para>
-
- <para>You can create as many endpoints as you require, using different
- addresses. The CommandMessagBodyReader is needed to allow the payload to
- be handled by Camel.</para>
-
- <example>
- <title>Rest Endpoint Configuration</title>
-
- <programlisting language="xml"><cxf:rsServer id="rsServer"
- address="/kservice/rest"
- serviceClass="org.drools.jax.rs.CommandExecutorImpl">
- <cxf:providers>
- <bean class="org.drools.jax.rs.CommandMessageBodyReader"/>
- </cxf:providers>
-</cxf:rsServer>
-</programlisting>
- </example>
-
- <para>Camel routes can then be attached to CXF endpoints, allowing you
- control over the payload for things like data formatting and executing
- against Drools ksessions. The DroolsPolicy adds some smarts to the
- route. If JAXB or XStream are used, it would inject custom paths and
- converters, it can also set the classloader too on the server side,
- based on the target ksession. On the client side it automatically
- unwrapes the Response object.</para>
-
- <para>This example unmarshalls the payload using an augmented XStream
- DataFormat and executes it against the ksession1 instance. The "node"
- there refers to the ExecutionContext, which is a context of registered
- ksessions.</para>
-
- <example>
- <title>Camel Route</title>
-
- <programlisting language="xml"><bean id="droolsPolicy" class="org.drools.camel.component.DroolsPolicy" />
-
-<camelContext id="camel" xmlns="http://camel.apache.org/schema/spring">
- <route>
- <from uri="cxfrs://bean://rsServer"/>
- <policy ref="droolsPolicy">
- <unmarshal ref="xstream" />
- <to uri="drools://node/ksession1" />
- <marshal ref="xstream" />
- </policy>
- </route>
-</camelContext>
-</programlisting>
- </example>
-
- <para>The Drools endpoint "drools:node/ksession1" consists of the
- execution node name followed by a separator and optional knowledge
- session name. If the knowledge session is not specified the route will
- look at the "lookup" attribute on the incoming payload instace or in the
- head attribute "DroolsLookup" to find it.</para>
- </section>
-
- <section>
- <title>Drools Server</title>
-
- <para>Spring, Camel and CXF can be combined for declarative services,
- drools-server is a .war that combines these with some sample xml that
- works out of the box to get you started, acting like a sort of template.
- If you are using the war in JBoss container you'll need to add this
- component, http://camel.apache.org/camel-jboss.html. The war includes a
- test.jsp showing an echo like example to get you started. This example
- just executes a simple "echo" type application. It sends a message to
- the rule server that pre-appends the word "echo" to the front and sends
- it back. By default the message is "Hello World", different messages can
- be passed using the url parameter msg - test.jsp?msg="My Custom
- Message".</para>
- </section>
-
- <section>
- <title>Knowledge Agent Incremental Change Support</title>
-
- <para>The new version of the Knowledge Agent supports newInstance =
- false in its configuration (incremental change-set build).</para>
-
- <para>When setting this property to false, the KnowledgeAgent uses the
- exisitng KnowledgeBase references apply the incremental changes. Now
- KnowledgeAgent's can process monitored resource modifications in an
- incremental way. Modified definitions are compiled and compared against
- the original version. According to definition's type, the behaves in
- different ways:</para>
-
- <itemizedlist>
- <listitem>
- <para>Rules: For rules, the Agent searches for modifications in its
- attributes, LHS and RHS.</para>
- </listitem>
-
- <listitem>
- <para>Queries: queries are always replaced on kbase wether they are
- modified or not.</para>
- </listitem>
-
- <listitem>
- <para>Other definitions: All other definitions are always replaced
- in kbase (like if they were modified). We expect to add better
- support for definition's modification detection in further
- versions.</para>
- </listitem>
- </itemizedlist>
-
- <para>The current implementation only supports the deletion of rules,
- querries and functions definitions. Type declarations cannot be
- deleted.</para>
- </section>
-
- <section>
- <title>Session Inspection and Reporting framework</title>
-
- <para>A new API based framework for runtime session inspection and
- reporting was introduced, allowing for better data gathering during
- debugging or profiling of the application. This inspection framework
- will become the basis of the tooling features to help providing more
- detailed information about the contents of each session. This api is
- experimental and not in drools-api for now, but feel free to play and
- help us improve it.</para>
-
- <para>To inspect a session, one can use the following API calls:</para>
-
- <example>
- <title>Creating a SessionInspector</title>
-
- <programlisting language="java">StatefulKnowledgeSession ksession = ...
-
-// ... insert facts, fire rules, etc
-
-SessionInspector inspector = new SessionInspector( ksession );
-StatefulKnowledgeSessionInfo info = inspector.getSessionInfo();</programlisting>
- </example>
-
- <para>The StatefulKnowledgeSessionInfo instance will contain a lot of
- relevant data gathered during the analysis of the session. A simple
- example report template is provided and can be generated with the
- following API call:</para>
-
- <example>
- <title>Generating a Report</title>
-
- <programlisting language="java">String report = SessionReporter.generateReport( "simple", info, null );</programlisting>
- </example>
- </section>
- </section>
-
- <section>
- <title>Expert</title>
-
- <section>
- <title>Differential Update</title>
-
- <para>Rete traditional does an update as a retract + assert, for a given
- fact this causes all partial matches to be destroyed, however during the
- assert some of which will be recreated again; because they were true
- before the update and still true after the update. This causes a lot of
- uneccessary object destruction and creation which puts more load on the
- Garbage Collector. Now an update is a single pass and inspects the
- partial matches in place avoiding the unecessary destruction of partial
- matches. It also removes the need to under go a normalisation process
- for events and truth maintenance; the normalisation process was where we
- would look at the activations retracted and activations inserted to
- figure out what was truly added and what was truly inserted to determine
- the "diff".</para>
- </section>
-
- <section>
- <title>Channels</title>
-
- <para>Exit Points have been replaced by the more aptly named channels,
- we felt this was more appropriate as they may be used by more than juse
- the rule engine and not an exact oppposte if Entry Points. Where entry
- points are explicitey related to entering a partition in the Rete
- network.</para>
- </section>
-
- <section>
- <title>Live Querries</title>
-
- <para>Drools has always had query support, but the result was returned
- as an iterable set; this makes it hard to monitor changes over
- time.</para>
-
- <para>We have now complimented this with Live Querries, which has a
- listener attached instead of returning an iterable result set. These
- live querries stay open creating a view and publish change events for
- the contents of this view. So now you can execute your query, with
- parameters and listen to changes in the resulting view.</para>
-
- <example>
- <title>Implementing ViewChangedEventListener</title>
-
- <programlisting language="java">final List updated = new ArrayList();
-final List removed = new ArrayList();
-final List added = new ArrayList();
-
-ViewChangedEventListener listener = new ViewChangedEventListener() {
- public void rowUpdated(Row row) {
- updated.add( row.get( "$price" ) );
- }
-
- public void rowRemoved(Row row) {
- removed.add( row.get( "$price" ) );
- }
-
- public void rowAdded(Row row) {
- added.add( row.get( "$price" ) );
- }
-};
-
-// Open the LiveQuery
-LiveQuery query = ksession.openLiveQuery( "cheeses",
- new Object[] { "cheddar", "stilton" },
- listener );
-...
-...
-query.dispose() // make sure you call dispose when you want the query to close</programlisting>
- </example>
-
- <para>A Drools blog article contains an example of Glazed Lists
- integration for live queries,</para>
-
- <para><link
- xlink:href="http://blog.athico.com/2010/07/glazed-lists-examples-for-drools-live.html">http://blog.athico.com/2010/07/glazed-lists-examples-for-drools-live.html</link></para>
- </section>
-
- <section>
- <title>Timers and Calendars</title>
-
- <para>Rule's now suport both interval and cron based timers, which
- replace the now deprecated duration attribute.</para>
-
- <example>
- <title>Sample timer attribute uses</title>
-
- <programlisting language="java">timer ( int: <initial delay> <repeat interval>? )
-timer ( int: 30s )
-timer ( int: 30s 5m )
-
-timer ( cron: <cron expression> )
-timer ( cron:* 0/15 * * * ? )</programlisting>
- </example>
-
- <para>Interval "int:" timers follow the JDK semantics for initial delay
- optionally followed by a repeat interval. Cron "cron:" timers follow
- standard cron expressions:</para>
-
- <example>
- <title>A Cron Example</title>
-
- <programlisting language="java">rule "Send SMS every 15 minutes"
- timer (cron:* 0/15 * * * ?)
-when
- $a : Alarm( on == true )
-then
- channels[ "sms" ].insert( new Sms( $a.mobileNumber, "The alarm is still on" );
-end</programlisting>
- </example>
-
- <para>Calendars can now controll when rules can fire. The Calendar api
- is modelled on <link
- xlink:href="http://www.quartz-scheduler.org/">Quartz
- http://www.quartz-scheduler.org/</link> :</para>
-
- <example>
- <title>Adapting a Quartz Calendar</title>
-
- <programlisting language="java">Calendar weekDayCal = QuartzHelper.quartzCalendarAdapter(org.quartz.Calendar quartzCal)</programlisting>
- </example>
-
- <para>Calendars are registered with the StatefulKnowledgeSession:</para>
-
- <example>
- <title>Registering a Calendar</title>
-
- <programlisting language="java">ksession.getCalendars().set( "week day", weekDayCal );</programlisting>
- </example>
-
- <para>They can be used in conjunction with normal rules and rules
- including timers. The rule calendar attribute can have one or more comma
- calendar names.</para>
-
- <example>
- <title>Using Calendars and Timers together</title>
-
- <programlisting language="java">rule "weekdays are high priority"
- calendars "weekday"
- timer (int:0 1h)
-when
- Alarm()
-then
- send( "priority high - we have an alarm” );
-end
-
-rule "weekend are low priority"
- calendars "weekend"
- timer (int:0 4h)
-when
- Alarm()
-then
- send( "priority low - we have an alarm” );
-end</programlisting>
- </example>
- </section>
-
- <section>
- <title>Decision Tables (Excel)</title>
-
- <section>
- <title>Simple templating for variable length comma separated lists
- within cells</title>
-
- <para>It is now possible to have a comma separated list of values in a
- cell and render those with a forall template</para>
-
- <example>
- <title>DTable forall syntax</title>
-
- <programlisting language="java">forall(<separator>?){<codesnippt>}</programlisting>
- </example>
-
- <example>
- <title>DTable forall examples</title>
-
- <programlisting language="java">forall(,) {propertyName == $}
-forall(&&) {propertyName == $}
-forall(||) {propertyName == $}
-forall(||) {propertyNameA == $} && forall(||){propertyNameB == $}
-etc </programlisting>
- </example>
- </section>
- </section>
- </section>
-
- <section>
- <title>Flow</title>
-
- <section>
- <title>BPMN2</title>
-
- <para>As we already announced earlier, the Drools team has decided to
- support the use of the upcoming BPMN 2.0 specification for specifying
- business processes using XML. This milestone includes a significant
- extension of the BPMN2 parser to support more of the BPMN2 features
- using Drools Flow. More specifically:</para>
-
- <itemizedlist>
- <listitem>
- <para>more extensive event support: much more combinations of event
- types (start, intermediate and end) and event triggers (including
- for example error, escalation, timer, conditional and signal
- events), have been included, as well as (interrupting and
- non-interrupting) boundary events</para>
- </listitem>
-
- <listitem>
- <para>sub-process parameters</para>
- </listitem>
-
- <listitem>
- <para>diverging inclusive gateway</para>
- </listitem>
-
- <listitem>
- <para>etc.</para>
- </listitem>
- </itemizedlist>
-
- <para>BPMN2 processes have also been integrated in the entire Drools
- tool chain, to support the entire life cycle of the business process.
- This includes</para>
-
- <itemizedlist>
- <listitem>
- <para>The ability to use BPMN2 processes in combination with our
- Eclipse tooling</para>
- </listitem>
-
- <listitem>
- <para>Guvnor as process repository</para>
- </listitem>
-
- <listitem>
- <para>web-based management using the BPM console</para>
- </listitem>
-
- <listitem>
- <para>auditing and debugging</para>
- </listitem>
-
- <listitem>
- <para>domain-specific processes</para>
- </listitem>
-
- <listitem>
- <para>etc.</para>
- </listitem>
- </itemizedlist>
-
- <para>As a result, Drools Flow is not only the first open-source process
- engine that supports such a significant set of BPMN2 constructs
- natively, our knowledge-oriented approach also allows you to easily
- combine your BPMN2 processes with business rules and complex event
- processing, all using the same APIs and tools.</para>
- </section>
-
- <section>
- <title>Web-based Management console</title>
-
- <para>Drools Flow processes can now also be managed through a web
- console. This includes features like managing your process instances
- (starting/stopping/inspecting), inspecting your (human) task list and
- executing those tasks, and generating reports.</para>
-
- <para>This console is actually the (excellent!) work of Heiko Braun, who
- has created a generic BPM console that can be used to support multiple
- process languages. We have therefore implemented the necessary
- components to allow this console to communicate with the Drools Flow
- engine.</para>
- </section>
-
- <section>
- <title>Pluggable Variable Persistence</title>
-
- <para>Drools Flow can persist the runtime state of the running processes
- to a database (so they don't all need to be in memory and can be
- restored in case of failure). Our default persistence mechanism stores
- all the runtime information related to one process instance as a binary
- object (with associated metadata). The data associated with this process
- instance (aka process instance variables) were also stored as part of
- that binary object. This however could generate problem (1) when the
- data was not Serializable, (2) when the objects were too large to
- persist as part of the process instance state or (3) when they were
- already persisted elsewhere. We have therefor implemented pluggable
- variable persisters where the user can define how variable values are
- stored. This for example allows you to store variable values separately,
- and does support JPA entities to be stored separately and referenced
- (avoiding duplication of state).</para>
- </section>
-
- <section>
- <title>Improved Process Instance Migration</title>
-
- <para>Over time, processes may evolve. Whenever a process is updated, it
- is important to determine what should happen to the already running
- process instances. We have improved our support for migrating running
- process instances to a newer version of the process definition. Check
- out the Drools Flow documentation for more information.</para>
- </section>
-
- <section>
- <title>Installation Script</title>
-
- <para>The Drools build now exports an installer that simplifies
- installing the Eclipse plugin, Guvnor and the gwt-console. It creates
- and copies the necessary jars and wars and deploys them to the JBoss AS.
- It also includes a simple evaluation process example you can use to test
- your setup. For more info, download the drools installer and take a look
- at the readme within.</para>
- </section>
- </section>
-
- <section>
- <title>Guvnor</title>
-
- <para>Appearance has been cleaned, for example less pop ups. Reminders for
- save after changes in assets and information about actions that were
- taken, also better error reporting if something goes wrong.</para>
-
- <section>
- <title>Discussions</title>
-
- <para>The comments are below the "documentation" section (and of course
- optional) (and there is an Atom feed to them).</para>
-
- <figure>
- <title>Realtime Discussions</title>
-
- <mediaobject>
- <imageobject>
- <imagedata align="center"
- fileref="images/Chapter-Release_Notes/discussion1.png"
- format="PNG" scalefit="1"></imagedata>
- </imageobject>
- </mediaobject>
- </figure>
-
- <para>A "backchannel" type connection that is kept open from the browser
- to allow messages to push back - this means (when enabled) that messages
- show up in real time (and other handy things like if something is added
- to a list - the list is updated).</para>
- </section>
-
- <section>
- <title>Inbox</title>
-
- <para>The inbox feature provides the ability to track what you have
- opened, or edited - this shows up under an "Inbox" item in the main
- navigator. <link
- xlink:href="http://blog.athico.com/2009/09/inbox-feature-to-track-recent-changes.html"></link></para>
-
- <figure>
- <title>Inbox Categories</title>
-
- <mediaobject>
- <imageobject>
- <imagedata align="center"
- fileref="images/Chapter-Release_Notes/inbox1.png"
- format="PNG" scalefit="1"></imagedata>
- </imageobject>
- </mediaobject>
- </figure>
-
- <itemizedlist>
- <listitem>
- <para><emphasis role="bold">Recently Opened </emphasis></para>
-
- <itemizedlist>
- <listitem>
- <para>Clicking on the recently opened item will open a listing
- of all items you have "recently" opened (it tracks a few hundred
- items that you were last to look at).</para>
- </listitem>
- </itemizedlist>
- </listitem>
-
- <listitem>
- <para><emphasis role="bold">Recently Edited</emphasis></para>
-
- <itemizedlist>
- <listitem>
- <para>Any items that you save changes to, or comment on will
- show up here, once again.</para>
- </listitem>
- </itemizedlist>
- </listitem>
-
- <listitem>
- <para><emphasis role="bold">Incoming changes</emphasis></para>
-
- <itemizedlist>
- <listitem>
- <para>This tracks changes made by *other people* to items that
- are in *your* "Recently Edited" list. When you open these items
- they then are removed from this list (but remain in your
- Recently Edited list).</para>
- </listitem>
- </itemizedlist>
- </listitem>
- </itemizedlist>
-
- <figure>
- <title>Inbox Item Lists</title>
-
- <mediaobject>
- <imageobject>
- <imagedata align="center"
- fileref="images/Chapter-Release_Notes/inbox2.png"
- format="PNG" scalefit="1"></imagedata>
- </imageobject>
- </mediaobject>
- </figure>
- </section>
-
- <section>
- <title>Bulk Importer</title>
-
- <para>The Guvnor-Importer is a maven build tool that recurses your rules
- directory structure and constructs an xml import file that can be
- manually imported into the Drools-Guvnor web interface via the
- import/export administration feature.</para>
- </section>
-
- <section>
- <title>DroolsDoc</title>
-
- <para>PDF document containing information about the package and each DRL
- asset. DroolsDoc for knowledge package can be downloaded from package
- view under "Information and important URLs"</para>
- </section>
-
- <section>
- <title>Update to GWT 2.0</title>
-
- <para>GWT was updated, making Guvnor faster.</para>
- </section>
-
- <section>
- <title>Build in Selector</title>
-
- <para>The built in selector allows user to choose what assets to build
- according to:</para>
-
- <itemizedlist>
- <listitem>
- <para>Status (eg, Dev, QA etc)</para>
- </listitem>
-
- <listitem>
- <para>Category</para>
- </listitem>
-
- <listitem>
- <para>Metadata</para>
- </listitem>
- </itemizedlist>
- </section>
-
- <section>
- <title>Single Asset Verification</title>
-
- <para>It is possible to verify just the asset you are working on (
- ruleflow, rule, decision table ). Verification finds issues like
- conflicting restrictions in a rule or redundant rows in decision
- tables.</para>
- </section>
-
- <section>
- <title>Global Area</title>
-
- <para>Assets stored in Global area can be shared to all packages.</para>
- </section>
-
- <section>
- <title>Diff Check between Snapshots</title>
-
- <para>Lists the changes between two snapshots.</para>
- </section>
-
- <section>
- <title>View Multiple Assets in One Tab</title>
-
- <para>Makes it possible to open more than one asset into one view. All
- the assets can be saved and edited as a group.</para>
- </section>
-
- <section>
- <title>From/Collect/Accumulate support</title>
-
- <para>Guided Editor has basic support for From, Accumulate and Collect
- Patterns. You can add any of these structures as regular Patterns. New
- expression builder component was created to add support for nested
- method calls of a variable. Using the “plus” button at the top of rule’s
- WHEN section or using the new “Add after” button present in every
- Pattern will open the popup to add new conditional elements to your
- rule. In the list of possible elements you will find three new entries:
- ”From”, “From Accumulate” and “From Collect”.</para>
-
- <para>When you add a new “From” element, you will see something like the
- image below in the guided editor. The left pattern of the “From”
- conditional element is a regular Pattern. You can add there any type of
- conditional element you want.The right section of the “From” pattern is
- an expression builder.</para>
-
- <figure>
- <title>From CE Builder</title>
-
- <mediaobject>
- <imageobject>
- <imagedata align="center"
- fileref="images/Chapter-Release_Notes/from_builder.png"
- format="PNG" scalefit="1"></imagedata>
- </imageobject>
- </mediaobject>
- </figure>
-
- <para>When using 'from collect' In the left pattern you can choose from
- “java.util.Collection”, “java.util.List” or “java.util.Set” Fact Types.
- This Fact Types will be automatically included in the package’s Fact
- Types list.</para>
-
- <para>The right pattern of the collect conditional element could be one
- of this patterns:</para>
-
- <itemizedlist>
- <listitem>
- <para>Fact Type Pattern</para>
- </listitem>
-
- <listitem>
- <para>Free Form Expression</para>
- </listitem>
-
- <listitem>
- <para>From Pattern</para>
- </listitem>
-
- <listitem>
- <para>From Collect Pattern</para>
- </listitem>
-
- <listitem>
- <para>From Accumulate Pattern</para>
- </listitem>
- </itemizedlist>
-
- <figure>
- <title>From Collect CE Builder</title>
-
- <mediaobject>
- <imageobject>
- <imagedata align="center"
- fileref="images/Chapter-Release_Notes/fromcollect.png"
- format="PNG" scalefit="1"></imagedata>
- </imageobject>
- </mediaobject>
- </figure>
-
- <para>When using 'from accumulate' The left pattern could be any Fact
- Type Pattern. The right section of this conditional element is splited
- in two:</para>
-
- <figure>
- <title>From Accumulate CE Builder</title>
-
- <mediaobject>
- <imageobject>
- <imagedata align="center"
- fileref="images/Chapter-Release_Notes/fromaccumulate.png"
- format="PNG" scalefit="1"></imagedata>
- </imageobject>
- </mediaobject>
- </figure>
-
- <para>The left pattern could be any Fact Type Pattern. The right section
- of this conditional element is splited in two:</para>
-
- <itemizedlist>
- <listitem>
- <para>Source Pattern: (Bed $n, in the screenshot) could be any Fact
- Type, From, Collect or Accumulate pattern.</para>
- </listitem>
-
- <listitem>
- <para>Accumulate function: Here you will find a tabbed panel where
- you can enter an accumulate function (sum() in the screenshot) or
- you can create an online custom function using the “Custom Code”
- tab.</para>
- </listitem>
- </itemizedlist>
- </section>
-
- <section>
- <title>Rule Templates</title>
-
- <para>Rule Templates allow the Guided editor to be used to build complex
- rules that can then be authored easily through a spreadsheet's tabular
- data metaphor. Instead of a field's value, simply mark it as a named
- "Template Key" and that key is available as a column in the grid. Each
- row will be applied to the rule template to generate a rule.</para>
-
- <figure>
- <title>Adding a Template Key in the 'WHEN' Section</title>
-
- <mediaobject>
- <imageobject>
- <imagedata align="center"
- fileref="images/Chapter-Release_Notes/ruletemplate1.png"
- format="PNG" scalefit="1"></imagedata>
- </imageobject>
- </mediaobject>
- </figure>
-
- <figure>
- <title>Adding a Template Key in the "THEN" Section</title>
-
- <mediaobject>
- <imageobject>
- <imagedata align="center"
- fileref="images/Chapter-Release_Notes/ruletemplate2.png"
- format="PNG" scalefit="1"></imagedata>
- </imageobject>
- </mediaobject>
- </figure>
-
- <figure>
- <title>Populating Rows against those Template Keys</title>
-
- <mediaobject>
- <imageobject>
- <imagedata align="center"
- fileref="images/Chapter-Release_Notes/ruletemplate3.png"
- format="PNG" scalefit="1"></imagedata>
- </imageobject>
- </mediaobject>
- </figure>
-
- <figure>
- <title>Each Row generates a Rule</title>
-
- <mediaobject>
- <imageobject>
- <imagedata align="center"
- fileref="images/Chapter-Release_Notes/ruletemplate4.png"
- format="PNG" scalefit="1"></imagedata>
- </imageobject>
- </mediaobject>
- </figure>
- </section>
-
- <section>
- <title>Working Sets</title>
-
- <para>When modelling rules the user gets exposed to all the fact types
- which can be a bit over whelming. Working Sets allow related fact types
- can be grouped together, provided a more managable view of selecting
- fact types, when authoring rules</para>
-
- <figure>
- <title>Show the imported types</title>
-
- <mediaobject>
- <imageobject>
- <imagedata align="center"
- fileref="images/Chapter-Release_Notes/facttypes.png"
- format="PNG" scalefit="1"></imagedata>
- </imageobject>
- </mediaobject>
- </figure>
-
- <figure>
- <title>Create Animals Working Set</title>
-
- <mediaobject>
- <imageobject>
- <imagedata align="center"
- fileref="images/Chapter-Release_Notes/workingsets1.png"
- format="PNG" scalefit="1"></imagedata>
- </imageobject>
- </mediaobject>
- </figure>
-
- <figure>
- <title>Without the Working Set all types are visible</title>
-
- <mediaobject>
- <imageobject>
- <imagedata align="center"
- fileref="images/Chapter-Release_Notes/workingsets2.png"
- format="PNG" scalefit="1"></imagedata>
- </imageobject>
- </mediaobject>
- </figure>
-
- <figure>
- <title>Select the Animals Working Set</title>
-
- <mediaobject>
- <imageobject>
- <imagedata align="center"
- fileref="images/Chapter-Release_Notes/workingsets3.png"
- format="PNG" scalefit="1"></imagedata>
- </imageobject>
- </mediaobject>
- </figure>
-
- <figure>
- <title>The available types are reduced</title>
-
- <mediaobject>
- <imageobject>
- <imagedata align="center"
- fileref="images/Chapter-Release_Notes/workingsets4.png"
- format="PNG" scalefit="1"></imagedata>
- </imageobject>
- </mediaobject>
- </figure>
- </section>
-
- <section>
- <title>Fact Constraints</title>
-
- <para>Working Sets can be combined with fact consraints to provide
- additional design time validation. For instance if you are authoring a
- rule on someone's age, we can know the valid ranges at design time and
- use this to constrain the author. The fact constraints are part of the
- workingset and when authoring a rule you must select the work set
- constraints that you wish to be applied as part of the validation
- process.</para>
-
- <figure>
- <title>Selecting the field</title>
-
- <mediaobject>
- <imageobject>
- <imagedata align="center"
- fileref="images/Chapter-Release_Notes/factconstraints1.png"
- format="PNG" scalefit="1"></imagedata>
- </imageobject>
- </mediaobject>
- </figure>
-
- <figure>
- <title>Selectng the type of field constraint</title>
-
- <mediaobject>
- <imageobject>
- <imagedata align="center"
- fileref="images/Chapter-Release_Notes/factconstraints2.png"
- format="PNG" scalefit="1"></imagedata>
- </imageobject>
- </mediaobject>
- </figure>
-
- <figure>
- <title>A example range constraint</title>
-
- <mediaobject>
- <imageobject>
- <imagedata align="center"
- fileref="images/Chapter-Release_Notes/factconstraints3.png"
- format="PNG" scalefit="1"></imagedata>
- </imageobject>
- </mediaobject>
- </figure>
-
- <figure>
- <title>Select the working set to validate the age field</title>
-
- <mediaobject>
- <imageobject>
- <imagedata align="center"
- fileref="images/Chapter-Release_Notes/factconstraints4.png"
- format="PNG" scalefit="1"></imagedata>
- </imageobject>
- </mediaobject>
- </figure>
-
- <figure>
- <title>A age of 5 is invalid</title>
-
- <mediaobject>
- <imageobject>
- <imagedata align="center"
- fileref="images/Chapter-Release_Notes/factconstraints5.png"
- format="PNG" scalefit="1"></imagedata>
- </imageobject>
- </mediaobject>
- </figure>
- </section>
-
- <section>
- <title>Guided Rule Editor</title>
-
- <para>Editing rules is made more explicit. Editor is less "boxy" and
- rules are written more as a normal text. "contains" keyword was added
- and binding variables to restrictions is now easier.</para>
-
- <section>
- <title>Pattern Order</title>
-
- <para>Guided Editor supports Pattern reordering in LHS and RHS
- sections, as well as positional inserting, new Patterns can be
- inserted in any order (and not always at the end).</para>
-
- <figure>
- <title>Move elements up or down</title>
-
- <mediaobject>
- <imageobject>
- <imagedata align="center"
- fileref="images/Chapter-Release_Notes/patternordering1.png"
- format="PNG" scalefit="1"></imagedata>
- </imageobject>
- </mediaobject>
- </figure>
-
- <figure>
- <title>Insert Element at any position</title>
-
- <mediaobject>
- <imageobject>
- <imagedata align="center"
- fileref="images/Chapter-Release_Notes/patternordering2.png"
- format="PNG" scalefit="1"></imagedata>
- </imageobject>
- </mediaobject>
- </figure>
- </section>
- </section>
-
- <section>
- <title>Decision Table (Guvnor)</title>
-
- <para>Keyword "in" was added.</para>
-
- <para>Columns can be moved and location of a new row can be selected
- freely.</para>
- </section>
- </section>
-
- <section>
- <title>Eclipse</title>
-
- <section>
- <title>Group Rules in outline view</title>
-
- <para>You can now use sorting and grouping for Agenda Groups.</para>
-
- <figure>
- <title>Group by Agenda Group</title>
-
- <mediaobject>
- <imageobject>
- <imagedata align="center"
- fileref="images/Chapter-Release_Notes/Group By.jpg"
- format="PNG" scalefit="1"></imagedata>
- </imageobject>
- </mediaobject>
- </figure>
-
- <figure>
- <title>Sort by Agenda Group</title>
-
- <mediaobject>
- <imageobject>
- <imagedata align="center"
- fileref="images/Chapter-Release_Notes/SortBy.jpg"
- format="PNG" scalefit="1"></imagedata>
- </imageobject>
- </mediaobject>
- </figure>
- </section>
-
- <section>
- <title>Drag/Drop File support in audit View</title>
-
- <para>It is now possible to drag and drop log files into the audit
- view.</para>
- </section>
- </section>
-</section>
+<?xml version="1.0" encoding="UTF-8"?>
+<section version="5.0"
+ xsi:schemaLocation="http://docbook.org/ns/docbook http://www.docbook.org/xml/5.0/xsd/docbook.xsd http://www.w3.org/1999/xlink http://www.docbook.org/xml/5.0/xsd/xlink.xsd"
+ xml:base="../" xmlns="http://docbook.org/ns/docbook"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:xs="http://www.w3.org/2001/XMLSchema"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:xi="http://www.w3.org/2001/XInclude"
+ xmlns:ns="http://docbook.org/ns/docbook">
+ <title>What is New and Noteworthy in Drools 5.1.0</title>
+
+ <section>
+ <title>Drools API</title>
+
+ <para>As in Drools 5.0 it is still possible to configure a <code>KnowledgeBase</code>
+ using configuration, via a xml change set, instead of programmatically. However the change-set namespace
+ is now versioned. This means that for Drools 5.1, the 1.0.0 xsd should be referenced.
+ </para>
+ <example>
+ <title>Here is a simple version 1.0.0 change set</title>
+
+ <programlisting>
+<change-set xmlns='http://drools.org/drools-5.0/change-set'
+xmlns:xs='http://www.w3.org/2001/XMLSchema-instance'
+xs:schemaLocation='http://drools.org/drools-5.0/change-set change-set-5.0.xsd http://anonsvn.jboss.org/repos/labs/labs/jbossrules/trunk/drools-api/src/main/resources/change-set-1.0.0.xsd' >
+ <add>
+ <resource source='classpath:org/domain/someRules.drl' type='DRL' />
+ <resource source='classpath:org/domain/aFlow.drf' type='DRF' />
+ </add>
+</change-set>
+</programlisting>
+ </example>
+ </section>
+
+ <section>
+ <title>Core</title>
+
+ <section>
+ <title>JMX Monitoring</title>
+
+ <para>JMX monitoring was added to support KnowledgeBase monitoring. This
+ is specially importand for long running processes like the ones usually
+ required for event processing. Initial integration with JOPR was also
+ added. JMX can be inabled with using the properties setting the
+ knowledge base:</para>
+
+ <para>drools.mbeans = <enabled|disabled></para>
+
+ <para>or this option at runtime</para>
+
+ <para>kbaseConf.setOption( MBeansOption.ENABLED )</para>
+ </section>
+
+ <section>
+ <title>Spring</title>
+
+ <para>Drools now has extensive Spring support, the XSD can be found in
+ the the drools-spring jar. The namespace is
+ "http://drools.org/schema/drools-spring"</para>
+
+ <example>
+ <title>KnowledgeBuilder example</title>
+
+ <programlisting language="xml"><?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:drools="http://drools.org/schema/drools-spring"
+ xmlns:camel="http://camel.apache.org/schema/spring"
+ xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
+ http://drools.org/schema/drools-spring http://anonsvn.jboss.org/repos/labs/labs/jbossrules/trunk/drools-container/drools-spring/src/main/resources/org/drools/container/spring/drools-spring-1.0.0.xsd
+ http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd">
+ <drools:resource id="resource1" type="DRL" source="classpath:org/drools/container/spring/testSpring.drl"/>
+
+ <drools:kbase id="kbase1">
+ <drools:resources>
+ <drools:resource type="DRL" source="classpath:org/drools/container/spring/testSpring.drl"/>
+ <drools:resource ref="resource1"/>
+ <drools:resource source="classpath:org/drools/container/spring/IntegrationExampleTest.xls" type="DTABLE">
+ <drools:decisiontable-conf input-type="XLS" worksheet-name="Tables_2" />
+ </drools:resource>
+ </drools:resources>
+
+ <drools:configuration>
+ <drools:mbeans enabled="true" />
+ <drools:event-processing-mode mode="STREAM" />
+ </drools:configuration>
+ </drools:kbase>
+</beans></programlisting>
+ </example>
+
+ <para>KnowledgeBase takes the following configurations:
+ "advanced-process-rule-integration, multithread, mbeans,
+ event-processing-mode, accumulate-functions, evaluators and
+ assert-behavior".</para>
+
+ <para>From the the kbase reference ksessions can be created</para>
+
+ <example>
+ <title>Knowlege Sessions</title>
+
+ <programlisting language="xml"><drools:ksession id="ksession1" type="stateless" name="stateless1" kbase="kbase1" />
+
+<drools:ksession id="ksession2" type="stateful" kbase="kbase1" /></programlisting>
+ </example>
+
+ <para>Like KnowledgeBases Knowlege sessions can take a number of
+ configurations, including "work-item-handlers, "keep-references",
+ "clock-type", "jpa-persistence".</para>
+
+ <example>
+ <title>Knowlege Sessions Configurations</title>
+
+ <programlisting language="xml"><drools:ksession id="ksession1" type="stateful" kbase="kbase1" >
+ <drools:configuration>
+ <drools:work-item-handlers>
+ <drools:work-item-handler name="handlername" ref="handlerid" />
+ </drools:work-item-handlers>
+ <drools:keep-reference enabled="true" />
+ <drools:clock-type type="REALTIME" />
+ </drools:configuration>
+</drools:ksession></programlisting>
+ </example>
+
+ <para>StatefulKnowledgeSessions can be configured for JPA
+ persistence</para>
+
+ <example>
+ <title>JPA configuration for StatefulKnowledgeSessions</title>
+
+ <programlisting language="xml"><bean id="ds" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
+ <property name="driverClassName" value="org.h2.Driver" />
+ <property name="url" value="jdbc:h2:tcp://localhost/DroolsFlow" />
+ <property name="username" value="sa" />
+ <property name="password" value="" />
+</bean>
+
+<bean id="myEmf" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
+ <property name="dataSource" ref="ds" />
+ <property name="persistenceUnitName" value="org.drools.persistence.jpa.local" />
+</bean>
+
+<bean id="txManager" class="org.springframework.orm.jpa.JpaTransactionManager">
+ <property name="entityManagerFactory" ref="myEmf" />
+</bean>
+
+<drools:ksession id="jpaSingleSessionCommandService" type="stateful" kbase="kbase1">
+ <drools:configuration>
+ <drools:jpa-persistence>
+ <drools:transaction-manager ref="txManager" />
+ <drools:entity-manager-factory ref="myEmf" />
+ <drools:variable-persisters>
+ <drools:persister for-class="javax.persistence.Entity" implementation="org.drools.persistence.processinstance.persisters.JPAVariablePersister"/>
+ <drools:persister for-class="java.lang.String" implementation="org.drools.container.spring.beans.persistence.StringVariablePersister"/>
+ <drools:persister for-class="java.io.Serializable" implementation="org.drools.persistence.processinstance.persisters.SerializableVariablePersister"/>
+ </drools:variable-persisters>
+ </drools:jpa-persistence>
+ </drools:configuration>
+</drools:ksession>
+</programlisting>
+ </example>
+
+ <para>Knowledge Sessions can support startup batch scripts, previous
+ versions used the "script" element name, this will be updated to
+ "batch". The following commands are supported: "insert-object",
+ "set-global", "fire-all-rules", "fire-until-halt", "start-process",
+ "signal-event". Anonymous beans or named "ref" attributes may be
+ used.</para>
+
+ <example>
+ <title>Startup Batch Commands</title>
+
+ <programlisting language="xml"><drools:ksession id="jpaSingleSessionCommandService" type="stateful" kbase="kbase1">
+ <drools:script>
+ <drools:insert-object ref="person1" />
+ <drools:start-process process-id="proc name">
+ <drools:parameter identifier="varName" ref="varRef" />
+ </drools:start-process>
+ <drools:fire-all-rules />
+ </drools:script>
+</drools:ksession>
+</programlisting>
+ </example>
+
+ <para>ExecutionNodes are supported in Spring , these provide a Context
+ of registered ksessions; this can be used with Camel to provide ksession
+ routing.</para>
+
+ <example>
+ <title>Execution Nodes</title>
+
+ <programlisting language="xml"><execution-node id="node1" />
+
+<drools:ksession id="ksession1" type="stateless" name="stateless1" kbase="kbase1" node="node1"/>
+
+<drools:ksession id="ksession2" type="stateful" kbase="kbase1" node="node1"/></programlisting>
+ </example>
+ </section>
+
+ <section>
+ <title>Camel</title>
+
+ <para>Spring can be combined with Camel to provide declarative rule
+ services. a Camel Policy is added from Drools which provides magic for
+ injecting the ClassLoader used by the ksession for any data formatters,
+ it also augments the Jaxb and XStream data formatters. In the case lf
+ Jaxb it adds additional Drools related path info and with XStream it
+ registers Drools related converters and aliases.</para>
+
+ <para>You can create as many endpoints as you require, using different
+ addresses. The CommandMessagBodyReader is needed to allow the payload to
+ be handled by Camel.</para>
+
+ <example>
+ <title>Rest Endpoint Configuration</title>
+
+ <programlisting language="xml"><cxf:rsServer id="rsServer"
+ address="/kservice/rest"
+ serviceClass="org.drools.jax.rs.CommandExecutorImpl">
+ <cxf:providers>
+ <bean class="org.drools.jax.rs.CommandMessageBodyReader"/>
+ </cxf:providers>
+</cxf:rsServer>
+</programlisting>
+ </example>
+
+ <para>Camel routes can then be attached to CXF endpoints, allowing you
+ control over the payload for things like data formatting and executing
+ against Drools ksessions. The DroolsPolicy adds some smarts to the
+ route. If JAXB or XStream are used, it would inject custom paths and
+ converters, it can also set the classloader too on the server side,
+ based on the target ksession. On the client side it automatically
+ unwrapes the Response object.</para>
+
+ <para>This example unmarshalls the payload using an augmented XStream
+ DataFormat and executes it against the ksession1 instance. The "node"
+ there refers to the ExecutionContext, which is a context of registered
+ ksessions.</para>
+
+ <example>
+ <title>Camel Route</title>
+
+ <programlisting language="xml"><bean id="droolsPolicy" class="org.drools.camel.component.DroolsPolicy" />
+
+<camelContext id="camel" xmlns="http://camel.apache.org/schema/spring">
+ <route>
+ <from uri="cxfrs://bean://rsServer"/>
+ <policy ref="droolsPolicy">
+ <unmarshal ref="xstream" />
+ <to uri="drools://node/ksession1" />
+ <marshal ref="xstream" />
+ </policy>
+ </route>
+</camelContext>
+</programlisting>
+ </example>
+
+ <para>The Drools endpoint "drools:node/ksession1" consists of the
+ execution node name followed by a separator and optional knowledge
+ session name. If the knowledge session is not specified the route will
+ look at the "lookup" attribute on the incoming payload instace or in the
+ head attribute "DroolsLookup" to find it.</para>
+ </section>
+
+ <section>
+ <title>Drools Server</title>
+
+ <para>Spring, Camel and CXF can be combined for declarative services,
+ drools-server is a .war that combines these with some sample xml that
+ works out of the box to get you started, acting like a sort of template.
+ If you are using the war in JBoss container you'll need to add this
+ component, http://camel.apache.org/camel-jboss.html. The war includes a
+ test.jsp showing an echo like example to get you started. This example
+ just executes a simple "echo" type application. It sends a message to
+ the rule server that pre-appends the word "echo" to the front and sends
+ it back. By default the message is "Hello World", different messages can
+ be passed using the url parameter msg - test.jsp?msg="My Custom
+ Message".</para>
+ </section>
+
+ <section>
+ <title>Knowledge Agent Incremental Change Support</title>
+
+ <para>The new version of the Knowledge Agent supports newInstance =
+ false in its configuration (incremental change-set build).</para>
+
+ <para>When setting this property to false, the KnowledgeAgent uses the
+ exisitng KnowledgeBase references apply the incremental changes. Now
+ KnowledgeAgent's can process monitored resource modifications in an
+ incremental way. Modified definitions are compiled and compared against
+ the original version. According to definition's type, the behaves in
+ different ways:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para>Rules: For rules, the Agent searches for modifications in its
+ attributes, LHS and RHS.</para>
+ </listitem>
+
+ <listitem>
+ <para>Queries: queries are always replaced on kbase wether they are
+ modified or not.</para>
+ </listitem>
+
+ <listitem>
+ <para>Other definitions: All other definitions are always replaced
+ in kbase (like if they were modified). We expect to add better
+ support for definition's modification detection in further
+ versions.</para>
+ </listitem>
+ </itemizedlist>
+
+ <para>The current implementation only supports the deletion of rules,
+ querries and functions definitions. Type declarations cannot be
+ deleted.</para>
+ </section>
+
+ <section>
+ <title>Session Inspection and Reporting framework</title>
+
+ <para>A new API based framework for runtime session inspection and
+ reporting was introduced, allowing for better data gathering during
+ debugging or profiling of the application. This inspection framework
+ will become the basis of the tooling features to help providing more
+ detailed information about the contents of each session. This api is
+ experimental and not in drools-api for now, but feel free to play and
+ help us improve it.</para>
+
+ <para>To inspect a session, one can use the following API calls:</para>
+
+ <example>
+ <title>Creating a SessionInspector</title>
+
+ <programlisting language="java">StatefulKnowledgeSession ksession = ...
+
+// ... insert facts, fire rules, etc
+
+SessionInspector inspector = new SessionInspector( ksession );
+StatefulKnowledgeSessionInfo info = inspector.getSessionInfo();</programlisting>
+ </example>
+
+ <para>The StatefulKnowledgeSessionInfo instance will contain a lot of
+ relevant data gathered during the analysis of the session. A simple
+ example report template is provided and can be generated with the
+ following API call:</para>
+
+ <example>
+ <title>Generating a Report</title>
+
+ <programlisting language="java">String report = SessionReporter.generateReport( "simple", info, null );</programlisting>
+ </example>
+ </section>
+ </section>
+
+ <section>
+ <title>Expert</title>
+
+ <section>
+ <title>Differential Update</title>
+
+ <para>Rete traditional does an update as a retract + assert, for a given
+ fact this causes all partial matches to be destroyed, however during the
+ assert some of which will be recreated again; because they were true
+ before the update and still true after the update. This causes a lot of
+ uneccessary object destruction and creation which puts more load on the
+ Garbage Collector. Now an update is a single pass and inspects the
+ partial matches in place avoiding the unecessary destruction of partial
+ matches. It also removes the need to under go a normalisation process
+ for events and truth maintenance; the normalisation process was where we
+ would look at the activations retracted and activations inserted to
+ figure out what was truly added and what was truly inserted to determine
+ the "diff".</para>
+ </section>
+
+ <section>
+ <title>Channels</title>
+
+ <para>Exit Points have been replaced by the more aptly named channels,
+ we felt this was more appropriate as they may be used by more than juse
+ the rule engine and not an exact oppposte if Entry Points. Where entry
+ points are explicitey related to entering a partition in the Rete
+ network.</para>
+ </section>
+
+ <section>
+ <title>Live Querries</title>
+
+ <para>Drools has always had query support, but the result was returned
+ as an iterable set; this makes it hard to monitor changes over
+ time.</para>
+
+ <para>We have now complimented this with Live Querries, which has a
+ listener attached instead of returning an iterable result set. These
+ live querries stay open creating a view and publish change events for
+ the contents of this view. So now you can execute your query, with
+ parameters and listen to changes in the resulting view.</para>
+
+ <example>
+ <title>Implementing ViewChangedEventListener</title>
+
+ <programlisting language="java">final List updated = new ArrayList();
+final List removed = new ArrayList();
+final List added = new ArrayList();
+
+ViewChangedEventListener listener = new ViewChangedEventListener() {
+ public void rowUpdated(Row row) {
+ updated.add( row.get( "$price" ) );
+ }
+
+ public void rowRemoved(Row row) {
+ removed.add( row.get( "$price" ) );
+ }
+
+ public void rowAdded(Row row) {
+ added.add( row.get( "$price" ) );
+ }
+};
+
+// Open the LiveQuery
+LiveQuery query = ksession.openLiveQuery( "cheeses",
+ new Object[] { "cheddar", "stilton" },
+ listener );
+...
+...
+query.dispose() // make sure you call dispose when you want the query to close</programlisting>
+ </example>
+
+ <para>A Drools blog article contains an example of Glazed Lists
+ integration for live queries,</para>
+
+ <para><link
+ xlink:href="http://blog.athico.com/2010/07/glazed-lists-examples-for-drools-live.html">http://blog.athico.com/2010/07/glazed-lists-examples-for-drools-live.html</link></para>
+ </section>
+
+ <section>
+ <title>Timers and Calendars</title>
+
+ <para>Rule's now suport both interval and cron based timers, which
+ replace the now deprecated duration attribute.</para>
+
+ <example>
+ <title>Sample timer attribute uses</title>
+
+ <programlisting language="java">timer ( int: <initial delay> <repeat interval>? )
+timer ( int: 30s )
+timer ( int: 30s 5m )
+
+timer ( cron: <cron expression> )
+timer ( cron:* 0/15 * * * ? )</programlisting>
+ </example>
+
+ <para>Interval "int:" timers follow the JDK semantics for initial delay
+ optionally followed by a repeat interval. Cron "cron:" timers follow
+ standard cron expressions:</para>
+
+ <example>
+ <title>A Cron Example</title>
+
+ <programlisting language="java">rule "Send SMS every 15 minutes"
+ timer (cron:* 0/15 * * * ?)
+when
+ $a : Alarm( on == true )
+then
+ channels[ "sms" ].insert( new Sms( $a.mobileNumber, "The alarm is still on" );
+end</programlisting>
+ </example>
+
+ <para>Calendars can now controll when rules can fire. The Calendar api
+ is modelled on <link
+ xlink:href="http://www.quartz-scheduler.org/">Quartz
+ http://www.quartz-scheduler.org/</link> :</para>
+
+ <example>
+ <title>Adapting a Quartz Calendar</title>
+
+ <programlisting language="java">Calendar weekDayCal = QuartzHelper.quartzCalendarAdapter(org.quartz.Calendar quartzCal)</programlisting>
+ </example>
+
+ <para>Calendars are registered with the StatefulKnowledgeSession:</para>
+
+ <example>
+ <title>Registering a Calendar</title>
+
+ <programlisting language="java">ksession.getCalendars().set( "week day", weekDayCal );</programlisting>
+ </example>
+
+ <para>They can be used in conjunction with normal rules and rules
+ including timers. The rule calendar attribute can have one or more comma
+ calendar names.</para>
+
+ <example>
+ <title>Using Calendars and Timers together</title>
+
+ <programlisting language="java">rule "weekdays are high priority"
+ calendars "weekday"
+ timer (int:0 1h)
+when
+ Alarm()
+then
+ send( "priority high - we have an alarm” );
+end
+
+rule "weekend are low priority"
+ calendars "weekend"
+ timer (int:0 4h)
+when
+ Alarm()
+then
+ send( "priority low - we have an alarm” );
+end</programlisting>
+ </example>
+ </section>
+
+ <section>
+ <title>Decision Tables (Excel)</title>
+
+ <section>
+ <title>Simple templating for variable length comma separated lists
+ within cells</title>
+
+ <para>It is now possible to have a comma separated list of values in a
+ cell and render those with a forall template</para>
+
+ <example>
+ <title>DTable forall syntax</title>
+
+ <programlisting language="java">forall(<separator>?){<codesnippt>}</programlisting>
+ </example>
+
+ <example>
+ <title>DTable forall examples</title>
+
+ <programlisting language="java">forall(,) {propertyName == $}
+forall(&&) {propertyName == $}
+forall(||) {propertyName == $}
+forall(||) {propertyNameA == $} && forall(||){propertyNameB == $}
+etc </programlisting>
+ </example>
+ </section>
+ </section>
+ </section>
+
+ <section>
+ <title>Flow</title>
+
+ <section>
+ <title>BPMN2</title>
+
+ <para>As we already announced earlier, the Drools team has decided to
+ support the use of the upcoming BPMN 2.0 specification for specifying
+ business processes using XML. This milestone includes a significant
+ extension of the BPMN2 parser to support more of the BPMN2 features
+ using Drools Flow. More specifically:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para>more extensive event support: much more combinations of event
+ types (start, intermediate and end) and event triggers (including
+ for example error, escalation, timer, conditional and signal
+ events), have been included, as well as (interrupting and
+ non-interrupting) boundary events</para>
+ </listitem>
+
+ <listitem>
+ <para>sub-process parameters</para>
+ </listitem>
+
+ <listitem>
+ <para>diverging inclusive gateway</para>
+ </listitem>
+
+ <listitem>
+ <para>etc.</para>
+ </listitem>
+ </itemizedlist>
+
+ <para>BPMN2 processes have also been integrated in the entire Drools
+ tool chain, to support the entire life cycle of the business process.
+ This includes</para>
+
+ <itemizedlist>
+ <listitem>
+ <para>The ability to use BPMN2 processes in combination with our
+ Eclipse tooling</para>
+ </listitem>
+
+ <listitem>
+ <para>Guvnor as process repository</para>
+ </listitem>
+
+ <listitem>
+ <para>web-based management using the BPM console</para>
+ </listitem>
+
+ <listitem>
+ <para>auditing and debugging</para>
+ </listitem>
+
+ <listitem>
+ <para>domain-specific processes</para>
+ </listitem>
+
+ <listitem>
+ <para>etc.</para>
+ </listitem>
+ </itemizedlist>
+
+ <para>As a result, Drools Flow is not only the first open-source process
+ engine that supports such a significant set of BPMN2 constructs
+ natively, our knowledge-oriented approach also allows you to easily
+ combine your BPMN2 processes with business rules and complex event
+ processing, all using the same APIs and tools.</para>
+ </section>
+
+ <section>
+ <title>Web-based Management console</title>
+
+ <para>Drools Flow processes can now also be managed through a web
+ console. This includes features like managing your process instances
+ (starting/stopping/inspecting), inspecting your (human) task list and
+ executing those tasks, and generating reports.</para>
+
+ <para>This console is actually the (excellent!) work of Heiko Braun, who
+ has created a generic BPM console that can be used to support multiple
+ process languages. We have therefore implemented the necessary
+ components to allow this console to communicate with the Drools Flow
+ engine.</para>
+ </section>
+
+ <section>
+ <title>Pluggable Variable Persistence</title>
+
+ <para>Drools Flow can persist the runtime state of the running processes
+ to a database (so they don't all need to be in memory and can be
+ restored in case of failure). Our default persistence mechanism stores
+ all the runtime information related to one process instance as a binary
+ object (with associated metadata). The data associated with this process
+ instance (aka process instance variables) were also stored as part of
+ that binary object. This however could generate problem (1) when the
+ data was not Serializable, (2) when the objects were too large to
+ persist as part of the process instance state or (3) when they were
+ already persisted elsewhere. We have therefor implemented pluggable
+ variable persisters where the user can define how variable values are
+ stored. This for example allows you to store variable values separately,
+ and does support JPA entities to be stored separately and referenced
+ (avoiding duplication of state).</para>
+ </section>
+
+ <section>
+ <title>Improved Process Instance Migration</title>
+
+ <para>Over time, processes may evolve. Whenever a process is updated, it
+ is important to determine what should happen to the already running
+ process instances. We have improved our support for migrating running
+ process instances to a newer version of the process definition. Check
+ out the Drools Flow documentation for more information.</para>
+ </section>
+
+ <section>
+ <title>Installation Script</title>
+
+ <para>The Drools build now exports an installer that simplifies
+ installing the Eclipse plugin, Guvnor and the gwt-console. It creates
+ and copies the necessary jars and wars and deploys them to the JBoss AS.
+ It also includes a simple evaluation process example you can use to test
+ your setup. For more info, download the drools installer and take a look
+ at the readme within.</para>
+ </section>
+ </section>
+
+ <section>
+ <title>Guvnor</title>
+
+ <para>Appearance has been cleaned, for example less pop ups. Reminders for
+ save after changes in assets and information about actions that were
+ taken, also better error reporting if something goes wrong.</para>
+
+ <section>
+ <title>Discussions</title>
+
+ <para>The comments are below the "documentation" section (and of course
+ optional) (and there is an Atom feed to them).</para>
+
+ <figure>
+ <title>Realtime Discussions</title>
+
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center"
+ fileref="images/Chapter-Release_Notes/discussion1.png"
+ format="PNG" scalefit="1"></imagedata>
+ </imageobject>
+ </mediaobject>
+ </figure>
+
+ <para>A "backchannel" type connection that is kept open from the browser
+ to allow messages to push back - this means (when enabled) that messages
+ show up in real time (and other handy things like if something is added
+ to a list - the list is updated).</para>
+ </section>
+
+ <section>
+ <title>Inbox</title>
+
+ <para>The inbox feature provides the ability to track what you have
+ opened, or edited - this shows up under an "Inbox" item in the main
+ navigator. <link
+ xlink:href="http://blog.athico.com/2009/09/inbox-feature-to-track-recent-changes.html"></link></para>
+
+ <figure>
+ <title>Inbox Categories</title>
+
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center"
+ fileref="images/Chapter-Release_Notes/inbox1.png"
+ format="PNG" scalefit="1"></imagedata>
+ </imageobject>
+ </mediaobject>
+ </figure>
+
+ <itemizedlist>
+ <listitem>
+ <para><emphasis role="bold">Recently Opened </emphasis></para>
+
+ <itemizedlist>
+ <listitem>
+ <para>Clicking on the recently opened item will open a listing
+ of all items you have "recently" opened (it tracks a few hundred
+ items that you were last to look at).</para>
+ </listitem>
+ </itemizedlist>
+ </listitem>
+
+ <listitem>
+ <para><emphasis role="bold">Recently Edited</emphasis></para>
+
+ <itemizedlist>
+ <listitem>
+ <para>Any items that you save changes to, or comment on will
+ show up here, once again.</para>
+ </listitem>
+ </itemizedlist>
+ </listitem>
+
+ <listitem>
+ <para><emphasis role="bold">Incoming changes</emphasis></para>
+
+ <itemizedlist>
+ <listitem>
+ <para>This tracks changes made by *other people* to items that
+ are in *your* "Recently Edited" list. When you open these items
+ they then are removed from this list (but remain in your
+ Recently Edited list).</para>
+ </listitem>
+ </itemizedlist>
+ </listitem>
+ </itemizedlist>
+
+ <figure>
+ <title>Inbox Item Lists</title>
+
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center"
+ fileref="images/Chapter-Release_Notes/inbox2.png"
+ format="PNG" scalefit="1"></imagedata>
+ </imageobject>
+ </mediaobject>
+ </figure>
+ </section>
+
+ <section>
+ <title>Bulk Importer</title>
+
+ <para>The Guvnor-Importer is a maven build tool that recurses your rules
+ directory structure and constructs an xml import file that can be
+ manually imported into the Drools-Guvnor web interface via the
+ import/export administration feature.</para>
+ </section>
+
+ <section>
+ <title>DroolsDoc</title>
+
+ <para>PDF document containing information about the package and each DRL
+ asset. DroolsDoc for knowledge package can be downloaded from package
+ view under "Information and important URLs"</para>
+ </section>
+
+ <section>
+ <title>Update to GWT 2.0</title>
+
+ <para>GWT was updated, making Guvnor faster.</para>
+ </section>
+
+ <section>
+ <title>Build in Selector</title>
+
+ <para>The built in selector allows user to choose what assets to build
+ according to:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para>Status (eg, Dev, QA etc)</para>
+ </listitem>
+
+ <listitem>
+ <para>Category</para>
+ </listitem>
+
+ <listitem>
+ <para>Metadata</para>
+ </listitem>
+ </itemizedlist>
+ </section>
+
+ <section>
+ <title>Single Asset Verification</title>
+
+ <para>It is possible to verify just the asset you are working on (
+ ruleflow, rule, decision table ). Verification finds issues like
+ conflicting restrictions in a rule or redundant rows in decision
+ tables.</para>
+ </section>
+
+ <section>
+ <title>Global Area</title>
+
+ <para>Assets stored in Global area can be shared to all packages.</para>
+ </section>
+
+ <section>
+ <title>Diff Check between Snapshots</title>
+
+ <para>Lists the changes between two snapshots.</para>
+ </section>
+
+ <section>
+ <title>View Multiple Assets in One Tab</title>
+
+ <para>Makes it possible to open more than one asset into one view. All
+ the assets can be saved and edited as a group.</para>
+ </section>
+
+ <section>
+ <title>From/Collect/Accumulate support</title>
+
+ <para>Guided Editor has basic support for From, Accumulate and Collect
+ Patterns. You can add any of these structures as regular Patterns. New
+ expression builder component was created to add support for nested
+ method calls of a variable. Using the “plus” button at the top of rule’s
+ WHEN section or using the new “Add after” button present in every
+ Pattern will open the popup to add new conditional elements to your
+ rule. In the list of possible elements you will find three new entries:
+ ”From”, “From Accumulate” and “From Collect”.</para>
+
+ <para>When you add a new “From” element, you will see something like the
+ image below in the guided editor. The left pattern of the “From”
+ conditional element is a regular Pattern. You can add there any type of
+ conditional element you want.The right section of the “From” pattern is
+ an expression builder.</para>
+
+ <figure>
+ <title>From CE Builder</title>
+
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center"
+ fileref="images/Chapter-Release_Notes/from_builder.png"
+ format="PNG" scalefit="1"></imagedata>
+ </imageobject>
+ </mediaobject>
+ </figure>
+
+ <para>When using 'from collect' In the left pattern you can choose from
+ “java.util.Collection”, “java.util.List” or “java.util.Set” Fact Types.
+ This Fact Types will be automatically included in the package’s Fact
+ Types list.</para>
+
+ <para>The right pattern of the collect conditional element could be one
+ of this patterns:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para>Fact Type Pattern</para>
+ </listitem>
+
+ <listitem>
+ <para>Free Form Expression</para>
+ </listitem>
+
+ <listitem>
+ <para>From Pattern</para>
+ </listitem>
+
+ <listitem>
+ <para>From Collect Pattern</para>
+ </listitem>
+
+ <listitem>
+ <para>From Accumulate Pattern</para>
+ </listitem>
+ </itemizedlist>
+
+ <figure>
+ <title>From Collect CE Builder</title>
+
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center"
+ fileref="images/Chapter-Release_Notes/fromcollect.png"
+ format="PNG" scalefit="1"></imagedata>
+ </imageobject>
+ </mediaobject>
+ </figure>
+
+ <para>When using 'from accumulate' The left pattern could be any Fact
+ Type Pattern. The right section of this conditional element is splited
+ in two:</para>
+
+ <figure>
+ <title>From Accumulate CE Builder</title>
+
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center"
+ fileref="images/Chapter-Release_Notes/fromaccumulate.png"
+ format="PNG" scalefit="1"></imagedata>
+ </imageobject>
+ </mediaobject>
+ </figure>
+
+ <para>The left pattern could be any Fact Type Pattern. The right section
+ of this conditional element is splited in two:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para>Source Pattern: (Bed $n, in the screenshot) could be any Fact
+ Type, From, Collect or Accumulate pattern.</para>
+ </listitem>
+
+ <listitem>
+ <para>Accumulate function: Here you will find a tabbed panel where
+ you can enter an accumulate function (sum() in the screenshot) or
+ you can create an online custom function using the “Custom Code”
+ tab.</para>
+ </listitem>
+ </itemizedlist>
+ </section>
+
+ <section>
+ <title>Rule Templates</title>
+
+ <para>Rule Templates allow the Guided editor to be used to build complex
+ rules that can then be authored easily through a spreadsheet's tabular
+ data metaphor. Instead of a field's value, simply mark it as a named
+ "Template Key" and that key is available as a column in the grid. Each
+ row will be applied to the rule template to generate a rule.</para>
+
+ <figure>
+ <title>Adding a Template Key in the 'WHEN' Section</title>
+
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center"
+ fileref="images/Chapter-Release_Notes/ruletemplate1.png"
+ format="PNG" scalefit="1"></imagedata>
+ </imageobject>
+ </mediaobject>
+ </figure>
+
+ <figure>
+ <title>Adding a Template Key in the "THEN" Section</title>
+
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center"
+ fileref="images/Chapter-Release_Notes/ruletemplate2.png"
+ format="PNG" scalefit="1"></imagedata>
+ </imageobject>
+ </mediaobject>
+ </figure>
+
+ <figure>
+ <title>Populating Rows against those Template Keys</title>
+
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center"
+ fileref="images/Chapter-Release_Notes/ruletemplate3.png"
+ format="PNG" scalefit="1"></imagedata>
+ </imageobject>
+ </mediaobject>
+ </figure>
+
+ <figure>
+ <title>Each Row generates a Rule</title>
+
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center"
+ fileref="images/Chapter-Release_Notes/ruletemplate4.png"
+ format="PNG" scalefit="1"></imagedata>
+ </imageobject>
+ </mediaobject>
+ </figure>
+ </section>
+
+ <section>
+ <title>Working Sets</title>
+
+ <para>When modelling rules the user gets exposed to all the fact types
+ which can be a bit over whelming. Working Sets allow related fact types
+ can be grouped together, provided a more managable view of selecting
+ fact types, when authoring rules</para>
+
+ <figure>
+ <title>Show the imported types</title>
+
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center"
+ fileref="images/Chapter-Release_Notes/facttypes.png"
+ format="PNG" scalefit="1"></imagedata>
+ </imageobject>
+ </mediaobject>
+ </figure>
+
+ <figure>
+ <title>Create Animals Working Set</title>
+
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center"
+ fileref="images/Chapter-Release_Notes/workingsets1.png"
+ format="PNG" scalefit="1"></imagedata>
+ </imageobject>
+ </mediaobject>
+ </figure>
+
+ <figure>
+ <title>Without the Working Set all types are visible</title>
+
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center"
+ fileref="images/Chapter-Release_Notes/workingsets2.png"
+ format="PNG" scalefit="1"></imagedata>
+ </imageobject>
+ </mediaobject>
+ </figure>
+
+ <figure>
+ <title>Select the Animals Working Set</title>
+
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center"
+ fileref="images/Chapter-Release_Notes/workingsets3.png"
+ format="PNG" scalefit="1"></imagedata>
+ </imageobject>
+ </mediaobject>
+ </figure>
+
+ <figure>
+ <title>The available types are reduced</title>
+
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center"
+ fileref="images/Chapter-Release_Notes/workingsets4.png"
+ format="PNG" scalefit="1"></imagedata>
+ </imageobject>
+ </mediaobject>
+ </figure>
+ </section>
+
+ <section>
+ <title>Fact Constraints</title>
+
+ <para>Working Sets can be combined with fact consraints to provide
+ additional design time validation. For instance if you are authoring a
+ rule on someone's age, we can know the valid ranges at design time and
+ use this to constrain the author. The fact constraints are part of the
+ workingset and when authoring a rule you must select the work set
+ constraints that you wish to be applied as part of the validation
+ process.</para>
+
+ <figure>
+ <title>Selecting the field</title>
+
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center"
+ fileref="images/Chapter-Release_Notes/factconstraints1.png"
+ format="PNG" scalefit="1"></imagedata>
+ </imageobject>
+ </mediaobject>
+ </figure>
+
+ <figure>
+ <title>Selectng the type of field constraint</title>
+
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center"
+ fileref="images/Chapter-Release_Notes/factconstraints2.png"
+ format="PNG" scalefit="1"></imagedata>
+ </imageobject>
+ </mediaobject>
+ </figure>
+
+ <figure>
+ <title>A example range constraint</title>
+
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center"
+ fileref="images/Chapter-Release_Notes/factconstraints3.png"
+ format="PNG" scalefit="1"></imagedata>
+ </imageobject>
+ </mediaobject>
+ </figure>
+
+ <figure>
+ <title>Select the working set to validate the age field</title>
+
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center"
+ fileref="images/Chapter-Release_Notes/factconstraints4.png"
+ format="PNG" scalefit="1"></imagedata>
+ </imageobject>
+ </mediaobject>
+ </figure>
+
+ <figure>
+ <title>A age of 5 is invalid</title>
+
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center"
+ fileref="images/Chapter-Release_Notes/factconstraints5.png"
+ format="PNG" scalefit="1"></imagedata>
+ </imageobject>
+ </mediaobject>
+ </figure>
+ </section>
+
+ <section>
+ <title>Guided Rule Editor</title>
+
+ <para>Editing rules is made more explicit. Editor is less "boxy" and
+ rules are written more as a normal text. "contains" keyword was added
+ and binding variables to restrictions is now easier.</para>
+
+ <section>
+ <title>Pattern Order</title>
+
+ <para>Guided Editor supports Pattern reordering in LHS and RHS
+ sections, as well as positional inserting, new Patterns can be
+ inserted in any order (and not always at the end).</para>
+
+ <figure>
+ <title>Move elements up or down</title>
+
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center"
+ fileref="images/Chapter-Release_Notes/patternordering1.png"
+ format="PNG" scalefit="1"></imagedata>
+ </imageobject>
+ </mediaobject>
+ </figure>
+
+ <figure>
+ <title>Insert Element at any position</title>
+
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center"
+ fileref="images/Chapter-Release_Notes/patternordering2.png"
+ format="PNG" scalefit="1"></imagedata>
+ </imageobject>
+ </mediaobject>
+ </figure>
+ </section>
+ </section>
+
+ <section>
+ <title>Decision Table (Guvnor)</title>
+
+ <para>Keyword "in" was added.</para>
+
+ <para>Columns can be moved and location of a new row can be selected
+ freely.</para>
+ </section>
+ </section>
+
+ <section>
+ <title>Eclipse</title>
+
+ <section>
+ <title>Group Rules in outline view</title>
+
+ <para>You can now use sorting and grouping for Agenda Groups.</para>
+
+ <figure>
+ <title>Group by Agenda Group</title>
+
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center"
+ fileref="images/Chapter-Release_Notes/Group By.jpg"
+ format="PNG" scalefit="1"></imagedata>
+ </imageobject>
+ </mediaobject>
+ </figure>
+
+ <figure>
+ <title>Sort by Agenda Group</title>
+
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center"
+ fileref="images/Chapter-Release_Notes/SortBy.jpg"
+ format="PNG" scalefit="1"></imagedata>
+ </imageobject>
+ </mediaobject>
+ </figure>
+ </section>
+
+ <section>
+ <title>Drag/Drop File support in audit View</title>
+
+ <para>It is now possible to drag and drop log files into the audit
+ view.</para>
+ </section>
+ </section>
+ <section>
+ <title>Known Issues</title>
+
+ <section>
+ <title>Multithread mode</title>
+
+ <para>There is a known issue with the experimental multi-thread
+ execution mode as described in the following JIRA.</para>
+
+ <para><link
+ xlink:href="???">https://jira.jboss.org/browse/JBRULES-2125</link></para>
+ </section>
+ </section>
+</section>
More information about the jboss-svn-commits
mailing list