Нет, эффект не тот же. Как сказал Габ в предыдущем ответе, @PersistenceContext
по умолчанию вводит отдельный менеджер сущностей для каждой транзакции. Существует также возможность использовать EXTENDED персистентный контекст , но это выходит за рамки вашего вопроса.
С кодом, который вы предоставили с использованием CDI, вы получите экземпляр для каждой точки внедрения, который будет отличаться, если вы не создадите компонент , вводящий для каждой транзакции (скорее всего, нет).
Однако вы можете использовать продюсера RequestScoped для вашего менеджера сущностей, например:
public class EntityManagerProducer {
private static EntityManagerFactory emf = Persistence.createEntityManagerFactory("livraria");
@Produces
@RequestScoped
public EntityManager getEntityManager() {
return emf.createEntityManager();
}
}
Это даст вам аналогичную семантику в веб-приложении, но могут возникнуть некоторые подводные камни, если вы планируете смешивать код EJB и не-EJB, поскольку этот менеджер сущностей не знает о выполняемых транзакциях. Часть этого покрыта здесь .
Вам также следует проверить этот похожий вопрос Получение ссылки на EntityManager в приложениях Java EE с использованием CDI , где вы можете найти множество отличных обсуждений по этому вопросу.