0

我正在使用 Maven 框架来构建我的项目,而 EJB 3.0 是 EJB 规范。我有一个 EJB 接口 A 及其对应的实现 A 的 EJB 类 B。类 B 的主体如下所示:

@Stateless
@TransactionAttribute(value = TransactionAttributeType.REQUIRES_NEW)
class B implements A{

      @PersistenceContext(unitName = "Draco-PU", type = PersistenceContextType.TRANSACTION)
  EntityManager entityManager;  

      //called post construct
      @PostConstruct
      public init(){

            //body of init method

      }

我在同一个项目下的不同包中有一个非 EJB 类。我想在这个类中实例化类 B,以便自动引用 init() 方法和其他注释,并且我可以显式调用 EJB 类中的其他方法。请帮忙。

4

1 回答 1

1

你不能那样做。NonEJBClass.someMethod() 的调用者需要将 A 传递给 someMethod(因为调用者注入或查找了它),或者 someMethod 需要自己进行查找(可能在“java:”命名空间之一中)。否则,您需要更改 bean 以便非托管客户端可以使用它,例如:

豆:

@Stateless
@TransactionAttribute(value = TransactionAttributeType.REQUIRES_NEW)
class B implements A {
    private EntityManager entityManager;  

    @PersistenceContext(unitName = "Draco-PU", type = PersistenceContextType.TRANSACTION)
    public void setEntityManager(EntityManager em) {
        entityManager = em;
    }

    @PostConstruct
    public init() {
        //body of init method
    }
}

非托管客户端:

B obj = new B();
obj.setEntityManager(...);
obj.init();

因此,您要么允许容器创建对象(它负责所有的注入和初始化),要么您自己创建对象(然后您负责所有的 setter 调用和初始化)。

于 2012-10-24T21:10:29.153 回答