0

我正在创建一个 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 上下文没有正确初始化。

有人可以帮我吗?

谢谢

4

1 回答 1

0

我最终创建了另一个“管理器”类,它将封装会话 bean 并在构造函数中对其进行初始化。

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

于 2010-09-27T13:54:29.427 回答