Release notes

2.8.1 (2022-01-18):

EXTENSIONS
– Security fix on Vaadin based extensions.

2.8.0 (2021-12-30):

ALL
– Updated dependencies versions (log4j, vaadin, etc).
– All MRules modules versions are bumped to 2.8.0.

FMK (from 2.6.0 to 2.8.0)
– Improvement: better error message in log factory.
– Improvement: handled all log4j versions in log factory.

2.7.1 (2021-04-17):

BRE (from 2.6.0 to 2.7.0)
– Fix: critical bug on optimizer, having impacts on some accessors :
– min / max value
– date manipulation
– search / count / filter in collections
Only occurs if used with a VALUES accessor as a source.

– Fix: modified api of values accessor and sort action to be more generic.
– Improvement: improved type handling for math operations (first part).

DSL Editor (from 1.6.0 to 1.6.1)
– Repackaged with new dependencies versions.

DSL Editor for Rule Engine (from 1.6.0 to 1.6.1)
– Repackaged with new dependencies versions.

DEMO (All to 2.7.1)
– Repackaged with new dependencies versions.

2.7.0 (2021-04-07):

All (Breaking changes)
– JDK 6 is now unsupported.
– JDK 7 is now the minimum runtime requirement to run MRules.span>
– JDK 7 extension has been reintegrated into MRules FMK library.
– JDK 9 to 15 added to supported versions.

FMK (from 2.6.0 to 2.7.0)
– Improvement: improved property access for better access right checks.
This rework paves the way for MRules compatibility with latest JDK.

BRE (from 2.6.0 to 2.7.0)
– Feature: (api) added possibility to list all addons IDs with API.
– Fix: Javadoc fixes.
– Fix: potential bug on number comparison, due to incorrect conversion.

DSL (from 2.3.0 to 2.4.0)
– Feature: Added possibility to override computed autocomplete content in DSL configuration.
– Improvement: improved autocompletion accuracy.

DSL Extension for BRE (from 1.5.0 to 1.5.1)
– Feature: auto completion for specific global variables.
– Improvement: improved autocompletion accuracy.
– Fix: exceptions appeared in logs when validating bre mrl configuration.
These exceptions were abusively logged while they where part of a normal syntax validation process.

DSL Editor (from 1.5.0 to 1.6.0)
– Improvement: changed method visibility to bring more flexibility on UI extension.
– Repackaged with new dependencies versions.

DSL Editor for Rule Engine (from 1.5.0 to 1.6.0)
– Improvement: impacted method visibility change on DSL Editor.
– Repackaged with new dependencies versions.

DEMO (All to 2.7.0)
– Modified rules to use “elseif” when possible.
– Repackaged with new dependencies versions.

2.6.0 (2020-09-29):

FMK (from 2.5.0 to 2.6.0)
– Fix: corrected mrules-utils DTD.
– Improvement: added possibility to register several security managers in same configuration file.

BRE (from 2.5.0 to 2.6.0)
– Fix: corrected potential issue on generic comparator.
– Fix: corrected malformed debug and tracing logs.
– Improvement: improved abstraction in RuleExecutionSet class hierarchy : abstract RuleSet implementation now provides basis for general actions to perform when executing the ruleset.
– Improvement: ruleset metadata should never be null.
– Refactoring: replaced IMruleExecutionSet by IMRuleExecutionSet : old interface is keept as deprecated for compatibility, but will be removed soon.
– Feature: added UNDEF accessor.
– Feature: monitoring rulesets lifecycle with JMX.

DSL Extension for BRE (from 1.5.0 to 1.5.1)
– Fix: corrected rule engine dsl for “elseif” syntax.

Monitoring Extension (NEW: 1.0.0)
– Exporting rulesets metrics in open metrics (Promotheus) format with Micrometer.

Spring Extension (from 2.0.0 to 2.1.0)
– Feature: added monitoring auto configuration.

JDK8 Extension (from 2.0.0 to 2.0.1)
– Fix: corrected logs configuration for jdk8 extension tests.
– Build: This extension now requires JDK8.

