我正在使用 OpenEJB (TomEE++) 开发一个 EJB 3 项目。
我有一个无状态会话 bean,其名称已用注释指定。
@Stateless(mappedName="SlideService", name="SlideService")
public class SlideService {
public Map<Category, List<SlideShow>> fetchSlideShowsByCategory() {
Application app = Application.getInstance();
return app.retreiveAllSlideShowsByCategory();
}
public SlideShow fetchSlideShow(long id) {
return null;
}
public List<SlideShow> fetchSlideShowsByTitle(String title) {
return null;
}
}
我从我的 Struts 动作类中查找 Session bean,就像这样。
Properties properties = new Properties();
properties.setProperty Context.INITIAL_CONTEXT_FACTORY,"org.apache.openejb.client.LocalInitialContextFactory");
InitialContext initialContext = new InitialContext(properties);
SlideService slideService = (SlideService)initialContext.lookup("SlideServiceLocalBean");
在上面的代码中,您会注意到我必须使用名称“SlideServiceLocalBean”来定位 bean,而我在 bean 的注释中明确指定了“SlideService”。
但是,当我尝试在测试用例中定位 bean 时,我必须使用另一个名称字符串。
EJBContainer ejbContainer = EJBContainer.createEJBContainer();
Object oSlideService = ejbContainer.getContext().lookup("java:global/slides/SlideService");
为什么查找名称存在差异?
我是在 Struts 动作类中以正确的方式获取 InitialContext,还是应该使用另一种机制/contextFactory 来获取初始上下文?
是否可以在不使用外部 DI 库的情况下将 bean 注入到动作类中?