在 EJB2 中,需要在EJB中使用 getEJBusinessObject()方法在调用另一个(本地/远程)bean时将引用传递给它自己。
这同样适用于 EJB3 吗?
e.g。
@Stateless
public class MyBean implements MyBeanLocal {
@Resource private SessionContext sessionContext;
public void myMethod() {
OtherBeanLocal otherBean = ...; // getting reference to other local EJB.
MyBeanLocal myBean = sessionContext.getBusinessObject(MyBeanLocal.class);
b.aMethod(myBean);
}
// Edit: calling myMethodTwo() from inside of myMethodOne()
public void myMethodOne() {
MyBeanLocal myBean = sessionContext.getBusinessObject(MyBeanLocal.class);
myBean.myMethodTwo();
}
public void myMethodTwo() {
...
}
...
}
另外,如果我使用 getBusinessObject()方法获取本地bean,它是否与使用常见的 JNDI查找相同?
我已经测试了这两种方法,但两种方法都有效,但我不确定容器是否以相同的方式处理bean对象。
修改: 在EJB3中,从同一ejb的myMethodOne()内部调用myMethodTwo()时,仍然需要获取对ejb本身的引用吗?是否允许通过此引用调用同一ejb中的方法? 如果我决定使用某些交易,这将如何处理交易?
答案 0 :(得分:5)
是,这同样适用于EJB 3.是的,getBusinessObject是getEJBObject(或getEJBLocalObject)的EJB 3模拟。所有这些方法都返回当前bean对象的代理。对于无状态会话bean,这与通过JNDI查找基本相同,尽管它可能会更好地执行,因为它可以避免JNDI开销。