DSL Editor (from 1.5.0 to 1.5.1)
– Repackaged with new dependencies versions.

DSL Editor for Rule Engine (from 1.5.0 to 1.5.1)
– Repackaged with new dependencies versions.

DEMO (All to 2.6.0)
– Repackaged with new dependencies versions.
– Activate jmx monitoring and metrics exporting on insurance demo.
– Updated all dsl editor demos to use spring boot 2.
– Spring Demo and JSon DSL Demo now require JDK8.

2.5.0 (2020-06-29):

FMK (from 2.4.0 to 2.5.0)
– Doc: fix DefaultLog javadoc.
– Improvement: improved XML reader API.
– Features: lots of modifications on the Log interface:
  – Improved jul support.
  – Added log4j support without log interface like slf4j or commons-logging.
  – Added tinylog support.
  – Added possibility to force log implementation:
    – by System property “mrules.log.factory”.
    – by config file “mrules-log-factory.properties”.

BRE (from 2.4.0 to 2.5.0)
– Fix: try to auto detect when a cast problem could occur during condition evaluation.
– Fix: regression on persistence of compilation level in configuration.
– Fix: added default persistant configuration value for MIN and MAX accessors.
– Improvement: slight improvement to clarify xml factory api.
– Improvement: improved factory for better read / write of ruleset configuration.
– Improvement: improved type guess for collections at compile time, which allows to avoid “live” casts at runtime and slightly improves performances.
– Feature: added DEFINED accessor, to check if a local variable is defined.
– Feature: improving “if / else” rules by introducing “elseif”.
– Refacto: (breaking change) added Outable interface and dedicated ‘out’ package for Outer classes.

DSL (from 2.2.0 to 2.3.0)
– Fix: skip match text flag not taken into account by the DSL parser in some cases.
– Fix: missed some definitions in grammar XML dtd.

DSL Extension for BRE (from 1.4.0 to 1.5.0)
– Fix: BRE DSL corrected to correspond strictly to xml dtd.
– Feature: updated DSL with new DEFINED accessor.
– Feature: updated DSL with new “elseif” feature.

DSL Editor (from 1.4.0 to 1.5.0)
– Repackaged with new dependencies versions.

DSL Editor for Rule Engine (from 1.4.0 to 1.5.0)
– Repackaged with new dependencies versions.

DEMO (All to 2.5.0)
– Repackaged with new dependencies versions.
– Impacted breaking change on Drools fight and E-shop.

2.4.0 (2020-02-16):

FMK (from 2.3.0 to 2.4.0)
– Fix: bug on empty property compilation which affected rule engine.
– Fix: regression in resource loader affecting classpath search in rare cases. Insurance demo was affected by this regression.
– Fix: problem on classpath retrieving for jdk9+, affecting DSL editor startup.
– Improvement: private constructors are now accessible.
– Improvement: improved privileged action calls.
– Improvement: improved exception API.
– Improvement: improved advanced reader api.
– Improvement: added rtrim and ltrim String utilities.
– Feature: adding security management via security managers.
  – Provides control access on static fields and methods.

BRE (from 2.3.0 to 2.4.0)
– Fix: corrected return type for rule engine extended property compiler.
– Improvement: improved debug and trace logs for rule engine execution.
– Improvement: added new GenericComparators, based on internal code made public.
– Feature: added new MIN and MAX accessors with advanced filtering and nested properties usage.
– Feature: adding security management via security managers.
  – Provides control access on system calls.

DSL (from 2.1.0 to 2.2.0)
– Improvement: improved parsing error message, which gives more precise location.

DSL html Documentation (from 1.1.0 to 1.1.1)
– Doc: error in javadoc.

DSL Extension for BRE (from 1.3.0 to 1.4.0)
– Fix: fixed bug on auto completion which did not trimmed typed text.
– Improvement: adding sub source for property accessor to dsl grammar.
– Improvement: common addon logging utilities are now in MAddonsUtils.
– Improvement: refactoring classes hierarchy to remove obsolete class AbstractMRulesUtilities.
– Feature: updated DSL with new MIN and MAX accessors.

