Java代码可以判断它是否在App Server中?

时间:2009-03-23 13:54:22

标签: java java-ee jboss ejb-3.0 application-server

我可以从POJO调用以查看代码当前是在App Server中还是在App Server之外?

像这样(在粗PseudoCode中):

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

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

System.getRunningEnvironment().equals(Environment.JavaSE)

7 个答案:

答案 0 :(得分:4)

如果您可以更改AppServer初始化脚本(请查看this link):

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

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

然后使用此方法:

public boolean isRunningInAppServer() {

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

答案 1 :(得分:2)

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

答案 2 :(得分:2)

我不相信你可以做到这一点。你想区分一个应用服务器,一个网络容器等吗?

确定这个的原因是什么?允许您的POJO在不同环境中的行为方式不同?如果是这样,那么我认为这指向一个不太正确的对象/组件结构,或者至少在没有明确定义对象职责的情况下。

答案 3 :(得分:0)

我从未使用过应用服务器,但也许您可以通过System.getProperties() / System.getProperty(...)

来实现这一目标

答案 4 :(得分:0)

如果您的应用服务器使用了一个,请考虑检查当前的SecurityManager。

答案 5 :(得分:0)

我认为没有办法直接确定这一点。是的,因为SourceRebel说您可以设置系统属性。但是,我个人会避免这样做,因为你有一些隐藏的耦合:你的函数依赖于一个必须正确设置才能工作的系统属性,但是在接口中没有明确定义来反映这个。我认为你最好只传入一个参数,告诉它是什么,并让调用者负责传递正确的参数。然后可以在函数签名中清楚地看到此参数的存在,并且任何使用它的人都会有一个强有力的线索,他们需要正确设置它。让调用者正确设置它应该是微不足道的,因为可能在调用链中的某个点上,您要么从桌面应用程序调用,要么从网页调用,并且调用者知道它是什么。

答案 6 :(得分:0)

某些应用程序服务器设置系统属性,例如JBoss: http://community.jboss.org/wiki/JBossProperties