我正在使用 OpenEJB (TomEE++) 容器开发一个 EJB 项目。有一个 session 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 绑定(bind)的名称是“global/slides/SlideService”
OpenEJB 似乎正在使用应用程序名称,尽管我没有具体提及它。
这会损害可移植性吗?是否有可能其他容器不使用该应用程序名称?
使用 name 和mappedName 属性是控制无状态 bean 名称的正确方法吗?还是有其他(更好)的方法?
最佳答案
您的问题已在 EJB 3.1 规范中得到解决,任何 Java EE 6 认证的容器都将为您的 bean 使用多个 JNDI 名称。 在你的代码中你可以控制名称的最后一部分,这里有一个关于 Portable Global JNDI Names 的文档
在这里您可以找到 JNDI 3 个标准范围的简单指南 Portable JNDI names in EJB 3.1
所以,是的,您的代码可以跨任何 Java EE 6 认证的容器移植
关于java - 使用 OpenEJB 控制无状态 session Bean 的名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10088534/