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.