Pessoal,
Tenha a seguinte classe
public class ProdutorEntityManager {
public void finaliza(@Disposes @BancoProducao EntityManager entityManager) {
entityManager.close();
}
@PersistenceContext(unitName = "DEF")
@Produces @BancoProducao EntityManager entityManager;
}
@Transactional(value = Transactional.TxType.REQUIRED, rollbackOn = Exception.class)
public abstract class CoreServico<T extends R2Entity> {
@Inject @BancoProducao
private EntityManager entityManager;
protected EntityManager getEntityManager() {
return entityManager;
}
public class ConcreteServico extends CoreServico<BaseXPTO> {
@Override
public void salvar(XPTOConcrete entity) {
EntityManager entityManager = getEntityManager();
try {
XPTOConcrete xptoConcrete= (XPTOConcrete ) entity;
entityManager.persist(xptoConcrete);
} catch (Throwable e) {
e.printStackTrace();
}
}
}
Tenho o seguinte erro APENAS se a subclasse de “CoreServico” sobrescrever o metodo salvar.
Tenho outra classe que NÃO sobrescreve o método salvar e tudo corre bem.
Grave: javax.persistence.TransactionRequiredException
at com.sun.enterprise.container.common.impl.EntityManagerWrapper.doTxRequiredCheck(EntityManagerWrapper.java:161)
at com.sun.enterprise.container.common.impl.EntityManagerWrapper.doTransactionScopedTxCheck(EntityManagerWrapper.java:151)
at com.sun.enterprise.container.common.impl.EntityManagerWrapper.persist(EntityManagerWrapper.java:281)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.jboss.weld.util.reflection.Reflections.invokeAndUnwrap(Reflections.java:396)
at org.jboss.weld.bean.builtin.CallableMethodHandler.invoke(CallableMethodHandler.java:49)
at org.jboss.weld.bean.proxy.EnterpriseTargetBeanInstance.invoke(EnterpriseTargetBeanInstance.java:56)
at org.jboss.weld.bean.proxy.ProxyMethodHandler.invoke(ProxyMethodHandler.java:101)
at org.jboss.weldx.persistence.EntityManager$-[telefone removido]$Proxy$_$$_Weld$Proxy$.persist(Unknown Source)
Minha aplicação tem transação controlada pelo AppServer
Alguém saberia o porque?