3 Replies Latest reply on Nov 12, 2015 7:47 AM by Ad van Ommen

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

    tracy zheng Newbie

      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
          Ad van Ommen Newbie

          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
            Ad van Ommen Newbie

            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
              Ad van Ommen Newbie

              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:]