Bug 1061691

Summary: Error when using functions in LHS
Product: [Retired] JBoss BRMS Platform 6 Reporter: Thiago Araki <taraki>
Component: BREAssignee: Mario Fusco <mfusco>
Status: CLOSED DUPLICATE QA Contact: Marek Winkler <mwinkler>
Severity: high Docs Contact:
Priority: high    
Version: 6.0.0CC: kverlaen
Target Milestone: ---   
Target Release: ---   
Hardware: x86_64   
OS: Linux   
Whiteboard:
Fixed In Version: Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2014-02-05 16:14:30 UTC Type: Bug
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:

Description Thiago Araki 2014-02-05 12:47:53 UTC
Description of problem:
In LHS part of a rule I invoke a function that adds a number of seconds to a date (attribute of the fact), and returns the new date.

Function:
function Date addSeconds(Date initialDate, int numSecs)
{
   Calendar cal = Calendar.getInstance();
   cal.setTime(initialDate);
   cal.add(Calendar.SECOND, numSecs);
   return cal.getTime();
}

Rule:
import GeoTruckCepData;
import java.util.Date;
import java.util.Calendar;
when
   $a : GeoTruckCepData( $newDate : addSeconds(date1, 40) > date2);
then
   //do something

This rule is invoked in a loop, and works correctly for a while. But after some executions, the following exception is raised:

Exception in thread "Thread-1" java.lang.NoClassDefFoundError: com/petrobras/bpms/AddSeconds
	at ConditionEvaluator530b9c3239cf450992fb5cef1bee783e.evaluate(Unknown Source)
	at org.drools.core.rule.constraint.MvelConstraint.evaluate(MvelConstraint.java:212)
	at org.drools.core.rule.constraint.MvelConstraint.isAllowed(MvelConstraint.java:169)
	at org.drools.core.reteoo.AlphaNode.assertObject(AlphaNode.java:134)
	at org.drools.core.reteoo.CompositeObjectSinkAdapter.doPropagateAssertObject(CompositeObjectSinkAdapter.java:502)
	at org.drools.core.reteoo.CompositeObjectSinkAdapter.propagateAssertObject(CompositeObjectSinkAdapter.java:387)
	at org.drools.core.reteoo.ObjectTypeNode.assertObject(ObjectTypeNode.java:288)
	at org.drools.core.reteoo.EntryPointNode.assertObject(EntryPointNode.java:260)
	at org.drools.core.common.NamedEntryPoint.insert(NamedEntryPoint.java:360)
	at org.drools.core.common.NamedEntryPoint.insert(NamedEntryPoint.java:279)
	at org.drools.core.common.AbstractWorkingMemory.insert(AbstractWorkingMemory.java:1149)
	at org.drools.core.base.DefaultKnowledgeHelper.insert(DefaultKnowledgeHelper.java:223)
	at org.drools.core.base.DefaultKnowledgeHelper.insert(DefaultKnowledgeHelper.java:217)
	at com.petrobras.bpms.Rule_GeoTruckCEP233101954.defaultConsequence(Rule_GeoTruckCEP233101954.java:21)
	at com.petrobras.bpms.Rule_GeoTruckCEP233101954DefaultConsequenceInvokerGenerated.evaluate(Unknown Source)
	at com.petrobras.bpms.Rule_GeoTruckCEP233101954DefaultConsequenceInvoker.evaluate(Unknown Source)
	at org.drools.core.common.DefaultAgenda.fireActivation(DefaultAgenda.java:1018)
	at org.drools.core.phreak.RuleExecutor.fire(RuleExecutor.java:128)
	at org.drools.core.phreak.RuleExecutor.evaluateNetworkAndFire(RuleExecutor.java:70)
	at org.drools.core.common.DefaultAgenda.fireNextItem(DefaultAgenda.java:937)
	at org.drools.core.common.DefaultAgenda.fireAllRules(DefaultAgenda.java:1201)
	at org.drools.core.common.AbstractWorkingMemory.fireAllRules(AbstractWorkingMemory.java:958)
	at org.drools.core.common.AbstractWorkingMemory.fireAllRules(AbstractWorkingMemory.java:932)
	at org.drools.core.impl.StatefulKnowledgeSessionImpl.fireAllRules(StatefulKnowledgeSessionImpl.java:256)
	at com.petrobras.bpms.geotruck.TruckSimulator.run(TruckSimulator.java:68)
Caused by: java.lang.ClassNotFoundException: com.petrobras.bpms.AddSeconds
	at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
	at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
	at java.lang.Class.forName0(Native Method)
	at java.lang.Class.forName(Class.java:270)
	at org.drools.core.common.ProjectClassLoader.loadClass(ProjectClassLoader.java:87)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
	... 25 more
