Injetar bean do escopo em outro bean?

1 resposta
vinicius.me

Boa noite,

Não se o título ficou legal para o que precisa, mas vamos lá…

Estou usando um Java EE 6, e logo no começo estou com problema, como recuperar um bean do escopo em um outro bean, sem usar o FacesContext e talz.
Estava lendo alguns materiais mas não se estou certo, eu usaria o @Inject? Através de DI (Dependency Injection)? Como proceder?

Vai meu código:

@Stateless
public class ProdutoEJB implements ProdutoEJBRemote {

    @PersistenceContext(unitName = "enterprisePU")
    private EntityManager em;

    public Produto create(Produto produto) {
        em.persist(produto);
        return produto;
    }

    public Produto update(Produto produto) {
        return em.merge(produto);
    }

    public void delete(Produto produto) {
        em.remove(em.merge(produto));
    }
} //fim da classe ProdutoEJB
@ManagedBean
@SessionScoped
public class ProdutoController {

    @EJB
    private ProdutoEJBRemote produtoEJB;
    private Produto produto = new Produto();

    public String doCreate() {
        produto = produtoEJB.create(produto);
        return "index.xhtml";
    }

    public String doUpdate() {
        produto = produtoEJB.update(produto);
        return "index.xhtml";
    }

    public String doDelete() {
        produtoEJB.delete(produto);
        return "index.xhtml";
    }

    //getters e setters omitidos
} //fim da classe Produto Controller
@Stateless
public class ProdutoEanEJB implements ProdutoEanEJBRemote {

    @PersistenceContext(unitName = "enterprisePU")
    private EntityManager em;

    public ProdutoEan create(ProdutoEan produtoEan) {
        em.persist(produtoEan);
        return produtoEan;
    } //fim da classe

    public ProdutoEan update(ProdutoEan produtoEan) {
        return em.merge(produtoEan);
    }

    public void delete(ProdutoEan produtoEan) {
        em.remove(em.merge(produtoEan));
    }
} //fim da classe
@ManagedBean
@RequestScoped
public class ProdutoEanController {

    @EJB
    private ProdutoEanEJBRemote produtoEanEJB;
    private ProdutoEan produtoEan = new ProdutoEan();

    public String doCreate() {
        produtoEan = produtoEanEJB.create(produtoEan);
        return "index.xhtml";
    }

    public String doUpdate() {
        produtoEan = produtoEanEJB.update(produtoEan);
        return "index.xhtml";
    }

    public String doDelete() {
        produtoEanEJB.delete(produtoEan);
        return "index.xhtml";
    }

    //getters e setters omitidos
} //fim da classe

Na tela de produtos, teria um link para cadastro de ean (código de barra), onde ao carregar a tela de cadastro de ean já puxaria o produto, para amarrar ambos. Já fiz a JPA da relação, mas não consigo puxar o produto dentro do managed bean Ean (ProdutoEanController).

Na tela do ean, se eu puxo o produto, o mesmo aparece.

Espero ter explicado direito.

Agradeço a ajuda.

1 Resposta

G

Em ambiente JEE6 e em beans gerenciados pelo appserver você pode sim usar o @Inject para injetar algum objeto. Você pode fazer isso com managedbeans.

Criado 22 de fevereiro de 2010
Ultima resposta 6 de mai. de 2010
Respostas 1
Participantes 2