Author: markt Date: Fri Nov 11 09:27:38 2016 New Revision: 1769263 URL: http://svn.apache.org/viewvc?rev=1769263&view=rev Log: Take account of the Host's contextClass attribute when embedding
Modified: tomcat/trunk/java/org/apache/catalina/startup/Tomcat.java tomcat/trunk/test/org/apache/catalina/core/TestStandardContextResources.java tomcat/trunk/test/org/apache/catalina/startup/TestTomcat.java tomcat/trunk/webapps/docs/changelog.xml Modified: tomcat/trunk/java/org/apache/catalina/startup/Tomcat.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/startup/Tomcat.java?rev=1769263&r1=1769262&r2=1769263&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/startup/Tomcat.java (original) +++ tomcat/trunk/java/org/apache/catalina/startup/Tomcat.java Fri Nov 11 09:27:38 2016 @@ -561,7 +561,17 @@ public class Tomcat { * @see #addWebapp(String, String) */ public Context addWebapp(Host host, String contextPath, String docBase) { - return addWebapp(host, contextPath, docBase, new ContextConfig()); + LifecycleListener listener = null; + try { + Class<?> clazz = Class.forName(getHost().getConfigClass()); + listener = (LifecycleListener) clazz.newInstance(); + } catch (ClassNotFoundException | InstantiationException | IllegalAccessException e) { + // Wrap in IAE since we can't easily change the method signature to + // to throw the specific checked exceptions + throw new IllegalArgumentException(e); + } + + return addWebapp(host, contextPath, docBase, listener); } /** @@ -572,8 +582,27 @@ public class Tomcat { * @param config Custom context configurator helper * @return the deployed context * @see #addWebapp(String, String) + * + * @deprecated Use {@link + * #addWebapp(Host, String, String, LifecycleListener)} instead */ + @Deprecated public Context addWebapp(Host host, String contextPath, String docBase, ContextConfig config) { + return addWebapp(host, contextPath, docBase, (LifecycleListener) config); + } + + + /** + * @param host The host in which the context will be deployed + * @param contextPath The context mapping to use, "" for root context. + * @param docBase Base directory for the context, for static files. + * Must exist, relative to the server home + * @param config Custom context configurator helper + * @return the deployed context + * @see #addWebapp(String, String) + */ + public Context addWebapp(Host host, String contextPath, String docBase, + LifecycleListener config) { silence(host, contextPath); @@ -585,8 +614,10 @@ public class Tomcat { ctx.addLifecycleListener(config); - // prevent it from looking ( if it finds one - it'll have dup error ) - config.setDefaultWebXml(noDefaultWebXmlPath()); + if (config instanceof ContextConfig) { + // prevent it from looking ( if it finds one - it'll have dup error ) + ((ContextConfig) config).setDefaultWebXml(noDefaultWebXmlPath()); + } if (host == null) { getHost().addChild(ctx); Modified: tomcat/trunk/test/org/apache/catalina/core/TestStandardContextResources.java URL: http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/catalina/core/TestStandardContextResources.java?rev=1769263&r1=1769262&r2=1769263&view=diff ============================================================================== --- tomcat/trunk/test/org/apache/catalina/core/TestStandardContextResources.java (original) +++ tomcat/trunk/test/org/apache/catalina/core/TestStandardContextResources.java Fri Nov 11 09:27:38 2016 @@ -37,6 +37,7 @@ import static org.junit.Assert.assertTru import org.junit.Test; import org.apache.catalina.Context; +import org.apache.catalina.LifecycleListener; import org.apache.catalina.startup.Constants; import org.apache.catalina.startup.ContextConfig; import org.apache.catalina.startup.Tomcat; @@ -135,7 +136,7 @@ public class TestStandardContextResource // app dir is relative to server home StandardContext ctx = (StandardContext) tomcat.addWebapp(null, "/test", - appDir.getAbsolutePath(), absoluteOrderConfig); + appDir.getAbsolutePath(), (LifecycleListener) absoluteOrderConfig); Tomcat.addServlet(ctx, "getresource", new GetResourceServlet()); ctx.addServletMappingDecoded("/getresource", "getresource"); @@ -157,7 +158,7 @@ public class TestStandardContextResource absoluteOrderConfig.swap(); ctx = (StandardContext) tomcat.addWebapp(null, "/test", - appDir.getAbsolutePath(), absoluteOrderConfig); + appDir.getAbsolutePath(), (LifecycleListener) absoluteOrderConfig); Tomcat.addServlet(ctx, "getresource", new GetResourceServlet()); ctx.addServletMappingDecoded("/getresource", "getresource"); Modified: tomcat/trunk/test/org/apache/catalina/startup/TestTomcat.java URL: http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/catalina/startup/TestTomcat.java?rev=1769263&r1=1769262&r2=1769263&view=diff ============================================================================== --- tomcat/trunk/test/org/apache/catalina/startup/TestTomcat.java (original) +++ tomcat/trunk/test/org/apache/catalina/startup/TestTomcat.java Fri Nov 11 09:27:38 2016 @@ -39,10 +39,13 @@ import static org.junit.Assert.assertNul import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; +import org.junit.Assert; import org.junit.Test; import org.apache.catalina.Context; import org.apache.catalina.Host; +import org.apache.catalina.LifecycleEvent; +import org.apache.catalina.LifecycleListener; import org.apache.catalina.core.StandardContext; import org.apache.catalina.core.StandardHost; import org.apache.catalina.ha.context.ReplicatedContext; @@ -530,4 +533,33 @@ public class TestTomcat extends TomcatBa .getName()); } + @Test + public void testCustomContextConfig() throws Exception { + + Tomcat tomcat = getTomcatInstance(); + + tomcat.getHost().setConfigClass(CustomContextConfig.class.getName()); + + File docBase = new File("test/webapp"); + tomcat.addWebapp("/test", docBase.getAbsolutePath()); + + tomcat.start(); + + Assert.assertTrue(CustomContextConfig.isUsed()); + } + + public static class CustomContextConfig implements LifecycleListener { + + private static volatile boolean used = false; + + public static boolean isUsed() { + return used; + } + + @Override + public void lifecycleEvent(LifecycleEvent event) { + // Hack via a static since we can't pass an instance in the test. + used = true; + } + } } Modified: tomcat/trunk/webapps/docs/changelog.xml URL: http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/changelog.xml?rev=1769263&r1=1769262&r2=1769263&view=diff ============================================================================== --- tomcat/trunk/webapps/docs/changelog.xml (original) +++ tomcat/trunk/webapps/docs/changelog.xml Fri Nov 11 09:27:38 2016 @@ -61,6 +61,10 @@ Correctly generate URLs for resources located inside JARs that are themselves located inside a packed WAR file. (markt) </fix> + <fix> + Correctly handle the <code>configClass</code> attribute of a Host when + embedding Tomcat. (markt) + </fix> </changelog> </subsection> <subsection name="Tribes"> --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org