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

时间:2011-04-18 21:21:29

标签: java-ee ejb jndi openejb

作为openejb文档decalres

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

  1. java:comp / env是用于查找任何容器管理资源的规范名称空间
  2. java:comp / env默认为空
  3. java:comp / env在运行时是只读的 java:comp / env通过xml或注释声明对容器管理资源的引用来填充
  4. 我在嵌入模式下使用openejb,DI工作正常,但我想在pojo中进行查找以使用标准jndi查找作为ctx.lookup来获取对我的数据源的引用(“java:comp / env / DS“)我试图通过xml和@Resource在无状态ejb中声明资源,以测试是否填充了env子上下文但我不知道为什么从未创建env子上下文... plz help

1 个答案:

答案 0 :(得分:5)

当我在测试中使用OpenEJB时,我遇到了类似的问题。如果使用OpenEJB进行嵌入式测试,您应该寻找java:openejb / not 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