Я создаю модуль EJB3, который пытается соблюдать определенный шаблон проектирования фасада / реализации. Мой фасад должен быть полностью свободен от EJB.
У меня есть 2 класса в этом модуле: объектный компонент и сессионный компонент, который является менеджером этого объекта. Менеджер содержит атрибут EntityManager.
У меня также есть фабрика, которая создает экземпляр моего bean-компонента менеджера, но эта фабрика не знает о реализации менеджера (поэтому не знает о 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 инициализирован неправильно.
Может ли кто-нибудь помочь мне здесь?
Спасибо