jakarta-ee - java :comp/env is not found when using openejb in embedded mode

标签 jakarta-ee ejb jndi openejb

作为 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")我尝试通过 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/

相关文章:

caching - 如何要求浏览器不存储缓存 Java EE/Tomcat

java - 使用 Maven 模块化项目

java - 如何在 AS 级别为 EJB stub 创建我自己的代理

java - 如何在多个应用程序之间共享业务逻辑

java - Tomcat 7 中的 LDAP 身份验证,如何在 server.xml 中绑定(bind) LDAP?

当与 Jetty 上下文配置加载的 DBCP 和 JNDI 一起使用时,PostgreSQL JDBC 驱动程序无法推断 SQL 类型

java - 将最大连接值设置为 0 : IBM WebSphere

linux - 如何在 java-ee web 应用程序中运行 bash 脚本?

java - 在Jboss webservice中使用Log4j时写入重复数据

java - 如何获得现有的 JMS 队列?