The problem is when you come to modify the object. When you modify something you should
tell drools that fact so it can calculate which rules have conditions that may have been
modified and need to be re-evaluated.
If you only tell drools about the root object then the only object you can tell drools
that you have modified is the root object which means any time you do a modification all
your rules will be re-evaluated. This means you are much more likely to end up with rule
loops and actions being repeated if you aren't careful.
It seems the best way to write rules is to treat your data as for a relational database
and fully normalise it with object references used as keys. However this does make it
harder to integrate with other parts of the system.
Thomas
-----Original Message-----
From: rules-users-bounces(a)lists.jboss.org [mailto:rules-users-
bounces(a)lists.jboss.org] On Behalf Of Pritam
Sent: 04 December 2009 16:14
To: rules-users(a)lists.jboss.org
Subject: Re: [rules-users] Need help related to collection of data
accessingin rule file.
I'm still not sure why this is a "bad idea"
I've flattened out my fact class. Now instead of a collection A has a B
In my decision table, I declare the variable
$a : Region
and one of the conditions is
$a.widget.id
(assuming that Region class has a Widget class)
I get the following error on invoking rules
xstream.mapper.CannotResolveClassException: widget : widget
It's hard for me to image a "flattened" pojo for rules to understand.
In
real world, a "Person" has an "Address" and Address has a
"State" and
it
goes on. Ideally I would like to give the root object to a rule engine
and
write the conditions by drilling down the root object.
Unless I'm doing something wrong here, is this possible in drools?
Ross H wrote:
>
> Just added this point to the wiki on usage patterns:
>
>
http://www.jboss.org/community/wiki/UsagePatterns
>
>
> On Fri, Dec 4, 2009 at 8:09 PM, Ross H <rossh00(a)gmail.com> wrote:
>
>> Thanks Thomas, you've added a very important category to my
thoughts:
>> what
>> does and what doesn't work easily in drools. I think this is the
most
>> important category. Every framework has a degree of flexibility and
>> whilst
>> drools is extremely flexible, the consequences may not be that
pleasant.
>>
>> 2009/12/4 Swindells, Thomas <TSwindells(a)nds.com>
>>
>> I’d agree, and to join up with the other thread is the exact reason
why
>>> we need some decent ‘design pattern’ documentation to explain what
does
>>> and
>>> doesn’t easily work in drools.
>>>
>>> Depending what you are trying to do you may be able to use eval to
>>> perform
>>> the logic for you, though this will probably involve you writing
the
>>> logic
>>> manually in java. See the thread Re: [rules-users] Can we use
'from' CE
>>> in
>>> Decision Tables ? for details.
>>>
>>>
>>>
>>> Thomas
>>>
>>>
>>>
>>>
>>>
>>> *From:* rules-users-bounces(a)lists.jboss.org [mailto:
>>> rules-users-bounces(a)lists.jboss.org] *On Behalf Of *Ross H
>>> *Sent:* 04 December 2009 08:18
>>> *To:* Rules Users List
>>> *Subject:* Re: [rules-users] Need help related to collection of
data
>>> accessingin rule file.
>>>
>>>
>>>
>>> In my limited experience, I'm not sure you can do this in decision
>>> tables,
>>> but given the flexibility of Drools there may be a way, but I'm not
sure
>>> this is a good thing.
>>>
>>>
>>>
>>> I suspect the rules you create will be really ugly and not support
your
>>> longer term goals of flexibility. It might be better to transform
your
>>> data
>>> into a better fact model that gives you the ability to create real
>>> business
>>> rules that are understandable.
>>>
>>>
>>>
>>> It appears that it is better to create a fact model that is more
shallow
>>> and uses almost relational concepts to relate the facts together
rather
>>> than
>>> a deeply nested model (I suspect you are getting this from some
really
>>> ugly
>>> xml structure). So whilst it's a pain, I would reconsider your core
>>> domain/fact model.
>>>
>>> On Fri, Dec 4, 2009 at 4:08 PM, Pritam <infinity2heaven(a)gmail.com>
>>> wrote:
>>>
>>>
>>> I have the same problem as I'm trying to create a decision table
via
>>> excel
>>> where the fact is a root object A where A has a collection B, and B
has
>>> a
>>> collection C. My rules are based out of the instance A, loop for
each
>>> object
>>> in B, and within that, loop each object in C. Not sure how I can
write
>>> an
>>> expression for the same.
>>>
>>> >From the examples, I see that one can access a particular element
in A
>>> by
>>> $a.listname[1] but in my case, I need to access all elements in the
>>> loop.
>>>
>>> Any suggestions?
>>>
>>>
>>> prasad raju sagi wrote:
>>> >
>>> > Hi ,
>>> >
>>> > I am trying to create rule on a fact , which contains arraylist
of
>>> > collection and the object in the collection internally contains
an
>>> > arraylist of another collection of objects.
>>> >
>>> > This looks like object A contains collection of objects B and B
>>> contains
>>> > collection object C
>>> >
>>> > A -> blist ( Arraylist )
>>> >
>>> > B -> clist (ArrayList<C> )
>>> >
>>> > C-> dlist( ArrayList<D>)
>>> >
>>> > D-> type ( string)
>>> >
>>> > I am inseting A as fact to the working memory.
>>> >
>>> > I am in confusion state like how to write the rule to place
conditions
>>> on
>>> > collection C.
>>> >
>>> > Can I use from in the form of nested from in rule statment.
>>> > Thanks
>>> > Prasad Raju Sagi
>>> > Mobile: 847-644-4103
>>> >
>>> >
>>> >
>>> >
>>> > ________________________________
>>> > From: Aziz Boxwala <boxwala(a)yahoo.com>
>>> > To: rules-users(a)lists.jboss.org
>>> > Sent: Thursday, June 11, 2009 1:58:28 PM
>>> > Subject: [rules-users] process order example not working fully
>>> >
>>> >
>>> > I am trying to execute a ruleflow and use rules to assign tasks
within
>>> the
>>> > ruleflow in Drools 5.0.1. I have a drl file included in my
knowledge
>>> base
>>> > that tries to assign a task to a user when a new human task is
>>> created.
>>> > This is based on the example in org.drools.example.process.order.
I
>>> can't
>>> > get my code to work. I don't the rules in the example are working
>>> either
>>> > (dslr for the task assignment or the drl for dynamic logging).
After
>>> some
>>> > attempts, I found that this condition
>>> > WorkItemNodeInstance()
>>> > does not evaluate to true ever.
>>> >
>>> > Do I have to do anything special to make the WorkItemNodeInstance
>>> appear
>>> > in working memory?
>>> >
>>> > Thanks for any help.
>>> >
>>> > --Aziz
>>> >
>>> >
>>> >
>>> > _______________________________________________
>>> > rules-users mailing list
>>> > rules-users(a)lists.jboss.org
>>> >
https://lists.jboss.org/mailman/listinfo/rules-users
>>> >
>>> >
>>>
>>> --
>>> View this message in context:
>>>
http://n3.nabble.com/Re-Need-help-related-to-collection-of-data-
accessing-in-rule-file-tp60311p67858.html
>>> Sent from the Drools - User mailing list archive at
Nabble.com.
>>>
>>> _______________________________________________
>>> rules-users mailing list
>>> rules-users(a)lists.jboss.org
>>>
https://lists.jboss.org/mailman/listinfo/rules-users
>>>
>>>
>>>
>>> ------------------------------
>>>
>>>
>>>
***********************************************************************
***************
>>> This message is confidential and intended only for the addressee.
If you
>>> have received this message in error, please immediately notify the
>>> postmaster(a)nds.com and delete it from your system as well as any
copies.
>>> The content of e-mails as well as traffic data may be monitored by
NDS
>>> for
>>> employment and security purposes. To protect the environment please
do
>>> not
>>> print this e-mail unless necessary.
>>>
>>> NDS Limited. Registered Office: One London Road, Staines,
Middlesex,
>>> TW18
>>> 4EX, United Kingdom. A company registered in England and Wales.
>>> Registered
>>> no. 3080780. VAT no. GB 603 8808 40-00
>>>
>>>
***********************************************************************
***************
>>>
>>> ------------------------------
>>> This message is confidential and intended only for the addressee.
If you
>>> have received this message in error, please immediately notify the
>>> postmaster(a)nds.com and delete it from your system as well as any
copies.
>>> The content of e-mails as well as traffic data may be monitored by
NDS
>>> for
>>> employment and security purposes.
>>> To protect the environment please do not print this e-mail unless
>>> necessary.
>>>
>>> An NDS Group Limited company.
www.nds.com
>>>
>>> _______________________________________________
>>> rules-users mailing list
>>> rules-users(a)lists.jboss.org
>>>
https://lists.jboss.org/mailman/listinfo/rules-users
>>>
>>>
>>
>
> _______________________________________________
> rules-users mailing list
> rules-users(a)lists.jboss.org
>
https://lists.jboss.org/mailman/listinfo/rules-users
>
>
--
View this message in context:
http://n3.nabble.com/Re-Need-help-
related-to-collection-of-data-accessing-in-rule-file-tp60311p68353.html
Sent from the Drools - User mailing list archive at
Nabble.com.
_______________________________________________
rules-users mailing list
rules-users(a)lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users
**************************************************************************************
This message is confidential and intended only for the addressee. If you have received
this message in error, please immediately notify the postmaster(a)nds.com and delete it from
your system as well as any copies. The content of e-mails as well as traffic data may be
monitored by NDS for employment and security purposes. To protect the environment please
do not print this e-mail unless necessary.
NDS Limited. Registered Office: One London Road, Staines, Middlesex, TW18 4EX, United
Kingdom. A company registered in England and Wales. Registered no. 3080780. VAT no. GB 603
8808 40-00
**************************************************************************************
This message is confidential and intended only for the addressee. If you have received
this message in error, please immediately notify the postmaster(a)nds.com and delete it from
your system as well as any copies. The content of e-mails as well as traffic data may be
monitored by NDS for employment and security purposes.
To protect the environment please do not print this e-mail unless necessary.
An NDS Group Limited company.