2016-08-18 2 views
1

По умолчанию appbase настроен, чтобы указать папку WebApps TomEE в:Программный код Tomcat's "appBase" программно?

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

Я хотел бы найти местоположение «appBase» программно, поскольку она указывает на различные места на нашем сервере продукции и наших ящиков развития (и потому что это было бы просто чище).

Я исследовал несколько вариантов, и тот, который, похоже, работает для других, вызывает ServletContext().getRealPath("/"). Для меня это приводит меня во временную папку, $CATALINA_HOME/temp/[#-AppName], а по умолчанию я искал $CATALINA_HOME/webapps.

ответ

1

Я нашел ответ работающий от того, что кто-то написал на this question.

От класса хоста Tomcat в вы можете найти 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. 
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 могут измениться, поэтому вам придется использовать подстановочный знак, чтобы полагаться на этот имп) вы можете использовать tomee TomcatHelper.getServer(), чтобы получить сервер, а затем просматривая детей, вы получите хозяина: https://github.com/apache/tomee/blob/4b9d8c9d221948547d49427077fcf68709a186bd/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java#L285