Pessoal tenho um ejb que deve ser BMT, entao eu mesmo tenho que fazer o controle de transacao.
o codigo abaixo ilustra como faço para gravar um obj qualquer:
try {
this.transaction.begin();
this.em.persist(importacao);
this.transaction.commit();
} catch (RollbackException e) {
throw new EJBException("Erro ao gravar importação", e);
} catch (Exception e) {
try {
this.transaction.rollback();
} catch (SystemException se) {
throw new EJBException("Erro ao efetuar rollBack na atualizacao de importação", se);
}
throw new EJBException("Erro ao atualizar importação", e);
}
tendo em vista que qualquer erro deve efetuar um rollback:
vejo se aconteceu uma RollbackException, pois se ocorrer nao preciso fazer rollback pois ja foi feito sozinho, e depois caso aconteça qualquer outra exceçao eu efetuo rollback.
porem achei que ficou feio o codigo, tambem vejo que nao preciso enviar uma msg para cada um dos casos: erro ao gravar ou erro ao efetuar rollback. Fiz isso apenas para identificar melhor o erro, pois creio que deixar o bloco catch vazio ia ser pior ainda.
ja que qualquer erro deve retornar uma exceçao avisando que nao pode gravar o obj pensei assim tb:
try {
this.transaction.begin();
this.em.persist(importacao);
this.transaction.commit();
} catch (Exception e) {
try {
this.transaction.rollback();
} catch (SystemException se) {
throw new EJBException("Erro ao atualizar importação", se);
}
throw new EJBException("Erro ao atualizar importação", e);
}
alguem poderia me auxiliar numa melhor abordagem ?