java - 使用 JNDI 查找来检查是否在应用程序服务器中?
问题描述
我有一个库,既可以在 Wildfly 等应用程序服务器内部使用,也可以在外部使用。在 Enterprise Java 环境中运行时,它的行为会有所不同,问题是 - 我如何确定我在哪里运行,而不依赖于任何 3rd 方库?
这个想法是使用简单的 JNDI 查找,但我想知道我会查找什么?
这里有很多问题解释了不同的 JNDI 名称空间,但我找不到您希望在目录中找到的实际对象列表。
那么,任何人都可以指出在 java:global、java:app 或 java:jboss 命名空间中可以找到的更具体的内容文档吗?寻找“一直存在”的东西。
我可以使用这种方法,例如区分 Wildfly 和 Glassfish,并且 - 假设 - 找出我正在运行的版本吗?
或者是否有不同的方法来确定我正在运行什么样的上下文?
解决方案
相反,当您在 JEE 环境中时,我会使用许多其他类可供您使用的事实。例如:
try {
Class<?> clazz = Class.forName("javax.servlet.http.HttpServlet");
}
catch( ClassNotFoundException classNotFoundException ) {
// not on an Java EE server
}
这不会告诉您有关您正在运行的版本或其他信息。该部分通常需要一些 JMX 调用来确定。例如,对于 Wildfly/JBoss,请查看此处了解一些详细信息。正确编写它对最新版本无关紧要。
推荐阅读
- job-scheduling - 如何安排作业以在 Watson Studio 中运行 SPSS 建模器
- css - Firefox 点击后突然显示焦点轮廓。单击后如何避免轮廓但将其留给键盘焦点?
- docker - 在容器中找不到`/etc/letsencrypt/live/`
- android - 是否可以在 Android 10 及更高版本上从路径(外部存储)将图像设置为 ImageView?
- c# - C# form.show() 不在计时器中运行
- node.js - 如何使用 ESlint 修复我的 Node.js 语法?
- javascript - 弹出窗口关闭时如何重置javascript游戏
- android - Android:将从前台服务接收到的数据显示到活动内的 MapView 上
- javascript - 如何在 AGGrid 初始化后更改 floatingFilter 选项?
- wso2 - WSO2 身份服务器 - 禁用不区分大小写的用户名