«Правильный» способ создания экземпляра bean менеджера JPA? - PullRequest
1 голос
/ 16 мая 2011

Я использую IBM RAD для разработки некоторых сущностей JPA, и из них соответствующих бинов JPA Manager.Бины менеджера (которые генерируются RAD) имеют следующий член:

@PersistenceUnit
private EntityManagerFactory emf;

Я не уверен, как исправить экземпляр этого бина менеджера (или получить ссылку на него) из EJB без состояния (3.0),поэтому я добавил конструктор к компоненту управления, где я могу передать ему EntityManagerFactory экземпляр.Я получаю ссылку на EntityManagerFactory в EJB с помощью аннотации `@PersistenceUnit ', например, так:

@PersistenceUnit
private EntityManagerFactory _entityManagerFactory;

Это кажется довольно ненужным, и я считаю, что должен быть способ сообщить контейнеру (Websphere 7.0 вв моем случае) как-то «загрузить» это для меня, чтобы я сразу получил ссылку на компонент управления JPA.Это так?

Обновление: Кажется, я не достаточно подробно проработал бин.Извините за это.

  • Здесь задействованы три объекта: сущность JPA, диспетчер сущностей JPA и EJB без сохранения состояния.
  • Класс диспетчера сущностей JPA (не EJB) создается RAD иимеет удобные методы (именованные запросы).Он также определил член @PersistenceUnit private EntityManagerFactory emf.Я знаю, что могу использовать EntityManager напрямую, но я бы хотел использовать MyEntityManager для удобства его использования.
  • Я могу получить ссылку на EntityManager или EntityManagerFactory в EJB без сохранения состояния с помощью описанных выше аннотаций (а такжекак предлагает Божо)
  • Я хотел бы получить ссылку на JPA Entity Manager в EJB без сохранения состояния.Если я «новый» его вверх (новый MyEntityManager ()), поле ЭДС нуль.Обходной путь - объявить поле @PersistenceUnit в EJB, а затем передать его в JPA Entity Manager и использовать его.
  • Если подумать, возможно, я мог бы объявить JPA Entity Manager как EJB и покончить с этим... (хотя это опять-таки кажется ненужным).Я подумал, что есть метод по принципу PersistenceContext.getJpaManager (MyEntityManager.class), который, возможно, мне не хватает.

1 Ответ

1 голос
/ 16 мая 2011
@PersistenceContext
private EntityManager em;

Кажется, у вас есть пользовательский компонент, который вы хотите внедрить в другие компоненты (как минимум, необходим локальный интерфейс):

@EJB
private MyEntityManager em;
...