Как да дефинираме конструктора на EJB3 сесиен компонент

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

Може ли някой да ми помогне тук?

Благодаря


person Pierre Duplouy    schedule 27.09.2010    source източник


Отговори (1)


В крайна сметка създадох друг клас "мениджър", който ще капсулира сесийния компонент и ще го инициализира в конструктора.

Добавя още един слой, но в крайна сметка е много по-лесно да се сортира.

person Pierre Duplouy    schedule 27.09.2010