In our case the session is loaded inside the onMessage() method of a JEE Message Driven Bean. The JEE SessionSynchronization interface or the @AfterCompletion annotations are not available on MDBs. I'm not using spring.
It seems that there isn't a JEE6 way to run something after the transaction is committed for a MDB.
I think the only option with the MDB is to configure the bean for transactions NOT_SUPPORTED, start and commit my own transaction around the interaction with the workflow session and client mode message acknowledgement post the commit. I will also have to deal with the small chance of duplicate message delivery.
Somewhat more complex than I'd hoped for. Quite a major change required for an update from jbpm 5.1 to 5.3!