JBoss Community

jBPM session persistence - "Removing a detached instance" encountered under load / concurrency

created by Mark Egan in jBPM - View the full discussion

I'm encountering an exception with jbpm-persistence-jpa when performing load testing on an application-embedded jBPM.  The stack trace is:

 

Caused by: java.lang.IllegalArgumentException: Removing a detached instance org.drools.persistence.info.WorkItemInfo#234

     at org.hibernate.ejb.event.EJB3DeleteEventListener.performDetachedEntityDeletionCheck(EJB3DeleteEventListener.java:67) [hibernate-entitymanager-4.0.1.Final.jar:4.0.1.Final]

     at org.hibernate.event.internal.DefaultDeleteEventListener.onDelete(DefaultDeleteEventListener.java:107) [hibernate-core-4.0.1.Final.jar:4.0.1.Final]

     at org.hibernate.event.internal.DefaultDeleteEventListener.onDelete(DefaultDeleteEventListener.java:74) [hibernate-core-4.0.1.Final.jar:4.0.1.Final]

     at org.hibernate.internal.SessionImpl.fireDelete(SessionImpl.java:822) [hibernate-core-4.0.1.Final.jar:4.0.1.Final]

     at org.hibernate.internal.SessionImpl.delete(SessionImpl.java:801) [hibernate-core-4.0.1.Final.jar:4.0.1.Final]

     at org.hibernate.ejb.AbstractEntityManagerImpl.remove(AbstractEntityManagerImpl.java:883) [hibernate-entitymanager-4.0.1.Final.jar:4.0.1.Final]

     at org.drools.persistence.jpa.JpaPersistenceContext.remove(JpaPersistenceContext.java:54) [drools-persistence-jpa-5.5.0.Final.jar:5.5.0.Final]

     at org.drools.persistence.jpa.processinstance.JPAWorkItemManager.completeWorkItem(JPAWorkItemManager.java:123) [drools-persistence-jpa-5.5.0.Final.jar:5.5.0.Final]

 

I'm using 5.4.0.Final (however I observed the same behavior in 5.3.0.Final and 5.4.0.CR1).  The application server is JBoss AS 7.  I'm using MySQL InnoDB having row-locking enabled.

 

The process calls EJBs within separate WorkItemHandlers.  Here's the basic process:

 

1) start process,

2) call a local, no-interface EJB (injected with @Inject) and persist a domain object (using a separate persistence context),

3) lookup another EJB (using InitialContext.doLookup) and perform some synchorous work,

4) end process.

 

I'm initiating the process from a REST endpoint.  The jBPM session.startProcess(...) occurs in a Local EJB exposed service.

 

The load test calls the REST endpoint.  I'm using jMeter.  The thread group only consists of 2 threads.  There is a short ramp-up.

 

Here's a rundown of my observations:

 

During ramp-up where the process service is a single thread, no issues are observed.  Once the second thread spins up, the exception is received on all subsequent calls.  The WorkItemInfo which fails to be removed is for step #2 (the local EJB call to a separate persistence service).  If I remove the third step from the definition, the issue is not observed.

 

Here's my Environment for the JPAKnowledgeService.newStatefulKnowledgeSession(...). 

 

@Produces

public Environment getEnvironment() {

    Environment env = KnowledgeBaseFactory.newEnvironment();

    env.set(EnvironmentName.ENTITY_MANAGER_FACTORY, emf);

    env.set(EnvironmentName.TRANSACTION_MANAGER, new ContainerManagedTransactionManager());

    env.set(EnvironmentName.PERSISTENCE_CONTEXT_MANAGER, new JpaProcessPersistenceContextManager(env));

    return env;

}

 

I'm only using a session once and dispose of it after a single process completes.

 

I'm setting the following for my persistence context:

hibernate.transaction.factory_class=org.hibernate.transaction.CMTTransactionFactory

 

I understand that what I'm encountering could be related to general container handled transactions across my EJB calls, but I wanted to start with the jBPM community.  I had already investigated the transaction handling on those EJB calls and wasn't able to resolve the issue using various @TransactionAttribute or alterations to the persistence context's properties.

 

I also reviewed the persistence chapter in the 5.4 User Guide: http://docs.jboss.org/jbpm/v5.4/userguide/ch.core-persistence.html, as well as the Multi-Threading section: http://docs.jboss.org/jbpm/v5.4/userguide/ch.core-basics.html#d0e2358.

 

Any help is appreciated.

 

Thanks,

-mark

Reply to this message by going to Community

Start a new discussion in jBPM at Community