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

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

      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!

        • 1. Re: is it possible to force the token jump from one node to
          jpechanec

          Hi,

          look onto Token.setNode() method.

          J.

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

            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
              pieter1

              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
                kukeltje

                 

                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
                  pieter1

                  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
                    dleerob

                    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
                      syedtaj

                      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
                        pieter1

                        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

                          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

                            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
                              dleerob

                              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

                                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