Version 3

    API/Language changes

    assert will change to insert

    • Avoid the constant keyword collision with "assert", most languages are seem to support this now

    • Will change in both the drl and working memory api



    modify to become update

    • Instead of workingMemory.modify(FactHandle, Object) it will be workingMemory.update(FactHandle, Object), will change modify to update in drl.

    • This method is now only used for ShadowFact objects, it's a method to let the engine know that an external object has been updated and to update it's internal cache. and reprocess.

    • Avoid keyword collision in MVEL which has nice "modify" sugar now


    insertObject (assertObject), retractObject and updateObject to beome insert, retract and update

    • The Object part seems superflous, might as well remove it, especially as we start to support None Object fact types

    • drl and working memory api will now use the same method names.



    Added new WorkingMemory modifyRetract and modifyAssert methods

    • Allows for non shadow fact objects.

    • When not using shadow facts (although will ofcourse work with shadow facts) you cannot call 'update', or what use to be called 'modify', because we need to know the "old" value of fields so we can retract the from the workign memory. The only safe way is to first retract the object and then assert it. However with the existing api this adds extra work and results in new fact handle. modifyRetract and modifyAssert can now be used together to "simulate" a modify on a none shadow fact object in two parts. First call modifyRetract, then change your field values, then call modifyAssert.

    • AMVEL has sugar to do: modify ( person ) { age += 1, location = "london" }, what actually happens here is it first calls modifyRetract then applies the setters and then calles modifyAssert.



    core and compiler

    JBRULES-231 - add "not contains" and "not matches" constraints

    Support to new operators "not contains" and "not matches" was added to the language.


    JBRULES-315 - Support to Expression and Nested Accessors

    Support to expressions and nested accessors was added to the language, allowing things like:

    Person( address[business|'business'].phone{FOOTNOTE DEF 0 0}.areaCode == $country.area[south|'south'].code )


    JBRULES-500 - Special connective "or" constraint

    Support to || connective now allows patterns to be constrained with 'or' between fields and any level of expression nesting. Example:

    Person( ( age ( > 20 && < 30) || (>40 && <50) && location=="atlanta" ) ||

                   ( age > 20 && location=="Seatle" ) ||

                   location == "Chicago" )


    JBRULES-585 - syntax sugar for binding to a field on a bound fact

    JBRULES-662 - Make the TMS optional

    JBRULES-866 - Allow the pattern binding variable to be used field constraints

    JBRULES-874 - Allow direct property access to pattern bound variables

    This is just syntax sugar to avoid binding to fields themselves. So it is still as performatic as binding to fields themselves.

    c: Customer()

    p: Person(customerId ==


    JBRULES-708 - Full MVEL integration

    MVEL is now fully integrated into the engine and can be used in all CEs that allow for custom code as well as in the rules consequence.


    JBRULES-713 - Make Dialects Pluggeable

    Dialects are now pluggable. We have 2 officially supported dialects: Java and MVEL, but users can now add their own by implementing builders specific to the wanted dialect.


    JBRULES-875 - dynamic salience

    Engine supports now dynamic saliences by using an expression that includes field and pattern bindings. Meaning the rule can be prioritized based on the data matching it.


    JBRULES-895 - Better Properties Support

    Engine now supports chained properties configuration files and also automatically loads default configurations.


    JBRULES-900 - Allow parameterised queries


    JBRULES-916 - Create a new rule name agenda filter that uses regular expressions to filter on


    JBRULES-917 - Allow querry params to specify type


    JBRULES-922 - API change for assert and modify

    API was changed renaming methods and keywords from "assert" to "insert" and "modify" to "update", avoid conflicts with dialect keywords.


    JBRULES-925 - Add support to MVEL in Accumulate CE

    Accumulate CE is now fully integrated with MVEL, allowing custom code blocks to be written in MVEL.


    JBRULES-927 - Migrate java grammar to version 5

    Parser grammar is now updated to java version 5 grammar.


    JBRULES-930 - Optional Shadow Facts

    Shadow facts are now optional, allowing the user to turn them off on a per-class basis


    JBRULES-880 - Update XML component to handle with 4.0 language changes


    JBRULES-935 - Update DrlDumper to handle with the new language features

    DRL Dumper, XML parser and XML dumper are now updated to version 4.0 language features.


    JBRULES-936 - Implement incremental accumulation/collection for accumulate and collect CE

    Collect and Accumulate both support incremental processing now, allowing for much improved performance.


    JBRULES-941 - Add support to pluggable accumulate functions

    Accumulate CE now supports pluggable functions. More details here:


    JBRULES-214 - goddamn keyword collisions damn it damn damn

    Keyword collisions were reduced to a minimum keyword set.


    JBRULES-908 - Clean up DRL.g accoding to ANTLR consultancy recommendations

    DRL grammar was cleaned up and improved, allowing for better performance and error handling, as well as IDE support.




    • support for constraints in (X)OR splits

    • support for looping

    • listener support on working memory

    • audit support for working memory events

    • IDE enhancements:

      • snap to grid

      • more advanced router layouts

      • constraint editor includes syntax colouring + code completion

      • possibility to include a sample ruleflow + launcher when creating

    • a new rules project


    IDE enhancements:

    • Support for .package files in builder

    • Audit view supports ruleflow

    • Updates due to core / compiler API changes

    • New Guided Editor