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)