|
|
|
|
@ -1,5 +1,5 @@
@@ -1,5 +1,5 @@
|
|
|
|
|
/* |
|
|
|
|
* Copyright 2012-2017 the original author or authors. |
|
|
|
|
* Copyright 2012-2018 the original author or authors. |
|
|
|
|
* |
|
|
|
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
|
|
|
|
* you may not use this file except in compliance with the License. |
|
|
|
|
@ -17,10 +17,12 @@
@@ -17,10 +17,12 @@
|
|
|
|
|
package org.springframework.boot.web.embedded.tomcat; |
|
|
|
|
|
|
|
|
|
import org.apache.catalina.Container; |
|
|
|
|
import org.apache.catalina.LifecycleException; |
|
|
|
|
import org.apache.catalina.Manager; |
|
|
|
|
import org.apache.catalina.core.StandardContext; |
|
|
|
|
import org.apache.catalina.session.ManagerBase; |
|
|
|
|
|
|
|
|
|
import org.springframework.util.Assert; |
|
|
|
|
import org.springframework.util.ClassUtils; |
|
|
|
|
import org.springframework.util.ReflectionUtils; |
|
|
|
|
|
|
|
|
|
@ -59,7 +61,7 @@ class TomcatEmbeddedContext extends StandardContext {
@@ -59,7 +61,7 @@ class TomcatEmbeddedContext extends StandardContext {
|
|
|
|
|
super.setManager(manager); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public void deferredLoadOnStartup() { |
|
|
|
|
public void deferredLoadOnStartup() throws LifecycleException { |
|
|
|
|
// Some older Servlet frameworks (e.g. Struts, BIRT) use the Thread context class
|
|
|
|
|
// loader to create servlet instances in this phase. If they do that and then try
|
|
|
|
|
// to initialize them later the class loader may have changed, so wrap the call to
|
|
|
|
|
@ -70,15 +72,20 @@ class TomcatEmbeddedContext extends StandardContext {
@@ -70,15 +72,20 @@ class TomcatEmbeddedContext extends StandardContext {
|
|
|
|
|
if (classLoader != null) { |
|
|
|
|
existingLoader = ClassUtils.overrideThreadContextClassLoader(classLoader); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (this.overrideLoadOnStart) { |
|
|
|
|
// Earlier versions of Tomcat used a version that returned void. If that
|
|
|
|
|
// version is used our overridden loadOnStart method won't have been called
|
|
|
|
|
// and the original will have already run.
|
|
|
|
|
super.loadOnStartup(findChildren()); |
|
|
|
|
try { |
|
|
|
|
if (this.overrideLoadOnStart) { |
|
|
|
|
// Earlier versions of Tomcat used a version that returned void. If that
|
|
|
|
|
// version is used our overridden loadOnStart method won't have been
|
|
|
|
|
// called and the original will have already run.
|
|
|
|
|
boolean started = super.loadOnStartup(findChildren()); |
|
|
|
|
Assert.state(started, |
|
|
|
|
"Unable to start embedded tomcat context " + getName()); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
if (existingLoader != null) { |
|
|
|
|
ClassUtils.overrideThreadContextClassLoader(existingLoader); |
|
|
|
|
finally { |
|
|
|
|
if (existingLoader != null) { |
|
|
|
|
ClassUtils.overrideThreadContextClassLoader(existingLoader); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|