作为 openejb 文档贴花
牢不可破的规则。当事情不起作用时,请一遍又一遍地阅读这些内容。
- java:comp/env 是规范定义的命名空间,用于查找任何容器管理的资源
- java:comp/env 默认为空
- java:comp/env 在运行时是只读的 java:comp/env 通过 xml 或注释声明对容器管理资源的引用来填充
我在嵌入模式下使用 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]” - 您稍后可以使用它。
希望有帮助 ——雅库布
关于jakarta-ee - java :comp/env is not found when using openejb in embedded mode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5709064/