DSL Editor (from 1.3.0 to 1.4.0)
– Improvement: improved logs to avoid stack traces in info level.
– Repackaged with new dependencies versions.

DSL Editor for Rule Engine (from 1.3.0 to 1.4.0)
– Repackaged with new dependencies versions.

DEMO (All to 2.4.0)
– Improvement (all): takes core modifications on rule engine into account.
– Fix (Insurance): corrected batch demo triggering delay to correspond to comment.
– Fix (Advanced): now runs without error on Linux.

ALL
– Doc: changed javadoc level for javadoc agregate project in order to show documentation for protected and package private members.
– Improvement: several internal code optimizations and tests improvements.

2.3.0 (2019-10-18):

FMK (from 2.2.0 to 2.3.0)
– Improvement: improved typed map usage in property framework.

BRE (from 2.2.0 to 2.3.0)
– Fix: bad cast sometimes for local variables.
– Fix: math operations are handled better.
– Improvement: slightly improved logs for ruleset cache accesses.

DEMOS (All to 2.3.0)
– Added new health insurance demo.
– Improvement: changed packaging of demos to be easier to download and test.
– Improvement: changed vaadin version to be compatible with last jdks (until jdk11).

DSL Extension for BRE (from 1.2.0 to 1.3.0)
– Fix: handing classes with no packages in classpath discovery.
– Fix: dsl “raise error” lexeme now accepts accessor.
– fix: non critical extension should not prevent from starting the rest of the application if it fails.

DSL Editor (from 1.2.0 to 1.3.0)
– Improvement: changed vaadin version to be compatible with last jdks (until jdk11).

DSL Editor for Rule Engine (from 1.2.0 to 1.3.0)
– Improvement: changed vaadin version to be compatible with last jdks (until jdk11).

2.2.0 (2019-03-12):

BOM (from 2.1.1 to 2.2.0)
– Corrects BOM name.

FMK (from 2.1.0 to 2.2.0)
– New feature: Local imports. Implementing local imports resolution.
– New feature: Property framework now handles static accesses to fields and methods.
– Improvement: AdvancedReader has been enriched with lots of new features.
– Improvement: Added sub directories scan in resources search.
– Improvement: Added possibility to scan the classes provided by the JVM.
– Improvement: Added XML encoding for tabulation.
– Improvement: Added licence information helper.
– Change: AdvancedReader has been moved to another package.

BRE (from 2.1.0 to 2.2.0)
– New feature: Local imports. Implementing local imports usage.
– New feature: Updated Property Accessor and utilities to allow static accesses.
– Improvement: Better isolation of flag stopAtFirstValidatedCondition after compilation.
– Improvement: Added possibility to provide compilation level in context factory.
– Improvement: Added possibility to ignore parent persistent properties
– Improvement: Implied, added possibility to force or not compilation level in ruleset factory.
– Improvement: Improved addon properties api.
– Improvement: Added convenience utility class to wrap execution set.
– Improvement: MValueAccessor now auto-converts into BigDecimal, not Double.
– Optimization: Caching local variable target type at compilation.
– Fix: Bug in addon converter in case of empty string value.
– Fix: XML Factory : Constant “VALUE” is not correctly persisted in config.
– Deprecation: Removed some deprecated code.

DSL (from 2.0.0 to 2.1.0)
– New feature: Added new Dynamic Matcher, allowing to match dynamic source blocks depending on previous text.
– New feature: Added new Text Matcher, allowing to match text blocks.
– New feature: Added specific lexer for Java Class name. Quotes are no more required.
– New feature: Added specific lexer for Enum (from Jave Enum or list of values).
– Improvement: Better comments handling.
– Improvement: Improved debug information in parsed result.
– Improvement: Added possibility to reference multiple lexer IDs in blocks.
– Improvement: Added autocompletion at LexerParser level (previously only available at Matcher level).
– Improvement: Added possibility to deactivate an auto complete suggestion.
– Improvement: Added possibility to not skip spaces before match.
– Improvement: Autocomplete suggestions can now override already typed characters, not only append new characters.
– Fix: Case sensitive flag for multiple fixed matchers is not taken into account.
– Fix: Fixed bad line / column in parsing error.

