默认情况下,appbase配置为指向TomEE的webapps文件夹:
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">
我想找到&#34; appBase&#34;的位置。以编程方式,因为它指向我们的生产服务器和我们的开发盒上的不同位置(并且因为它只是更清洁)。
我研究了一些选项,而其他似乎适用于其他选项的选项是ServletContext().getRealPath("/")
。对我来说,这会将我带到一个临时文件夹$CATALINA_HOME/temp/[#-AppName]
,而默认情况下我正在寻找$CATALINA_HOME/webapps
。
答案 0 :(得分:1)
我发现答案取决于别人在this question.
上写的内容从Tomcat的Host类中,您可以找到appbase:
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.
答案 1 :(得分: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.xml中设置的名称,并且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