Author: remm
Date: Fri Nov 6 12:14:21 2015
New Revision: 1712952
URL: http://svn.apache.org/viewvc?rev=1712952&view=rev
Log:
Add an instance manager field to the token, it's safer than going through the
bindings, and it can be used to determine if it needs the CL environment.
Modified:
tomcat/trunk/java/org/apache/catalina/connector/Request.java
tomcat/trunk/java/org/apache/coyote/AbstractProtocol.java
tomcat/trunk/java/org/apache/coyote/UpgradeToken.java
tomcat/trunk/java/org/apache/coyote/http11/Http11Processor.java
tomcat/trunk/java/org/apache/coyote/http11/upgrade/UpgradeProcessorInternal.java
tomcat/trunk/java/org/apache/coyote/http2/Http2Protocol.java
Modified: tomcat/trunk/java/org/apache/catalina/connector/Request.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/connector/Request.java?rev=1712952&r1=1712951&r2=1712952&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/connector/Request.java (original)
+++ tomcat/trunk/java/org/apache/catalina/connector/Request.java Fri Nov 6
12:14:21 2015
@@ -84,6 +84,7 @@ import org.apache.coyote.UpgradeToken;
import org.apache.coyote.http11.upgrade.InternalHttpUpgradeHandler;
import org.apache.juli.logging.Log;
import org.apache.juli.logging.LogFactory;
+import org.apache.tomcat.InstanceManager;
import org.apache.tomcat.util.ExceptionUtils;
import org.apache.tomcat.util.buf.B2CConverter;
import org.apache.tomcat.util.buf.ByteChunk;
@@ -1844,17 +1845,20 @@ public class Request implements HttpServ
public <T extends HttpUpgradeHandler> T upgrade(
Class<T> httpUpgradeHandlerClass) throws java.io.IOException,
ServletException {
T handler;
+ InstanceManager instanceManager = null;
try {
// Do not go through the instance manager for internal Tomcat
classes since they don't need injection
if
(InternalHttpUpgradeHandler.class.isAssignableFrom(httpUpgradeHandlerClass)) {
handler = (T) httpUpgradeHandlerClass.newInstance();
} else {
- handler = (T)
getContext().getInstanceManager().newInstance(httpUpgradeHandlerClass);
+ instanceManager = getContext().getInstanceManager();
+ handler = (T)
instanceManager.newInstance(httpUpgradeHandlerClass);
}
} catch (InstantiationException | IllegalAccessException |
InvocationTargetException | NamingException e) {
throw new ServletException(e);
}
- UpgradeToken upgradeToken = new UpgradeToken(handler,
getContext().getLoader().getClassLoader());
+ UpgradeToken upgradeToken = new UpgradeToken(handler,
+ getContext().getLoader().getClassLoader(), instanceManager);
coyoteRequest.action(ActionCode.UPGRADE, upgradeToken);
Modified: tomcat/trunk/java/org/apache/coyote/AbstractProtocol.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/AbstractProtocol.java?rev=1712952&r1=1712951&r2=1712952&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/AbstractProtocol.java (original)
+++ tomcat/trunk/java/org/apache/coyote/AbstractProtocol.java Fri Nov 6
12:14:21 2015
@@ -35,9 +35,8 @@ import javax.management.ObjectName;
import javax.servlet.http.HttpUpgradeHandler;
import javax.servlet.http.WebConnection;
-import org.apache.coyote.http11.upgrade.InternalHttpUpgradeHandler;
import org.apache.juli.logging.Log;
-import org.apache.tomcat.InstanceManagerBindings;
+import org.apache.tomcat.InstanceManager;
import org.apache.tomcat.util.ExceptionUtils;
import org.apache.tomcat.util.collections.SynchronizedStack;
import org.apache.tomcat.util.modeler.Registry;
@@ -759,7 +758,7 @@ public abstract class AbstractProtocol<S
// This cast should be safe. If it fails the error
// handling for the surrounding try/catch will deal
with
// it.
- if (httpUpgradeHandler instanceof
InternalHttpUpgradeHandler) {
+ if (upgradeToken.getInstanceManager() == null) {
httpUpgradeHandler.init((WebConnection) processor);
} else {
Thread thread = Thread.currentThread();
@@ -811,7 +810,8 @@ public abstract class AbstractProtocol<S
if (processor.isUpgrade()) {
UpgradeToken upgradeToken =
processor.getUpgradeToken();
HttpUpgradeHandler httpUpgradeHandler =
upgradeToken.getHttpUpgradeHandler();
- if (httpUpgradeHandler instanceof
InternalHttpUpgradeHandler) {
+ InstanceManager instanceManager =
upgradeToken.getInstanceManager();
+ if (instanceManager == null) {
httpUpgradeHandler.destroy();
} else {
Thread thread = Thread.currentThread();
@@ -820,8 +820,7 @@ public abstract class AbstractProtocol<S
try {
thread.setContextClassLoader(upgradeToken.getApplicationClassLoader());
httpUpgradeHandler.destroy();
-
InstanceManagerBindings.get(upgradeToken.getApplicationClassLoader())
- .destroyInstance(httpUpgradeHandler);
+
instanceManager.destroyInstance(httpUpgradeHandler);
} finally {
thread.setContextClassLoader(originalClassLoader);
}
Modified: tomcat/trunk/java/org/apache/coyote/UpgradeToken.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/UpgradeToken.java?rev=1712952&r1=1712951&r2=1712952&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/UpgradeToken.java (original)
+++ tomcat/trunk/java/org/apache/coyote/UpgradeToken.java Fri Nov 6 12:14:21
2015
@@ -19,6 +19,8 @@ package org.apache.coyote;
import javax.servlet.http.HttpUpgradeHandler;
+import org.apache.tomcat.InstanceManager;
+
/**
* Token used during the upgrade process.
*/
@@ -26,11 +28,13 @@ public final class UpgradeToken {
private final ClassLoader applicationClassLoader;
private final HttpUpgradeHandler httpUpgradeHandler;
+ private final InstanceManager instanceManager;
public UpgradeToken(HttpUpgradeHandler httpUpgradeHandler,
- ClassLoader applicationClassLoader) {
+ ClassLoader applicationClassLoader, InstanceManager
instanceManager) {
this.applicationClassLoader = applicationClassLoader;
this.httpUpgradeHandler = httpUpgradeHandler;
+ this.instanceManager = instanceManager;
}
public final ClassLoader getApplicationClassLoader() {
@@ -41,4 +45,8 @@ public final class UpgradeToken {
return httpUpgradeHandler;
}
+ public final InstanceManager getInstanceManager() {
+ return instanceManager;
+ }
+
}
Modified: tomcat/trunk/java/org/apache/coyote/http11/Http11Processor.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/Http11Processor.java?rev=1712952&r1=1712951&r2=1712952&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http11/Http11Processor.java (original)
+++ tomcat/trunk/java/org/apache/coyote/http11/Http11Processor.java Fri Nov 6
12:14:21 2015
@@ -1021,7 +1021,7 @@ public class Http11Processor extends Abs
upgradeProtocol.getInternalUpgradeHandler(
getAdapter(), cloneRequest(request));
UpgradeToken upgradeToken = new UpgradeToken(
- upgradeHandler,
Http11Processor.class.getClassLoader());
+ upgradeHandler,
Http11Processor.class.getClassLoader(), null);
action(ActionCode.UPGRADE, upgradeToken);
return SocketState.UPGRADING;
}
Modified:
tomcat/trunk/java/org/apache/coyote/http11/upgrade/UpgradeProcessorInternal.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/upgrade/UpgradeProcessorInternal.java?rev=1712952&r1=1712951&r2=1712952&view=diff
==============================================================================
---
tomcat/trunk/java/org/apache/coyote/http11/upgrade/UpgradeProcessorInternal.java
(original)
+++
tomcat/trunk/java/org/apache/coyote/http11/upgrade/UpgradeProcessorInternal.java
Fri Nov 6 12:14:21 2015
@@ -25,7 +25,6 @@ import javax.servlet.ServletOutputStream
import org.apache.coyote.UpgradeToken;
import org.apache.juli.logging.Log;
import org.apache.juli.logging.LogFactory;
-import org.apache.tomcat.InstanceManagerBindings;
import org.apache.tomcat.util.net.AbstractEndpoint.Handler.SocketState;
import org.apache.tomcat.util.net.SSLSupport;
import org.apache.tomcat.util.net.SocketStatus;
@@ -79,12 +78,7 @@ public class UpgradeProcessorInternal ex
@Override
public void close() throws Exception {
- try {
- internalHttpUpgradeHandler.destroy();
- } finally {
-
InstanceManagerBindings.get(getUpgradeToken().getApplicationClassLoader())
- .destroyInstance(internalHttpUpgradeHandler);
- }
+ internalHttpUpgradeHandler.destroy();
}
Modified: tomcat/trunk/java/org/apache/coyote/http2/Http2Protocol.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http2/Http2Protocol.java?rev=1712952&r1=1712951&r2=1712952&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http2/Http2Protocol.java (original)
+++ tomcat/trunk/java/org/apache/coyote/http2/Http2Protocol.java Fri Nov 6
12:14:21 2015
@@ -73,7 +73,7 @@ public class Http2Protocol implements Up
@Override
public Processor getProcessor(SocketWrapperBase<?> socketWrapper, Adapter
adapter) {
UpgradeProcessorInternal processor = new
UpgradeProcessorInternal(socketWrapper, null,
- new UpgradeToken(getInternalUpgradeHandler(adapter, null),
Http2Protocol.class.getClassLoader()));
+ new UpgradeToken(getInternalUpgradeHandler(adapter, null),
Http2Protocol.class.getClassLoader(), null));
return processor;
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]