DSL html documentation (from 1.0.1 to 1.1.0)
– New feature: Updated DSL documentation with newly added features.
– Improvement: Added clear filter button on rendered documentation.

DSL Extension for BRE (from 1.1.0 to 1.2.0)
– New feature: local imports. Implementing local imports in DSL grammar.
– New feature: Classes and packages autocompletion is now available (in imports or in rules).
– New feature: Added static acces to DSL.
– New feature: Added static access autocompletion.
– New feature: Allowing to set ruleset properties in DSL.
– New feature: Raw String Litterals added to grammar.
– Change: An order is now mandatory in ruleset configuration file: imports, then configuration and then rules.
– Fix: Property lexer matcher detects better end of property.
– Fix: Grammar for CAST accessor with generic type.

Native Properties Extension (from 2.0.0 to 2.1.0)
– New feature: Handle native accesses to public static fields and methods.

DSL Editor (from 1.1.0 to 1.2.0)
– Improvement: Rendering the possibility to deactivate an auto complete option.
– Fix: Problem when applying autocomplete if new characters typed.

DSL Editor for Rule Engine (from 1.1.0 to 1.2.0)
– Improvement: Added logback config to dsl bre editor.

Demos
– Drools Fight: New feature: local imports. Illustrating local imports usage.
– Sudoku: Improvement: Code cleaning.
– Sudoku and Drools Fight: Improvement: Deactivate DSL part of the demo if module is not licenced.
– DemoDslJson. Change: Updated demo to follow changes on core code.
– DemoDslJsonEditor. Improvement: Added logback config.

2.1.1 (2018-12-18):

Demos
– Corrected packaging problem in DroolsFight Demo.

2.1.0 (2018-10-27):

FMK (from 2.0.0 to 2.1.0)
– Fix: minor bug in unescape java string: illegal escaping was not correctly handled.
– Improvements on Advanced Reader.
– Improved XML reader secure automatic casts.
– Improved syntax error detection in property compiler.
– Improved property compiler: parsing, numbers detection and syntax error detection are more accurate.
– Improved set property: casts when inserting in maps are more accurate.
– Improved Typed Map.
– Improved conversions to collections.
– Improved constant optimizer for not loosing cast information.
– Improved String to Numbers conversions (conversion framework).

BRE (from 2.0.0 to 2.1.0)
– Fix: get write base type in context converter.
– Added new CAST accessor.
– For Each Number index is now handled as integer.
– Function calls can now be performed with dynamic names, this adds the possibility to call different functions depending on input or computed data without writing if / else rules.
– Performance optimizations on count accessor.

DSL (from 1.0.0 to 2.0.0)
This module was globally refactored and improved, mainly for the following:
– New grammar features (character pattern before or after match, auto complete groups, …).
– Lots of improvements on the API (new listeners, new configuration features, …).
– Autocompletion is more accurate and easier to use.

DSL html documentation (from 1.0.0 to 1.0.1)
– Minor improvements and fixes.

DSL Extension for BRE (from 1.0.0 to 1.1.0)
– Added autocompletion for data access on input / output beans (fields, methods and properties).
– Added autocompletion for global and local variables.
– Added config holder for MRL.
– Added cast accessor to grammar.
– Several minor fixes and improvements on existing grammar.

DSL Editor (from 1.0.0 to 1.1.0)
– Graphical improvements on the webeditor.
– Base editor is no more packaged as a springboot standalone jar.

DSL Editor for Rule Engine (from 1.0.0 to 1.1.0)
– Repackaged with new dependencies versions.

Demos
– Added MRL configuration in drools fight.
– Added demo of dsl grammar extension in drools fight.
– Updated JSON Demo with the new grammar features.
– Added mrl configuration and native java implementation to advanced demo (Race example).

2.0.0 (2018-06-19):

