Rollback (indevido) em transação JPA

Entendo que você precisa de reentrância no seu EJB. Logo, você precisa obter outra instância dele mesmo via container - ou usando injection, ou fazendo lookup. Não lembro se você pode fazer essa auto-referência.

Senhores,

É muito simples.

Primeiro: É proibido chamar um método do mesmo EJB como se fosse um Pojo. Vc pode mas JAMAIS terá o controle do container sobre aquela chamada.

Vc deve fazer a injecao de uma dependencia para aquele ejb e invocar o metodo, POREM, deve-se utilizar o atributo de transacao naquele método para suspender a transcao do chamador e criar uma nova transacao.

public class CartBean implements Cart {
    private ArrayList items;
   
    @EJB
    private Cart cart;

    @TransactionAttribute(value=REQUIRES_NEW)
    public void novoMetodo() {
        // Release any resources.
    }

    public void metodo() {
        cart.novoMetodo();
    }

    public void removeItem(String item) {
        items.remove(item);
    }
}

Nao se esqueca que todos os metodos sao por default “REQUIRED”, entao se nao colocar o REQUIRES_NEW no segundo metodo, ele estará na mesma transacao.

Sorte termos grandes mestres… rsrsrs…
Obrigado Michael, Aurélio e Maurício.