我正在使用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名称的正确方法,还是有其他(更好)方法?
答案 0 :(得分:2)
您的问题已在EJB 3.1规范中得到解决,任何经过Java EE 6认证的容器都将为您的bean使用多个JNDI名称。 在您的代码中,您可以控制名称的最后部分,此处是关于Portable Global JNDI Names
的文档在这里,您可以找到JNDI的{3}标准范围的简单指南Portable JNDI names in EJB 3.1
是的,您的代码可以在任何Java EE 6认证容器中移植