2

作为 openejb 文档贴花

牢不可破的规则。当事情不起作用时,一遍又一遍地阅读这些内容。

  1. java:comp/env 是规范定义的命名空间,用于查找任何容器管理的资源
  2. java:comp/env 默认为空
  3. java:comp/env 在运行时是只读的 java:comp/env 是通过通过 xml 或注解声明对容器管理资源的引用来填充的

我在嵌入式模式下使用 openejb,DI 工作正常,但我想在 pojo 中进行查找以使用标准 jndi 查找作为 ctx.lookup("java:comp/env/DS") 来获取对我的数据源的引用我试图在无状态 ejb 中通过 xml 和 @Resource 声明资源只是为了测试是否填充了 env 子上下文,但我不知道为什么从未创建 env 子上下文...请帮助

4

1 回答 1

5

我在测试中使用 OpenEJB 时遇到了类似的问题。如果使用 OpenEJB 进行嵌入式测试,您应该寻找 java:openejb/ 而不是 java:comp/env

通过这个小片段,您可以列出 OpenEJB 注册的内容

NamingEnumeration<Binding> list = initialContext.listBindings("java:openejb/");
while (list.hasMore()) {
    Binding item = list.next();
    System.out.println(item.getClassName() +" :: " + "java:openejb/" + item.getName());
}

如果你想进入你的数据源列表,所有在“java:openejb/PersistenceUnit/”下注册的东西。很可能您会在测试中找到“java:openejb/PersistenceUnit/[name-of-persistence-unit] [hashcode]” - 您可以稍后使用它。

希望有帮助--Jakub

于 2011-07-25T15:31:50.280 回答