2014-01-31 26 views
2

我有一個Java應用程序,可以在tomcat和jboss上運行。java - 哪個webserver是運行的應用程序

我需要爲基於Web服務器類型執行某些任務執行「if條件」。

我該如何獲得這些信息?

我必須這樣做,因爲我需要連接到數據源,我可以得到一個基於Web服務器的方式不同語境:

try{ 
    String webserver = getWebServer(); 
    Logger logger=Logger.getLogger("myLog"); 
    if(webserver.equalsIgnoreCase("Jboss")){ 
     logger.severe("Webserver: " + webserver); 
     Hashtable<String, String> ht= new Hashtable(); 
     ht.put(InitialContext.INITIAL_CONTEXT_FACTORY,"org.jnp.interfaces.NamingContextFactory"); 
     ht.put(InitialContext.PROVIDER_URL,"jnp://localhost:1099"); 
     ht.put(InitialContext.URL_PKG_PREFIXES,"org.jboss.naming:org.jnp.interfaces"); 
     InitialContext ic=new InitialContext(ht); 
     if(ic!=null){ 
      logger.severe("success");/*I am getting success as output here*/ 
      DataSource ds=(DataSource)ic.lookup(getDatasource()); 
      /*this is where it's failing*/ 
      if(ds!=null){ 
       logger.severe("success1"); 
      } 
      return ds.getConnection(); 
     } 
     return null; 
    } 
    else{ //TOMCAT 
     logger.severe("Webserver: " + webserver); 
     // Obtain our environment naming context 
     Context initCtx = new InitialContext(); 
     Context envCtx = (Context) initCtx.lookup("java:comp/env"); 

     // Look up our data source 
     DataSource ds = (DataSource) envCtx.lookup(getDatasource()); 

     // Allocate and use a connection from the pool 
     Connection conn = ds.getConnection(); 
     return conn; 
    } 

} 

的Tomcat版本不JBoss上運行,反之亦然 謝謝!

+1

爲什麼你需要這樣做? – Kayaman

+0

你想做什麼樣的任務?這是不尋常的,因爲戰爭的關鍵在於它可以在任何應用服務器上運行,並且不應該知道它。 – mikea

+0

我更新了問題以提供更多信息 – user1820620

回答

2

由於您的應用程序可以運行:

-Dserver=tomcat 

通行證不同的服務器不同的值,然後你可以通過下面的代碼讀取此係統屬性在Tomcat上,這是一個簡單的servlet容器,那麼你可能需要使用ServletContext#getServerInfo()。獲取有關您的應用程序在其中運行的環境的信息。

2

很不尋常的要求,但是可以使用系統屬性來實現。在服務器JAVA_OPTS像啓動腳本通系統屬性:

System.getProperty("server"); 
+0

把這個參數放到webapp的webdescriptor裏不是更好嗎? – PeterMmm

+0

@PeterMmm:通常是的,但對於這種情況不適用,因爲用戶希望在兩個應用程序服務器中使用相同的Web應用程序。 – Ankit