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: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to