Take a look at this topic: Transaction demarcation with EJB/CMT.
Instead of looking up the JbpmSessionFactory in JNDI yourself, you can retrieve it by calling JbpmSessionFactory.getInstance() within ejbCreate() and keep it in a field. Remember to nullify that field in ejbRemove().
Just a question, I am posting it here because its related to EJB.
what is this doing exactly?
JbpmContext jbpmContext = JbpmContext.getCurrentJbpmContext();
Can I use directly this to open graphSession directly? the way you are doing it in you monitoring code?