2010-09-27 30 views
0

我正在创建一个试图尊重特定外观/实现设计模式的EJB3模块。我的外观应该完全没有EJB。如何定义EJB3会话bean的构造函数

我在这个模块中有2个类:一个实体bean和一个会话bean,它是这个实体的管理者。该管理器包含一个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上下文不正确初始化。

有人能帮我一下吗?

感谢

回答

0

我结束了创建另一个“经理”级,这将封装的会话bean,并在构造函数初始化。

它确实增加了另一层,但最终解决起来要容易得多。