在 Wildfly 中显示 ENC (java:comp/env/) 下的所有 JNDI 名称

Show all the JNDI names under ENC (java:comp/env/) in Wildfly

背景

问题

/subsystem=naming:jndi-view 的结果中,JNDI 名称不是基于 ENC (java:comp/env/~)。我想知道 Java 应用程序中使用的 JNDI 名称。

问题

有什么方法可以显示在 Wildfly 服务器上的 Web 应用程序中可用的 ENC (java:comp/env/~) 下的所有 JNDI 名称?

注意:不仅Wildfly可用,其他Java EE服务器可用的方式更可取。

应用服务器中部署的每个 EJB 容器都有自己的内部注册表,称为企业命名上下文 (ENC)。

在 JNDI ENC 中注册的任何内容都可以在 java:comp/ env 上下文中按名称查找。

InitialContext ctx = new InitialContext();
NamingEnumeration<NameClassPair> list = ctx.list("java:comp/env/");
while (list.hasMore()) {
     System.out.println(list.next().getName());
}

观察:JNDI 名称解析为不同的上下文,具体取决于您调用查找的位置。例如,如果您在 MyEJB 中调用 jndi.lookup(“java:comp/env”),您将获得该 EJB 容器的 ENC。如果您在另一个 EJB 中执行相同的操作,您将获得特定于该 bean 的不同 ENC 注册表。