1 2 Previous Next 19 Replies Latest reply on Jan 12, 2009 11:40 AM by kukeltje Go to original post
      • 15. Re: workaround for StackOverflow exception
        insanely.freak

         

        "vanyatka" wrote:
        Here is what I've tried:

        <state name="state2">
         <timer duedate="1 seconds" transition="check more banners" >
         <action class="com.agava.cbn.ods.action.SimpleStateHandler"></action>
         </timer>
        </state>


        Not the best solution, but I thought I'd do the trick. Unfortunately there is another problem, now in Seam:

        https://jira.jboss.org/jira/browse/JBSEAM-2575


        • 16. Re: workaround for StackOverflow exception
          insanely.freak

          Hi,
          I am gettin a Stakcoverflow exception when I try to use ActionHandler or DecisionHandlers/AssignmentHandler in my code.
          Following is my processdefinition file

          <?xml version="1.0" encoding="UTF-8"?>
          <process-definition xmlns="urn:jbpm.org:jpdl-3.1" name="timer_19">
           <start-state name="start">
           <transition to="decision" ></transition>
           </start-state>
           <decision name="decision">
           <handler class="com.workflow.CostCenterDecisionHandler"></handler>
           <transition to="to_end" name="to_end">
           <condition>
           <![CDATA[to_end]]>
           </condition>
           </transition>
           <transition to="taskNode" name="taskNode">
           <condition>
           <![CDATA[taskNode]]>
           </condition>
           </transition>
           </decision>
           <task-node name="taskNode" create-tasks="true">
           <task name="approve_task" description="hula">
           <assignment class="com.workflow.CostCenterAssignmentHandler">
           </assignment>
           </task>
           <transition to="decision" name="decision"/>
           </task-node>
           <end-state name="to_end"></end-state>
          </process-definition>
          [/url]

          Here I am trying to come back to task node with new task untill decision node explicitly decides to move to end state.
          I have tested this using junit in Eclipse it works fine. Only when I persist in db and then try to end a task by fetching task instance using Id from db, it gives me STACKOVERFLOW exception.
          Following is the stachtrace
          Caused by: java.lang.StackOverflowError
           at java.lang.System.arraycopy(Native Method)
           at java.lang.AbstractStringBuilder.expandCapacity(AbstractStringBuilder.java:100)
           at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:490)
           at java.lang.StringBuffer.append(StringBuffer.java:302)
           at org.apache.log4j.helpers.ISO8601DateFormat.format(ISO8601DateFormat.java:124)
           at java.text.DateFormat.format(DateFormat.java:314)
           at org.apache.log4j.helpers.PatternParser$DatePatternConverter.convert(PatternParser.java:436)
           at org.apache.log4j.helpers.PatternConverter.format(PatternConverter.java:56)
           at org.apache.log4j.PatternLayout.format(PatternLayout.java:495)
           at org.apache.log4j.WriterAppender.subAppend(WriterAppender.java:292)
           at org.apache.log4j.DailyRollingFileAppender.subAppend(DailyRollingFileAppender.java:349)
           at org.apache.log4j.WriterAppender.append(WriterAppender.java:150)
           at org.apache.log4j.AppenderSkeleton.doAppend(AppenderSkeleton.java:221)
           at org.apache.log4j.helpers.AppenderAttachableImpl.appendLoopOnAppenders(AppenderAttachableImpl.java:57)
           at org.apache.log4j.Category.callAppenders(Category.java:187)
           at org.apache.log4j.Category.forcedLog(Category.java:372)
           at org.apache.log4j.Category.log(Category.java:864)
           at org.apache.commons.logging.impl.Log4JLogger.debug(Log4JLogger.java:137)
           at org.hibernate.loader.Loader.loadCollection(Loader.java:1911)
           at org.hibernate.loader.collection.CollectionLoader.initialize(CollectionLoader.java:71)
           at org.hibernate.persister.collection.AbstractCollectionPersister.initialize(AbstractCollectionPersister.java:520)
           at org.hibernate.event.def.DefaultInitializeCollectionEventListener.onInitializeCollection(DefaultInitializeCollectionEventListener.java:60)
           at org.hibernate.impl.SessionImpl.initializeCollection(SessionImpl.java:1627)
           at org.hibernate.collection.AbstractPersistentCollection.initialize(AbstractPersistentCollection.java:344)
           at org.hibernate.collection.AbstractPersistentCollection.read(AbstractPersistentCollection.java:86)
           at org.hibernate.collection.AbstractPersistentCollection.readElementByIndex(AbstractPersistentCollection.java:161)
           at org.hibernate.collection.PersistentMap.get(PersistentMap.java:127)
           at org.jbpm.graph.def.ProcessDefinition.getDefinition(ProcessDefinition.java:431)
           at org.jbpm.graph.def.ProcessDefinition.getFileDefinition(ProcessDefinition.java:441)
           at org.jbpm.graph.def.ProcessDefinition$$FastClassByCGLIB$$b47a0f4a.invoke(<generated>)
           at net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:149)
           at org.hibernate.proxy.CGLIBLazyInitializer.intercept(CGLIBLazyInitializer.java:161)
           at org.jbpm.graph.def.ProcessDefinition$$EnhancerByCGLIB$$4e8ff03.getFileDefinition(<generated>)
           at org.jbpm.instantiation.ProcessClassLoader.findResource(ProcessClassLoader.java:47)
           at java.lang.ClassLoader.getResource(ClassLoader.java:977)
           at java.lang.ClassLoader.getResourceAsStream(ClassLoader.java:1159)
           at org.apache.commons.logging.LogFactory$3.run(LogFactory.java:627)
           at java.security.AccessController.doPrivileged(Native Method)
           at org.apache.commons.logging.LogFactory.getResourceAsStream(LogFactory.java:623)
           at org.apache.commons.logging.LogFactory.getFactory(LogFactory.java:281)
           at org.apache.commons.logging.LogFactory.getLog(LogFactory.java:395)
           at org.hibernate.type.NullableType.nullSafeSet(NullableType.java:79)
           at org.hibernate.type.NullableType.nullSafeSet(NullableType.java:63)
           at org.hibernate.loader.Loader.bindPositionalParameters(Loader.java:1514)
           at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1576)
           at org.hibernate.loader.Loader.doQuery(Loader.java:661)
           at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:224)
           at org.hibernate.loader.Loader.loadCollection(Loader.java:1919)
           at org.hibernate.loader.collection.CollectionLoader.initialize(CollectionLoader.java:71)
           at org.hibernate.persister.collection.AbstractCollectionPersister.initialize(AbstractCollectionPersister.java:520)
           at org.hibernate.event.def.DefaultInitializeCollectionEventListener.onInitializeCollection(DefaultInitializeCollectionEventListener.java:60)
           at org.hibernate.impl.SessionImpl.initializeCollection(SessionImpl.java:1627)
           at org.hibernate.collection.AbstractPersistentCollection.initialize(AbstractPersistentCollection.java:344)
           at org.hibernate.collection.AbstractPersistentCollection.read(AbstractPersistentCollection.java:86)
           at org.hibernate.collection.AbstractPersistentCollection.readElementByIndex(AbstractPersistentCollection.java:161)
           at org.hibernate.collection.PersistentMap.get(PersistentMap.java:127)
           at org.jbpm.graph.def.ProcessDefinition.getDefinition(ProcessDefinition.java:431)
           at org.jbpm.graph.def.ProcessDefinition.getFileDefinition(ProcessDefinition.java:441)
           at org.jbpm.graph.def.ProcessDefinition$$FastClassByCGLIB$$b47a0f4a.invoke(<generated>)
           at net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:149)
           at org.hibernate.proxy.CGLIBLazyInitializer.intercept(CGLIBLazyInitializer.java:161)
           at org.jbpm.graph.def.ProcessDefinition$$EnhancerByCGLIB$$4e8ff03.getFileDefinition(<generated>)
           at org.jbpm.instantiation.ProcessClassLoader.findResource(ProcessClassLoader.java:47)
           at java.lang.ClassLoader.getResource(ClassLoader.java:977)
           at java.lang.ClassLoader.getResourceAsStream(ClassLoader.java:1159)
           at org.apache.commons.logging.LogFactory$3.run(LogFactory.java:627)
           at java.security.AccessController.doPrivileged(Native Method)
           at org.apache.commons.logging.LogFactory.getResourceAsStream(LogFactory.java:623)
           at org.apache.commons.logging.LogFactory.getFactory(LogFactory.java:281)
           at org.apache.commons.logging.LogFactory.getLog(LogFactory.java:395)
           at org.hibernate.type.NullableType.nullSafeSet(NullableType.java:79)
           at org.hibernate.type.NullableType.nullSafeSet(NullableType.java:63)
           at org.hibernate.loader.Loader.bindPositionalParameters(Loader.java:1514)
           at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1576)
           at org.hibernate.loader.Loader.doQuery(Loader.java:661)
           at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:224)
           at org.hibernate.loader.Loader.loadCollection(Loader.java:1919)
           at org.hibernate.loader.collection.CollectionLoader.initialize(CollectionLoader.java:71)
           at org.hibernate.persister.collection.AbstractCollectionPersister.initialize(AbstractCollectionPersister.java:520)
           at org.hibernate.event.def.DefaultInitializeCollectionEventListener.onInitializeCollection(DefaultInitializeCollectionEventListener.java:60)
           at org.hibernate.impl.SessionImpl.initializeCollection(SessionImpl.java:1627)
           at org.hibernate.collection.AbstractPersistentCollection.initialize(AbstractPersistentCollection.java:344)
           at org.hibernate.collection.AbstractPersistentCollection.read(AbstractPersistentCollection.java:86)
           at org.hibernate.collection.AbstractPersistentCollection.readElementByIndex(AbstractPersistentCollection.java:161)
           at org.hibernate.collection.PersistentMap.get(PersistentMap.java:127)
           at org.jbpm.graph.def.ProcessDefinition.getDefinition(ProcessDefinition.java:431)
           at org.jbpm.graph.def.ProcessDefinition.getFileDefinition(ProcessDefinition.java:441)
           at org.jbpm.graph.def.ProcessDefinition$$FastClassByCGLIB$$b47a0f4a.invoke(<generated>)
           at net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:149)
           at org.hibernate.proxy.CGLIBLazyInitializer.intercept(CGLIBLazyInitializer.java:161)
           at org.jbpm.graph.def.ProcessDefinition$$EnhancerByCGLIB$$4e8ff03.getFileDefinition(<generated>)
           at org.jbpm.instantiation.ProcessClassLoader.findResource(ProcessClassLoader.java:47)
          

          I get a very huge stack trace with above repeating block of trace.

          I have already spent 4 days debuging the issue. Any input/help from any body is appreciated.

          ThankX in advance

          • 17. Re: workaround for StackOverflow exception
            kukeltje

            unittests can also store in DB... just extend the AbstractDBTestCase.... best real-world representation.

            • 18. Re: workaround for StackOverflow exception
              insanely.freak

              From one of the post in forum I got to know that there should be a wait state when we try to implement such loop cases, which in my case is there.
              I have also tried with two Task nodes but still i get same result following is the processdefinition.xml file for aboce case:

              <process-definition xmlns="urn:jbpm.org:jpdl-3.1" name="process_name">
              
               <start-state name="start">
               <transition to="decision" ></transition>
               </start-state>
              
               <task-node name="decision" create-tasks="true">
               <task name="decision_task" description="decision">
               </task>
               <transition to="to_end" name="to_end"/>
               <transition to="taskNode" name="taskNode"/>
               </task-node>
              
               <task-node name="taskNode" create-tasks="true">
               <task name="approve_task" description="hula">
               <assignment class="com.workflow.CostCenterAssignmentHandler">
               </assignment>
               </task>
               <transition to="decision" name="decision"/>
               </task-node>
              
               <end-state name="to_end"></end-state>
              </process-definition>


              • 19. Re: workaround for StackOverflow exception
                kukeltje

                Sigh.....

                MAKE A FULL TRIMMED DOWN UNITTEST WITH EMBEDDED PROCESSDEFINITION AND INNER CLASSES FOR THE ACTIONHANDLER.

                please..............

                1 2 Previous Next