1

我正在使用 OpenEJB (TomEE++) 容器开发 EJB 项目。有一个会话 bean,其 JNDI 查找名称需要在代码中进行控制。

@Stateless(mappedName="SlideService", name="SlideService")
public class SlideService {

    public Map<Category, List<SlideShow>> fetchSlideShowsBycategory() {
        // TODO Auto-generated method stub
        return null;
    }

    public SlideShow fetchSlideShow(long id) {
        // TODO Auto-generated method stub
        return null;
    }

    public List<SlideShow> fetchSlideShowsByTitle(String title) {
        // TODO Auto-generated method stub
        return null;
    }
}

我的问题是,这个 bean 绑定的名称是 'global/slides/SlideService'

OpenEJB 似乎使用了应用程序名称,尽管我没有特别提到它。

这会损害便携性吗?是否有可能其他容器可能不使用应用程序名称?

使用 name 和 mappedName 属性是控制无状态 bean 名称的正确方法,还是有其他(更好的)方法?

4

1 回答 1

2

您的问题在 EJB 3.1 规范中得到解决,任何经过 Java EE 6 认证的容器都将为您的 bean 使用多个 JNDI 名称。在您的代码中,您可以控制名称的最后一部分,这里是关于Portable Global JNDI Names的文档

在这里,您可以找到EJB 3.1中 JNDI 可移植 JNDI 名称的 3 个标准范围的简单指南

所以是的,您的代码可以在任何 Java EE 6 认证的容器中移植

于 2012-04-10T12:22:27.683 回答