final Map sessionMap = new HashMap();
TransactionTemplate transactionTemplate = new TransactionTemplate(this.transactionManager);
transactionTemplate.execute(new TransactionCallback() {
public Object doInTransaction(TransactionStatus status) {
JbpmSession firstSession = JbpmSessionFactoryUtils.getSession(jbpmSessionFactory);
JbpmSession secondSession = JbpmSessionFactoryUtils.getSession(jbpmSessionFactory);
sessionMap.put("first", firstSession);
sessionMap.put("second", secondSession);
// try to close inside a transaction
JbpmSessionFactoryUtils.releaseSession(firstSession, jbpmSessionFactory);
assertTrue("Should not close session inside a transaction.",
firstSession.getSession().isOpen());
return null;
}
});
JbpmSession first = (JbpmSession) sessionMap.get("first");
JbpmSession second = (JbpmSession) sessionMap.get("second");
assertSame("Should've got the same session twice inside the transaction", first, second);
assertNull("Hibernate session should be closed", first.getSession());
assertNull("no current session", JbpmSession.getCurrentJbpmSession());