Определите, что приложение работает на сервере приложений - PullRequest
0 голосов
/ 20 ноября 2010

Некоторый код может быть повторно использован в различных средах, включая сервер приложений Java EE.Иногда полезно знать, выполняется ли код на сервере приложений и какой это сервер приложений.

Я предпочитаю делать это, проверяя некоторые системные свойства, типичные для сервера приложений.Например, это может быть

  • jboss.server.name для JBoss
  • catalina.base для Tomcat

Кто-нибудь знает подходящее имя свойства для других серверов?Weblogic, Websphere, Oracle IAS и другие?

Очень легко проверить, установлен ли у вас конкретный сервер приложений.Просто добавьте строку System.getProperties () в любой JSP, Servlet, EJB и распечатайте результат.

Я могу сделать это сам, но для установки и работы сервера потребуется много времени.

Я прочитал это обсуждение: Как определить тип сервера приложений, на котором запущено приложение?

Но я предпочитаю использовать системное свойство.Это более простое и абсолютно портативное решение.Код не зависит от других API, таких как Servlet, EJBContext или JMX.

Ответы [ 3 ]

1 голос
/ 21 ноября 2010

JBoss AS устанавливает множество различных системных свойств:

jboss.home.dir
jboss.server.name

Вы можете проверить другие свойства, используя, например, VisualVM или другие инструменты.

Я не знаю других серверов, но ядумаю, вы можете найти какие-то свойства для каждого из них.

1 голос
/ 14 сентября 2018
//for Tomcat
try {
 MBeanServer mBeanServer = ManagementFactory.getPlatformMBeanServer();
 ObjectName name = new ObjectName("Catalina", "type", "Server");
 StandardServer server = (StandardServer) mBeanServer.getAttribute(name,"managedResource");
 if (server != null) {
   //its a TOMCAT application server
 }
} catch (Exception e) {
   //its not a TOMCAT Application server
}

//for wildfly
try {
  ObjectName http = new ObjectName("jboss.as:socket-binding-group=standard-sockets,socket- binding=http");
  String jbossHttpAddress = (String) mBeanServer.getAttribute(http, "boundAddress");
  int jbossHttpPort = (Integer) mBeanServer.getAttribute(http, "boundPort");
  String url = jbossHttpAddress + ":" + jbossHttpPort;
  if(jbossHttpAddress != null){
   //its a JBOSS/WILDFLY Application server
  }
} catch (Exception e) {
   //its not a JBOSS/WILDFLY Application server
}
1 голос
/ 21 ноября 2010

Это не «стандартный» способ, но я попытался загрузить класс AppServer.

Для WAS:

try{  
Class cl = Thread.getContextClassLoader().loadClass("com.ibm.websphere.runtime.ServerName");

// found

}  
// not Found  
catch(Throwable)
{

}

// For Tomcat: "org.apache.catalina.xxx"

И т.д.

Дайте мне знать, что вы думаете

...