[jboss-jira] [JBoss JIRA] Commented: (JBPM-462) the token's subProcessInstance attribute is not set on subprocess-end event if a process is loaded from db

Jesse Sweetland (JIRA) jira-events at lists.jboss.org
Thu Mar 8 12:21:22 EST 2007


    [ http://jira.jboss.com/jira/browse/JBPM-462?page=comments#action_12355521 ] 
            
Jesse Sweetland commented on JBPM-462:
--------------------------------------

I'm using 3.1.2 and I noticed that subProcessInstance is set to null when a process completes.  The superProcessToken value of the sub process is still intact.  Is this the intended behavior?

> the token's subProcessInstance attribute is not set on subprocess-end event if a process is loaded from db
> ----------------------------------------------------------------------------------------------------------
>
>                 Key: JBPM-462
>                 URL: http://jira.jboss.com/jira/browse/JBPM-462
>             Project: JBoss jBPM
>          Issue Type: Bug
>          Components: Core Engine
>    Affects Versions: jBPM 3.0.1, jBPM 3.0.2
>            Reporter: Eduardo Jimenez
>         Assigned To: Tom Baeyens
>             Fix For: jBPM 3.1
>
>
> Token.subprocessinstance is not a persistent field, which means that if the subprocess is started, saved, then loaded in a different hibernate session later, the token.subprocessinstance field is null, which means that if you have an action on a subprocess-end event, its not going to know which subprocess ended.
> making the list of subprocesses is great, but it doesn't solve this problem. My gut feeling is that this should be treated as it is treated during subprocess creation:
> Code:
>  public void execute(ExecutionContext executionContext) {
>     Token superProcessToken = executionContext.getToken();
>     // create the subprocess
>     ProcessInstance subProcessInstance = new ProcessInstance(subProcessDefinition);
>     // bind the subprocess to the super-process-token
>     superProcessToken.setSubProcessInstance(subProcessInstance);
>     subProcessInstance.setSuperProcessToken(superProcessToken);
>     // fire the subprocess created event
>     fireEvent(Event.EVENTTYPE_SUBPROCESS_CREATED, executionContext);
>     .....
> 	
> See how the superProcessToken gets a nice setSubProcessInstance? That way the subprocess-created event knows which subprocess was created.
> The current code on notifySubProcessEnd is:
> Code:
> public void notifySubProcessEnd(ProcessInstance subProcessInstance) {
>    Token superProcessToken = subProcessInstance.getSuperProcessToken();
>     ExecutionContext executionContext = new      ExecutionContext(superProcessToken);
>     // feed the readable variables
>     if ((variableAccesses != null) && (!variableAccesses.isEmpty())) {
>     ....
>     ....
>     }
>     // feed the readable variables
>     fireEvent(Event.EVENTTYPE_SUBPROCESS_END, executionContext);
>     ....
> 	
> I think it is very reasonable to do instead
> Code:
> public void notifySubProcessEnd(ProcessInstance subProcessInstance) {
>     Token superProcessToken = subProcessInstance.getSuperProcessToken();
>     
> superProcessToken.setSubProcessInstance(subProcessInstance);
>     ExecutionContext executionContext = new ExecutionContext(superProcessToken);
>     // feed the readable variables
>     if ((variableAccesses != null) && (!variableAccesses.isEmpty())) {
>     ....
>     ....
>     }
>     // fire the subprocess ended event
>     fireEvent(Event.EVENTTYPE_SUBPROCESS_END, executionContext);
>     ....
> 	
> In this way, the subprocess-end event will pass a context where the token correctly contains the subprocess instance even if being loaded after being persisted while the subprocess was going on. 

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://jira.jboss.com/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        



More information about the jboss-jira mailing list