Java代码能否判断自己是否在应用服务器中?

4

有没有什么可以从POJO中调用的方法,以查看代码当前是在应用服务器内还是在应用服务器外部?

类似于以下的代码(粗略的伪代码):

System.getRunningEnvironment().equals(Environment.Glassfish)

或者

System.getRunningEnvironment().equals(Environment.ApplicationServer)

或者

System.getRunningEnvironment().equals(Environment.JavaSE)
7个回答

4

如果您可以更改AppServer初始化脚本(请查看此链接):

在您的AppServer初始化脚本中添加-DRunningInAppServer=true。

在您的应用程序初始化脚本中添加-DRunningInAppServer=false。

然后使用这个方法:

public boolean isRunningInAppServer() {

        if ("true".equals(System.getProperty("RunningAppServer"))) {
            return true;
        }
        return false;
}

2

最简单的方法是检查Java EE/App服务器特定类的存在。


2

我不相信你能轻松地做到这一点。您是否想区分应用服务器、Web容器等?

确定原因是什么?允许您的POJO在不同的环境中表现不同吗?如果是这样,那么我认为这指向了一个对象/组件结构,这个结构并不完全正确,或者至少对象职责没有清晰定义。


我想知道如何加载一个XML文件,如果代码在应用服务器内部,则加载一个XML文件,如果代码在容器外部则加载另一个XML文件。 - mainstringargs
你不想依赖于类加载机制,而是使用Class.getResourceAsStream()吗?将你的应用服务器XML打包在.war文件中,并单独部署与应用服务器无关的XML文件? - Brian Agnew

0

0

我认为没有直接确定这一点的方法。是的,正如SourceRebel所说,您可以设置系统属性。个人而言,我会避免这样做,因为这样就会产生一些隐藏的耦合:您的函数依赖于必须正确设置的系统属性才能工作,但界面中没有明确定义这一点。我认为最好只需传递一个参数来指示它是哪个,让调用者负责传递正确的参数。然后,该参数的存在可以清楚地在函数签名中看到,并且任何使用它的人都会有一个强烈的提示,他们需要正确设置它。让调用者正确设置它应该很简单,因为可能在调用链中的某个时刻,您要么从桌面应用程序调用,要么从网页调用,而该调用者知道它是哪个。


0

我从未使用过应用服务器,但也许你可以通过 System.getProperties() / System.getProperty(...) 来实现这个功能。


0

如果您的应用程序服务器使用了安全管理器,请考虑检查当前的安全管理器。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接