Java代码可以判断它是否在应用服务器中吗?
我是否可以从POJO调用一些东西来查看代码当前是在应用程序服务器中还是在应用程序服务器之外 类似这样的内容(在粗略的伪代码中): 或 或Java代码可以判断它是否在应用服务器中吗?,java,jakarta-ee,jboss,ejb-3.0,application-server,Java,Jakarta Ee,Jboss,Ejb 3.0,Application Server,我是否可以从POJO调用一些东西来查看代码当前是在应用程序服务器中还是在应用程序服务器之外 类似这样的内容(在粗略的伪代码中): 或 或 我从未使用过应用程序服务器,但也许您可以使用System.getProperties()/System.getProperty(…)最简单的方法是检查Java EE/App server特定类的存在性。我不相信您能做到这点。您想区分应用服务器、web容器等吗 确定这一点的原因是什么?允许您的POJO在不同环境中表现不同?如果是这样,那么我认为这指向一个不太正确
我从未使用过应用程序服务器,但也许您可以使用
System.getProperties()
/System.getProperty(…)
最简单的方法是检查Java EE/App server特定类的存在性。我不相信您能做到这点。您想区分应用服务器、web容器等吗
确定这一点的原因是什么?允许您的POJO在不同环境中表现不同?如果是这样,那么我认为这指向一个不太正确的对象/组件结构,或者至少在对象职责没有明确定义的地方。如果您的应用程序服务器使用当前的SecurityManager,请考虑检查它。如果您可以更改AppServer初始化脚本(请查看): 在AppServer初始化脚本中添加-DRunningInAppServer=true 在应用程序初始化脚本中添加-DRunningInAppServer=false 然后使用此方法:
public boolean isRunningInAppServer() {
if ("true".equals(System.getProperty("RunningAppServer"))) {
return true;
}
return false;
}
我不认为有任何方法可以直接确定这一点。是的,正如SourceRebel所说,您可以设置一个系统属性。但就个人而言,我会避免这样做,因为这样会产生一些隐藏的耦合:您的函数依赖于必须正确设置才能工作的系统属性,但接口中没有明确定义来反映这一点。我认为您最好只传入一个表示它是什么的参数,并让调用方负责传入正确的参数。然后,这个参数的存在可以在函数签名中清楚地看到,任何使用它的人都会有一个强烈的线索,即他们需要正确地设置它。让调用者正确设置它应该很简单,因为在调用链的某个点上,您可能正在从桌面应用程序或网页调用,并且调用者知道它是哪一个。一些应用程序服务器设置了系统属性,例如JBoss:
我想知道,如果代码在应用程序服务器中,我可以加载一个XML文件,如果代码在容器外部,我可以加载另一个XML文件。然后,您是否会依赖classloader机制和(比如)Class.getResourceAsStream()?在.war中打包appserver XML并单独部署独立于appserver的XML?
System.getRunningEnvironment().equals(Environment.ApplicationServer)
System.getRunningEnvironment().equals(Environment.JavaSE)
public boolean isRunningInAppServer() {
if ("true".equals(System.getProperty("RunningAppServer"))) {
return true;
}
return false;
}