2012-04-10 50 views
1

我正在使用OpenEJB(TomEE ++)容器处理EJB项目。会话Bean的JNDI查找名称需要在代码中进行控制。使用OpenEJB控制无状态会话bean的名称

@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 /幻灯片/ SlideService”

OpenEJB的似乎是使用应用程序的名称,即使我没有特别提到它。

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

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

回答

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认证容器