我正在创建一个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();
}
}
但是后来我得到了一个NoInitialContextException,显然我的JNDI上下文没有被正确初始化。
有人可以帮我吗?
由于
答案 0 :(得分:0)
我最终创建了另一个“manager”类,它将封装会话bean并在构造函数中初始化它。
它确实添加了另一个图层,但最终它更容易理清。