There was this thread about comparing compiled and serialized packages. Somewhat interested, I decided to run a few tests. (Now I know that the IdentityHashMap used in there somewhere dooms all efforts.)
It is possible to detect the addition or removal of rules by comparing the rules contained in the KnowledgePackages, using KnowledgePackage.getRules() and by keeping track of the rules identified by names. Good. Then I used org.drools.definition.rule.Rule's method equals(), but this returns stubbornly true, even when rules actually differ. I thought that this was due to org.drools.definition.rule.Rule's implementation (in org.drools.definitions.rule.impl.RuleImpl) just being a "shadow" object, hiding the hot stuff that's kept in an org.drools.rule.Rule object. But changing something that *is* exposed - namely the rule's metadata - still didn't make equals() false. So I looked at org.drools.definitions.rule.impl.RuleImpl.equals(), and was quite astonished to see that this one does call the equals() of the real McCoy, i.e., org.drools.rule.Rule.equals(). Looking at this method made it clear to me that this method isn't good for comparing rules beyond the scope of a single knowledge base or knowledge builder: it is firmly rooted in the assumption that rule name and the rule's package name are "The Rule". -W _______________________________________________ rules-dev mailing list rules-dev@lists.jboss.org https://lists.jboss.org/mailman/listinfo/rules-dev