Hi all
I am trying to write a custom package builder in order to
create rules programmatically.
The most important feature are simple tests against object
attributes like:
“if (position.getValue() > 100) then”
In Drools 3 I managed this the following way:
LiteralDescr literalDescr = new LiteralDescr("value", ">", "100");
// define what class the rule refers to
ColumnDescr columnDescr = new ColumnDescr("com.sample.bl.Position", "p");
columnDescr.addDescr(literalDescr);
// assemble condition
AndDescr andDescr = new AndDescr();
andDescr.addDescr(columnDescr);
ruleDescriptor.setLhs(andDescr);
packageDescriptor.addRule(ruleDescriptor);
Upgrading to Drools 4 the above code breaks and in search of
a replacement for ColumnDescr I stumbled across a FieldConstraintDescr which seems
appropriate according to the Pattern Entity Relationship Diagram (Figure 6.11)
of paragraph 6.5 in the documentation.
Using it throws the following exception:
Exception in thread "main" org.drools.RuntimeDroolsException: BUG: no builder found for descriptor class class
org.drools.lang.descr.FieldConstraintDescr
at org.drools.rule.builder.GroupElementBuilder.build(GroupElementBuilder.java:77)
at
org.drools.rule.builder.RuleBuilder.build(RuleBuilder.java:53)
at
org.drools.compiler.PackageBuilder.addRule(PackageBuilder.java:420)
at
org.drools.compiler.PackageBuilder.addPackage(PackageBuilder.java:283)
What does that mean? Did I misunderstand the concept? Is
there an easier way to achieve what I want?
I appreciate any hints.
Thanks and regards,
Andreas