在嵌入式模式下使用openejb时找不到Jakarta ee - java:comp/env



作为openejb文档声明

不可打破的规则。当事情不顺利的时候,把这些反复读一遍。

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

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

我在测试中使用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

最新更新