0

我现在正在从 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标签有时可能需要使用这种参考,但我再也找不到它了。这是真的吗?


@编辑

在与此类类的一位作者交谈后,我发现当 bean 方法之一通过使用对其拥有的类实例的引用来调用第二种方法(可能需要新事务)时,可以使用这种自引用。

升级后可以用下面这样的东西代替。

@Stateless
public class SomeBean implements IBeanLocal {

    @EJB
    IBeanLocal someBean;

    // class body here
}

我的困惑主要是由于对这种自我参照的一些不必要的使用造成的。正如 Steve C 所指出的,可能有人不确定如何使用这个 xdoclet 功能。

4

1 回答 1

0

首先,“本地”视图类型意味着您正在查看 EJB 2.1 代码(而不是 2.0)。

我同意@ejb.ejb-ref 标签很奇怪。只有在某处使用 JNDI 来查找相同类型会话 bean 的另一个实例时,它才会有用。即便如此,它也是多余的,因为 ejb 主对象在 bean 的 EJBContext 对象中可用。

原作者很可能不知道 ejb-ref 的用途。当时有很多这样的事情发生。

如果有另一个类型的 bean 的 ejb-ref,那么您通常会看到相应的@weblogic.ejb-local-reference-description@weblogic.ejb-reference-description用于在weblogic.xml 文件,由 ejb 名称链接。

在任何情况下,您都可以将这些查找引用中的任何一个替换为用@EJB标记的实例变量。

完整的 xdoclet 文档(和源代码)仍可在 ( http://xdoclet.sourceforge.net/xdoclet/index.html ), FWIW 上获得。

于 2014-08-11T12:56:22.450 回答