首页 > 解决方案 > 使用 JNDI 查找来检查是否在应用程序服务器中?

问题描述

我有一个库,既可以在 Wildfly 等应用程序服务器内部使用,也可以在外部使用。在 Enterprise Java 环境中运行时,它的行为会有所不同,问题是 - 我如何确定我在哪里运行,而不依赖于任何 3rd 方库?

这个想法是使用简单的 JNDI 查找,但我想知道我会查找什么?

这里有很多问题解释了不同的 JNDI 名称空间,但我找不到您希望在目录中找到的实际对象列表。

那么,任何人都可以指出在 java:global、java:app 或 java:jboss 命名空间中可以找到的更具体的内容文档吗?寻找“一直存在”的东西。

我可以使用这种方法,例如区分 Wildfly 和 Glassfish,并且 - 假设 - 找出我正在运行的版本吗?

或者是否有不同的方法来确定我正在运行什么样的上下文?

标签: javajakarta-eewildflyjndi

解决方案


相反,当您在 JEE 环境中时,我会使用许多其他类可供您使用的事实。例如:

try {
    Class<?> clazz = Class.forName("javax.servlet.http.HttpServlet");
}
catch( ClassNotFoundException classNotFoundException ) {
    // not on an Java EE server       
}

这不会告诉您有关您正在运行的版本或其他信息。该部分通常需要一些 JMX 调用来确定。例如,对于 Wildfly/JBoss,请查看此处了解一些详细信息。正确编写它对最新版本无关紧要。


推荐阅读