Transações em EJB 3.0 com JBoss

Bom dia a todos…

O problema é o seguinte:

Tenho uma aplicação rodando em cluster. Existem operações em que precisarei inserir valores no banco em diversas tabelas, e a operação só será considerada OK, se todas as operações ocorrerem com sucesso. Por exemplo, para efetivar uma venda, terei que comitar registros na tabela VENDA, ESTOQUE, ITEM_VENDA, e assim por diante…

Gostaria de saber de vcs, como, num ambiente clusterizado, poderei englobar todas estas operações em apenas uma grande transação, considerando que, o EJB responsavel por efetuar a venda, vai chamar outros ejb’s, responsaveis por dar baixa no estoque (por exemplo), atualizar outros registros e assim por diante.

Esqueci de informar que não utilizo Hibernate, JPA, nem qualquer outro framwork. Em principio, apenas utilzo JDBC puro para efetuar as operações.

Quem puder me ajudar ficarei bastante agradecido…

Você está utilizando um datasouce configurado no servidor?

Sim, o datasource está configurado no servidor.

Você poderia chamar os métodos Ejbs com RMI e pesquisálos com JNDI mebrando que você deve comfigurar o EJB como Remote pois os servidores estão em lugares diferentes.
Se puder dar mais detalhes posso lhe passar um exemplo de código.

Uma das coisas mais legais do EJB3 que é o JPA você não está usando? :shock: (lembrando que pode-se usar JPA fora do AS)

Se fosse com JPA seria facinho, deixava o próprio container tratar a transação para você (deixando o @TransactionAttribute como Required e talvez mudar o Transaction Isolation para SERIALIZABLE, isso se essa operação for realmente muito importante e necessita do máximo de isolação).

Agora usando JDBC, bem, eu acho que você deve iniciar uma transação no inicio do primeiro EJB, fazer a chamada aos outros dentro do mesmo bloco de transação e no final fazer o commit ou rollback.

Problema resolvido. Na verdade não estamos usando a JPA por que não fizemos um teste de carga ainda. O hibernate, infelizmente, não passou no teste. O teste consiste em uma estrutura rodando em cluster, e por segundo algumas dezenas de requisições ao banco, sendo estas, inserts e selects.

Na verdade, o jboss gerencia a conexao e transação transparentemente, ou seja, os inserts e updates podem estar sendo executados em diferentes maquinas, utilizando a mesma variavel de conexao com o banco, que, se for dado um rollback ou commit, a operação é concluida sem problemas. Este era o nosso problema. Não conseguiamos compartilhar a mesma conexao com todos os ejbs participantes do processo em questão.

JBoss r0x!

Valeu galera pela ajuda…