1 2 Previous Next 26 Replies Latest reply on Dec 16, 2005 8:30 PM by Elmo

    Timer problems

    Marcos Donato Newbie

      Hi all,

      i'm using jbpm-3.0.2 and ibm websphere, i'm having problems on creation of a process with a timer tag, i've tried a lot of ways to describe the timer on processdefinition.xml, but with no success.

      Some one can help me on this?

      What i'm doing wrong?

      <process-definition
       name="teste-timer">
       <start-state name="start">
       <transition name="tr1" to="state1"></transition>
       </start-state>
      
       <state name="state1">
       <event type="node-enter">
       <create-timer name="timer" duedate="1 minute" repeat="yes" transition="tr1" >
       <action name="action1" class="br.com.glr.jbpm.handlers.MailActionHandler">
       <from>admin@glr.com.br</from>
       <message>timer</message>
       <subject>timer</subject>
       <to>marcos@glr.com.br</to>
       </action>
       </create-timer>
       </event>
       <transition name="tr1" to="end1"></transition>
       </state>
       <end-state name="end1"></end-state>
      </process-definition>


      when i start a new instance of it, i'm receiving this exception!

      [2005-12-12 12:31:30,211] DEBUG 5236766 ctx:[[sessionFacade=WorkflowEngineSessionFacadeBean.java, method=startProcessInstance(name)] [classe=MainWorkflow.java, method=startProcess(name, variables)]] - finalizando metodo: metodo=MainWorkflow.java::startProcess(name, variables)
       [2005-12-12 12:31:30,211] DEBUG 5236766 ctx:[[sessionFacade=WorkflowEngineSessionFacadeBean.java, method=startProcessInstance(name)]] - finalizando metodo: metodo=WorkflowEngineSessionFacadeBean.java::startProcessInstance(name)
      
      [12/12/05 12:31:30:226 GMT-03:00] 46178497 ConnectionMan I org.hibernate.jdbc.ConnectionManager Skipping aggresive-release due to open resources on batcher
      
      [12/12/05 12:31:30:226 GMT-03:00] 46178497 ConnectionMan I org.hibernate.jdbc.ConnectionManager Skipping aggresive-release due to open resources on batcher
      
      [12/12/05 12:31:30:226 GMT-03:00] 46178497 AbstractBatch W org.hibernate.jdbc.AbstractBatcher exception clearing maxRows/queryTimeout
      
      [12/12/05 12:31:30:242 GMT-03:00] 46178497 AbstractBatch W org.hibernate.jdbc.AbstractBatcher TRAS0014I: A seguinte exceção foi registrada com.ibm.websphere.ce.cm.ObjectClosedException: DSRA9110E: Statement está fechado.
       at com.ibm.ws.rsadapter.jdbc.WSJdbcStatement.runtimeXIfNotClosed(WSJdbcStatement.java:952)
       at com.ibm.ws.rsadapter.jdbc.WSJdbcStatement.getMaxRows(WSJdbcStatement.java:608)
       at org.hibernate.jdbc.AbstractBatcher.closeQueryStatement(AbstractBatcher.java:223)
       at org.hibernate.jdbc.AbstractBatcher.closeStatements(AbstractBatcher.java:273)
       at org.hibernate.jdbc.ConnectionManager.cleanup(ConnectionManager.java:272)
       at org.hibernate.jdbc.ConnectionManager.close(ConnectionManager.java:207)
       at org.hibernate.impl.SessionImpl.close(SessionImpl.java:309)
       at org.hibernate.impl.SessionImpl.managedClose(SessionImpl.java:361)
       at org.hibernate.transaction.CacheSynchronization.afterCompletion(CacheSynchronization.java:90)
       at com.ibm.ws.Transaction.JTA.RegisteredSyncs.distributeAfter(RegisteredSyncs.java(Compiled Code))
       at com.ibm.ws.Transaction.JTA.TransactionImpl.distributeAfter(TransactionImpl.java(Inlined Compiled Code))
       at com.ibm.ws.Transaction.JTA.RegisteredResources.flowCommitOnePhase(RegisteredResources.java(Compiled Code))
       at com.ibm.ws.Transaction.JTA.RegisteredResources.distributePrepare(RegisteredResources.java(Compiled Code))
       at com.ibm.ws.Transaction.JTA.TransactionImpl.internalPrepare(TransactionImpl.java(Compiled Code))
       at com.ibm.ws.Transaction.JTA.TransactionImpl.commit(TransactionImpl.java(Compiled Code))
       at com.ibm.ws.Transaction.JTA.TranManagerImpl.commit(TranManagerImpl.java(Compiled Code))
       at com.ibm.ws.Transaction.JTA.TranManagerSet.commit(TranManagerSet.java(Compiled Code))
       at com.ibm.ejs.csi.TranStrategy.commit(TranStrategy.java(Compiled Code))
       at com.ibm.ejs.csi.TranStrategy.postInvoke(TranStrategy.java(Compiled Code))
       at com.ibm.ejs.csi.TransactionControlImpl.postInvoke(TransactionControlImpl.java(Compiled Code))
       at com.ibm.ejs.container.EJSContainer.postInvoke(EJSContainer.java(Compiled Code))
       at br.com.glr.populis.model.workflow.ejb.EJSLocalStatelessWorkflowEngineSessionFacade_a8e0f47b.startProcessInstance(EJSLocalStatelessWorkflowEngineSessionFacade_a8e0f47b.java:198)
       at sun.reflect.GeneratedMethodAccessor161.invoke(Unknown Source)
       at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java(Compiled Code))
       at java.lang.reflect.Method.invoke(Method.java(Compiled Code))
       at com.ibm.etools.utc.model.ReflectionMethodModel.invoke(ReflectionMethodModel.java:68)
       at com.ibm.etools.utc.servlet.InvokeServlet.invoke(InvokeServlet.java:110)
       at com.ibm.etools.utc.servlet.InvokeServlet.doPost(InvokeServlet.java:366)
       at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
       at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
       at com.ibm.ws.webcontainer.servlet.StrictServletInstance.doService(StrictServletInstance.java:110)
       at com.ibm.ws.webcontainer.servlet.StrictLifecycleServlet._service(StrictLifecycleServlet.java:174)
       at com.ibm.ws.webcontainer.servlet.IdleServletState.service(StrictLifecycleServlet.java:313)
       at com.ibm.ws.webcontainer.servlet.StrictLifecycleServlet.service(StrictLifecycleServlet.java:116)
       at com.ibm.ws.webcontainer.servlet.ServletInstance.service(ServletInstance.java:283)
       at com.ibm.ws.webcontainer.servlet.ValidServletReferenceState.dispatch(ValidServletReferenceState.java:42)
       at com.ibm.ws.webcontainer.servlet.ServletInstanceReference.dispatch(ServletInstanceReference.java:40)
       at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.handleWebAppDispatch(WebAppRequestDispatcher.java:974)
       at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.dispatch(WebAppRequestDispatcher.java:555)
       at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.forward(WebAppRequestDispatcher.java:200)
       at com.ibm.ws.webcontainer.srt.WebAppInvoker.doForward(WebAppInvoker.java:119)
       at com.ibm.ws.webcontainer.srt.WebAppInvoker.handleInvocationHook(WebAppInvoker.java:276)
       at com.ibm.ws.webcontainer.cache.invocation.CachedInvocation.handleInvocation(CachedInvocation.java:71)
       at com.ibm.ws.webcontainer.cache.invocation.CacheableInvocationContext.invoke(CacheableInvocationContext.java:114)
       at com.ibm.ws.webcontainer.srp.ServletRequestProcessor.dispatchByURI(ServletRequestProcessor.java:186)
       at com.ibm.ws.webcontainer.oselistener.OSEListenerDispatcher.service(OSEListener.java:334)
       at com.ibm.ws.webcontainer.http.HttpConnection.handleRequest(HttpConnection.java:56)
       at com.ibm.ws.http.HttpConnection.readAndHandleRequest(HttpConnection.java:618)
       at com.ibm.ws.http.HttpConnection.run(HttpConnection.java:439)
       at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java(Compiled Code))
      .
       com.ibm.websphere.ce.cm.ObjectClosedException: DSRA9110E: Statement está fechado.
       at com.ibm.ws.rsadapter.jdbc.WSJdbcStatement.runtimeXIfNotClosed(WSJdbcStatement.java:952)
       at com.ibm.ws.rsadapter.jdbc.WSJdbcStatement.getMaxRows(WSJdbcStatement.java:608)
       at org.hibernate.jdbc.AbstractBatcher.closeQueryStatement(AbstractBatcher.java:223)
       at org.hibernate.jdbc.AbstractBatcher.closeStatements(AbstractBatcher.java:273)
       at org.hibernate.jdbc.ConnectionManager.cleanup(ConnectionManager.java:272)
       at org.hibernate.jdbc.ConnectionManager.close(ConnectionManager.java:207)
       at org.hibernate.impl.SessionImpl.close(SessionImpl.java:309)
       at org.hibernate.impl.SessionImpl.managedClose(SessionImpl.java:361)
       at org.hibernate.transaction.CacheSynchronization.afterCompletion(CacheSynchronization.java:90)
       at com.ibm.ws.Transaction.JTA.RegisteredSyncs.distributeAfter(RegisteredSyncs.java(Compiled Code))
       at com.ibm.ws.Transaction.JTA.TransactionImpl.distributeAfter(TransactionImpl.java(Inlined Compiled Code))
       at com.ibm.ws.Transaction.JTA.RegisteredResources.flowCommitOnePhase(RegisteredResources.java(Compiled Code))
       at com.ibm.ws.Transaction.JTA.RegisteredResources.distributePrepare(RegisteredResources.java(Compiled Code))
       at com.ibm.ws.Transaction.JTA.TransactionImpl.internalPrepare(TransactionImpl.java(Compiled Code))
       at com.ibm.ws.Transaction.JTA.TransactionImpl.commit(TransactionImpl.java(Compiled Code))
       at com.ibm.ws.Transaction.JTA.TranManagerImpl.commit(TranManagerImpl.java(Compiled Code))
       at com.ibm.ws.Transaction.JTA.TranManagerSet.commit(TranManagerSet.java(Compiled Code))
       at com.ibm.ejs.csi.TranStrategy.commit(TranStrategy.java(Compiled Code))
       at com.ibm.ejs.csi.TranStrategy.postInvoke(TranStrategy.java(Compiled Code))
       at com.ibm.ejs.csi.TransactionControlImpl.postInvoke(TransactionControlImpl.java(Compiled Code))
       at com.ibm.ejs.container.EJSContainer.postInvoke(EJSContainer.java(Compiled Code))
       at br.com.glr.populis.model.workflow.ejb.EJSLocalStatelessWorkflowEngineSessionFacade_a8e0f47b.startProcessInstance(EJSLocalStatelessWorkflowEngineSessionFacade_a8e0f47b.java:198)
       at sun.reflect.GeneratedMethodAccessor161.invoke(Unknown Source)
       at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java(Compiled Code))
       at java.lang.reflect.Method.invoke(Method.java(Compiled Code))
       at com.ibm.etools.utc.model.ReflectionMethodModel.invoke(ReflectionMethodModel.java:68)
       at com.ibm.etools.utc.servlet.InvokeServlet.invoke(InvokeServlet.java:110)
       at com.ibm.etools.utc.servlet.InvokeServlet.doPost(InvokeServlet.java:366)
       at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
       at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
       at com.ibm.ws.webcontainer.servlet.StrictServletInstance.doService(StrictServletInstance.java:110)
       at com.ibm.ws.webcontainer.servlet.StrictLifecycleServlet._service(StrictLifecycleServlet.java:174)
       at com.ibm.ws.webcontainer.servlet.IdleServletState.service(StrictLifecycleServlet.java:313)
       at com.ibm.ws.webcontainer.servlet.StrictLifecycleServlet.service(StrictLifecycleServlet.java:116)
       at com.ibm.ws.webcontainer.servlet.ServletInstance.service(ServletInstance.java:283)
       at com.ibm.ws.webcontainer.servlet.ValidServletReferenceState.dispatch(ValidServletReferenceState.java:42)
       at com.ibm.ws.webcontainer.servlet.ServletInstanceReference.dispatch(ServletInstanceReference.java:40)
       at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.handleWebAppDispatch(WebAppRequestDispatcher.java:974)
       at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.dispatch(WebAppRequestDispatcher.java:555)
       at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.forward(WebAppRequestDispatcher.java:200)
       at com.ibm.ws.webcontainer.srt.WebAppInvoker.doForward(WebAppInvoker.java:119)
       at com.ibm.ws.webcontainer.srt.WebAppInvoker.handleInvocationHook(WebAppInvoker.java:276)
       at com.ibm.ws.webcontainer.cache.invocation.CachedInvocation.handleInvocation(CachedInvocation.java:71)
       at com.ibm.ws.webcontainer.cache.invocation.CacheableInvocationContext.invoke(CacheableInvocationContext.java:114)
       at com.ibm.ws.webcontainer.srp.ServletRequestProcessor.dispatchByURI(ServletRequestProcessor.java:186)
       at com.ibm.ws.webcontainer.oselistener.OSEListenerDispatcher.service(OSEListener.java:334)
       at com.ibm.ws.webcontainer.http.HttpConnection.handleRequest(HttpConnection.java:56)
       at com.ibm.ws.http.HttpConnection.readAndHandleRequest(HttpConnection.java:618)
       at com.ibm.ws.http.HttpConnection.run(HttpConnection.java:439)
       at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java(Compiled Code))
      
      
      


      Please, help me!

      thanks in advance!

        • 1. Re: Timer problems
          Marcos Donato Newbie

          I've tried this too!

          <process-definition
           name="teste-timer">
           <start-state name="start">
           <transition name="tr1" to="state1"></transition>
           </start-state>
          
           <state name="state1">
           <timer name="timer" duedate="1 minute" repeat="yes" transition="tr1" >
           <action name="action1" class="br.com.glr.jbpm.handlers.MailActionHandler">
           <from>admin@glr.com.br</from>
           <message>timer</message>
           <subject>timer</subject>
           <to>marcos@glr.com.br</to>
           </action>
           </timer>
           <transition name="tr1" to="end1"></transition>
           </state>
           <end-state name="end1"></end-state>
          </process-definition>


          and the excpetion stops to be displayed!

          but don't work !

          Any way i make a timer tag, this does not appear in the table JBPM_TIMER, i supposed that it could be there! am i wrong ?


          • 2. Re: Timer problems
            Marcos Donato Newbie

            Someone knows what could i do to solve this ?

            • 3. Re: Timer problems
              Elmo Novice

              Hello,

              You need to have a Scheduler thread running to invoke your actions. If you run the web example, the thread is initiated during start-up through the SchedulerServlet. The timer tag just registers the timer, but the SchedulerThread is the one that looks for jobs that are past due and invokes it.

              Regards,

              Elmo

              • 4. Re: Timer problems
                Elmo Novice

                Hello again,

                I suggest you run the websale example bec. there is a timer in there. You can get some idea from there. It is very difficult runnning testing the timer w/o the SchedulerThread.

                Regards,

                Elmo


                • 5. Re: Timer problems
                  Marcos Donato Newbie

                  All right,

                  i've done it, but not like a servlet. When i start the jbpmSession, i start the Scheduler too. But i open the code of the SchedulerThread and i sow that it get the Instance of JbpmFactory and when it open the session it open with begin transacion. And i'm using CMT transaction, and i don't know if it is right, but the tread keep running and give me same transaction messages (see below):

                  [14/12/05 15:38:47:621 GMT-03:00] dabf47a JbpmSession E org.jbpm.db.JbpmSession org.hibernate.TransactionException: Could not register synchronization for container transaction
                  
                  [14/12/05 15:38:47:652 GMT-03:00] dabf47a SchedulerThre I org.jbpm.scheduler.impl.SchedulerThread runtime exception while executing timers
                  
                  [14/12/05 15:38:47:652 GMT-03:00] dabf47a SchedulerThre I org.jbpm.scheduler.impl.SchedulerThread TRAS0014I: A seguinte exceção foi registrada java.lang.RuntimeException: couldn't begin a transaction
                   at org.jbpm.db.JbpmSession.beginTransaction(JbpmSession.java:93)
                   at org.jbpm.db.JbpmSessionFactory.openJbpmSessionAndBeginTransaction(JbpmSessionFactory.java:186)
                   at org.jbpm.scheduler.impl.SchedulerThread.executeTimers(SchedulerThread.java:64)
                   at org.jbpm.scheduler.impl.SchedulerThread.run(SchedulerThread.java:34)
                  Caused by: org.hibernate.TransactionException: Could not register synchronization for container transaction
                   at org.hibernate.transaction.CMTTransaction.begin(CMTTransaction.java:45)
                   at org.hibernate.impl.SessionImpl.beginTransaction(SessionImpl.java:1205)
                   at org.jbpm.db.JbpmSession.beginTransaction(JbpmSession.java:89)
                   ... 3 more
                  .
                   java.lang.RuntimeException: couldn't begin a transaction
                   at org.jbpm.db.JbpmSession.beginTransaction(JbpmSession.java:93)
                   at org.jbpm.db.JbpmSessionFactory.openJbpmSessionAndBeginTransaction(JbpmSessionFactory.java:186)
                   at org.jbpm.scheduler.impl.SchedulerThread.executeTimers(SchedulerThread.java:64)
                   at org.jbpm.scheduler.impl.SchedulerThread.run(SchedulerThread.java:34)
                  Caused by: org.hibernate.TransactionException: Could not register synchronization for container transaction
                   at org.hibernate.transaction.CMTTransaction.begin(CMTTransaction.java:45)
                   at org.hibernate.impl.SessionImpl.beginTransaction(SessionImpl.java:1205)
                   at org.jbpm.db.JbpmSession.beginTransaction(JbpmSession.java:89)
                   ... 3 more


                  Tou know how to solve this? Or i'll ovewrite this class for adaptation !

                  Thanks for your reply, it was very usefull!

                  • 6. Re: Timer problems
                    Marcos Donato Newbie

                    Now, it works. But i had to change the class Scheduler and ShedulerThread to work with CMTTransaction, 'couse it doesn't allows to implicity call an begin transaction.

                    But like i told before, the db Table JBPM_TIMER does not contains any rows in it.

                    I've tried those samples described before and the one above:

                    <?xml version="1.0" encoding="UTF-8"?>
                    
                    <process-definition
                     name="teste-timer-2">
                     <swimlane name="direct">
                     <assignment class="br.com.glr.jbpm.handlers.SwimlaneAssignmentHandler" config-type="bean">
                     </assignment>
                     </swimlane>
                     <start-state name="start">
                     <transition name="tr1" to="task1"></transition>
                     </start-state>
                     <task-node name="task1">
                     <task name="task1" swimlane="direct">
                     <timer duedate="30 seconds" repeat="yes" name="lembrete">
                     <action config-type="field" class="br.com.glr.jbpm.handlers.MailToSwimlaneActionHandler" >
                     <from>admin@glr.com.br</from>
                     <subject>Lembrete</subject>
                     <message>Lembrete de novo</message>
                     </action>
                     </timer>
                     </task>
                     <transition name="tr1" to="end1"></transition>
                     </task-node>
                     <end-state name="end1"></end-state>
                    </process-definition>
                    




                    and the table never contains rows !!!!

                    What is happening?

                    now i'll try to deploy web-sale on my application, for tests of course!


                    • 7. Re: Timer problems
                      Marcos Donato Newbie

                      One more.


                      I've deployed web-sale.par in my application ... and it do not create any row in the JBPM_TIMER table ..... but a saw in other table !! JBPM_EVENT .... i really don't know what is happening ..... some one, please help us !!!!

                      My develop time is getting over !!!!!!

                      • 8. Re: Timer problems
                        Elmo Novice

                        Hello,

                        The version i'm using is jbpm 3.02 and my database is MySQL and server is JBoss that comes with the example. I've tested the webapp and so far no problems. I have not tested in websphere or whatever database you're using. Maybe your problems has nothing to do with the timer, maybe its persistence or your configuration. But the key is there should be an entry in your timer table.

                        Regards,

                        Elmo

                        • 9. Re: Timer problems
                          Marcos Donato Newbie

                          OK!

                          I'm using many environments!

                          Websphere 5.1
                          Jboss 4.0.2

                          Oracle 8 (not tested yet)
                          MSSqlServer 7

                          Jbpm 3.0.2 (newer) with modifications (but not structural)

                          and it's not a stand alone server .. it's J2EE implementation !!!

                          I saw the entire code ... and the row in the table doesn't appear! and in debug mode ... it creates the Timer object .. .but do not persist !!!!

                          I dont know what to do with it ... couse i dont know how hibernate works, it meke me nervous !!!! but i'll appreciate many suggestions!!!!

                          Thanks

                          • 10. Re: Timer problems
                            Elmo Novice

                            OK.

                            I'll be out of the office for a while but if you can send me your email, I will try to help you. When I started early this week, it was driving me nuts too, so I'm particularly curious how it works in other environments and other dbs.

                            Regards,

                            Elmo

                            • 11. Re: Timer problems
                              Elmo Novice

                              Hello,

                              I would like to correct my previous statement regarding the jbpm_timer table. In the websale example, it is not populated yet at the start. It only populates when entering the "evaluate web order" node or from the web when you submit the new web sale order. So, run first the web sale example, login for example cookie monster, then press "create new web sale order". Put in values and click on "Save and Close Task". Then check your jbpm_table. There should be an entry in there. Also in the console you will see the "ernie ..." alert message. The entry in the jbpm_timer will be deleted when ernie acknowledges the order. I hope this clarifies things.

                              Regards,

                              Elmo

                              • 12. Re: Timer problems
                                Konstantin Kolev Newbie

                                Hi!
                                I have similar problems like mdonato.
                                How can I get a SchedulerThread running and where is the appropriate place for running it?
                                Actually is there any other way for using timers without a scheduler thread?

                                Appreciate any help
                                Thanks

                                Saviola

                                • 13. Re: Timer problems
                                  Elmo Novice

                                  Hello,

                                  If you're a newbie like me I guess the best place to start learning about the timer would be running the websale example successfully. Running it was not really easy in my case. You have to pick a db of your choice yiu are comfortable with where you can see the data changes, MySQL for me. A few pointers that I like to share ( for other JBoss and hibernate instructions and configurations see the posts here, there are lots of it)

                                  1. Your tables must be created sucessfully and identities (users) must be populated. Check posts here on how to do it. The websale.par must of course be deployed. I was not successful using ant, so I had to do it the hard way via eclipse.

                                  2. You must test it using JBoss because it makes use of MBeans. It is where it initially loads the JBPMSession and hibernate mappings. i think unless you know how to deploy it in other appservers. I dont know how to use hibernate but i dont think its necessary.

                                  3. There are two directories to take note in the deploy. the jbpm.sar and the jbpm.war. I mention this bec. the location where you should place the action classes should be in the jbpm.sar. To do this, create a folder and name it websale.jar or any name with .jar extension. Under this place the org.jbpm.websale action classes (with the proper directories org>jbpm>websale). You timer demo will not work if it cannot find the action handler classes.

                                  The configuration and setup is really difficult at first but when you have the app running, there's nothing to it. The SchedulerThread is started in the web app side during startup. It continually looks for entries in the jbpm_timer table. Once there are entries past the due date, it executes the related action handler. That's why if it cant find the action hanlder your test will fail. The reason why I place it in the jbpm.sar is because this is where the jbpm executes the process. For more info, read the other posts. I hope this helps.

                                  Regards,

                                  Elmo

                                  • 14. Re: Timer problems
                                    Marcos Donato Newbie

                                     

                                    "Saviola" wrote:
                                    Hi!
                                    I have similar problems like mdonato.
                                    How can I get a SchedulerThread running and where is the appropriate place for running it?
                                    Actually is there any other way for using timers without a scheduler thread?

                                    Appreciate any help
                                    Thanks

                                    Saviola


                                    Hi!

                                    I dont know if the thread will work fine for you, but there is a class named Scheduler that is the main entrance for Scheduler Thread, take a look in the source of those classes to see.

                                    the package is : org.jbpm.scheduler.impl

                                    i've started this thread in the context listener of web app, but after the star of all jbpm engine! there is a sample web app in the downloadable jbpm that uses a servlet do do this work.

                                    But, like i'm using it in a j2ee with a CMT Transaction, i changed the class SchedulerThread to do not initialize a transaction implicit, the container will provide this for me!

                                    about other ways, i dont know! Some one could tell you, but i think that its more pratical to do this, couse its parse the duedate and so much things!!!

                                    i hope it helps you!

                                    1 2 Previous Next