使用 OpenEJB 控制无状态会话 Bean 的名称



我正在开发一个带有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 名称的正确方法,还是有其他(更好的)方法?

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

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

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

最新更新