Major Changes:
– Changed modules structures so that framework is now handled as a dependency and is no more included in rule engine’s jar.
– Changed maven modules names (mrules-fmk, mrules-bre and mrules-ext-*** for extensions).
– JDK5 is now unsupported. Compilation level is now JDK6 (except for JDK7 and JDK8 extensions).
– Added BOM to centralize modules versions.
– Added Grammar Engine library (mrules-dsl), generic web editor with autocomplete and syntax validation.
– Added Grammar Engine related demos (DemoDslJson and DemoDslJsonEditor).
– Added business rule engine DSL extension and dedicated web editor.
– Javadoc is now generated and published online for main modules and for extensions.
– Updated licencing system.

Other Changes:
– Added interface IExecutable#ReturningValue, in order to flag executables that are able to return a non-null result.
– Added cost info in executable returning value in order to improve optimization process.
– Added new VALUES accessor, for Collections constants.
– Added Classloader file search utility, to find resources in classpath matching patterns.
– Added standalone context in rule engine.
– Rule engine RichXmlFactory is now easier to extend for Addons developpers.
– Added rule engine optimizer, to detect misplaced return statements, making some rules unreachable.
– Improved initial configuration loading, by adding the “extra initializer” concept in mrules-utils.xml configuration file.
– Several internal code improvements and optimizations.

Fixes:
– Corrects NPE with XOR operator if no condition are defined.
– Corrects NPE if null is returned by an accessor used as a condition.
– Corrects the fact that overriding out and err streams of execution context is ignored in functions.
– Corrects potential incorrect values in hashcode / equals.
– Corrects bug on “continue” command in “for each numbers”.
– Corrects potential bug on return if no value provided.
– Corrects error in message formating if an argument is not provided. Behavior is now to replace with empty String.
– Corrects potential bug in COUNT if no condition is provided.
– Adds two addons missing in referencial.
– Improves INDEX Addon toString representation.

1.10.1 (2017-12-27):

Fixes:
– Performance issues during compilation process, occurring unexpectedly on few specific environments.
– NullPointerException introduced in 1.10.0, occurring sometimes while performing date operation.
– Typo corrections on debug logs.

1.10.0 (2017-11-09):

Changes:
– Improved accessor NEW in order to better guess constructor to use.
– Improved type guessing with maps.
– Improved reflexion code.
– Improved variable property (VPROPERTY) to add prefix / suffix.
– Improved write feature for XML Factory, to make output more readable.
– Improved number conversion to BigDecimal by striping unuseful decimal zeros.
– Improved auto set bean properties from xml nodes by handling collections.
– Improving ADD and ADDALL to instantiate target collection if null.
– Improved XML parsing to take into account names like “my-name” in autoSet.
– Improved condition API with combine method.
– Improved message resource loading to avoid message in error stream with some classloaders.
– Improved handling of compilation and execution sub contexts, by introducing the notion of root context.
– Added global variable #ROOTREADBASE and #ROOTWRITEBASE, to be able to access the root context when using sub-properties (in collection filtering for instance)
– Added new Collection Sorting action (SORT).
– Added new Collection Filtering accessor (FILTER).
– Added return value for CLEAR action.
– Added possibility to use RETURN within ruleset.
– Added new accessor for single math operations.
– Added text reader allowing to trace lines numbers and to unread characters.
– Added string method utilities.
– Enriched AVERAGE accessor (Breaking change).
– Introducing logical operators’ weight to prepare future developments.
– Changed date diff default type to long, so that milliseconds are safely computed.
– Property framework: strict methods with several arguments can now be invoked.
– Updated sudoku demo to illustrate new features on math and return.

Fixes:
– Typo corrections on rulesets toString.
– Corrected NPE on conditions using operators without reference value.
– Problems could occur if function returning value was not taken into account.
– Corrected problem in String constant values if it contains the “:” character.
– Property framework: fixed bad error message when parenthesis were not closed.

1.9.2 (2017-07-22):

Changes:
– Improved class loading in multiple classloader environments.
Fixes:
– Added missing addon in configuration file.
– Bad annotation on CDI injector, causing errors with some CDI frameworks.

