"Правильный" способ создания экземпляра bean менеджера JPA?
Я использую 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 Entity, JPA Entity Manager и EJB без сохранения состояния.
- Класс JPA Entity Manager (не 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 ответ
@PersistenceContext
private EntityManager em;
Кажется, у вас есть свой пользовательский компонент, который вы хотите внедрить в другие компоненты (по крайней мере, для этого нужен локальный интерфейс):
@EJB
private MyEntityManager em;