我正在创建一个 EJB3 模块,它试图尊重特定的外观/实现设计模式。我的外观应该完全没有 EJB。
我在这个模块中有 2 个类:一个实体 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 上下文没有正确初始化。
有人可以帮我吗?
谢谢