Calling StatefulKnowledgeSession.dispose() inside a transaction causes java.lang.IllegalStateException

Solution Unverified - Updated -

Issue

If I call StatefulKnowledgeSession.dispose() inside an EJB transaction-required method causes java.lang.IllegalStateException

10:52:40,748 WARN  [com.arjuna.ats.arjuna] (http-localhost-127.0.0.1-8080-1) ARJUNA012125: TwoPhaseCoordinator.beforeCompletion - failed for SynchronizationImple< 0:ffff7f000001:-77d48dc8:4fd8d322:f, org hibernate engine transaction synchronization internal RegisteredSynchronization 8a5770 >: javax.persistence.PersistenceException: error during managed flush
    at org.hibernate.ejb.AbstractEntityManagerImpl$CallbackExceptionMapperImpl.mapManagedFlushFailure(AbstractEntityManagerImpl.java:1490) [hibernate-entitymanager-4.1.3.ER1-redhat-1.jar:4.1.3.ER1-redhat-1]
    at org.hibernate.engine.transaction.synchronization.internal.SynchronizationCallbackCoordinatorImpl.beforeCompletion(SynchronizationCallbackCoordinatorImpl.java:109) [hibernate-core-4.1.3.ER1-redhat-1.jar:4.1.3.ER1-redhat-1]
    at org.hibernate.engine.transaction.synchronization.internal.RegisteredSynchronization.beforeCompletion(RegisteredSynchronization.java:53) [hibernate-core-4.1.3.ER1-redhat-1.jar:4.1.3.ER1-redhat-1]
    at com.arjuna.ats.internal.jta.resources.arjunacore.SynchronizationImple.beforeCompletion(SynchronizationImple.java:76)
    at com.arjuna.ats.arjuna.coordinator.TwoPhaseCoordinator.beforeCompletion(TwoPhaseCoordinator.java:273)
    at com.arjuna.ats.arjuna.coordinator.TwoPhaseCoordinator.end(TwoPhaseCoordinator.java:93)
    at com.arjuna.ats.arjuna.AtomicAction.commit(AtomicAction.java:164)
...
Caused by: java.lang.IllegalStateException: Illegal method call. This session was previously disposed.
    at org.drools.reteoo.DisposedReteooWorkingMemory.getSessionClock(DisposedReteooWorkingMemory.java:398) [drools-core-5.4.0.Final.jar:5.4.0.Final]
    at org.drools.impl.StatefulKnowledgeSessionImpl.getSessionClock(StatefulKnowledgeSessionImpl.java:256) [drools-core-5.4.0.Final.jar:5.4.0.Final]
...
@Stateless
@Named("workFlow")
@Alternative
public class EJBWorkflowManager implements WorkflowManager {

    @Inject
    @Knowledge
    private KnowledgeBase kbase;

    @Inject
    @JBPMPeristenceFactory
    private EntityManagerFactory emf;

    private StatefulKnowledgeSession ksession = null;

    //@TransactionAttribute(TransactionAttributeType.NEVER)
    /* (non-Javadoc)
     * @see sg.gov.dsta.jbpm.bean.WorkflowManager#startWorkFlow(java.lang.String, java.lang.Long)
     */
    @Override
    public int startWorkFlow(String approverId, String requeterId, Long rfxId){
        try {
             Environment env = KnowledgeBaseFactory.newEnvironment();
             env.set( EnvironmentName.ENTITY_MANAGER_FACTORY,emf);
             ksession = JPAKnowledgeService.newStatefulKnowledgeSession( kbase, null, env );
             JPAWorkingMemoryDbLogger logger = new JPAWorkingMemoryDbLogger(ksession);
             @SuppressWarnings("deprecation")
            CommandBasedWSHumanTaskHandler taskHandler = new CommandBasedWSHumanTaskHandler(ksession);
             taskHandler.setConnection("192.168.247.159", 9123);
             taskHandler.connect();
             ksession.getWorkItemManager().registerWorkItemHandler("Human Task", taskHandler);

             Map<String, Object> params = new HashMap<String, Object>();
             params.put("rfx_approverid", approverId);
             params.put("rfx_requesterid", requeterId);
             params.put("rfx_id", rfxId);

             ksession.startProcess("com.dsta.dsta2",params);
             logger.dispose();
             //ksession.dispose();          <--------------------------------------------------------- This causes exception
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        return ksession.getId();
    }

}

Environment

  • JBoss Enterprise BRMS
    • 5.3.0
  • jBPM5

Subscriber exclusive content

A Red Hat subscription provides unlimited access to our knowledgebase, tools, and much more.

Current Customers and Partners

Log in for full access

Log In

New to Red Hat?

Learn more about Red Hat subscriptions

Using a Red Hat product through a public cloud?

How to access this content