I am working on web application and I found some problems with JbpmContext. 
There are some issues that I am not fully aware:

1. If I do not close the context no changes will be saved to the database.
2. If for example I will get some reference to jbpm object:


  | TaskInstance taskInstance = context.getTaskInstance(wid);
  | 
   
   and for some reason I close the context then from that time on the reference 
to taskInstance is invalid end every attempt to call some method leads to 
exception -> "context was closed" - or smth like that.

Therefore, when I create my TaskInstance Bean (actually JbpmWorkItem) in the 
constructor I initialize all the fields that are used by getters methods of the 
bean.


  | public class JbpmWorkItem implements IWorkItem  {
  |     static Log log = new Log();
  |     /**
  |      *  session
  |      */
  |     JbpmDefSession session;
  |     /**
  |      *  work item id
  |      */
  |     long workItemId;
  |     /**
  |      *  process instance id
  |      */
  |     long processInstanceId;
  |     /**
  |      *  process definition id
  |      */
  |     long processDefinitionId;
  |     /**
  |      *  CurrentProcessObjectName
  |      */
  |     String currentProcessObjectName;
  |     
  |     
  |     /*
  |      * Task instance - actuall jbpm work item (task to do)
  |      */
  |     
  |     /** Cons
  |      * @param session - def session
  |      * @param wid - work item id
  |      * @throws JbpmAtflowException 
  |      */
  |     public JbpmWorkItem(DefSession session, long wid) throws Exception {
  |             this.session = (JbpmDefSession)session;
  |             this.workItemId = wid;
  |                 /* getContext() creates new context for logged user*/
  |             JbpmContext context = this.session.getContext();
  |             try {
  |                     TaskInstance taskInstance = 
context.getTaskInstance(wid);
  |                     processInstanceId = 
taskInstance.getToken().getProcessInstance().getId();
  |                     processDefinitionId = 
taskInstance.getToken().getProcessInstance().getProcessDefinition().getId();
  |                     currentProcessObjectName = 
taskInstance.getToken().getNode().getName();
  |             }
  |             catch (Exception e) {
  |                     log.error("Could not create work item: " + wid + ", 
actor: " + session.getLoggedOnUser().getName());
  |                     throw new JbpmAtflowException("Could not create work 
item: " + wid + ", actor: " + session.getLoggedOnUser().getName(), e);
  |             }
  |             finally {
  |                     context.close();
  |             }
  |     }
  | 

and here is the question is it correct way ?
My purpose of doing that was to minimize the number of accesses to the 
database. Since If I put the code with creating new context and closing it in 
every getter method just to access jbpm object it will probably decrease the 
performance. 

Am I right ? or Is Jbpm doing some caching so not every call to jbpm object 
method leads to database access to get the data  ?

BR,
Jurek

View the original post : 
http://www.jboss.com/index.html?module=bb&op=viewtopic&p=3990420#3990420

Reply to the post : 
http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=3990420
_______________________________________________
jboss-user mailing list
[email protected]
https://lists.jboss.org/mailman/listinfo/jboss-user

Reply via email to