12 Replies Latest reply on May 9, 2008 4:55 AM by Ross McDonald

    is it possible to force the token jump from one node to anot

    Arnold H Newbie

      Hi, everyone!
      I am just wondering if it is possible to force a process instance to change its "current node". for example, there is a process definition as:

      Task1 -> Task2 -> Task3 -> .... -> Task10 -> Task11 -> END

      and when a process instance is created and the root token points to Task3, but one day for some resean I want to force the token points to Task10(or any other possible node) so that the process instance can ignore some task nodes and can finish early or something like that.
      just as you can see, I can not predefine the transitions to satisfy this scenario.
      So can anyone please tell me how to do, or just provide some threads for me to follow...

      Thanks a lot!

        • 2. Re: is it possible to force the token jump from one node to
          Arnold H Newbie

          Thank you, jpechane! just replied so quickly.
          I have tried that, and found that it really points to the node I wanted! and now the things left seem to be like reinitialize the tasks for the users and so on.

          thanks again!

          • 3. Re: is it possible to force the token jump from one node to
            Pieter Geldof Newbie

            Hi,

            Would it be possible to elaborate on the Token.setNode method.
            I try to jump to a specific node but without succes.
            This is the code :
            public class ExceptionHandler implements ActionHandler {

            private static final long serialVersionUID = 1L;
            private static final Logger LOGGER = Logger.getLogger(ExceptionHandler.class);

            @Override
            public void execute(final ExecutionContext executionContext) throws Exception {

            final Throwable throwable = executionContext.getException();
            final StackTraceElement[] stackTrace = throwable.getStackTrace();
            LOGGER.error(stackTrace[0]);

            final Token token = executionContext.getToken();
            final Node node = executionContext.getProcessDefinition().getNode("SectionCleanup");
            token.setNode(node);

            }

            Thank you.

            • 4. Re: is it possible to force the token jump from one node to
              Ronald van Kuijk Master

               

              I try to jump to a specific node but without succes.
              Can you be more specific? Errors etc?

              • 5. Re: is it possible to force the token jump from one node to
                Pieter Geldof Newbie

                No errors.

                I experimented a bit and I found that I must point to the node just before the node "SectionCleanup" to get the node "SectionCleanup" executed.

                Seems to be wrong ?

                • 6. Re: is it possible to force the token jump from one node to
                  David Roberts Apprentice

                  Here is a method I use (in my own framework), to re-route a token.
                  It may be simpler for you, but the way we do things in our app, this worked for us. Hopefully you can use it or get some ideas:

                  private void rerouteToken (HttpServletRequest request, ActionErrors errors, ActionMessages messages, ProcessInstance processInstance) {
                   User currentUser = getUser(request);
                   String tokenId = request.getParameter(Constants.PROCESS_ADMIN_ACTION_TOKEN_ID);
                   String nodeName = request.getParameter(Constants.PROCESS_ADMIN_ACTION_NODE_NAME);
                   log.info("A token re-route was requested by user '"+currentUser.getUsername()+"' for tokenId '"+tokenId+"' to node '"+nodeName+"'");
                   if (tokenId == null || tokenId.equals("")) {
                   String errorMsg = "Cannot reroute token, as no tokenId was specified.";
                   log.error(errorMsg);
                   errors.add(ActionMessages.GLOBAL_MESSAGE,
                   new ActionMessage("errors.customMessage",errorMsg));
                   return;
                   }
                   if (nodeName == null || nodeName.equals("")) {
                   String errorMsg = "Cannot reroute token, as no node name was specified.";
                   log.error(errorMsg);
                   errors.add(ActionMessages.GLOBAL_MESSAGE,
                   new ActionMessage("errors.customMessage",errorMsg));
                   return;
                   }
                   Token token = jbpmContext.getToken(Long.parseLong(tokenId));
                   if (token == null) {
                   String errorMsg = "Cannot reroute token, as token with ID '"+tokenId+"' was not found.";
                   log.error(errorMsg);
                   errors.add(ActionMessages.GLOBAL_MESSAGE,
                   new ActionMessage("errors.customMessage",errorMsg));
                   return;
                   }
                  
                   Node newNode = processInstance.getProcessDefinition().getNode(nodeName);
                   //don't allow re-route if Start Node was selected.
                   if (newNode.getId() == newNode.getProcessDefinition().getStartState().getId()) { //if new node is start node
                   String errorMsg = "Cannot re-route token to a Start State. You should rather start a new process.";
                   log.error(errorMsg);
                   errors.add(ActionMessages.GLOBAL_MESSAGE,
                   new ActionMessage("errors.customMessage",errorMsg));
                   }
                   else {
                   //---process reroute---
                   //Cancel current incomplete task instances-------------------------------------------------------------
                   log.info("Removing task instances found at token with ID '"+tokenId+"'");
                   List deleteTaskInstanceList = new ArrayList();
                   //create a seperate list of those task instances to delete. If deleting them
                   //straight from iterator, a ConcurrentModificationException will occur when calling it.next();
                   for(Iterator it = processInstance.getTaskMgmtInstance().getTaskInstances().iterator();it.hasNext();) {
                   TaskInstance taskInstance = (TaskInstance)it.next();
                   if(tokenId.equals(taskInstance.getToken().getId()+"")) {
                   if (taskInstance.getEnd() == null) { //not complete task
                   deleteTaskInstanceList.add(taskInstance);
                   }
                   }
                   }
                   for (int x = 0; x < deleteTaskInstanceList.size(); x++) {
                   TaskInstance taskInstance = (TaskInstance)deleteTaskInstanceList.get(x);
                   //Clear local variables-----------------------------------------------
                   //We must clear local variables, or task instance will save variables
                   //from previous instance. We must not delete them, but rather set them
                   //to blank, or an exception will be thrown if the variables were
                   //set to 'required' in the process definition.
                   Map localVariables = taskInstance.getVariablesLocally();
                   for (Iterator it = localVariables.keySet().iterator();it.hasNext();) {
                   String variableName = (String)it.next();
                   taskInstance.setVariableLocally(variableName, "");
                   }
                   //--------------------------------------------------------------------
                   log.info("Cancelling task instance with ID '"+taskInstance.getId()+"'");
                   boolean overwriteSwimlane = false; //don't overwrite swimlane actor
                   taskInstance.setActorId("[rerouted by "+currentUser.getUsername()+"]", overwriteSwimlane);
                   taskInstance.setSignalling(false);
                   //Workaround to stop task-end event from firing when we cancel a task instance.
                   //Remove event, cancel task instance, add event again-----------------
                   Task task = taskInstance.getTask();
                   Event endTaskEvent = task.getEvent(Event.EVENTTYPE_TASK_END);
                   if (endTaskEvent != null) {
                   task.removeEvent(endTaskEvent);
                   }
                   taskInstance.cancel();
                   if (endTaskEvent != null) {
                   task.addEvent(endTaskEvent);
                   }
                   //-------------------------------------------------------------------
                   }
                   //-----------------------------------------------------------------------------------------------------
                   newNode.enter(new ExecutionContext(token));
                   //log info
                   String msg = "Token with ID '"+token.getId()+"' was rerouted to node '"+nodeName+"'";
                   log.info(msg);
                   messages.add(ActionMessages.GLOBAL_MESSAGE,
                   new ActionMessage("messages.customMessage", msg));
                   }
                  
                   }


                  • 7. Re: is it possible to force the token jump from one node to
                    Taj Newbie

                    Hello pieter@TA,

                    You are right when you say

                    I experimented a bit and I found that I must point to the node just before the node "SectionCleanup" to get the node "SectionCleanup" executed.


                    I found that to jump to a node, I must go one node before, since it starts executing from the next node.

                    I use the following, this works as desired.

                    Node n = executionContext.getProcessDefinition().getNode("SectionCleanup");
                     n.execute(executionContext);


                    Let me know if the above works for you.

                    Cheers.

                    • 8. Re: is it possible to force the token jump from one node to
                      Pieter Geldof Newbie

                      Hello syedtaj,

                      I'm affraid your proposed piece of code does not do the job for me.

                      Where with my piece of code,
                      the jump to the new node exactly happens when the exception handler catches the exception,
                      with your piece of code
                      the jump happens after other nodes have been executed, which is not the desired effect.

                      Cheers,
                      Pieter

                      • 9. Re: is it possible to force the token jump from one node to
                        Ross McDonald Novice

                        Hi dleerob,

                        me again.. hope you can help. I put together a little test class, pretty much lifted from yours, in order to reverse a process, (go back a couple of tasks) to sort out an issue documented in another post on this forum - topic 4149385.

                         protected final Log logger = LogFactory.getLog(getClass());
                        
                         JbpmConfiguration jbpmConfiguration = JbpmConfiguration.getInstance();
                         DbPersistenceServiceFactory dbPersistenceServiceFactory = (DbPersistenceServiceFactory) jbpmConfiguration.getServiceFactory(Services.SERVICENAME_PERSISTENCE);
                        
                         JbpmContext jbpmContext;
                        
                         ProcessInstance processInstance;
                        
                         public ProcessRouter() {
                         logger.info("Constructing ProcessRouter");
                        
                         // Grab a handle on to the jbpmContext
                         jbpmContext = jbpmConfiguration.createJbpmContext();
                         }
                        
                         protected void reroute (long processInstanceId, Long tokenId, String nodeName) {
                         logger.info("Rerouting token : " + tokenId + ", to node : " + nodeName + " on process : " + processInstanceId);
                        
                         // Grab the process we want to operate on
                         processInstance = jbpmContext.getProcessInstance(processInstanceId);
                        
                         // Grab the token we want to reroute
                         Token token = jbpmContext.getToken(tokenId);
                        
                         // Grab the node we want to reroute to
                         Node newNode = processInstance.getProcessDefinition().getNode(nodeName);
                        
                         logger.debug("successfully grabbed process instance : " + processInstance.getId() + ", token : " + token.getId() + " and node : " + newNode.getName());
                        
                         // Cancel current incomplete task instances
                         logger.debug("cancelling task instances found at token : " + tokenId);
                         List deleteTaskInstanceList = new ArrayList();
                         //create a separate list of those task instances to delete. If deleting them
                         //straight from iterator, a ConcurrentModificationException will occur when calling it.next();
                         for(Iterator it = processInstance.getTaskMgmtInstance().getTaskInstances().iterator(); it.hasNext();) {
                         TaskInstance taskInstance = (TaskInstance)it.next();
                         if(tokenId.equals(taskInstance.getToken().getId() + "")) {
                         if (taskInstance.getEnd() == null) { //not complete task
                         deleteTaskInstanceList.add(taskInstance);
                         }
                         }
                         }
                        
                         for (int x = 0; x < deleteTaskInstanceList.size(); x++) {
                         TaskInstance taskInstance = (TaskInstance)deleteTaskInstanceList.get(x);
                         //Clear local variables
                         //We must clear local variables, or task instance will save variables
                         //from previous instance. We must not delete them, but rather set them
                         //to blank, or an exception will be thrown if the variables were
                         //set to 'required' in the process definition.
                         Map localVariables = taskInstance.getVariablesLocally();
                         for (Iterator it = localVariables.keySet().iterator(); it.hasNext();) {
                         String variableName = (String)it.next();
                         taskInstance.setVariableLocally(variableName, "");
                         }
                        
                         logger.info("cancelling task instance with ID : '"+taskInstance.getId()+"'");
                         boolean overwriteSwimlane = false; //don't overwrite swimlane actor
                         taskInstance.setActorId("[rerouted by pctadmin]", overwriteSwimlane);
                         taskInstance.setSignalling(false);
                         //Workaround to stop task-end event from firing when we cancel a task instance.
                         //Remove event, cancel task instance, add event again
                         Task task = taskInstance.getTask();
                         Event endTaskEvent = task.getEvent(Event.EVENTTYPE_TASK_END);
                         if (endTaskEvent != null) {
                         task.removeEvent(endTaskEvent);
                         }
                         taskInstance.cancel();
                         if (endTaskEvent != null) {
                         task.addEvent(endTaskEvent);
                         }
                        }
                        
                         // Perform the reroute step
                         newNode.enter(new ExecutionContext(token));
                        
                         logger.info("Token with ID : " + token.getId() + " was rerouted to node : " + nodeName);
                        
                         // Perform some tidying up
                         jbpmContext.close();
                         dbPersistenceServiceFactory.dropSchema();
                         jbpmContext = null;
                         }
                        
                         public static void main (String args[]) {
                         // Create a ProcessRouter
                         ProcessRouter pRouter = new ProcessRouter();
                        
                         // For now hardcode the parameters in the main method
                         long processInstanceId = 787;
                         Long tokenId = new Long(920);
                         String nodeName = "sm allocate dm";
                        
                         pRouter.reroute(processInstanceId, tokenId, nodeName);
                         }
                        


                        This code is running from Eclipse, talking to mysql 5, version 3.2.1 of the JBPM. It seems to more or less do what I expect, generating the node requested, however, I seem to lose several of my tables sometimes when I run it. I lost jbpm_taskinstance on one occasion, jbpm_id_user on another, and several others.

                        My hibernate.cfg.xml used locally within the project is listed below.

                        <?xml version='1.0' encoding='utf-8'?>
                        
                        <!DOCTYPE hibernate-configuration PUBLIC
                         "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
                         "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
                        
                        <hibernate-configuration>
                         <session-factory>
                        
                         <!-- hibernate dialect -->
                         <property name="hibernate.dialect">org.hibernate.dialect.MySQLInnoDBDialect</property>
                        
                         <!-- JDBC connection properties (begin) ===-->
                         <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
                         <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/jbpmtest</property>
                         <property name="hibernate.connection.username">someuser</property>
                         <property name="hibernate.connection.password">somepassword</property>
                         <!--==== JDBC connection properties (end) -->
                        
                         <property name="hibernate.cache.provider_class">org.hibernate.cache.HashtableCacheProvider</property>
                        
                         <!-- DataSource properties (begin)
                         <property name="hibernate.connection.datasource">java:/JbpmDS</property>
                         DataSource properties (end) -->
                        
                         <!-- JTA transaction properties (begin) === -->
                         <property name="hibernate.transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory</property>
                         <!--<property name="hibernate.transaction.manager_lookup_class">org.hibernate.transaction.JBossTransactionManagerLookup</property>-->
                         <!--==== JTA transaction properties (end) -->
                        
                         <!-- CMT transaction properties (begin) ===
                         <property name="hibernate.transaction.factory_class">org.hibernate.transaction.CMTTransactionFactory</property>
                         <property name="hibernate.transaction.manager_lookup_class">org.hibernate.transaction.JBossTransactionManagerLookup</property>
                         ==== CMT transaction properties (end) -->
                        
                         <!-- logging properties (begin) ===
                         <property name="hibernate.show_sql">true</property>
                         <property name="hibernate.format_sql">true</property>
                         <property name="hibernate.use_sql_comments">true</property>
                         ==== logging properties (end) -->
                        
                         <!-- ############################################ -->
                         <!-- # mapping files with external dependencies # -->
                         <!-- ############################################ -->
                        
                         <!-- following mapping file has a dependendy on -->
                         <!-- 'bsh-{version}.jar'. -->
                         <!-- uncomment this if you don't have bsh on your -->
                         <!-- classpath. you won't be able to use the -->
                         <!-- script element in process definition files -->
                         <mapping resource="org/jbpm/graph/action/Script.hbm.xml"/>
                        
                         <!-- following mapping files have a dependendy on -->
                         <!-- 'jbpm-identity.jar', mapping files -->
                         <!-- of the pluggable jbpm identity component. -->
                         <!-- Uncomment the following 3 lines if you -->
                         <!-- want to use the jBPM identity mgmgt -->
                         <!-- component. -->
                         <!-- identity mappings (begin) -->
                         <mapping resource="org/jbpm/identity/User.hbm.xml"/>
                         <mapping resource="org/jbpm/identity/Group.hbm.xml"/>
                         <mapping resource="org/jbpm/identity/Membership.hbm.xml"/>
                         <!-- identity mappings (end) -->
                        
                         <!-- following mapping files have a dependendy on -->
                         <!-- the JCR API -->
                         <!-- jcr mappings (begin) ===
                         <mapping resource="org/jbpm/context/exe/variableinstance/JcrNodeInstance.hbm.xml"/>
                         ==== jcr mappings (end) -->
                        
                        
                         <!-- ###################### -->
                         <!-- # jbpm mapping files # -->
                         <!-- ###################### -->
                        
                         <!-- hql queries and type defs -->
                         <mapping resource="org/jbpm/db/hibernate.queries.hbm.xml" />
                        
                         <!-- graph.action mapping files -->
                         <mapping resource="org/jbpm/graph/action/MailAction.hbm.xml"/>
                        
                         <!-- graph.def mapping files -->
                         <mapping resource="org/jbpm/graph/def/ProcessDefinition.hbm.xml"/>
                         <mapping resource="org/jbpm/graph/def/Node.hbm.xml"/>
                         <mapping resource="org/jbpm/graph/def/Transition.hbm.xml"/>
                         <mapping resource="org/jbpm/graph/def/Event.hbm.xml"/>
                         <mapping resource="org/jbpm/graph/def/Action.hbm.xml"/>
                         <mapping resource="org/jbpm/graph/def/SuperState.hbm.xml"/>
                         <mapping resource="org/jbpm/graph/def/ExceptionHandler.hbm.xml"/>
                         <mapping resource="org/jbpm/instantiation/Delegation.hbm.xml"/>
                        
                         <!-- graph.node mapping files -->
                         <mapping resource="org/jbpm/graph/node/StartState.hbm.xml"/>
                         <mapping resource="org/jbpm/graph/node/EndState.hbm.xml"/>
                         <mapping resource="org/jbpm/graph/node/ProcessState.hbm.xml"/>
                         <mapping resource="org/jbpm/graph/node/Decision.hbm.xml"/>
                         <mapping resource="org/jbpm/graph/node/Fork.hbm.xml"/>
                         <mapping resource="org/jbpm/graph/node/Join.hbm.xml"/>
                         <mapping resource="org/jbpm/graph/node/MailNode.hbm.xml"/>
                         <mapping resource="org/jbpm/graph/node/State.hbm.xml"/>
                         <mapping resource="org/jbpm/graph/node/TaskNode.hbm.xml"/>
                        
                         <!-- context.def mapping files -->
                         <mapping resource="org/jbpm/context/def/ContextDefinition.hbm.xml"/>
                         <mapping resource="org/jbpm/context/def/VariableAccess.hbm.xml"/>
                        
                         <!-- taskmgmt.def mapping files -->
                         <mapping resource="org/jbpm/taskmgmt/def/TaskMgmtDefinition.hbm.xml"/>
                         <mapping resource="org/jbpm/taskmgmt/def/Swimlane.hbm.xml"/>
                         <mapping resource="org/jbpm/taskmgmt/def/Task.hbm.xml"/>
                         <mapping resource="org/jbpm/taskmgmt/def/TaskController.hbm.xml"/>
                        
                         <!-- module.def mapping files -->
                         <mapping resource="org/jbpm/module/def/ModuleDefinition.hbm.xml"/>
                        
                         <!-- bytes mapping files -->
                         <mapping resource="org/jbpm/bytes/ByteArray.hbm.xml"/>
                        
                         <!-- file.def mapping files -->
                         <mapping resource="org/jbpm/file/def/FileDefinition.hbm.xml"/>
                        
                         <!-- scheduler.def mapping files -->
                         <mapping resource="org/jbpm/scheduler/def/CreateTimerAction.hbm.xml"/>
                         <mapping resource="org/jbpm/scheduler/def/CancelTimerAction.hbm.xml"/>
                        
                         <!-- graph.exe mapping files -->
                         <mapping resource="org/jbpm/graph/exe/Comment.hbm.xml"/>
                         <mapping resource="org/jbpm/graph/exe/ProcessInstance.hbm.xml"/>
                         <mapping resource="org/jbpm/graph/exe/Token.hbm.xml"/>
                         <mapping resource="org/jbpm/graph/exe/RuntimeAction.hbm.xml"/>
                        
                         <!-- module.exe mapping files -->
                         <mapping resource="org/jbpm/module/exe/ModuleInstance.hbm.xml"/>
                        
                         <!-- context.exe mapping files -->
                         <mapping resource="org/jbpm/context/exe/ContextInstance.hbm.xml"/>
                         <mapping resource="org/jbpm/context/exe/TokenVariableMap.hbm.xml"/>
                         <mapping resource="org/jbpm/context/exe/VariableInstance.hbm.xml"/>
                         <mapping resource="org/jbpm/context/exe/variableinstance/ByteArrayInstance.hbm.xml"/>
                         <mapping resource="org/jbpm/context/exe/variableinstance/DateInstance.hbm.xml"/>
                         <mapping resource="org/jbpm/context/exe/variableinstance/DoubleInstance.hbm.xml"/>
                         <mapping resource="org/jbpm/context/exe/variableinstance/HibernateLongInstance.hbm.xml"/>
                         <mapping resource="org/jbpm/context/exe/variableinstance/HibernateStringInstance.hbm.xml"/>
                         <mapping resource="org/jbpm/context/exe/variableinstance/LongInstance.hbm.xml"/>
                         <mapping resource="org/jbpm/context/exe/variableinstance/NullInstance.hbm.xml"/>
                         <mapping resource="org/jbpm/context/exe/variableinstance/StringInstance.hbm.xml"/>
                        
                         <!-- job mapping files -->
                         <mapping resource="org/jbpm/job/Job.hbm.xml"/>
                         <mapping resource="org/jbpm/job/Timer.hbm.xml"/>
                         <mapping resource="org/jbpm/job/ExecuteNodeJob.hbm.xml"/>
                         <mapping resource="org/jbpm/job/ExecuteActionJob.hbm.xml"/>
                        
                         <!-- taskmgmt.exe mapping files -->
                         <mapping resource="org/jbpm/taskmgmt/exe/TaskMgmtInstance.hbm.xml"/>
                         <mapping resource="org/jbpm/taskmgmt/exe/TaskInstance.hbm.xml"/>
                         <mapping resource="org/jbpm/taskmgmt/exe/PooledActor.hbm.xml"/>
                         <mapping resource="org/jbpm/taskmgmt/exe/SwimlaneInstance.hbm.xml"/>
                        
                         <!-- logging mapping files -->
                         <mapping resource="org/jbpm/logging/log/ProcessLog.hbm.xml"/>
                         <mapping resource="org/jbpm/logging/log/MessageLog.hbm.xml"/>
                         <mapping resource="org/jbpm/logging/log/CompositeLog.hbm.xml"/>
                         <mapping resource="org/jbpm/graph/log/ActionLog.hbm.xml"/>
                         <mapping resource="org/jbpm/graph/log/NodeLog.hbm.xml"/>
                         <mapping resource="org/jbpm/graph/log/ProcessInstanceCreateLog.hbm.xml"/>
                         <mapping resource="org/jbpm/graph/log/ProcessInstanceEndLog.hbm.xml"/>
                         <mapping resource="org/jbpm/graph/log/ProcessStateLog.hbm.xml"/>
                         <mapping resource="org/jbpm/graph/log/SignalLog.hbm.xml"/>
                         <mapping resource="org/jbpm/graph/log/TokenCreateLog.hbm.xml"/>
                         <mapping resource="org/jbpm/graph/log/TokenEndLog.hbm.xml"/>
                         <mapping resource="org/jbpm/graph/log/TransitionLog.hbm.xml"/>
                         <mapping resource="org/jbpm/context/log/VariableLog.hbm.xml"/>
                         <mapping resource="org/jbpm/context/log/VariableCreateLog.hbm.xml"/>
                         <mapping resource="org/jbpm/context/log/VariableDeleteLog.hbm.xml"/>
                         <mapping resource="org/jbpm/context/log/VariableUpdateLog.hbm.xml"/>
                         <mapping resource="org/jbpm/context/log/variableinstance/ByteArrayUpdateLog.hbm.xml"/>
                         <mapping resource="org/jbpm/context/log/variableinstance/DateUpdateLog.hbm.xml"/>
                         <mapping resource="org/jbpm/context/log/variableinstance/DoubleUpdateLog.hbm.xml"/>
                         <mapping resource="org/jbpm/context/log/variableinstance/HibernateLongUpdateLog.hbm.xml"/>
                         <mapping resource="org/jbpm/context/log/variableinstance/HibernateStringUpdateLog.hbm.xml"/>
                         <mapping resource="org/jbpm/context/log/variableinstance/LongUpdateLog.hbm.xml"/>
                         <mapping resource="org/jbpm/context/log/variableinstance/StringUpdateLog.hbm.xml"/>
                         <mapping resource="org/jbpm/taskmgmt/log/TaskLog.hbm.xml"/>
                         <mapping resource="org/jbpm/taskmgmt/log/TaskCreateLog.hbm.xml"/>
                         <mapping resource="org/jbpm/taskmgmt/log/TaskAssignLog.hbm.xml"/>
                         <mapping resource="org/jbpm/taskmgmt/log/TaskEndLog.hbm.xml"/>
                         <mapping resource="org/jbpm/taskmgmt/log/SwimlaneLog.hbm.xml"/>
                         <mapping resource="org/jbpm/taskmgmt/log/SwimlaneCreateLog.hbm.xml"/>
                         <mapping resource="org/jbpm/taskmgmt/log/SwimlaneAssignLog.hbm.xml"/>
                        
                         <!-- Custom Task -->
                         <mapping resource="com/somepackage/workflow/taskinstance/CustomTaskInstance.hbm.xml"/>
                        
                         </session-factory>
                        </hibernate-configuration>
                        


                        I feel I am close to being able to move backwards within the process, but unfortunately parts of the database are destroyed in the process. I suppose I am missing something glaringly obvious here. Do you have any ideas?

                        Thanks in advance for your help,

                        regards

                        Ross



                        • 10. Re: is it possible to force the token jump from one node to
                          Ross McDonald Novice

                          Apologies, I meant to reference topic 135098 in the previous post.

                          Regards,

                          Ross

                          • 11. Re: is it possible to force the token jump from one node to
                            David Roberts Apprentice

                            Hmmm....your code is pretty much the same as mine, but mine doesn't destroy any tables.

                            I can't see anything wrong with it.

                            What does "dbPersistenceServiceFactory.dropSchema();" do? Perhaps look into what that is doing.

                            Sorry I can't be of more assistance.

                            • 12. Re: is it possible to force the token jump from one node to
                              Ross McDonald Novice

                              Hi,

                              no worries, thanks for looking, I will poke around into what the dropSchema method does. If it is perhaps one of the only differences from your code, perhaps the suspicion should lie there.

                              Regards

                              Ross