Exception in thread "Thread-0" java.lang.NoClassDefFoundError: com/petrobras/bpms/AddSeconds
	at ConditionEvaluator4b69caabd32b42328e08abfd9f55c916.evaluate(Unknown Source)
	at org.drools.core.rule.constraint.MvelConstraint.evaluate(MvelConstraint.java:212)
	at org.drools.core.rule.constraint.MvelConstraint.isAllowed(MvelConstraint.java:169)
	at org.drools.core.reteoo.AlphaNode.assertObject(AlphaNode.java:134)
	at org.drools.core.reteoo.CompositeObjectSinkAdapter.doPropagateAssertObject(CompositeObjectSinkAdapter.java:502)
	at org.drools.core.reteoo.CompositeObjectSinkAdapter.propagateAssertObject(CompositeObjectSinkAdapter.java:387)
	at org.drools.core.reteoo.ObjectTypeNode.assertObject(ObjectTypeNode.java:288)
	at org.drools.core.reteoo.EntryPointNode.assertObject(EntryPointNode.java:260)
	at org.drools.core.common.NamedEntryPoint.insert(NamedEntryPoint.java:360)
	at org.drools.core.common.NamedEntryPoint.insert(NamedEntryPoint.java:279)
	at org.drools.core.common.AbstractWorkingMemory.insert(AbstractWorkingMemory.java:1149)
	at org.drools.core.base.DefaultKnowledgeHelper.insert(DefaultKnowledgeHelper.java:223)
	at org.drools.core.base.DefaultKnowledgeHelper.insert(DefaultKnowledgeHelper.java:217)
	at com.petrobras.bpms.Rule_GeoTruckCEP233101954.defaultConsequence(Rule_GeoTruckCEP233101954.java:21)
	at com.petrobras.bpms.Rule_GeoTruckCEP233101954DefaultConsequenceInvokerGenerated.evaluate(Unknown Source)
	at com.petrobras.bpms.Rule_GeoTruckCEP233101954DefaultConsequenceInvoker.evaluate(Unknown Source)
	at org.drools.core.common.DefaultAgenda.fireActivation(DefaultAgenda.java:1018)
	at org.drools.core.phreak.RuleExecutor.fire(RuleExecutor.java:128)
	at org.drools.core.phreak.RuleExecutor.evaluateNetworkAndFire(RuleExecutor.java:70)
	at org.drools.core.common.DefaultAgenda.fireNextItem(DefaultAgenda.java:937)
	at org.drools.core.common.DefaultAgenda.fireAllRules(DefaultAgenda.java:1201)
	at org.drools.core.common.AbstractWorkingMemory.fireAllRules(AbstractWorkingMemory.java:958)
	at org.drools.core.common.AbstractWorkingMemory.fireAllRules(AbstractWorkingMemory.java:932)
	at org.drools.core.impl.StatefulKnowledgeSessionImpl.fireAllRules(StatefulKnowledgeSessionImpl.java:256)
	at com.petrobras.bpms.geotruck.TruckSimulator.run(TruckSimulator.java:68)
Caused by: java.lang.ClassNotFoundException: This is just a cached Exception. Disable non existing classes cache to see the actual one.
	at org.drools.core.common.ProjectClassLoader.<clinit>(ProjectClassLoader.java:18)
	at org.drools.compiler.kie.builder.impl.ClasspathKieProject.init(ClasspathKieProject.java:62)
	at org.drools.compiler.kie.builder.impl.KieContainerImpl.<init>(KieContainerImpl.java:77)
	at org.drools.compiler.kie.builder.impl.KieServicesImpl.getKieClasspathContainer(KieServicesImpl.java:64)
	at com.petrobras.bpms.geotruck.TruckSimulator.run(TruckSimulator.java:43)

Version-Release number of selected component (if applicable):
BPM Suite 6.0.0 Beta

How reproducible:
Very easy

Steps to Reproduce:
1. Create rule that uses a function in LHS
2. Execute the rule in a loop
3. Wait until exception is raised (in my case, usually after 20 executions)

Actual results:
java.lang.NoClassDefFoundError exception raised

Expected results:
No exceptions raised.

Additional info:

This problem does not occur in BRMS version 5.3.1

The error is not associated with the fact attribute type (java.util.Date). I created another function that returns the sum of two integers, and the same behavior is verified.

Comment 2 Mario Fusco 2014-02-05 16:14:30 UTC

*** This bug has been marked as a duplicate of bug 1060218 ***