Tennho essa exception abaixo, que nao consigo identificar o motivo..
A classe pessoa taem varios relacionamentos, e todos sao inseridos(aparece o print no console) .
14:45:53,449 INFO [STDOUT] Hibernate: insert into cliente.cliente (....)
14:45:53,490 INFO [STDOUT] Hibernate: insert into integracao (...)
...
mas qdo termina de executar o metodo que salva que esta no ejb, no metodo que chama ja vai direto para o catch....
javax.ejb.EJBTransactionRolledbackException: Transaction rolled back
at org.jboss.ejb3.tx.Ejb3TxPolicy.handleEndTransactionException(Ejb3TxPolicy.java:54)
at org.jboss.aspects.tx.TxPolicy.endTransaction(TxPolicy.java:175)
at org.jboss.aspects.tx.TxPolicy.invokeInOurTx(TxPolicy.java:87)
at org.jboss.aspects.tx.TxInterceptor$Required.invoke(TxInterceptor.java:190)
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
at org.jboss.aspects.tx.TxPropagationInterceptor.invoke(TxPropagationInterceptor.java:76)
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
at org.jboss.ejb3.tx.NullInterceptor.invoke(NullInterceptor.java:42)
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
at org.jboss.ejb3.security.Ejb3AuthenticationInterceptorv2.invoke(Ejb3AuthenticationInterceptorv2.java:186)
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
at org.jboss.ejb3.ENCPropagationInterceptor.invoke(ENCPropagationInterceptor.java:41)
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
at org.jboss.ejb3.BlockContainerShutdownInterceptor.invoke(BlockContainerShutdownInterceptor.java:67)
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
at org.jboss.aspects.currentinvocation.CurrentInvocationInterceptor.invoke(CurrentInvocationInterceptor.java:67)
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
at org.jboss.ejb3.session.SessionSpecContainer.invoke(SessionSpecContainer.java:176)
at org.jboss.ejb3.session.SessionSpecContainer.invoke(SessionSpecContainer.java:216)
at org.jboss.ejb3.proxy.impl.handler.session.SessionProxyInvocationHandlerBase.invoke(SessionProxyInvocationHandlerBase.java:207)
at org.jboss.ejb3.proxy.impl.handler.session.SessionProxyInvocationHandlerBase.invoke(SessionProxyInvocationHandlerBase.java:164)
at $Proxy660.salvarColaboradorSenai(Unknown Source)
at br.senai.sc.integracao.pessoa.colaborador.action.ColaboradorIntegracaoAction.process(ColaboradorIntegracaoAction.java:57)
at org.jboss.soa.esb.listeners.message.ActionProcessingPipeline.processPipeline(ActionProcessingPipeline.java:649)
at org.jboss.soa.esb.listeners.message.ActionProcessingPipeline.processPipeline(ActionProcessingPipeline.java:603)
at org.jboss.soa.esb.listeners.message.ActionProcessingPipeline.process(ActionProcessingPipeline.java:433)
at org.jboss.soa.esb.listeners.message.MessageAwareListener$TransactionalRunner.run(MessageAwareListener.java:540)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:662)
Caused by: javax.transaction.RollbackException: [com.arjuna.ats.internal.jta.transaction.arjunacore.commitwhenaborted] [com.arjuna.ats.internal.jta.transaction.arjunacore.commitwhenaborted] Could not commit transaction.
at com.arjuna.ats.internal.jta.transaction.arjunacore.TransactionImple.commitAndDisassociate(TransactionImple.java:1435)
at com.arjuna.ats.internal.jta.transaction.arjunacore.BaseTransaction.commit(BaseTransaction.java:137)
at com.arjuna.ats.jbossatx.BaseTransactionManagerDelegate.commit(BaseTransactionManagerDelegate.java:75)
at org.jboss.aspects.tx.TxPolicy.endTransaction(TxPolicy.java:170)
... 28 more
dentro do metodo no ejb nao consigo pegar a exception dentro do catch, somente no catch do metodo que chama o ejb
metodo que chama o ejb
try {
log.info(message.getBody().get().toString());
IntegracaoDTO cs = (IntegracaoDTO) message.getBody().get();
Context ctx = new InitialContext();
IntegracaoServiceLocal local = (IntegracaoServiceLocal) ctx.lookup("IntegracaoService/local");
local.salvarIntegracao(cs);
} catch (Exception e) {
//o debug só para aqui qdo ocorre a exception
throw new IntegracaoRuntimeException(e);
}
ejb
@Stateless
public class IntegracaoService implements IntegracaoServiceLocal {
public void myMethod()
{
try{
Pessoa p...
Integracao pi...
p.setIntegracao(pi);
pi.setPessoa(p);
entityManager.persist(p);
entityManager.persist(pi);//se eu tirar esta linha, funciona sem erro
} catch (Exception e) {
//qdo ocorre a excetion o debug nao para aqui
log.error("Exception ", e);
throw new IntegracaoException(e);
}
}
mapeamentos
class Integracao{
@Id
@GenericGenerator(name = "pkfk", strategy = "foreign", parameters = {
@Parameter(name = "property", value = "pessoa")
})
@Column(name="id_pessoa")
@GeneratedValue(generator = "pkfk")
private Integer idPessoa;
@OneToOne
@PrimaryKeyJoinColumn
private Pessoa pessoa;
}
class Pessoa{
@OneToOne(mappedBy = "pessoa")
@Cascade({ CascadeType.ALL, CascadeType.DELETE_ORPHAN })
private Integracao integracao;
}