繁体   English   中英

我应该使用哪个InitialContextFactory?

[英]Which InitialContextFactory should I use?

我正在使用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注入action类中?

在您的struts动作类中尝试以下操作:

new InitialContext().lookup("java:global/slides/SlideService");

它应该工作正常。 所以应该从动作类内部进行:

new InitialContext().lookup("java:module/SlideService");

使用LocalInitialContextFactory的查找早于JavaEE 6 Global JNDI,这些java:globaljava:module名称来自LocalInitialContextFactory

本文档解释了它是如何工作的。

您的bean的名称为SlideService并具有@LocalBean视图(单个bean可以具有许多视图,例如@ LocalBean,@ Remote,@ Local),因此将SlideService用作@LocalBean最终就是SlideServiceLocalBean

那只是默认格式。 您可以在conf/system.properties文件中将其更改为任意值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM