[RESOLVIDO] EntityManager sem EntityManagerFactory utilizando @PersistenceContext

12 respostas
L

Estou com o seguinte problema, tenho as classes abaixos no sistema e percebi que o objeto EntityManager da minha classe DAO não esta sendo instanciado, poderia me explicar porque a annotation @PersistenceContext não está injetando? Não lança exceção, apenas a variável em fica null.

* SolicitacaoManagedBean.java
@ManagedBean
@SessionScoped
public class SolicitacaoManagedBean {

    private Solicitacao solicitacao;

    public SolicitacaoManagedBean() {
        solicitacao = new Solicitacao();
        solicitacaoFachada = new SolicitacaoFachada();
    }

    public String enviarSolicitacao(ActionEvent actionEvent) {
        try {
            solicitacaoFachada.inserir(solicitacao);
        } catch (Exception e) {
            System.out.println("Exception: " + e.getMessage());
        }
        return "";
    }
}
* SolicitacaoFachada.java
@Stateless
public class SolicitacaoFachada {

    @EJB
    private SolicitacaoDAO solicitacaoDAO;

    public void inserir(Solicitacao solicitacao) {
        solicitacaoDAO.inserir(solicitacao);
    }
}
* SolicitacaoDAO.java
@Stateless
public class SolicitacaoDAO {

    @PersistenceContext
    private EntityManager em;

    public void inserir(Solicitacao solicitacao) {
        em.persist(solicitacao);
    }
}
P.S. Tenho outras classes implementadas da mesma forma, e que funciona perfeitamente.

12 Respostas

Hebert_Coelho

Não é só por que funciona em um que tem que funcionar em outro…

Não seria por causa do código abaixo?
solicitacaoFachada = new SolicitacaoFachada();

Até onde eu sei, esse cara aí também deveria ser injetado.

L

Vlw jakefrog, porem mesmo efetuando essa alteração não funcionou!

L

E a crianção do fachada se encontra no managedbean, no fachada efetue a instancia do dao. Porém o EntityManager continua null.

Hebert_Coelho
Esses dois caras tem que ser injetados:

solicitacao = new Solicitacao();

solicitacaoFachada = new SolicitacaoFachada();

Como que está sendo feito no código que funciona?

L

Segue codigo abaixo:

* GrupoUsuariosManagedBean.java
@ManagedBean
@SessionScoped
public class GrupoUsuariosManagedBean {

    private GrupoUsuarios grupo;

    public GrupoUsuariosManagedBean() {
        grupoUsuarioFachada = new GrupoUsuariosFachada();
    }

    public void prepararAdicionar(ActionEvent actionEvent) {
        grupo = new GrupoUsuarios();
    }

    public void inserir(ActionEvent actionEvent) {
        try {
            grupoUsuarioFachada.inserir(grupo);
        } catch (Exception e) {
            System.out.println("Exception: " + e.getMessage());
        }
    }
}
* GrupoUsuariosFachada.java
@Stateless
public class GrupoUsuariosFachada {

    @EJB
    private GrupoUsuariosDAO grupoUsuariosDAO;

    public void inserir(GrupoUsuarios grupoUsuarios) {
        grupoUsuariosDAO.inserir(grupoUsuarios);
    }
}
GrupoUsuariosDAO.java
@Stateless
public class GrupoUsuariosDAO {

    @PersistenceContext
    private EntityManager em;

    public void inserir(GrupoUsuarios grupoUsuarios) {
        em.persist(grupoUsuarios);
    }
}
Rodrigo_Sasaki

você tentou colocar a propriedade unitName da anotação? para apontar o data source a ser utilizado?

L

Vlw digaoneves, mas tentei sim e nada!

Hebert_Coelho

luizcmjr:
Vlw digaoneves, mas tentei sim e nada!
As classes que estão sendo feitas o new, todas estão como EJB?

Estou estranhando pq é a primeira vez que vejo new em um EJB. [=

Rodrigo_Sasaki

Hmm… é, realmente não é comum, por que está instanciando o EJB na mão? e não deixando isso por conta do container?

L

jakefrog, mais uma vez obrigado!

EJB somente nas classes fachadas. Porém apos seu comentario efetuei um grep em todos os arquivos para ver se encontrava algum perdido, advinha... rsrs... encontrei faltando um no managedbean. Segue abaixo a correção!

@ManagedBean
@SessionScoped
public class SolicitacaoManagedBean {

    private Solicitacao solicitacao;
    @EJB
    private SolicitacaoFachada solicitacaoFachada;
    public SolicitacaoManagedBean() {
        solicitacao = new Solicitacao();
        solicitacaoFachada = new SolicitacaoFachada();
    }

    public String enviarSolicitacao(ActionEvent actionEvent) {
        try {
            solicitacaoFachada.inserir(solicitacao);
        } catch (Exception e) {
            System.out.println("Exception: " + e.getMessage());
        }
        return "";
    }
}
Hebert_Coelho

luizcmjr:
jakefrog, mais uma vez obrigado!

EJB somente nas classes fachadas. Porém apos seu comentario efetuei um grep em todos os arquivos para ver se encontrava algum perdido, advinha… rsrs… encontrei faltando um no managedbean. Segue abaixo a correção!

Agradeça ao digaoneves que ele levantou a bola conversando cmg e eu cortei! :twisted:

L

Opa, agradeço a ambos digaoneves e jakefrog!!!

Como bom iniciante (JAVA), sempre é bom saber onde encontrar respostas as duvidas!!!

Criado 3 de setembro de 2012
Ultima resposta 3 de set. de 2012
Respostas 12
Participantes 3