Я создаю модуль EJB3, который пытается соблюдать определенный шаблон проектирования фасада/реализации. Мой фасад должен быть полностью свободным от EJB.
У меня есть 2 класса в этом модуле: объектный компонент и сеансовый компонент, который является менеджером этого объекта. Менеджер содержит атрибут EntityManager.
У меня также есть фабрика, которая создает экземпляр моего компонента-менеджера, но эта фабрика не знает о реализации менеджера (поэтому не знает о EJB). Фабрика может получить имя класса менеджера только с помощью файла свойств. Затем фабрика создаст экземпляр менеджера:
Class lClass = Class.forName (lClassName);
corporateActionManager = (ICorporateActionManager) lClass.newInstance();
Мой вопрос: могу ли я объявить конструктор в реализации моего менеджера, а затем внутри этого конструктора инициализировать мой EntityManager?
Обычно я бы просто использовал аннотацию @PersistenceContext над EntityManager:
@PersistenceContext(unitName = "my_persistence_unit")
private EntityManager em;
Но, по-видимому, это не работает, когда класс создается напрямую.
Я пробовал что-то вроде этого:
public CorporateActionManagerImpl() {
Context jndi;
try {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("my_persistence_unit")
em = emf.createEntityManager();
} catch (NamingException e1) {
e1.printStackTrace();
}
}
Но затем я получаю NoInitialContextException, по-видимому, мой контекст JNDI неправильно инициализирован.
Может ли кто-нибудь помочь мне здесь?
Спасибо