我可以从POJO调用以查看代码当前是在App Server中还是在App Server之外?
像这样(在粗PseudoCode中):
System.getRunningEnvironment().equals(Environment.Glassfish)
或
System.getRunningEnvironment().equals(Environment.ApplicationServer)
或
System.getRunningEnvironment().equals(Environment.JavaSE)
答案 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