1.9.1 (2017-05-12):

Changes:
– Improved type guessing and automatic conversion.
Fixes:
– Fixed problem causing unexpected results on type detection and automatic conversions if generics are not available for input data (for example, if a Map is used as input bean).

1.9.0 (2017-03-08):

Changes:
– Added support for functions, allowing arguments, return value and recursive calls.
– Added Sudoku Solver Demo, with Drools comparison.
– Added possibility to change compilation level in an execution block.
– Compilation context is now using input and output types, instead of instances, allowing to use interface for this lifecycle phase.
– Added MVariablePropertyAccessor (VPROPERTY) allowing to access properties with dynamical names.
– Added converter from execution context to compilation context.
– Added possibility to return value with an executable, wrapped in the Execution Result.
– Added possibility to wrap an executable as an accessor (done automatically). Used for functions.
– Improved XML Factory to accept more cases for sub-objects.
– Execution context now returns Execution result.
– Improved classes “forName” to handle arrays.
– Added “returnValue” property to Flow Control Action.
– Added For Each Number Addon (FOREACHNUMBER) allowing to iterate on a range of numbers.
– Improved automatic cast if types can’t be detected at compilation time.
– Execution context wrappers are now deprecated. It’s more efficient to instantiate a new sub context.
– Added String Format accessor (FORMAT), allowing to format a String, in a way similar to Java Message Format.
– Added PrintF Action, based on FORMAT (PRINTF). Updated some demos to use it.
– Added marker “FATAL” to slf4j interface for Fatal logs.
– Various internal code optimizations, slightly improving performances.

Fixes:
– Corrected potential bug on cache if input and output beans have the same property name.
– Complex strict properties failed to compile, with array access directly after a function invocation, if it was used as an argument. For example :
“!myFunction(!myFunctionReturningArray()[!myFunctionReturningInt()])” failed to compile.

Extensions:
– New extension allowing to integrate MRules in Spring based projects.

1.8.0 (2016-12-15):

Changes:
– Added NOTCONTAINS operator, which is the inversion of CONTAINS.
– Added automatic wrapper to allow execution of accessors, mainly to execute direct method calls from property framework.
– Improved and optimized type detections for operators on collections.
– Improved optimization process to reduce the number of casts during runtime when possible, by casting more accurately constant values.
– Improved property framework to perform auto casts for strict method access with arguments.
– Factory does not anymore create Set for multiple constant values, but List. The optimizer will do transform it to Set only if necessary and no information can be lost.
– Consequent improvements made on cache system, allowing to increase hit ratio and minimize possibility to find in cache a value which has been changed by a previous rule.
– Improved cache usage, by deactivating reset by default at each “FOREACH” iteration.
– Added global cache default activation configuration.
– Added global cache default activation configuration by feature (2 features for the moment: property access and condition evaluation result).
– Global cache default activation might be overridden for a specific ruleset or a specific compilation.
– Added automatic cache deactivation if its usage is computed as unuseful (for example if a temporary result is used as an input for another computation also put in cache) allowing to minimize cache accesses an updates.
– Introduced possibility to force an Addon to reset its cached data.
– Native property extension deactivates globally the cache by default for property access.
– Optimization process is more accurate and proceeds to more modifications:
– Inverting conditions to always have the eventual constant value as the reference.
– Changing operator if possible for faster evaluation.
– Changed addon registering API and concept (registered addons is an image at a specific point, which can be reset and redone, possibility to unregister is removed).
– Added optimizer to call “optimize” method of addons, instead of doing it in global optimize process, after optimization chain.
– Added new PropertyUtils to ease access to property framework.
– Some MRulesUtils methods are now deprecated because moved to PropertyUtils.
– Added new IReadWriteAccessor interface.
– Strong optimization of local variables accesses (reads and writes).
– Significantly optimized Collection conversions.
– Added more explicit error message if add or clear fails for a Collection.
– Made resource loading more reliable in multiple classloader environments.

