3 Replies Latest reply on Nov 12, 2015 7:47 AM by advommen

    JBPM and Drools 6.2.0 Final throws java.io.OptionalDataException when deepClone is invoked in org.drools.core.util.ClassUtils when high concurrency

    qiuhao.zheng

      The exception randomly occured in some threads while more than 2 dozens of them running concurrently.

       

      java.lang.RuntimeException: java.io.OptionalDataException

              at org.drools.core.util.ClassUtils.deepClone(ClassUtils.java:514)

              at org.drools.core.definitions.impl.KnowledgePackageImpl.deepCloneIfAlreadyInUse(KnowledgePackageImpl.java:801)

              at org.drools.core.definitions.impl.KnowledgePackageImpl.deepCloneIfAlreadyInUse(KnowledgePackageImpl.java:66)

              at org.drools.core.impl.KnowledgeBaseImpl.addPackages(KnowledgeBaseImpl.java:728)

              at org.drools.core.impl.KnowledgeBaseImpl.addKnowledgePackages(KnowledgeBaseImpl.java:272)

              at org.drools.compiler.builder.impl.KnowledgeBuilderImpl.newKnowledgeBase(KnowledgeBuilderImpl.java:2193)

              at org.drools.compiler.builder.impl.KnowledgeBuilderImpl.newKnowledgeBase(KnowledgeBuilderImpl.java:2181)

              at com.telcordia.xdsc.dds.jbpm.KnowledgeSessionFactory.createSession(KnowledgeSessionFactory.java:79)

              at com.telcordia.xdsc.dds.jbpm.KnowledgeSessionFactory.getInstance(KnowledgeSessionFactory.java:56)

              at com.telcordia.xdsc.dds.jbpm.RunProcess.runProcess(RunProcess.java:50)

       

       

      Sometimes, a different exception

      java.lang.RuntimeException: java.io.InvalidObjectException: Illegal mappings count: -1

              at org.drools.core.util.ClassUtils.deepClone(ClassUtils.java:514)

              at org.drools.core.definitions.impl.KnowledgePackageImpl.deepCloneIfAlreadyInUse(KnowledgePackageImpl.java:801)

              at org.drools.core.definitions.impl.KnowledgePackageImpl.deepCloneIfAlreadyInUse(KnowledgePackageImpl.java:66)

              at org.drools.core.impl.KnowledgeBaseImpl.addPackages(KnowledgeBaseImpl.java:728)

              at org.drools.core.impl.KnowledgeBaseImpl.addKnowledgePackages(KnowledgeBaseImpl.java:272)

              at org.drools.compiler.builder.impl.KnowledgeBuilderImpl.newKnowledgeBase(KnowledgeBuilderImpl.java:2193)

              at org.drools.compiler.builder.impl.KnowledgeBuilderImpl.newKnowledgeBase(KnowledgeBuilderImpl.java:2181)

              at com.telcordia.xdsc.dds.jbpm.KnowledgeSessionFactory.createSession(KnowledgeSessionFactory.java:79)

              at com.telcordia.xdsc.dds.jbpm.KnowledgeSessionFactory.getInstance(KnowledgeSessionFactory.java:56)

              at com.telcordia.xdsc.dds.jbpm.RunProcess.runProcess(RunProcess.java:50)

       

      We recently upgraded to JBPM and DROOLS 6.2.0.  We used 5.5.0 which didn't have this problem when running high concurrency.

      Has anyone encounter this issue?

        • 1. Re: JBPM and Drools 6.2.0 Final throws java.io.OptionalDataException when deepClone is invoked in org.drools.core.util.ClassUtils when high concurrency
          advommen

          Today we encountered what seems to me the very same error. We do use 6.1.0 Final and received the following

           

          java.lang.RuntimeException: java.io.InvalidObjectException: Illegal mappings count: -2

          org.drools.core.util.ClassUtils.deepClone(ClassUtils.java:514)

          org.drools.core.definitions.impl.KnowledgePackageImpl.deepCloneIfAlreadyInUse(KnowledgePackageImpl.java:770)

          org.drools.core.definitions.impl.KnowledgePackageImpl.deepCloneIfAlreadyInUse(KnowledgePackageImpl.java:66)

          org.drools.core.impl.KnowledgeBaseImpl.addPackages(KnowledgeBaseImpl.java:722)

          org.drools.core.impl.KnowledgeBaseImpl.addKnowledgePackages(KnowledgeBaseImpl.java:266)

          org.drools.impl.adapters.KnowledgeBaseAdapter.addKnowledgePackages(KnowledgeBaseAdapter.java:38)

          ....

          • 2. Re: JBPM and Drools 6.2.0 Final throws java.io.OptionalDataException when deepClone is invoked in org.drools.core.util.ClassUtils when high concurrency
            advommen

            In addition to my previous reply, we even have a more detailed root cause:

             

            java.io.InvalidObjectException: Illegal mappings count: -2

            java.util.HashMap.readObject(HashMap.java:1159)

            sun.reflect.GeneratedMethodAccessor5553.invoke(Unknown Source)

            sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

            java.lang.reflect.Method.invoke(Method.java:606)

            java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1017)

            java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1893)

            java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1798)

            java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1350)

            java.io.ObjectInputStream.readObject(ObjectInputStream.java:370)

            org.jbpm.workflow.core.DroolsAction.readExternal(DroolsAction.java:61)

            org.jbpm.workflow.core.impl.DroolsConsequenceAction.readExternal(DroolsConsequenceAction.java:49)

            java.io.ObjectInputStream.readExternalData(ObjectInputStream.java:1837)

            java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1796)

            java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1350)

            java.io.ObjectInputStream.readObject(ObjectInputStream.java:370)

            org.drools.core.rule.JavaDialectRuntimeData.readExternal(JavaDialectRuntimeData.java:198)

            java.io.ObjectInputStream.readExternalData(ObjectInputStream.java:1837)

            java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1796)

            java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1350)

            java.io.ObjectInputStream.readObject(ObjectInputStream.java:370)

            java.util.HashMap.readObject(HashMap.java:1180)

            sun.reflect.GeneratedMethodAccessor5553.invoke(Unknown Source)

            sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

            java.lang.reflect.Method.invoke(Method.java:606)

            java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1017)

            java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1893)

            java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1798)

            java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1350)

            java.io.ObjectInputStream.readObject(ObjectInputStream.java:370)

            org.drools.core.rule.DialectRuntimeRegistry.readExternal(DialectRuntimeRegistry.java:59)

            java.io.ObjectInputStream.readExternalData(ObjectInputStream.java:1837)

            java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1796)

            java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1350)

            java.io.ObjectInputStream.readObject(ObjectInputStream.java:370)

            org.drools.core.definitions.impl.KnowledgePackageImpl.readExternal(KnowledgePackageImpl.java:284)

            java.io.ObjectInputStream.readExternalData(ObjectInputStream.java:1837)

            java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1796)

            java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1350)

            java.io.ObjectInputStream.readObject(ObjectInputStream.java:370)

            org.drools.core.util.ClassUtils.deepClone(ClassUtils.java:511)

            org.drools.core.definitions.impl.KnowledgePackageImpl.deepCloneIfAlreadyInUse(KnowledgePackageImpl.java:770)

            org.drools.core.definitions.impl.KnowledgePackageImpl.deepCloneIfAlreadyInUse(KnowledgePackageImpl.java:66)

            org.drools.core.impl.KnowledgeBaseImpl.addPackages(KnowledgeBaseImpl.java:722)

            • 3. Re: JBPM and Drools 6.2.0 Final throws java.io.OptionalDataException when deepClone is invoked in org.drools.core.util.ClassUtils when high concurrency
              advommen

              Once again, under heavy load, we have yet another almost similar exception (Drools 6.1.0.Final)

               

                exception: java.io.NotSerializableException: com.pwc.fdb.Process_com$u46$pwc$u46$fdb$u46$FdbRuleFlowMaster609832596Action0Invoker

                      at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1183) [rt.jar:1.7.0_80]

                      at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:347) [rt.jar:1.7.0_80]

                      at java.util.HashMap.writeObject(HashMap.java:1129) [rt.jar:1.7.0_80]

                      at sun.reflect.GeneratedMethodAccessor306.invoke(Unknown Source) [:1.7.0_80]

                      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [rt.jar:1.7.0_80]

                      at java.lang.reflect.Method.invoke(Method.java:606) [rt.jar:1.7.0_80]

                      at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:988) [rt.jar:1.7.0_80]

                      at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1495) [rt.jar:1.7.0_80]

                      at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1431) [rt.jar:1.7.0_80]

                      at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1177) [rt.jar:1.7.0_80]

                      at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:347) [rt.jar:1.7.0_80]

                      at org.jbpm.workflow.core.DroolsAction.writeExternal(DroolsAction.java:69) [jbpm-flow-6.1.0.Final.jar:6.1.0.Final]

                      at org.jbpm.workflow.core.impl.DroolsConsequenceAction.writeExternal(DroolsConsequenceAction.java:42) [jbpm-flow-6.1.0.Final.jar:6.1.0.Final]

                      at java.io.ObjectOutputStream.writeExternalData(ObjectOutputStream.java:1458) [rt.jar:1.7.0_80]

                      at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1429) [rt.jar:1.7.0_80]

                      at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1177) [rt.jar:1.7.0_80]

                      at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:347) [rt.jar:1.7.0_80]

                      at org.drools.core.rule.JavaDialectRuntimeData.writeExternal(JavaDialectRuntimeData.java:136) [drools-core-6.1.0.Final.jar:6.1.0.Final]

                      at java.io.ObjectOutputStream.writeExternalData(ObjectOutputStream.java:1458) [rt.jar:1.7.0_80]

                      at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1429) [rt.jar:1.7.0_80]

                      at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1177) [rt.jar:1.7.0_80]

                      at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:347) [rt.jar:1.7.0_80]

                      at java.util.HashMap.writeObject(HashMap.java:1129) [rt.jar:1.7.0_80]

                      at sun.reflect.GeneratedMethodAccessor306.invoke(Unknown Source) [:1.7.0_80]

                      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [rt.jar:1.7.0_80]

                      at java.lang.reflect.Method.invoke(Method.java:606) [rt.jar:1.7.0_80]

                      at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:988) [rt.jar:1.7.0_80]

                      at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1495) [rt.jar:1.7.0_80]

                      at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1431) [rt.jar:1.7.0_80]

                      at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1177) [rt.jar:1.7.0_80]

                      at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:347) [rt.jar:1.7.0_80]

                      at org.drools.core.rule.DialectRuntimeRegistry.writeExternal(DialectRuntimeRegistry.java:48) [drools-core-6.1.0.Final.jar:6.1.0.Final]

                      at java.io.ObjectOutputStream.writeExternalData(ObjectOutputStream.java:1458) [rt.jar:1.7.0_80]

                      at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1429) [rt.jar:1.7.0_80]

                      at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1177) [rt.jar:1.7.0_80]

                      at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:347) [rt.jar:1.7.0_80]

                      at org.drools.core.definitions.impl.KnowledgePackageImpl.writeExternal(KnowledgePackageImpl.java:237) [drools-core-6.1.0.Final.jar:6.1.0.Final]

                      at java.io.ObjectOutputStream.writeExternalData(ObjectOutputStream.java:1458) [rt.jar:1.7.0_80]

                      at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1429) [rt.jar:1.7.0_80]

                      at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1177) [rt.jar:1.7.0_80]

                      at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:347) [rt.jar:1.7.0_80]

                      at org.drools.core.util.ClassUtils.deepClone(ClassUtils.java:508) [drools-core-6.1.0.Final.jar:6.1.0.Final]

                      at org.drools.core.definitions.impl.KnowledgePackageImpl.deepCloneIfAlreadyInUse(KnowledgePackageImpl.java:770) [drools-core-6.1.0.Final.jar:6.1.0.Final]

                      at org.drools.core.definitions.impl.KnowledgePackageImpl.deepCloneIfAlreadyInUse(KnowledgePackageImpl.java:66) [drools-core-6.1.0.Final.jar:6.1.0.Final]

                      at org.drools.core.impl.KnowledgeBaseImpl.addPackages(KnowledgeBaseImpl.java:722) [drools-core-6.1.0.Final.jar:6.1.0.Final]

                      at org.drools.core.impl.KnowledgeBaseImpl.addKnowledgePackages(KnowledgeBaseImpl.java:266) [drools-core-6.1.0.Final.jar:6.1.0.Final]

                      at org.drools.impl.adapters.KnowledgeBaseAdapter.addKnowledgePackages(KnowledgeBaseAdapter.java:38) [knowledge-api-6.1.0.Final.jar:6.1.0.Final]

                      at com.pwc.fdb.utils.DroolsUtil.doDroolsHybrid(DroolsUtil.java:319) [classes:]