[JBoss JIRA] Created: (JBRULES-2877) Disjunction over a set not working
by Oliver Roess (JIRA)
Disjunction over a set not working
----------------------------------
Key: JBRULES-2877
URL: https://issues.jboss.org/browse/JBRULES-2877
Project: Drools
Issue Type: Bug
Security Level: Public (Everyone can see)
Affects Versions: 5.1.1.FINAL
Reporter: Oliver Roess
Assignee: Mark Proctor
Hello there and a happy new year to everyone reading :)
Why am I here again? Yep, got a problem. Don't know why it doesn't work. I'm using the latest snapshot version.
So here it goes.
A simple rule with conjunction and disjunction but over a set of events.
when
$ldes : Set(size == 2) from collect(LoopDetectorEvent() over window:length(2))
(or LoopDetectorEvent($t1 : transportation == "LKW", $id1 : eventID) from $ldes
LoopDetectorEvent($t2 : transportation == "PKW", $id2 : eventID) from $ldes)
LoopDetectorEvent($t3 : transportation == "BUS", $id3 : eventID) from $ldes
So, what the rule says: fire when there's a BUS event plus either a LKW or PKW event in the set.
But, instead I get a big exception. It's posted at the end.
Interestingly, it works if I don't use the Set, like this...
when
(or $e1 : LoopDetectorEvent($t1 : transportation == "PKW", $id1 : eventID) over window:length(1)
$e2 : LoopDetectorEvent($t2 : transportation == "LKW", $id2 : eventID) over window:length(1))
LoopDetectorEvent($t3 : transportation == "BUS", $id3 : eventID) over window:length(1)
but that rule does not have the same meaning. So it's useless for me.
Besides, it DOES work with the set if I just cut the third event out (the BUS event).
What is wrong here?
Thanks in advance.
Kind regards!
Oliver
Exception in thread "Thread-2" java.lang.ClassCastException: org.drools.reteoo.InitialFactImpl cannot be cast to trafficsys.domain.events.LoopDetectorEvent
at org.drools.base.trafficsys.domain.events.LoopDetectorEvent446196$getTransportation.getValue(Unknown Source)
at org.drools.base.ClassFieldReader.getValue(ClassFieldReader.java:91)
at org.drools.base.evaluators.EqualityEvaluatorsDefinition$StringEqualEvaluator.evaluate(EqualityEvaluatorsDefinition.java:1961)
at org.drools.rule.LiteralRestriction.isAllowed(LiteralRestriction.java:92)
at org.drools.rule.LiteralConstraint.isAllowed(LiteralConstraint.java:109)
at org.drools.reteoo.FromNode.checkConstraintsAndPropagate(FromNode.java:264)
at org.drools.reteoo.FromNode.assertLeftTuple(FromNode.java:138)
at org.drools.reteoo.SingleLeftTupleSinkAdapter.doPropagateAssertLeftTuple(SingleLeftTupleSinkAdapter.java:189)
at org.drools.reteoo.SingleLeftTupleSinkAdapter.propagateAssertLeftTuple(SingleLeftTupleSinkAdapter.java:64)
at org.drools.reteoo.FromNode.checkConstraintsAndPropagate(FromNode.java:279)
at org.drools.reteoo.FromNode.assertLeftTuple(FromNode.java:138)
at org.drools.reteoo.SingleLeftTupleSinkAdapter.doPropagateAssertLeftTuple(SingleLeftTupleSinkAdapter.java:189)
at org.drools.reteoo.SingleLeftTupleSinkAdapter.propagateAssertLeftTuple(SingleLeftTupleSinkAdapter.java:64)
at org.drools.reteoo.AccumulateNode.evaluateResultConstraints(AccumulateNode.java:662)
at org.drools.reteoo.AccumulateNode.assertObject(AccumulateNode.java:270)
at org.drools.reteoo.CompositeObjectSinkAdapter.doPropagateAssertObject(CompositeObjectSinkAdapter.java:450)
at org.drools.reteoo.CompositeObjectSinkAdapter.propagateAssertObject(CompositeObjectSinkAdapter.java:378)
at org.drools.reteoo.ObjectTypeNode.assertObject(ObjectTypeNode.java:190)
at org.drools.reteoo.EntryPointNode.assertObject(EntryPointNode.java:145)
at org.drools.common.AbstractWorkingMemory.insert(AbstractWorkingMemory.java:1187)
at org.drools.common.AbstractWorkingMemory.insert(AbstractWorkingMemory.java:1089)
at org.drools.common.AbstractWorkingMemory.insert(AbstractWorkingMemory.java:893)
at org.drools.impl.StatefulKnowledgeSessionImpl.insert(StatefulKnowledgeSessionImpl.java:238)
at trafficsys.SessionInterface.insertAndFire(SessionInterface.java:133)
--
This message is automatically generated by JIRA.
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
12 years, 3 months
[JBoss JIRA] Created: (JBRULES-2871) KnowledgeAgent: unable to determine operator for symbol [after]
by Oscar de Groot (JIRA)
KnowledgeAgent: unable to determine operator for symbol [after]
---------------------------------------------------------------
Key: JBRULES-2871
URL: https://issues.jboss.org/browse/JBRULES-2871
Project: Drools
Issue Type: Bug
Security Level: Public (Everyone can see)
Components: drools-core
Affects Versions: 5.1.1.FINAL
Reporter: Oscar de Groot
Assignee: Mark Proctor
When loading a ruleset via a KnowledgeAgent, only the operators defined in org.drools.base.evaluators.Operator (== != >= < <= <) are supported. When loading the same rulebase via a KnowledgeBuilder, all operators are supported.
Upon loading a ruleset that contains another operator (e.g. "after", "before"), the following error is printed:
[2011:01:19 14:01:44:exception]
java.lang.RuntimeException: KnowledgeAgent exception while trying to deserialize KnowledgeDefinitionsPackage
at org.drools.agent.impl.KnowledgeAgentImpl.createPackageFromResource(KnowledgeAgentImpl.java:674)
at org.drools.agent.impl.KnowledgeAgentImpl.addResourcesToKnowledgeBase(KnowledgeAgentImpl.java:899)
...
Caused by: org.drools.RuntimeDroolsException: unable to determine operator for symbol [after]
at org.drools.base.evaluators.Operator.determineOperator(Operator.java:87)
at org.drools.base.evaluators.Operator.readResolve(Operator.java:122)
Using Eclipse's debugging feature, I have determined that KnowledgeBuilder loads the rest of the operators through EvaluatorRegistry, while KnowledgeAgent does nothing to load any operators into org.drools.base.evaluators.Operator. I have tried modifying KnowledgeAgent by adding the code below to the constructor of KnowledgeAgentImpl. This resolves the problem: with this addition, the ruleset with "after"-operator works as intended when loaded via a KnowledgeAgent.
// Load all of Drools' default evaluators instead of just the ones defined
// in org.drools.base.evaluators.Operator
new EvaluatorRegistry();
--
This message is automatically generated by JIRA.
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
12 years, 3 months
[JBoss JIRA] Created: (JBRULES-2819) DSL parsing/expansion: '\', '$', empty value, empty condition
by Wolfgang Laun (JIRA)
DSL parsing/expansion: '\', '$', empty value, empty condition
---------------------------------------------------------------
Key: JBRULES-2819
URL: https://jira.jboss.org/browse/JBRULES-2819
Project: Drools
Issue Type: Bug
Security Level: Public (Everyone can see)
Components: drools-compiler-DSL
Affects Versions: 5.1.1.FINAL
Reporter: Wolfgang Laun
Assignee: Mark Proctor
Fix For: 5.2.0.M1
DSL parser does not accept an empty "value" section, e.g.
[when] a man loves a woman=
Expansion of a rule with an empty condition results in "whenthen".
The DSL parser escapes '$', but not '\' in value sections. It should not modify the value section except for "normalizing" variable references. Variable references should be restricted to a "clean" character sequence (e.g. Java identifier). The current expansion using replaceAll is too fragile.
I have emailed three reworked source files AntlrDSLMappingEntry.java DefaultExpander.java DSLTokenizedMappingFile.java to Edson, but I didn't change the parser itself.
--
This message is automatically generated by JIRA.
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
12 years, 3 months
[JBoss JIRA] Created: (JBRULES-2845) threading issues when using MultithreadEvaluationOption.YES with fusion
by Radai Rosenblatt (JIRA)
threading issues when using MultithreadEvaluationOption.YES with fusion
-----------------------------------------------------------------------
Key: JBRULES-2845
URL: https://issues.jboss.org/browse/JBRULES-2845
Project: Drools
Issue Type: Bug
Security Level: Public (Everyone can see)
Components: drools-compiler (fusion), drools-core (expert)
Affects Versions: 5.1.1.FINAL
Environment: dual core processor, jdk 6u21, windows xp
Reporter: Radai Rosenblatt
Assignee: Mark Proctor
Attachments: threadingbug.zip
i have 2 very simple rules and a test case (see attached maven project).
trying to set MultithreadEvaluationOption.YES on the KB causes the test to fail sporadically (~10% of the times?).
the attached project contains a testsuite that runs the same test 8 times (testsuite is defined in RunMe.java). attempting "mvn clean install" runs this suite and usually fails.
commenting out the MultithreadEvaluationOption.YES line in the other testcase (the one referred-to from RunMe) causes the tests to behave as expected (pass).
--
This message is automatically generated by JIRA.
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
12 years, 3 months
[JBoss JIRA] Created: (JBRULES-2898) incorrect eval() results when accessing global
by Wolfgang Laun (JIRA)
incorrect eval() results when accessing global
----------------------------------------------
Key: JBRULES-2898
URL: https://issues.jboss.org/browse/JBRULES-2898
Project: Drools
Issue Type: Bug
Security Level: Public (Everyone can see)
Components: drools-core
Affects Versions: 5.1.1.FINAL
Reporter: Wolfgang Laun
Assignee: Mark Proctor
Fix For: 5.2.0.M1
Combinations of rules containing an eval CE comparing double > double or double > integer may cause the eval result to be in error. In the attached example, there are 4 rules. If all are used, 2 fire when they should not. If rules 1+2 or 3+4 are used, 1 fires when it should not. If rules 1+4 or 2+3 are used, none misfires.
--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira
12 years, 3 months
[JBoss JIRA] Created: (JBRULES-2930) KnowledgeAgentDefinitionParser can get NPEs
by stevearoonie (JIRA)
KnowledgeAgentDefinitionParser can get NPEs
-------------------------------------------
Key: JBRULES-2930
URL: https://issues.jboss.org/browse/JBRULES-2930
Project: Drools
Issue Type: Bug
Security Level: Public (Everyone can see)
Components: drools-spring
Affects Versions: 5.1.1.FINAL
Reporter: stevearoonie
Assignee: Mark Proctor
KnowledgeAgentDefinitionParser assumes that a spring bean definition has a bean class name, however when the bean extends a parent then it may not, as in the following example:
<bean id="messageTemplateService" class="au.com.promedicus.template.freemarker.FreemarkerTemplateService">
<constructor-arg ref="workflowFreemarkerConfiguration"/>
</bean>
<bean id="workflowFreemarkerConfiguration" parent="freemarkerConfiguration">
<property name="templateLoader">
<bean class="au.com.promedicus.core.messaging.freemarker.FreemarkerMessageLayoutTemplateLoader" />
</property>
</bean>
The BeanDefinition for bean "workflowFreemarkerConfiguration" has a null bean class name which causes KnowledgeAgentDefinitionParser.parseInternal to throw an NPE. Specifically this line:
if ( def.getBeanClassName().equals( StatelessKnowledgeSessionBeanFactory.class.getName() ) ) {
--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira
12 years, 3 months
[JBoss JIRA] Created: (JBRULES-3000) Free form expression <field> != <object>.<method>(...) fails to parse
by Wolfgang Laun (JIRA)
Free form expression <field> != <object>.<method>(...) fails to parse
---------------------------------------------------------------------
Key: JBRULES-3000
URL: https://issues.jboss.org/browse/JBRULES-3000
Project: Drools
Issue Type: Bug
Security Level: Public (Everyone can see)
Components: drools-compiler (expert)
Affects Versions: 3.0.4
Reporter: Wolfgang Laun
Assignee: Mark Proctor
According to Drools Introduction 2.1.3.1. Free Form expressions in Constraints (New Parser) "free form" expressions should be possible. However, the rule shown below does not compile and a stack dump is printed, (The legacy form using a return value restriction works correctly.)
public abstract class BinOp {
private Pin inPin1;
private Pin inPin2;
private Pin outPin;
public BinOp( Pin inPin1, Pin inPin2, Pin outPin ){
this.inPin1 = inPin1;
this.inPin2 = inPin2;
this.outPin = outPin;
}
public Pin getInPin1() { return inPin1; }
public Pin getInPin2() { return inPin2; }
public Pin getOutPin() { return outPin; }
protected abstract boolean op( boolean x, boolean y );
public boolean op( Pin x, Pin y ){
return op( x.isValue(), y.isValue() );
}
}
public class Pin {
private boolean value;
public Pin(){
}
public boolean isValue(){
return value;
}
public void setValue( boolean value ){
this.value = value;
}
}
rule "gate with two inputs"
when
$binOp : BinOp( $inPin1 : inPin1, $inPin2 : inPin2, $outPin : outPin )
Pin( this == $inPin1 )
Pin( this == $inPin2 )
Pin( this == $outPin, value != ( $binOp.op( $inPin1, $inPin2 ) ) )
then
//...
end
Error message + stack dump:
Exception in thread "main" [Error: Failed to compile: 2 compilation error(s):
- (1,5) unable to resolve method using strict-mode: appl.circuit.BinOp.$inPin1()
- (1,5) unqualified type in strict mode for: $inPin1]
[Near : {... op( $inPin1, $inPin2 ) ....}]
^
[Line: 1, Column: 5]
at org.mvel2.compiler.ExpressionCompiler.compile(ExpressionCompiler.java:95)
at org.mvel2.MVEL.compileExpression(MVEL.java:829)
at org.drools.base.extractors.MVELClassFieldReader.<init>(MVELClassFieldReader.java:64)
at org.drools.rule.builder.PatternBuilder.createDeclarationObject(PatternBuilder.java:976)
at org.drools.rule.builder.PatternBuilder.createDeclarationObject(PatternBuilder.java:939)
at org.drools.rule.builder.PatternBuilder.build(PatternBuilder.java:582)
at org.drools.rule.builder.PatternBuilder.build(PatternBuilder.java:242)
at org.drools.rule.builder.PatternBuilder.build(PatternBuilder.java:61)
at org.drools.rule.builder.GroupElementBuilder.build(GroupElementBuilder.java:65)
at org.drools.rule.builder.RuleBuilder.build(RuleBuilder.java:81)
at org.drools.compiler.PackageBuilder.addRule(PackageBuilder.java:1546)
at org.drools.compiler.PackageBuilder.addPackage(PackageBuilder.java:653)
at org.drools.compiler.PackageBuilder.addPackageFromDrl(PackageBuilder.java:295)
at org.drools.compiler.PackageBuilder.addKnowledgeResource(PackageBuilder.java:471)
at org.drools.builder.impl.KnowledgeBuilderImpl.add(KnowledgeBuilderImpl.java:28)
--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira
12 years, 3 months