[jboss-user] [JBoss jBPM] - Re: jbpm 3.2 Session Is Closed exception in JobSession

srLucas do-not-reply at jboss.com
Wed Jan 28 16:09:45 EST 2009


Hi,
I am experiencing the same issue here. I haven't found the solution yet (I might try the posted solution here) but wanted to post the problem for future reference...

the error I am getting is the following:

17:53:07,343 [http-8080-4] INFO  ContextAdvice : ----------> ContextAdvice in action, opening ctx
  | 17:53:21,234 [http-8080-4] DEBUG JbpmContextInfo : creating jbpm context with service factories '[tx, message, scheduler, logging, persistence, authentication]'
  | 17:53:21,250 [http-8080-4] DEBUG JbpmContext : creating org.jbpm.JbpmContext at 93f17f
  | 17:53:21,250 [http-8080-4] INFO  ContextAdvice : --------------> reusing existing jbpmContext: org.jbpm.JbpmContext at 93f17f
  | 17:53:26,281 [http-8080-4] DEBUG DbPersistenceServiceFactory : creating persistence service
  | 17:53:26,296 [http-8080-4] DEBUG DbPersistenceService : creating hibernate session
  | 17:53:26,296 [http-8080-4] DEBUG DbPersistenceService : beginning hibernate transaction
  | 17:53:31,343 [http-8080-4] DEBUG DbPersistenceService : begun hibernate transaction org.hibernate.transaction.JDBCTransaction at 537c91
  | 17:53:31,531 [http-8080-4] INFO  ContextAdvice : ----------> ContextAdvice in action, closing ctx
  | 17:53:51,562 [http-8080-4] DEBUG JbpmContext : closing jbpmContext org.jbpm.JbpmContext at 93f17f
  | 17:53:51,578 [http-8080-4] DEBUG Services : closing service 'persistence': org.jbpm.persistence.db.DbPersistenceService at 362a7b
  | 17:53:51,593 [http-8080-4] DEBUG DbPersistenceService : committing hibernate transaction org.hibernate.transaction.JDBCTransaction at 537c91
  | 17:53:51,625 [http-8080-4] DEBUG DbPersistenceService : closing hibernate session
  | 17:53:51,640 [http-8080-4] DEBUG Services : closing service 'tx': org.jbpm.tx.TxService at 384d34
  | 17:53:51,812 [http-8080-4] ERROR LoggingSession : org.hibernate.SessionException: Session is closed!

And here is a bit of explanation.
I have a ContextAdvice Object that opens/closes the context when you enter/leave the service logic.
 package com.ea.dc.jbpm.context;
  | 
  | import java.lang.reflect.Method;
  | 
  | import org.apache.log4j.Logger;
  | import org.jbpm.JbpmConfiguration;
  | import org.jbpm.JbpmContext;
  | import org.springframework.aop.AfterReturningAdvice;
  | import org.springframework.aop.MethodBeforeAdvice;
  | 
  | /** Class used to intercept calls to services and initialize the jbpmContext
  |  * in order to make it transparent to the coder.
  |  *
  |  * @author lucas.gonzalezp
  |  */
  | public class ContextAdvice
  |   implements MethodBeforeAdvice, AfterReturningAdvice {
  | 
  |   /** The class logger. */
  |   private static final Logger LOGGER = Logger.getLogger(ContextAdvice.class);
  | 
  |   /** jbpm configuration. */
  |   private JbpmConfiguration jbpmConfiguration = null;
  | 
  |   /** Opens the context. */
  |   public void before(Method method, Object[] args, Object target)
  |     throws Throwable {
  |     LOGGER.info("----------> ContextAdvice in action, opening ctx");
  |     getContext();
  |   }
  | 
  | 
  |   /** Closes the context. */
  |   public void afterReturning(Object returnValue, Method method,
  |       Object[] args, Object target) throws Throwable {
  |     LOGGER.info("----------> ContextAdvice in action, closing ctx");
  | 
  |     JbpmContext jbpmContext = jbpmConfiguration.getCurrentJbpmContext();
  |     if (jbpmContext != null) {
  |       jbpmContext.close();
  |     } else {
  |       // TODO: throw exception?
  |       LOGGER.fatal("----------> CONTEXT NOT FOUND, SOMEONE ELSE CLOSED IT");
  |     }
  |   }
  | 
  |   /** Looks for a current JBPMContext. If it does not exists it will create
  |    * a new one.
  |    * @return a jbpm context
  |    */
  |   private JbpmContext getContext() {
  |     // Lookup the pojo persistence context-builder that is configured above
  |     JbpmContext jbpmContext = jbpmConfiguration.getCurrentJbpmContext();
  | 
  |     if (jbpmContext == null) {
  |       jbpmContext = jbpmConfiguration.createJbpmContext();
  |       LOGGER.info("--------------> creating new jbpmContext: "
  |           + jbpmContext);
  |     }
  |     return jbpmContext;
  |   }
  | 
  |   /** Sets the jbpmConfiguration for this bean.
  |    * @param config the jbpm configuration to set
  |    */
  |   public void setJbpmConfiguration(final JbpmConfiguration config) {
  |     jbpmConfiguration = config;
  |   }
  | }
  | 

and here is one of the failing methods:

  public List<JobDTO> getJobs() {
  |     List<JobDTO> result = new ArrayList<JobDTO>();
  | 
  |     // Lookup the pojo persistence context-builder that is configured above
  |     JbpmContext jbpmContext = getContext();
  | 
  |     // let's obtain a graph session to get the process instances
  |     GraphSession graphSession = jbpmContext.getGraphSession();
  |     // now let's get the process instance
  |     ProcessDefinition procDef = graphSession.findLatestProcessDefinition(
  |         WorkFlowServiceImpl.PROCESS_NAME);
  | 
  |     List<ProcessInstance> instances =
  |       graphSession.findProcessInstances(procDef.getId());
  | 
  |     for (Iterator iterator = instances.iterator(); iterator.hasNext();) {
  |       ProcessInstance processInstance = (ProcessInstance) iterator.next();
  |       result.add(populateJob(processInstance));
  |     }
  | 
  |     return result;
  |   }
  | 

So I understand that ContextAdvice closes the jbpmContext --> HibernateSession and then the LogSession throws the error.

Is it possible to flush/close the LogSession before the context is closed?

thanks,
Lucas

- I am using springmodules 0.8a

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

Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4205393



More information about the jboss-user mailing list