Oá, pessoal
To com um problema. Uso EJB para fazer controle de transações na minha aplicação, sobre banco de dados MySQL 5.
Pois bem … a idéia é fazer vários updates e inserts no mesmo método do EJB, e SÓ comitar se tudo correr bem, ou seja, ao final do processo. Ocorrendo qualquer problema, em circunstâncias normais, o próprio EJB deveria fazer esse controle e rolbecar tudo.
Configurei o EJB pra fazer isso, mas não tá acontecendo …
Meu ejb-jar
<session >
<description><![CDATA[Description for Recebimento]]></description>
<display-name>Name for Recebimento</display-name>
<ejb-name>Recebimento</ejb-name>
<home>com.business.session.interfaces.RecebimentoHome</home>
<remote>com.business.session.interfaces.Recebimento</remote>
<ejb-class>com.business.session.ejb.RecebimentoSession</ejb-class>
<session-type>Stateless</session-type>
<transaction-type>Container</transaction-type>
</session>
Meu método, que quero executar, no EJB.
public boolean incluirDocumento(DocumentoVO documentoVO) throws EJBException {
try {
PrcRecebimentoDAO prcRecebimentoDAO = new PrcRecebimentoDAO();
if (prcRecebimentoDAO.insertDocumento(documentoVO)) {
PrcContabilidadeDAO prcContabilidadeDAO;
Iterator itPlanilhas = documentoVO.getListaPlanilhas().iterator();
while (itPlanilhas.hasNext()) {
PlanilhaVO planilhaVO = (PlanilhaVO)itPlanilhas.next();
prcContabilidadeDAO = new PrcContabilidadeDAO();
if (!prcContabilidadeDAO.insertPlanilha(planilhaVO)) {
throw new EJBException();
}
}
return true;
} else {
return false;
}
} catch (DAOException e) {
e.printStackTrace();
throw new EJBException();
}
}
Como dá pra ver, há dois INSERTS. Um em DOCUMENTO (primeira chamada ao DAO), e outro em PLANILHAS. Acontece, que, ocorrendo erro no INSERT em PLANILHAS, ainda assim o INSERT em DOCUMENTO é comitado, quando não deveria.
Não sei se é problema no EJB, no MySQL, ou no JDBC. Já pesquisei, mas não achei nada que possa me ajudar.
Obrigado.