我现在正在进行从EJB 2.0到3.0的迁移。旧的会话bean使用xdoclet来配置一些东西。
我几乎都能听懂,但有一件事让我很困扰。为什么有人使用@ejb.ejb-ref
的方式像下面的代码。
/**
* @ejb:bean name="SomeBean"
* local-jndi-name="com/my/jndi/SomeBean"
* view-type="local" type="Stateless"
*
* @ejb.ejb-ref ejb-name="SomeBean"
* view-type="local"
*
* ..some more stuff here
*/
public class SomeBean implements SessionBean {
// class body here
}
在这个xdoclet中有更多的@tags
,包括一些用于配置weblogic的@weblogic
。
是否有一些原因我们可能想要添加对bean本身的引用?第二个问题,ejb3中还需要这个配置吗?
我有这种感觉,我在某处读到这个@weblogic
标签有时可能需要使用这种参考,但我只是找不到它一次。这是真的吗?
@EDIT
在与此类类的作者之一交谈后,我发现当一个bean方法调用第二个方法(可能需要新的事务)时,可以使用对其拥有的类实例的引用。
升级后,它可以替换为如下所示:
@Stateless
public class SomeBean implements IBeanLocal {
@EJB
IBeanLocal someBean;
// class body here
}
我的困惑主要是由于一些不必要的使用这种自我引用。正如Steve C所指出的,可能有人不确定如何使用这个xdoclet特性。
首先,"本地"视图类型暗示您正在查看EJB 2.1代码(而不是2.0)。
我同意@ejb。ejb- reftag很奇怪。只有当它在某处使用JNDI查找相同类型会话bean的另一个实例时,它才有用。即使这样,它也是多余的,因为ejb home对象在bean的EJBContext对象中是可用的。
很有可能原作者不知道ejb-ref是干什么用的。当时有很多这样的事情。
如果有一个ejb-ref指向另一种类型的bean,那么您通常会看到一个相应的@weblogic。Ejb-local-reference-description或@weblogic。ejb-reference-description,用于在weblogic.xml文件中生成JNDI映射信息,由ejb-name链接。
在任何情况下,您都可以用标记为@EJB的实例变量替换这些查找引用。
完整的xdoclet文档(和源代码)仍然可以在(http://xdoclet.sourceforge.net/xdoclet/index.html), FWIW获得。