In the end I have achieved this using Bean Managed Transactions that allow you to determine the transaction boundaries manually...
@TransactionManagement(value=TransactionManagementType.BEAN)
@AutoCreate
@Name("processSession")
public class ProcessSession{
@Resource private UserTransaction userTransaction;
@Logger private Log log;
@In private SessionDAO sessionDAO;
public ProcessingRun processNewSession(Session session){
userTransaction.begin();
session.setProcessingStartTime(new Date());
sessionDAO.persist(session);
userTransaction.commit();
userTransaction.begin();
//Some long running processing ~60sec
session.setProcessingEndTime(new Date());
sessionDAO.persist(session);
userTransaction.commit();
}
}