Hi Francesco,
On Wed, Jul 2, 2008 at 10:28 AM, fmarchioni <f.marchioni(a)pride.it> wrote:
Hi all drools users!
I'm just learning Drools from the manual, I have a question about Dynamic
Beans. I have added PropertyChangeSupport and listeners to my Beans: I can
see that inside my rule, if I change
one property the bean.....
rule "Check Age"
salience 20
when
b : Buyer (age <18)
then
bankApp.addMessage(Messages.AGE_UNDER_18);
b.setCash(40000); // CHANGE OF PROPERTY
end
..then all rules are fired back again. Is it the correct behaviour ? is
there a way to re-evaluate only some of the Rules back again ?
thanks a lot
Francesco
--
that's strange. From my experience, only those rules that depend on
the cash property should be fired if the new value triggers an
activation that wouldn't have been triggered for the old value. Could
you post the code of your PropertyChangeSupport implementation?
Here's some sample code from one of my projects:
public abstract class BindObject { /* simple proxy */
private PropertyChangeSupport propertyChangeSupport = new
PropertyChangeSupport(this);
public void addPropertyChangeListener(PropertyChangeListener _listener) {
propertyChangeSupport.addPropertyChangeListener(_listener);
}
public void addPropertyChangeListener(String _propertyName,
PropertyChangeListener _listener) {
propertyChangeSupport.addPropertyChangeListener(_propertyName,
_listener);
}
public void removePropertyChangeListener(PropertyChangeListener _listener) {
propertyChangeSupport.removePropertyChangeListener(_listener);
}
public void removePropertyChangeListener(String _propertyName,
PropertyChangeListener _listener) {
propertyChangeSupport.removePropertyChangeListener(_propertyName,
_listener);
}
protected void firePropertyChange(String _propertyName, Object
_oldValue, Object _newValue) {
propertyChangeSupport.firePropertyChange(_propertyName,
_oldValue, _newValue);
}
protected void firePropertyChange(String _propertyName, int
_oldValue, int _newValue) {
propertyChangeSupport.firePropertyChange(_propertyName,
_oldValue, _newValue);
}
protected void firePropertyChange(String _propertyName, boolean
_oldValue, boolean _newValue) {
propertyChangeSupport.firePropertyChange(_propertyName,
_oldValue, _newValue);
}
}
Now I simply inherit my classes from BindObject and write my setters like this:
public final static String PROPERTY_ARTICLE_NUMBER = "articleNumber";
public void setArticleNumber(String _articleNumber) {
String oldValue = _articleNumber;
articleNumber = _articleNumber;
firePropertyChange(PROPERTY_ARTICLE_NUMBER, oldValue, articleNumber);
}
This has been working great for me so far.
HTH
Marcus