java - 我应该使用哪个 InitialContextFactory?

标签 java ejb openejb apache-tomee

我正在使用 OpenEJB (TomEE++) 开发一个 EJB 3 项目。

我有一个无状态 session 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 注入(inject)到 action 类中?

最佳答案

在你的 struts Action 类中尝试这个:

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

它应该可以正常工作。所以应该从 Action 类内部:

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

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

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

您的 bean 的名称是 SlideService 并且具有所谓的 @LocalBean View (单个 bean 可以有多个 View ,例如 @LocalBean、@Remote、@Local) ,因此将 SlideService 查找为 @LocalBean 的名称最终为 SlideServiceLocalBean

这只是默认格式。您可以在 conf/system.properties 文件中将其更改为您喜欢的任何内容。

关于java - 我应该使用哪个 InitialContextFactory?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10105716/

相关文章:

java - 如何在java中创建子类的对象?

java - import com.fasterxml.jackson.databind.ObjectMapper 无法解析

eclipse - jar 文件在 lib 文件夹中有额外的 ".jar"扩展名

ejb - OpenEJB 呢?这值得么?有什么意见吗?

java - 未找到线路 - Java

java - FingerPaint 删除显示黑线

java - p :dataList not updating

java - 如何将Java中的 native 查询结果转换为字符串?

glassfish - EcipseLink JPA 2.0 是否需要refresh()/flush()?