我正在使用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类中的其他方法。请帮忙。
答案 0 :(得分: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调用和初始化)。