Fixes:
– Corrected bug on native property extension and improved impossible native access detection.
– Corrected ADD and ADDALL actions, which used context read target and now use write target.
– Corrected bug on collection access via property framework, if a Collection nested inside a Map had to be automatically created to add an element.
– Corrected toString on some addons.

Extensions:
– MRulesNativeProperties version now follows core project’s version, to make its integration easier.

1.7.0 (2016-11-14):

Changes:
– Added ADDALL Action, to add all elements from an iterable source to a target.
– Optimized iterations on fixed lists.
– Optimized evaluation condition for LIGHT mode.
– Improved memory footprint for reflexion invocation. Introduced “ArrayProvider” API.
– Other small optimizations on rules optimizer and license reading.
– Improved javadoc.

Fixes:
– Fixed a bug in compilation process which made it fail with no reasons in very rare and specific cases when conversions to Strings had to be made.
– Fixed problem on cache which could be abusively deactivated sometimes.

Extensions:
– MRulesNativeProperties is now in version 1.2, in order to follow changes in configuration syntax made in previous version.
v1.0 is bound to MRules 1.4.x ; v1.1 is bound to MRules versions 1.5.x and 1.6.x ; version 1.2 is bound to MRules version 1.7.0.

1.6.1 (2016-09-14):

Changes:
– Improved types and conversions handling for complex cases involving Collections.
– Removed partial support for Arrays in SPLIT Accessor, as arrays are not fully supported by other Addons. Global array support may be added in future releases.

Fixes:
– Missing check on evaluation condition.
– Property Accessor does not handle well iterable sub-source.

1.6.0 (2016-09-04):

Changes:
– Added Accessor DATEOP, allowing to perform operations on date.
– Added Accessor DATEDIFF, allowing to compute duration between two dates.
– Added Accessor ABS, allowing to compute absolute value of numbers.
– Added Operator NOTEMPTY, negation of EMTY.
– Several improvements where made to Collection handling: Some Accessors which did not allow requesting Collections as results now allow it.

1.5.1 (2016-08-31):

Fix:
– Dates where badly parsed from String or an error occurred if their format was different from preferred format.

1.5.0 (2016-08-05):

Changes:
– Optimization cycle
– Optimization is now a separated phase of the life cycle. Phase named “OPTIMIZE” is now between the “COMPILE” and “EXECUTE” phases.
– Addons registration is now done recursively by a generic module and is no more responsability of the parent Addon.
– Improved optimization phase (split into 2 steps: global and specific per Addon).
– Added Optimizer modules for global step:
– Created the optimizer chain, handling the optimizers launch and configured by the global configuration.
– Added optimizer: Constant detection. Searches for expressions which might be turned into constant values.
– Added optimizer: Expression optimizer. Searched for simplifications which might be applied on conditions. For example: (A or A) is simply A.
– Added optimizer: Deduplication detection. Searches for similar objects in the ruleset object tree, in order to reuse instances and optimize memory footprint.
– Optimizer chain is customizable on a per-ruleset basis via the custom properties. Updated advanced demo to demonstrate deactivation of an optimizer for a specific rule set.
– Optimization process might be fully disabled for a specific execution via the compilation context, the Inject annotation or the JNDI properties.
– XML Configuration now persists rule set custom properties.
– Added “not” flag to ICondition API, in order to make optimization process more efficient.
– All Addons have now a generic toString method to simplify debug.
– Improved conversions between Files, URIs and URLs.
– Improved global variable to better cast their values to other types.
– Improved Date objects conversions. Added global, specific and preferred patterns to date converters. Native configuration has been improved.
– Added JDK7 extensions, in order to handle new Path object for conversions.
– Added JDK8 extensions, handling new types provided by date / time API:
– Global variables #NOW, #TIME, #DATE, #DATETIME handle these new types.
– Date / Time converter handle conversions between legacy java.util.Date, Calendar implementations and SQL date / time types.
– Slightly optimized size of binary code.
– Other internal code optimizations.

Fixes:
– Corrected toString method for MActionAdd, which inverted source value and target collection.

1.4.1 (2016-07-27):

Fix:
– Corrected problem on licence reading for some non-Oracle JVM, for example Android.

