okay, the dynamic drools property thing turns out not so wonderful. Say if an entity has
10 fields whose setter are plugged a property change listener, the propertyChangeListener
will cause 10 evaluations in the Rete network, while if batch update -- to be concrete:
| ...
| StatefulSession ss = myRuleBase.newStatefulSession();
|
| ss.setGlobal("myManager", myManager),
| ...
| FactHandle fh1 = ss.insert(myEntity1);
| FactHandle fh2 = ss.insert(myEntity2);
| ..
|
| // here you modify your entities wildly,
| // for example modify all 10+ or 20+ fields
|
| entityManager.flush();
| ss.update(fh1, myEntity1);
| ss.update(fh2, myEntity2);
| ...
|
| ss.fireAllRules();
|
only cause one evaluation to each entity in the Rete network. So this approach is much
more recommended. StatefulSession's (rule session, please do not confuse with
hibernate session) update(fh, obj) is much like entityManager's flush().
Maybe it is a good idea to tie entityManager's flush together with stateful rule
session's update together.....
I was using the propertychangelistener approach because I happened to have 2 entities who
both have only one field needing to be monitored in the stateful rule session. Sorry for
the confusion/mislead. And big thanks to Mark Proctor for clarifying this issue to me.
Regards,
Ellen
View the original post :
http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4064685#...
Reply to the post :
http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&a...