2016-08-18 69 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

相关问题