Uploaded image for project: 'JBRULES'
  1. JBRULES
  2. JBRULES-2253

ClassNotFound when ASM optimizer kicks in in MVEL consequence

    Details

    • Type: Bug
    • Status: Closed (View Workflow)
    • Priority: Critical
    • Resolution: Out of Date
    • Affects Version/s: 5.0.1.FINAL
    • Fix Version/s: 6.0.0.Alpha1
    • Component/s: drools-core
    • Labels:
      None

      Description

      (ok if the subject is really confusing, perhaps this bug isn't for you).

      In chasing down JBRULES-2234 I found this. Instructions (apologies for relying on Guvnor to reproduce):

      To reproduce is not
      easy, but here are some instructions:

      • Run latest Guvnor (if you are able to, if not, then the rest is moot !).
      • Import the attached repo (unzip it first).
      • browse to KnowledgeBases/org/acme/insurance/pricing/
      • press "build package"
      • shut it down, restart (flushes caches etc...)
        Then:
      • browse to KnowledgeBases/org/acme/insurance/pricing/Test Scenarios
      • open PolicyQuotePackageTest
      • run it:

      Now you should see an exception like this:
      Caused by: java.lang.NoClassDefFoundError: org/acme/insurance/Policy
      at ASMAccessorImpl_62408281250565694450.setValue(Unknown Source)
      at org.mvel2.optimizers.dynamic.DynamicSetAccessor.setValue(DynamicSetAccessor.java:74)
      at org.mvel2.compiler.CompiledAccExpression.setValue(CompiledAccExpression.java:47)
      at org.mvel2.MVEL.executeSetExpression(MVEL.java:962)
      at org.mvel2.ast.WithNode$ParmValuePair.eval(WithNode.java:242)
      at org.mvel2.ast.WithNode.getReducedValueAccelerated(WithNode.java:67)
      at org.mvel2.ast.InterceptorWrapper.getReducedValueAccelerated(InterceptorWrapper.java:38)
      at org.mvel2.MVELRuntime.execute(MVELRuntime.java:85)
      at org.mvel2.compiler.CompiledExpression.getValue(CompiledExpression.java:104)
      at org.mvel2.MVEL.executeExpression(MVEL.java:995)
      at org.drools.base.mvel.MVELConsequence.evaluate(MVELConsequence.java:91)
      at org.drools.common.DefaultAgenda.fireActivation(DefaultAgenda.java:966)

      This is due to it loading a previously serialized version of the KB.
      If it was to run off a freshly compiled one, its all fine. Also, if I
      tell MVEL to NOT use ASM optimizer, it works fine (using reflection).
      So clearly the stuff is available to the classpath in the right
      places... its only to do with ASM in mvel post deserialization. (and
      for that to happen, MVEL has to execute the compiled expression enough
      to kick in the JIT).

      MVELCompilationUnit in drools is worth examining too... still not sure where the problem lies.

        Gliffy Diagrams

          Attachments

          1. EvaluationTests.java
            2 kB
          2. fibonacci.drl
            0.8 kB
          3. repository_export_mic.zip
            77 kB

            Issue Links

              Activity

                People

                • Assignee:
                  tsurdilovic Tihomir Surdilovic
                  Reporter:
                  michaelneale Michael Neale
                • Votes:
                  5 Vote for this issue
                  Watchers:
                  15 Start watching this issue

                  Dates

                  • Created:
                    Updated:
                    Resolved: