2016-08-18 62 views
1

默認情況下,應用平臺被配置爲指向TomEE的webapps文件夾:以編程方式獲取Tomcat的「appBase」目錄?

<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true"> 

我想找個「的appBase」的位置編程,因爲它指向我們的生產服務器和我們的發展盒上不同的地方(和因爲它只是更清潔的方式)。

我已經研究了幾個選項,似乎爲別人工作的那個選項叫ServletContext().getRealPath("/")。對我來說,這需要我到一個臨時文件夾$CATALINA_HOME/temp/[#-AppName],而默認情況下我正在尋找$CATALINA_HOME/webapps

回答

1

我找到了答案工作過的上this question.

某人寫的從Tomcat的主機類,你可以找到應用平臺:

MBeanServer mBeanServer = MBeanServerFactory.findMBeanServer(null).get(0); 
    ObjectName name = new ObjectName("Catalina", "type", "Server"); 
    Server server = (Server) mBeanServer.getAttribute(name, "managedResource"); 
    Service service = server.findService("Catalina"); 
    Engine engine = (Engine) service.getContainer(); 
    Host host = (Host) engine.findChild(engine.getDefaultHost()); 

    host.getAppBase(); //Got it. 
0

使用host.getAppBase(問題)是你需要解決它自己(可以是絕對的或相對的),所以不要忘記使用https://github.com/apache/tomee/blob/4b9d8c9d221948547d49427077fcf68709a186bd/tomee/tomee-loader/src/main/java/org/apache/tomee/loader/OpenEJBListener.java#L192

提示:如果你不想依靠JMX(通常是新的ObjectName(「Catalina」,「type」,「Server」)) ;取決於您在server.xm中設置的名稱l和Catalina可以改變,所以你必須使用通配符來依賴那個impl)你可以使用tomee TomcatHelper.getServer()來獲取服務器然後瀏覽孩子你得到的主機:https://github.com/apache/tomee/blob/4b9d8c9d221948547d49427077fcf68709a186bd/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java#L285

相關問題