4

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

像这样的东西(粗略的伪代码):

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

或者

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

或者

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

7 回答 7

4

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

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

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

然后使用这个方法:

public boolean isRunningInAppServer() {

        if ("true".equals(System.getProperty("RunningAppServer"))) {
            return true;
        }
        return false;
}
于 2009-03-25T17:53:22.743 回答
2

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

于 2009-03-23T14:21:29.057 回答
2

我不相信你可以轻而易举地做到这一点。您想区分应用服务器、Web 容器等吗?

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

于 2009-03-23T14:40:28.150 回答
0

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

于 2009-03-23T14:07:43.580 回答
0

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

于 2009-03-23T15:19:21.537 回答
0

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

于 2010-03-26T16:53:57.413 回答
0

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

于 2010-04-05T12:19:03.953 回答