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.java: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(MVELPredicateExpression.java:101)
at
org.drools.rule.PredicateConstraint.isAllowedCachedLeft(PredicateConstraint.java:314)
at
org.drools.common.DefaultBetaConstraints.isAllowedCachedLeft(DefaultBetaConstraints.java:226)
at
org.drools.reteoo.JoinNode.assertLeftTuple(JoinNode.java:98)
at
org.drools.reteoo.SingleLeftTupleSinkAdapter.doPropagateAssertLeftTuple(SingleLeftTupleSinkAdapter.java:197)
at
org.drools.reteoo.SingleLeftTupleSinkAdapter.createAndPropagateAssertLeftTuple(SingleLeftTupleSinkAdapter.java:146)
at
org.drools.reteoo.LeftInputAdapterNode.assertObject(LeftInputAdapterNode.java:154)
at
org.drools.reteoo.SingleObjectSinkAdapter.propagateAssertObject(SingleObjectSinkAdapter.java:59)
at
org.drools.reteoo.AlphaNode.assertObject(AlphaNode.java:134)
at
org.drools.reteoo.SingleObjectSinkAdapter.propagateAssertObject(SingleObjectSinkAdapter.java:59)
at
org.drools.reteoo.AlphaNode.assertObject(AlphaNode.java:134)
at
org.drools.reteoo.CompositeObjectSinkAdapter.doPropagateAssertObject(CompositeObjectSinkAdapter.java:450)
at
org.drools.reteoo.CompositeObjectSinkAdapter.propagateAssertObject(CompositeObjectSinkAdapter.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:905)
at
org.drools.common.AbstractWorkingMemory.insert(AbstractWorkingMemory.java:864)
at
org.drools.impl.StatefulKnowledgeSessionImpl.insert(StatefulKnowledgeSessionImpl.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.java:886)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at
java.lang.Thread.run(Thread.java:662)