Hi, folks,
I'm using Drools 5.1, JDK 1.6 on tomcat 6.0.28 to build a OLTP application.
System's volume is about 1.5 million transactions a day. The pilot PROD
release was done about 1 week ago and we've noticed many
NoClassDefFoundError exception run time. A sample piece is pasted below. For
information security concern, I masked class names here. This happened much
more frequent when system load pressure is big - memory is between 80% to
100% and disk is between 80% - 100%. As we are running on a cloud virtual
instance environment, virtual node has relatively small profile - 40GB disk,
4GB memory, 2 core Intel 3.0 GHz CPU. I've searched through the web and
found some reported bug -
https://issues.jboss.org/browse/JBRULES-2253?_sscc=t. here I got two
questions:
1. If anybody in the community has met similar issue before and how
you fix it?
2. It seems I can either convert my rule into Java Dialect or turn off
MVEL2 JIT attribute: Dmvel2.disable.jit=true. Does anybody have summary
information about the good and bad between MVEL and JAVA dialect?
ERROR>2012-03-09 10:00:22,432
com.xxx.xxx.xxx.drools.SessionManager[pool-5-thread-6]: Unexpected error :
java.lang.NoClassDefFoundError: com/xxx/xxx/xxx/xxx/xxx/GetAmountTolerance
at ASMAccessorImpl_20916505061331280591040.getValue(Unknown Source)
at
org.mvel2.optimizers.dynamic.DynamicGetAccessor.getValue(DynamicGetAccessor.
java:73)
at
org.mvel2.ast.ASTNode.getReducedValueAccelerated(ASTNode.java:110)
at
org.mvel2.ast.BinaryOperation.getReducedValueAccelerated(BinaryOperation.jav
a:124)
at org.mvel2.MVELRuntime.execute(MVELRuntime.java:89)
at
org.mvel2.compiler.CompiledExpression.getValue(CompiledExpression.java:125)
at org.mvel2.MVEL.executeExpression(MVEL.java:928)
at
org.drools.base.mvel.MVELPredicateExpression.evaluate(MVELPredicateExpressio
n.java:101)
at
org.drools.rule.PredicateConstraint.isAllowedCachedLeft(PredicateConstraint.
java:314)
at
org.drools.common.DefaultBetaConstraints.isAllowedCachedLeft(DefaultBetaCons
traints.java:226)
at org.drools.reteoo.JoinNode.assertLeftTuple(JoinNode.java:98)
at
org.drools.reteoo.SingleLeftTupleSinkAdapter.doPropagateAssertLeftTuple(Sing
leLeftTupleSinkAdapter.java:197)
at
org.drools.reteoo.SingleLeftTupleSinkAdapter.createAndPropagateAssertLeftTup
le(SingleLeftTupleSinkAdapter.java:146)
at
org.drools.reteoo.LeftInputAdapterNode.assertObject(LeftInputAdapterNode.jav
a:154)
at
org.drools.reteoo.SingleObjectSinkAdapter.propagateAssertObject(SingleObject
SinkAdapter.java:59)
at org.drools.reteoo.AlphaNode.assertObject(AlphaNode.java:134)
at
org.drools.reteoo.SingleObjectSinkAdapter.propagateAssertObject(SingleObject
SinkAdapter.java:59)
at org.drools.reteoo.AlphaNode.assertObject(AlphaNode.java:134)
at
org.drools.reteoo.CompositeObjectSinkAdapter.doPropagateAssertObject(Composi
teObjectSinkAdapter.java:450)
at
org.drools.reteoo.CompositeObjectSinkAdapter.propagateAssertObject(Composite
ObjectSinkAdapter.java:368)
at
org.drools.reteoo.ObjectTypeNode.assertObject(ObjectTypeNode.java:193)
at
org.drools.reteoo.EntryPointNode.assertObject(EntryPointNode.java:191)
at
org.drools.common.NamedEntryPoint.insert(NamedEntryPoint.java:332)
at
org.drools.common.NamedEntryPoint.insert(NamedEntryPoint.java:293)
at
org.drools.common.AbstractWorkingMemory.insert(AbstractWorkingMemory.java:90
5)
at
org.drools.common.AbstractWorkingMemory.insert(AbstractWorkingMemory.java:86
4)
at
org.drools.impl.StatefulKnowledgeSessionImpl.insert(StatefulKnowledgeSession
Impl.java:255)
at
com.ssc.gce.reconcile.drools.SessionManager.insert(SessionManager.java:116)
at
com.ssc.gce.reconcile.drools.SessionManager.run(SessionManager.java:171)
at
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.ja
va:886)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:9
08)
at java.lang.Thread.run(Thread.java:662)