Part of my application's requirements involve me saving the transaction id of some operations. I am using a CMT StatelessSessionBean. I thought that I could get the id via entityManager.getTransaction(), but that yields the following IllegalStateException. Is there another way to get to this information without switching to user managed transactions?
java.lang.IllegalStateException: Illegal to call this method from injected, managed EntityManager at org.jboss.ejb3.entity.TransactionScopedEntityManager.getTransaction(TransactionScopedEntityManager.java:226) at com.noverant.service.audit.StatelessAuditService.addEntry(StatelessAuditService.java:69) at sun.reflect.GeneratedMethodAccessor183.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:112) ...
package com.noverant.service.audit;
import ...
@Stateless (name="AuditService")
public class StatelessAuditService implements AuditService
{
protected EntityManager entityManager = null;
protected SessionContext sessionContext = null;
@PersistenceContext(unitName = "nets-system")
public void setEntityManager(EntityManager entityManager)
{
this.entityManager = entityManager;
}
@Resource
public void setSessionContext(SessionContext sessionContext)
{
this.sessionContext = sessionContext;
}
public void addEntry(AuditEntry ae)
{
String transactionId = entityManager.getTransaction().toString();
}
}