Hi all,
I am using a StatelessKnowledgeSession and therefore call the execute method
to invoke the rules engine. Having carried out a basic test, it would appear
that calling execute on an arbitrarily complex object does not insert child
objects, rather rules will only fire if they are based on the parent.
e.g. let's say you have a class called 'Father', which holds a collection of
'Child' objects. By calling session.execute(fatherObject) I need rules to
fire that use the Child pattern without having to loop through 'insert'ing
all the child elements manually.
Has anyone come across a way around this? Having originally posted on the
dev forum there were a few suggestions:
- You could use the "from" keyword but your rules wouldn't work on
*any*
arbitrary object - but this could be overcome if you could identify a
suitable super-class to extend for your arbitrary objects.
- Have you considered using the "from" Conditional Element, which lets
you reason over components of a fact's collection-type element, without them
being inserted as facts. See the Drools Expert manual for details.
- One way it has been done in the past is to have some rule with a
higher salience take that "root" object and "explode" it into the
children
objects (as deep as needed).
The only thing I managed to find was the use of a Batch Executor but you
have to set that up before calling execute and therefore it's still
effectively a manual process.
If only Drools used java annotations, it would be ideal to specify behaviour
similar to cascade with JPA.
Any help or pointers much appreciated!
Dan
--
View this message in context:
http://n3.nabble.com/Executing-on-a-arbitrarily-complex-object-tp192130p1...
Sent from the Drools - User mailing list archive at
Nabble.com.