Solucionado (ver solução)
Solucionado
(ver solução)
6
respostas

Anotação @PersistenceContext

Olá pessoal. No curso de JSF, precisamos criar um producer para o EntityManager, através da anotação @Produces do CDI. No caso, estávamos usando um Servlet Container (Tomcat). Agora, nesse curso de Java EE, estamos utilizando a anotação @PersistenceContext para injetar o EntityManager e estamos usando um servidor de aplicações (WildFly). Minha dúvida é: Só é possível usar o @PersistenceContext com um servidor de aplicações?

6 respostas
solução!

Oi Rodrigo,

Isso mesmo. Só É possível utilizar o @PersistenceContext em ambientes Java EE.

Além disso, no outro curso foi criado o esquema do @Produces do CDI para poder controlar o tempo de vida do EntityManager, para que ele ficasse aberto durante todo o request.

Com o @PersistenceContext o tempo de vida do EntityManager é mais curto. Ele fica aberto apenas durante a chamada do método, ou seja, após o retorno do método, ele é automaticamente fechado.

Bons estudos!

Oi Rodrigo, obrigado pela resposta. É possível alterar o tempo de vida do EM quando usamos o @PersistenceContext?

Oi Rodrigo,

Pelo que eu conheço não tem como.

Talvez se você utilizar um EJB do tipo @Stateful, mas isso pode gerar impactos na aplicação, pois o ciclo de vida de um EJB stateful é bem diferente do stateless.

Entendi, obrigado.

Um alternativa é usar algo do tipo. Produzindo um EntityManager por request.

public class JpaProducer {

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

    @Produces
    @RequestScoped
    public EntityManager newEntityManager() {
        return em;
    }
}

Felipe, obrigado pela dica.