如何定义EJB3会话bean的构造函数

时间:2010-09-27 11:31:19

标签: ejb-3.0 entitymanager

我正在创建一个EJB3模块,它试图尊重特定的Facade /实现设计模式。我的门面应该完全没有EJB。

我在这个模块中有两个类:一个实体bean和一个会话bean,它是这个实体的管理者。管理器包含EntityManager属性。

我还有一个实例化我的经理bean的工厂,但是这个工厂不知道管理器的实现(因此不了解EJB)。工厂只能使用属性文件检索管理器类的名称。然后工厂将实例化经理:

Class lClass = Class.forName (lClassName);
corporateActionManager = (ICorporateActionManager) lClass.newInstance();

我的问题是:我可以在我的经理的实现中声明一个构造函数,然后在该构造函数中初始化我的EntityManager吗?

通常,我只会在EntityManager上面使用@PersistenceContext注释:

@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();
    }
} 

但是后来我得到了一个N​​oInitialContextException,显然我的JNDI上下文没有被正确初始化。

有人可以帮我吗?

由于

1 个答案:

答案 0 :(得分:0)

我最终创建了另一个“manager”类,它将封装会话bean并在构造函数中初始化它。

它确实添加了另一个图层,但最终它更容易理清。