[jboss-jira] [JBoss JIRA] Commented: (JBRULES-2278) NPE after knowledgebase updated when using entrypoints
Edson Tirelli (JIRA)
jira-events at lists.jboss.org
Thu Dec 3 10:58:30 EST 2009
[ https://jira.jboss.org/jira/browse/JBRULES-2278?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12498040#action_12498040 ]
Edson Tirelli commented on JBRULES-2278:
----------------------------------------
Nestor,
You are using the java dialect, so using the above snippet you will get the following errors:
Rule Compilation error total cannot be resolved
total cannot be resolved
total cannot be resolved
total cannot be resolved
Syntax error on token ";", delete this token
That is because in java all variables must be explicitly typed ("int total") and the result block must not have a ";". If you change your rule to the following:
$t2: Number(intValue > 3) from accumulate(TestModel( test == "2", id != $t1.id, this after [0s,1m] $t1)
from entry-point "MyEntryPoint",
init( int total = 0; ),
action( total++; ),
reverse( total--; ),
result( total ))
It works just fine. Another alternative is to use "mvel" dialect in which case you don't need to explicitly type the variables, nor use ";" on each expression:
rule "Your Second Rule"
no-loop true
dialect "mvel"
when
$t1: TestModel( test == "2" ) from entry-point "MyEntryPoint"
$t2: Number(intValue > 3) from accumulate(TestModel( test == "2", id != $t1.id, this after [0s,1m] $t1)
from entry-point "MyEntryPoint",
init( total = 0 ),
action( total++ ),
reverse( total-- ),
result( total ))
That also works fine for me.
As I mentioned before, I am testing against trunk, using the attached example. I believe you might be seeing the exceptions, but I need to reproduce in order to understand what is happening.
Thanks,
Edson
> NPE after knowledgebase updated when using entrypoints
> ------------------------------------------------------
>
> Key: JBRULES-2278
> URL: https://jira.jboss.org/jira/browse/JBRULES-2278
> Project: Drools
> Issue Type: Bug
> Security Level: Public(Everyone can see)
> Components: drools-core, drools-core (expert), drools-core (fusion)
> Affects Versions: 5.0.1.FINAL
> Reporter: Michael Neale
> Assignee: Edson Tirelli
> Fix For: 5.1.0.M2
>
> Attachments: kagent-problem.zip
>
>
> Raised by Nestor Burriel on the dev list:
> I've tried to configure my rule engine obtaining unexpected behaviour.
> I configure my statefulSession as follows:
> wm = (ReteooStatefulSession) ((KnowledgeBaseImpl) kagent
> .getKnowledgeBase()).ruleBase.newStatefulSession(
> (SessionConfiguration) sessionConf, env);
> ksession = new StatefulKnowledgeSessionImpl(wm, kagent.getKnowledgeBase());
> And after updating the KnowledgeBase in the agent I update my ksession:
> wm.setRuleBase((InternalRuleBase) ((KnowledgeBaseImpl) kagent
> .getKnowledgeBase()).ruleBase);
> ksession = new StatefulKnowledgeSessionImpl(wm, kagent.getKnowledgeBase());
> Without using entry-points this approach works as expected, but using them
> it fails after the first update throwing the error:
> Exception while processing message: java.lang.NullPointerException
> java.lang.NullPointerException
> at
> org.drools.reteoo.ReteooFactHandleFactory.newFactHandle(ReteooFactHandleFactory.java:54)
> at
> org.drools.common.AbstractFactHandleFactory.newFactHandle(AbstractFactHandleFactory.java:79)
> at
> org.drools.common.AbstractFactHandleFactory.newFactHandle(AbstractFactHandleFactory.java:66)
> at
> org.drools.common.NamedEntryPoint.insert(NamedEntryPoint.java:109)
> at org.drools.common.NamedEntryPoint.insert(NamedEntryPoint.java:80)
> at org.drools.common.NamedEntryPoint.insert(NamedEntryPoint.java:28)
> Browsing the drools core code I found the line that was throwing the
> exception and tried to get the same result by implementing:
> if (!((InternalRuleBase) ((KnowledgeBaseImpl)
> ksession.getKnowledgeBase()).ruleBase)
> .getTypeDeclaration(fact.getClass()) ==
> null)
> log.info (((InternalRuleBase) ((KnowledgeBaseImpl)
> ksession.getKnowledgeBase()).ruleBase)
> .getTypeDeclaration(fact.getClass()).getTimestampExtractor().toString());
> after updating my ksession. The result was the same, again the same
> exception thrown but my logger wrote:
> 18:01:50,232 INFO [ClassFieldExtractor class=MyPackage.MyFact
> field=myTimestampField]
> So I dont know why the core is throwing that exception, is that
> implementation correct?, any ideas?
> Thanks,
> Nestor
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: https://jira.jboss.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
More information about the jboss-jira
mailing list