[rules-dev] Goodbye Conflict Resolution Strategy, Hello Rule Dependency Meta Rules

Mark Proctor mproctor at codehaus.org
Wed Apr 7 12:27:29 EDT 2010


http://blog.athico.com/2010/04/goodbye-conflict-resoltuion-strategy.html
------------


      Goodbye Conflict Resolution Strategy, Hello Rule Dependency Meta
      Rules
      <http://blog.athico.com/2010/04/goodbye-conflict-resoltuion-strategy.html>


I've added a new section to the Drools Language Enhancement 
<http://community.jboss.org/wiki/DroolsLanguageEnhancements> ideas wiki 
page discussing meta-rules to help declaratively control rule ordering. 
Here is what I have so far, feedback welcome, you can find the original 
content here 
<http://community.jboss.org/wiki/DroolsLanguageEnhancements#Field_Versioning>.


    Rule Dependency Meta-Rule Language

When a terminal node is matched instead of adding the Activation to the 
agenda it inserts it into the WorkingMemory. We have a special builder 
that allows easy access to the contents.

All declarations are typed fields for the Activation fact, based on the 
"name" field. So the name field is mandatory. All FactHandles are 
available via an array accessor, which has type inference for the 
element being used. We also all bindings on the Activation fact to work 
this way too. Act is used for compactness, we'll allow that to be 
optionally user defined:
act1 : Act( someDeclaration == X, fact[0] == Y )
act2 : Act( someDeclaration.value > act1.someDeclaration.value )

Normal facts can also be matched. The RHS of the rule is side effect 
free, you cannot modify or insert facts; this allows the RHS to execute 
as soon as it's matched. What you can do is setup rule dependencies - 
where one rule blocks another:
act1.blockedBy( act2 ).until( Fired )
act1.blockedBy( act2 ).until( IsFalse )

We can even allow facts to block:
act1.blockedBy( someFact )

This means the act1 activation is blocked until a rule executes:
act1.unblockedBy( someFact )

We can probably add an override, something like:
act1.unblockAll()

Only when an Activation is no longer blocked will it be placed on the 
Agenda as normal.

If an activation on the agenda has not yet fired and something attempts 
to block it, it will be removed from the agenda until it is no longer 
blocked.

For this to be effective, especially for large systems, it will need to 
be combined with design time authoring help.

This work will be eventually be combined with further enhancements to 
help with parallel execution, in resulting conflicts, see the "Parellel 
Meta-Rule Language" heading.

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/rules-dev/attachments/20100407/2566d0f2/attachment.html 


More information about the rules-dev mailing list