1.4.0 (2016-06-24):

Changes:
– Added RESET_CACHE Addon, allowing to flush all data for the current execution.
– Removed previously added interface IAddonCache, moving declared method to IAddon.
– Dropped addon(s) de-duplication methods from MAddonsUtils, replaced by addon(s) registration in compilation context, improved with parent link information.
– Non public methods are now accessible with property framework.
– Added abstraction layer for accessing fields or invoking methods via Reflection, in order to ease extensions development.
– Added interfaces to describe property access and property compilation.
– Added possibility to configure the implementation to use for property access and property compilation.
– Added possibility to disable cache globally for a ruleset (by config) or for a specific execution (by code).
– Added SPLIT Accessor, to split a String using a specified separator.
– Added customizable default type to TypedMap, in order to created automatically nested beans.
– Added new Demo, for online tutorial.
– Added context factory handling to SimpleXMLFactory
– Compilation is now automatic for LIGHT level even if no context factory id provided
– Added AbstractSrcTgtAction abstraction Layer for actions defining a source and a target. Actions SET and ADD now extend this layer.
– Added two extensions (see documentation/extentions):
– MRulesNativeProperties: allows to generate bytecode to access properties instead of using reflection. Defers to reflection if field or method is not public.
– MRulesWS: Simple JSON Rest Web Service allowing to run rule sets remotely.

Fixes:
– Corrected bug on automatic addon wrapping (Accessor <–> Condition), which was not done if inserted in a Collection of addons.
– Registering TransferQueue for JDK7+ was searching in package java.util instead of java.util.concurrent.

1.3.0 (2016-05-19):

Changes:
– Added support for CDI (the Java native Context and Dependency Injection) to retrieve engine or session. Available only for JDK6+.
– Improved internal property acess framework. Memory impact is drastically improved.
– Improved internal cache of input data for better performances.
– Improved equals and hashcode on Arrays.
– Added check for SIZE, NULLIFEMPTY and EMPY addons: if source type is not handled a warning is raised. For example the size of a String or of an Array is handled, but there’s no point in retrieving the size of an Integer.
– Removed Exception for CLEAR Addon if type is not handled, replaced by a warning. It’s possible to clear a List for example, but not a String.

Fixes:
– Corrected bug on comparison utility methods.

1.2.0 (2016-04-28):

Changes:
– Added direct access to fields and methods in property access framework.
– Added new global variable: #NULL, to get the null value.
– Added log information.
– Improved config syntax ; Simplified demo accordingly.
– Simplified ITERATE Accessor.
– Optimized properties reading for STANDARD compilation.
– Renamed MAccessorWrappercondition into MAccessorWrapperCondition.
– Improved types guessing for parameterized types.
– Added demo for bench against Drools.
– Added AVAILABLE Accessor, to check if a property is available, at runtime.
– All “Property2” framework is now available.
– Adding more explicit “FATAL” trace for licence problem.
– Internal optimizations.

Fixes:
– Logger name was sometimes wrong at compilation process.
– Error at loading for framework jar.
– Bug on COLINCLUDED / COLINCLUDED when a collection is null or empty : results were inverted.

1.1.0 (2016-04-03):

Changes:
– Added new Map Accessors: MAPVALUES: to get values as a Collection.
– Added new Map Accessors: MAPKEYS: to get keys as a Collection.
– Added new Map Accessors: MAPENTRIES: to get entries as a Collection.
– Added new evaluation operator: EMPTY: to test if object has content (Collection, Map, String, etc).
– Added new action: CLEAR: to clear object’s content (Collection, Map, etc).
– Property access: Allowed Map access with Integer key.
– Constants: Improved guessing of constant values types.
– Configuration: Improved configuration syntax for most used Addons.
– Added new demo.

Fixes:
– Constant values are casted inacurately in some rare cases.
– Set is sometimes transformed into List for IN / NOTIN operators when values must be casted to another type, which degrades performances.
– Comparing values might give unexepected result if one is null.
– Error is malformed if Licence file is not found.
– Corrected defect on generation of toString.