Transações EJB - Dúvida

Fala galera, blz?

Sou um pouco novato com aplicações Enterprise e estou com o seguinte problema:

Session Bean A

    @EJB
    private SessionBeanB beanB;

    public void method_A() {
        
        beanB.method_B();
        .
        .
        .
    }

Session Bean B

    @PersistenceContext(...)
    private EntityManager entityManager;

    public void method_B() {
        // faz insert no banco
    }

Quando a execução do método B é concluída, os dados não estão no banco, eles só são comitados quando a transação do método A é concluída.

Eu tentei adicionar “@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)” acima do método B, seguindo a documentação, na qual diz que “REQUIRES_NEW” força a iniciar uma nova transação e já a conclui assim que o método B é finalizado, mas ainda continuou com o mesmo comportamento.

Como eu disse, sou iniciante com EJB, transações, etc, e gostaria de um auxílio pra corrigir isso, pois assincronamente, antes mesmo que o método A se conclua, eu irei precisar buscar o registro salvo pelo método B.

Desde já agradeço!

Abraços.

cara,

caso vc nao tenha uma necessidade especial, vc nao precisa se preucupar com a transação, pois o EJB ja cria um pacote padrão de configurações para vc.
mas caso vc queria saber o que cada uma faz, segue esse link http://java.boot.by/scbcd5-guide/ch09s03.html
e a padrao é REQUIRED

t+

[quote=alissonvla]cara,

caso vc nao tenha uma necessidade especial, vc nao precisa se preucupar com a transação, pois o EJB ja cria um pacote padrão de configurações para vc.
mas caso vc queria saber o que cada uma faz, segue esse link http://java.boot.by/scbcd5-guide/ch09s03.html
e a padrao é REQUIRED

t+[/quote]

Olá alissonvla,

essa documentação eu já li no site da Oracle, e pelo pouco que entendi, se eu deixar o container gerenciar (REQUIRED), ele irá chamar o método B na mesma transação do A. Nesse caso só iria dar o commit quando o método A concluísse. Mas eu preciso que no momento em que o método B seja concluído, os dados já estejam no banco.

O que mais me pareceu correto para o meu caso, foi o “REQUIRES_NEW”, que ao meu entender, executa o método B em uma transação separada e assim que ele concluísse, daria o commit no banco, mas não é o que acontece.

Você sabe me dizer onde estou errado, e se é possível mudar esse comportamento?

cara,

esse Classe aonde ta o metodo_A é um outro EJB?

pela explicação do requerid_new, era para criar um nova transacao

“If a client calls with a transaction context, the container SUSPENDS the association of the transaction context with the current thread before starting the new transaction and invoking the business method. The container RESUMES the suspended transaction association after the business method and the new transaction have been completed.”

t+

Cara… uma pergunta: Se no método B vc tem algo que vai gravar no banco e depois vai precisar usar isso no A, vc já não tem o objeto para utilizar sem precisar buscar novamente no banco ?

Agora quanto ao “RequiresNew” teoricamente era para funcionar, porque no livro “Enterprise Java Beans 3.0” ná página 267 fala assim: “Esse atributo significa que uma nova transação é sempre inicia. Independentemente do cliente ou EJB chamador ser parte de uma transação, um método com atributo “RequiesNew” começa em uma nova transação quando invocado.”

No caso da minha pergunta no começo, não daria certo ?