1

一部のコードは、JavaEEアプリケーションサーバーを含むさまざまな環境で再利用できます。コードがアプリケーションサーバーで実行されているかどうか、およびどのアプリケーションサーバーで実行されているかを知っておくと便利な場合があります。

私は、アプリケーションサーバーに典型的ないくつかのシステムプロパティをチェックすることによってそれを行うことを好みます。たとえば、

  • jboss.server.nameJBossの場合
  • catalina.baseTomcatの場合

誰かが他のサーバーの適切なプロパティ名を知っていますか?Weblogic、Websphere、Oracle IAS、その他?

特定のアプリケーションサーバーがインストールされているかどうかを確認するのは非常に簡単です。System.getProperties()行をJSP、サーブレット、EJBに追加して、結果を出力するだけです。

自分でやることはできますが、サーバーをインストールして動作させるにはかなりの時間がかかります。

私はこの議論を読みました:アプリケーションが実行されているアプリケーションサーバーのタイプを決定する方法は?

しかし、私はシステムプロパティを使用することを好みます。それはより簡単で絶対にポータブルなソリューションです。コードは、サーブレット、EJBContext、JMXなどの他のAPIに依存しません。

4

3 に答える 3

2

JBoss ASは、多くの異なるシステムプロパティを設定します。

jboss.home.dir
jboss.server.name

VisualVMやその他のツールなどを使用して、他のプロパティを確認できます。

他のサーバーは知りませんが、それぞれに何らかのプロパティが見つかると思います。

于 2010-11-21T11:52:45.783 に答える
1

これは「標準的な」方法ではありませんが、私が行ったことは、AppServerのクラスをロードしようとすることでした。

WASの場合:

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

// found

}  
// not Found  
catch(Throwable)
{

}

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

等。

どう考えているか教えてください

于 2010-11-21T02:48:23.697 に答える
1
//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
}
于 2018-09-14T18:26:43.713 に答える