2010-09-27 2 views
0

Я создаю модуль EJB3, который пытается соблюдать конкретный шаблон оформления фасада/реализации. Мой фасад должен быть полностью EJB бесплатно.Как определить конструктор сеанса сеанса EJB3

У меня есть 2 класса в этом модуле: entity-компонент и сеансовый компонент, который является менеджером этого объекта. Менеджер содержит атрибут 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 не правильно инициализирован.

Может ли кто-нибудь помочь мне здесь?

Благодаря

ответ

0

Я в конечном итоге создать еще один класс «менеджер», который будет инкапсулировать компонент сеанса и его инициализации в конструкторе.

Он добавляет еще один слой, но в конце его намного проще разобраться.

Смежные вопросы