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

use*_*154 2 ejb jndi java-ee openejb

作为openejb文件decalres

坚不可摧的规则.当事情不起作用时,一遍又一遍地阅读这些.

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

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

Jak*_*cki 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());
}
Run Code Online (Sandbox Code Playgroud)

如果你想在你的数据源列表中找到在"java:openejb/PersistenceUnit /"下注册的所有内容.最有可能你会发现"java:openejb/PersistenceUnit/[name-of-persistence-unit] [hashcode]" - 以后你可以在测试中使用它.

希望有所帮助--Jakub