Създавам модул 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 контекст не е правилно инициализиран.
Може ли някой да ми помогне тук?
Благодаря