Author: remm
Date: Tue Nov 10 21:46:22 2015
New Revision: 1713733
URL: http://svn.apache.org/viewvc?rev=1713733&view=rev
Log:
- Port instance manager support for upgrade handlers.
- Remove set context CL from websockets (since it is now done for all user
calls).
Added:
tomcat/tc8.0.x/trunk/java/org/apache/coyote/UpgradeToken.java (with props)
Modified:
tomcat/tc8.0.x/trunk/java/org/apache/catalina/connector/Request.java
tomcat/tc8.0.x/trunk/java/org/apache/coyote/AbstractProcessor.java
tomcat/tc8.0.x/trunk/java/org/apache/coyote/AbstractProtocol.java
tomcat/tc8.0.x/trunk/java/org/apache/coyote/Processor.java
tomcat/tc8.0.x/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java
tomcat/tc8.0.x/trunk/java/org/apache/coyote/ajp/AbstractAjpProtocol.java
tomcat/tc8.0.x/trunk/java/org/apache/coyote/http11/AbstractHttp11Processor.java
tomcat/tc8.0.x/trunk/java/org/apache/coyote/http11/Http11AprProtocol.java
tomcat/tc8.0.x/trunk/java/org/apache/coyote/http11/Http11Nio2Protocol.java
tomcat/tc8.0.x/trunk/java/org/apache/coyote/http11/Http11NioProtocol.java
tomcat/tc8.0.x/trunk/java/org/apache/coyote/http11/Http11Protocol.java
tomcat/tc8.0.x/trunk/java/org/apache/coyote/http11/upgrade/AbstractProcessor.java
tomcat/tc8.0.x/trunk/java/org/apache/coyote/http11/upgrade/AprProcessor.java
tomcat/tc8.0.x/trunk/java/org/apache/coyote/http11/upgrade/BioProcessor.java
tomcat/tc8.0.x/trunk/java/org/apache/coyote/http11/upgrade/Nio2Processor.java
tomcat/tc8.0.x/trunk/java/org/apache/coyote/http11/upgrade/NioProcessor.java
tomcat/tc8.0.x/trunk/java/org/apache/tomcat/websocket/server/WsHttpUpgradeHandler.java
tomcat/tc8.0.x/trunk/res/checkstyle/org-import-control.xml
tomcat/tc8.0.x/trunk/webapps/docs/changelog.xml
Modified: tomcat/tc8.0.x/trunk/java/org/apache/catalina/connector/Request.java
URL:
http://svn.apache.org/viewvc/tomcat/tc8.0.x/trunk/java/org/apache/catalina/connector/Request.java?rev=1713733&r1=1713732&r2=1713733&view=diff
==============================================================================
--- tomcat/tc8.0.x/trunk/java/org/apache/catalina/connector/Request.java
(original)
+++ tomcat/tc8.0.x/trunk/java/org/apache/catalina/connector/Request.java Tue
Nov 10 21:46:22 2015
@@ -80,8 +80,10 @@ import org.apache.catalina.core.AsyncCon
import org.apache.catalina.mapper.MappingData;
import org.apache.catalina.util.ParameterMap;
import org.apache.coyote.ActionCode;
+import org.apache.coyote.UpgradeToken;
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;
@@ -1881,15 +1883,18 @@ public class Request
@Override
public <T extends HttpUpgradeHandler> T upgrade(
Class<T> httpUpgradeHandlerClass) throws java.io.IOException,
ServletException {
-
T handler;
+ InstanceManager instanceManager = null;
try {
- 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(), instanceManager);
- coyoteRequest.action(ActionCode.UPGRADE, handler);
+ coyoteRequest.action(ActionCode.UPGRADE, upgradeToken);
// Output required by RFC2616. Protocol specific headers should have
// already been set.
Modified: tomcat/tc8.0.x/trunk/java/org/apache/coyote/AbstractProcessor.java
URL:
http://svn.apache.org/viewvc/tomcat/tc8.0.x/trunk/java/org/apache/coyote/AbstractProcessor.java?rev=1713733&r1=1713732&r2=1713733&view=diff
==============================================================================
--- tomcat/tc8.0.x/trunk/java/org/apache/coyote/AbstractProcessor.java
(original)
+++ tomcat/tc8.0.x/trunk/java/org/apache/coyote/AbstractProcessor.java Tue Nov
10 21:46:22 2015
@@ -19,8 +19,6 @@ package org.apache.coyote;
import java.io.IOException;
import java.util.concurrent.Executor;
-import javax.servlet.http.HttpUpgradeHandler;
-
import org.apache.juli.logging.Log;
import org.apache.tomcat.util.net.AbstractEndpoint;
import org.apache.tomcat.util.net.AbstractEndpoint.Handler.SocketState;
@@ -214,7 +212,7 @@ public abstract class AbstractProcessor<
public abstract SocketState upgradeDispatch(SocketStatus status) throws
IOException;
@Override
- public abstract HttpUpgradeHandler getHttpUpgradeHandler();
+ public abstract UpgradeToken getUpgradeToken();
/**
Modified: tomcat/tc8.0.x/trunk/java/org/apache/coyote/AbstractProtocol.java
URL:
http://svn.apache.org/viewvc/tomcat/tc8.0.x/trunk/java/org/apache/coyote/AbstractProtocol.java?rev=1713733&r1=1713732&r2=1713733&view=diff
==============================================================================
--- tomcat/tc8.0.x/trunk/java/org/apache/coyote/AbstractProtocol.java (original)
+++ tomcat/tc8.0.x/trunk/java/org/apache/coyote/AbstractProtocol.java Tue Nov
10 21:46:22 2015
@@ -35,6 +35,7 @@ import javax.servlet.http.HttpUpgradeHan
import javax.servlet.http.WebConnection;
import org.apache.juli.logging.Log;
+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;
@@ -679,15 +680,15 @@ public abstract class AbstractProtocol<S
if (state == SocketState.UPGRADING) {
// Get the HTTP upgrade handler
- HttpUpgradeHandler httpUpgradeHandler =
- processor.getHttpUpgradeHandler();
+ UpgradeToken upgradeToken =
processor.getUpgradeToken();
+ HttpUpgradeHandler httpUpgradeHandler =
upgradeToken.getHttpUpgradeHandler();
// Retrieve leftover input
ByteBuffer leftoverInput =
processor.getLeftoverInput();
// Release the Http11 processor to be re-used
release(wrapper, processor, false, false);
// Create the upgrade processor
processor = createUpgradeProcessor(
- wrapper, leftoverInput, httpUpgradeHandler);
+ wrapper, leftoverInput, upgradeToken);
// Mark the connection as upgraded
wrapper.setUpgraded(true);
// Associate with the processor with the connection
@@ -698,7 +699,19 @@ 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.
- httpUpgradeHandler.init((WebConnection) processor);
+ if (upgradeToken.getInstanceManager() == null) {
+ httpUpgradeHandler.init((WebConnection) processor);
+ } else {
+ Thread thread = Thread.currentThread();
+ // Set context class loader environment for user
class call
+ ClassLoader originalClassLoader =
thread.getContextClassLoader();
+ try {
+
thread.setContextClassLoader(upgradeToken.getApplicationClassLoader());
+ httpUpgradeHandler.init((WebConnection)
processor);
+ } finally {
+
thread.setContextClassLoader(originalClassLoader);
+ }
+ }
}
if (getLog().isDebugEnabled()) {
getLog().debug("Socket: [" + wrapper +
@@ -745,7 +758,23 @@ public abstract class AbstractProtocol<S
// processors are not recycled.
connections.remove(socket);
if (processor.isUpgrade()) {
- processor.getHttpUpgradeHandler().destroy();
+ UpgradeToken upgradeToken =
processor.getUpgradeToken();
+ HttpUpgradeHandler httpUpgradeHandler =
upgradeToken.getHttpUpgradeHandler();
+ InstanceManager instanceManager =
upgradeToken.getInstanceManager();
+ if (instanceManager == null) {
+ httpUpgradeHandler.destroy();
+ } else {
+ Thread thread = Thread.currentThread();
+ // Set context class loader environment for user
class call
+ ClassLoader originalClassLoader =
thread.getContextClassLoader();
+ try {
+
thread.setContextClassLoader(upgradeToken.getApplicationClassLoader());
+ httpUpgradeHandler.destroy();
+
instanceManager.destroyInstance(httpUpgradeHandler);
+ } finally {
+
thread.setContextClassLoader(originalClassLoader);
+ }
+ }
} else {
release(wrapper, processor, true, false);
}
@@ -794,7 +823,7 @@ public abstract class AbstractProtocol<S
boolean addToPoller);
protected abstract Processor<S> createUpgradeProcessor(
SocketWrapper<S> socket, ByteBuffer leftoverInput,
- HttpUpgradeHandler httpUpgradeProcessor) throws IOException;
+ UpgradeToken upgradeToken) throws IOException;
protected void register(AbstractProcessor<S> processor) {
if (getProtocol().getDomain() != null) {
Modified: tomcat/tc8.0.x/trunk/java/org/apache/coyote/Processor.java
URL:
http://svn.apache.org/viewvc/tomcat/tc8.0.x/trunk/java/org/apache/coyote/Processor.java?rev=1713733&r1=1713732&r2=1713733&view=diff
==============================================================================
--- tomcat/tc8.0.x/trunk/java/org/apache/coyote/Processor.java (original)
+++ tomcat/tc8.0.x/trunk/java/org/apache/coyote/Processor.java Tue Nov 10
21:46:22 2015
@@ -20,8 +20,6 @@ import java.io.IOException;
import java.nio.ByteBuffer;
import java.util.concurrent.Executor;
-import javax.servlet.http.HttpUpgradeHandler;
-
import org.apache.tomcat.util.net.AbstractEndpoint.Handler.SocketState;
import org.apache.tomcat.util.net.SSLSupport;
import org.apache.tomcat.util.net.SocketStatus;
@@ -41,7 +39,7 @@ public interface Processor<S> {
SocketState asyncDispatch(SocketStatus status);
SocketState asyncPostProcess();
- HttpUpgradeHandler getHttpUpgradeHandler();
+ UpgradeToken getUpgradeToken();
SocketState upgradeDispatch(SocketStatus status) throws IOException;
void errorDispatch();
Added: tomcat/tc8.0.x/trunk/java/org/apache/coyote/UpgradeToken.java
URL:
http://svn.apache.org/viewvc/tomcat/tc8.0.x/trunk/java/org/apache/coyote/UpgradeToken.java?rev=1713733&view=auto
==============================================================================
--- tomcat/tc8.0.x/trunk/java/org/apache/coyote/UpgradeToken.java (added)
+++ tomcat/tc8.0.x/trunk/java/org/apache/coyote/UpgradeToken.java Tue Nov 10
21:46:22 2015
@@ -0,0 +1,52 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.coyote;
+
+import javax.servlet.http.HttpUpgradeHandler;
+
+import org.apache.tomcat.InstanceManager;
+
+/**
+ * Token used during the upgrade process.
+ */
+public final class UpgradeToken {
+
+ private final ClassLoader applicationClassLoader;
+ private final HttpUpgradeHandler httpUpgradeHandler;
+ private final InstanceManager instanceManager;
+
+ public UpgradeToken(HttpUpgradeHandler httpUpgradeHandler,
+ ClassLoader applicationClassLoader, InstanceManager
instanceManager) {
+ this.applicationClassLoader = applicationClassLoader;
+ this.httpUpgradeHandler = httpUpgradeHandler;
+ this.instanceManager = instanceManager;
+ }
+
+ public final ClassLoader getApplicationClassLoader() {
+ return applicationClassLoader;
+ }
+
+ public final HttpUpgradeHandler getHttpUpgradeHandler() {
+ return httpUpgradeHandler;
+ }
+
+ public final InstanceManager getInstanceManager() {
+ return instanceManager;
+ }
+
+}
Propchange: tomcat/tc8.0.x/trunk/java/org/apache/coyote/UpgradeToken.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified:
tomcat/tc8.0.x/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java
URL:
http://svn.apache.org/viewvc/tomcat/tc8.0.x/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java?rev=1713733&r1=1713732&r2=1713733&view=diff
==============================================================================
--- tomcat/tc8.0.x/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java
(original)
+++ tomcat/tc8.0.x/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java
Tue Nov 10 21:46:22 2015
@@ -30,7 +30,6 @@ import java.util.concurrent.atomic.Atomi
import javax.servlet.RequestDispatcher;
import javax.servlet.http.HttpServletResponse;
-import javax.servlet.http.HttpUpgradeHandler;
import org.apache.coyote.AbstractProcessor;
import org.apache.coyote.ActionCode;
@@ -42,6 +41,7 @@ import org.apache.coyote.OutputBuffer;
import org.apache.coyote.Request;
import org.apache.coyote.RequestInfo;
import org.apache.coyote.Response;
+import org.apache.coyote.UpgradeToken;
import org.apache.tomcat.util.ExceptionUtils;
import org.apache.tomcat.util.buf.ByteChunk;
import org.apache.tomcat.util.buf.HexUtils;
@@ -929,7 +929,7 @@ public abstract class AbstractAjpProcess
@Override
- public HttpUpgradeHandler getHttpUpgradeHandler() {
+ public UpgradeToken getUpgradeToken() {
// Should never reach this code but in case we do...
throw new IllegalStateException(
sm.getString("ajpprocessor.httpupgrade.notsupported"));
Modified:
tomcat/tc8.0.x/trunk/java/org/apache/coyote/ajp/AbstractAjpProtocol.java
URL:
http://svn.apache.org/viewvc/tomcat/tc8.0.x/trunk/java/org/apache/coyote/ajp/AbstractAjpProtocol.java?rev=1713733&r1=1713732&r2=1713733&view=diff
==============================================================================
--- tomcat/tc8.0.x/trunk/java/org/apache/coyote/ajp/AbstractAjpProtocol.java
(original)
+++ tomcat/tc8.0.x/trunk/java/org/apache/coyote/ajp/AbstractAjpProtocol.java
Tue Nov 10 21:46:22 2015
@@ -18,10 +18,9 @@ package org.apache.coyote.ajp;
import java.nio.ByteBuffer;
-import javax.servlet.http.HttpUpgradeHandler;
-
import org.apache.coyote.AbstractProtocol;
import org.apache.coyote.Processor;
+import org.apache.coyote.UpgradeToken;
import org.apache.tomcat.util.net.SocketWrapper;
import org.apache.tomcat.util.res.StringManager;
@@ -114,7 +113,7 @@ public abstract class AbstractAjpProtoco
@Override
protected P createUpgradeProcessor(SocketWrapper<S> socket, ByteBuffer
leftoverInput,
- HttpUpgradeHandler httpUpgradeHandler) {
+ UpgradeToken upgradeToken) {
// TODO should fail - throw IOE
return null;
}
Modified:
tomcat/tc8.0.x/trunk/java/org/apache/coyote/http11/AbstractHttp11Processor.java
URL:
http://svn.apache.org/viewvc/tomcat/tc8.0.x/trunk/java/org/apache/coyote/http11/AbstractHttp11Processor.java?rev=1713733&r1=1713732&r2=1713733&view=diff
==============================================================================
---
tomcat/tc8.0.x/trunk/java/org/apache/coyote/http11/AbstractHttp11Processor.java
(original)
+++
tomcat/tc8.0.x/trunk/java/org/apache/coyote/http11/AbstractHttp11Processor.java
Tue Nov 10 21:46:22 2015
@@ -27,13 +27,13 @@ import java.util.regex.Pattern;
import javax.servlet.RequestDispatcher;
import javax.servlet.http.HttpServletResponse;
-import javax.servlet.http.HttpUpgradeHandler;
import org.apache.coyote.AbstractProcessor;
import org.apache.coyote.ActionCode;
import org.apache.coyote.AsyncContextCallback;
import org.apache.coyote.ErrorState;
import org.apache.coyote.RequestInfo;
+import org.apache.coyote.UpgradeToken;
import org.apache.coyote.http11.filters.BufferedInputFilter;
import org.apache.coyote.http11.filters.ChunkedInputFilter;
import org.apache.coyote.http11.filters.ChunkedOutputFilter;
@@ -231,7 +231,7 @@ public abstract class AbstractHttp11Proc
* Instance of the new protocol to use after the HTTP connection has been
* upgraded.
*/
- protected HttpUpgradeHandler httpUpgradeHandler = null;
+ protected UpgradeToken upgradeToken = null;
public AbstractHttp11Processor(AbstractEndpoint<S> endpoint) {
@@ -867,7 +867,7 @@ public abstract class AbstractHttp11Proc
break;
}
case UPGRADE: {
- httpUpgradeHandler = (HttpUpgradeHandler) param;
+ upgradeToken = (UpgradeToken) param;
// Stop further HTTP output
getOutputBuffer().finished = true;
break;
@@ -1001,7 +1001,7 @@ public abstract class AbstractHttp11Proc
}
while (!getErrorState().isError() && keepAlive && !comet && !isAsync()
&&
- httpUpgradeHandler == null && !endpoint.isPaused()) {
+ upgradeToken == null && !endpoint.isPaused()) {
// Parsing the request header
try {
@@ -1753,7 +1753,7 @@ public abstract class AbstractHttp11Proc
@Override
public boolean isUpgrade() {
- return httpUpgradeHandler != null;
+ return upgradeToken != null;
}
@@ -1767,8 +1767,8 @@ public abstract class AbstractHttp11Proc
@Override
- public HttpUpgradeHandler getHttpUpgradeHandler() {
- return httpUpgradeHandler;
+ public UpgradeToken getUpgradeToken() {
+ return upgradeToken;
}
@@ -1841,7 +1841,7 @@ public abstract class AbstractHttp11Proc
if (asyncStateMachine != null) {
asyncStateMachine.recycle();
}
- httpUpgradeHandler = null;
+ upgradeToken = null;
comet = false;
resetErrorState();
recycleInternal();
Modified:
tomcat/tc8.0.x/trunk/java/org/apache/coyote/http11/Http11AprProtocol.java
URL:
http://svn.apache.org/viewvc/tomcat/tc8.0.x/trunk/java/org/apache/coyote/http11/Http11AprProtocol.java?rev=1713733&r1=1713732&r2=1713733&view=diff
==============================================================================
--- tomcat/tc8.0.x/trunk/java/org/apache/coyote/http11/Http11AprProtocol.java
(original)
+++ tomcat/tc8.0.x/trunk/java/org/apache/coyote/http11/Http11AprProtocol.java
Tue Nov 10 21:46:22 2015
@@ -19,10 +19,9 @@ package org.apache.coyote.http11;
import java.io.IOException;
import java.nio.ByteBuffer;
-import javax.servlet.http.HttpUpgradeHandler;
-
import org.apache.coyote.AbstractProtocol;
import org.apache.coyote.Processor;
+import org.apache.coyote.UpgradeToken;
import org.apache.coyote.http11.upgrade.AprProcessor;
import org.apache.juli.logging.Log;
import org.apache.juli.logging.LogFactory;
@@ -304,10 +303,10 @@ public class Http11AprProtocol extends A
@Override
protected Processor<Long> createUpgradeProcessor(
SocketWrapper<Long> socket, ByteBuffer leftoverInput,
- HttpUpgradeHandler httpUpgradeProcessor)
+ UpgradeToken upgradeToken)
throws IOException {
return new AprProcessor(socket, leftoverInput,
- httpUpgradeProcessor, (AprEndpoint) proto.endpoint,
+ upgradeToken, (AprEndpoint) proto.endpoint,
proto.getUpgradeAsyncWriteBufferSize());
}
}
Modified:
tomcat/tc8.0.x/trunk/java/org/apache/coyote/http11/Http11Nio2Protocol.java
URL:
http://svn.apache.org/viewvc/tomcat/tc8.0.x/trunk/java/org/apache/coyote/http11/Http11Nio2Protocol.java?rev=1713733&r1=1713732&r2=1713733&view=diff
==============================================================================
--- tomcat/tc8.0.x/trunk/java/org/apache/coyote/http11/Http11Nio2Protocol.java
(original)
+++ tomcat/tc8.0.x/trunk/java/org/apache/coyote/http11/Http11Nio2Protocol.java
Tue Nov 10 21:46:22 2015
@@ -20,10 +20,9 @@ import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.channels.ReadPendingException;
-import javax.servlet.http.HttpUpgradeHandler;
-
import org.apache.coyote.AbstractProtocol;
import org.apache.coyote.Processor;
+import org.apache.coyote.UpgradeToken;
import org.apache.coyote.http11.upgrade.Nio2Processor;
import org.apache.juli.logging.Log;
import org.apache.juli.logging.LogFactory;
@@ -239,10 +238,10 @@ public class Http11Nio2Protocol extends
@Override
protected Processor<Nio2Channel> createUpgradeProcessor(
SocketWrapper<Nio2Channel> socket, ByteBuffer leftoverInput,
- HttpUpgradeHandler httpUpgradeProcessor)
+ UpgradeToken upgradeToken)
throws IOException {
return new Nio2Processor(proto.endpoint, socket, leftoverInput,
- httpUpgradeProcessor,
proto.getUpgradeAsyncWriteBufferSize());
+ upgradeToken, proto.getUpgradeAsyncWriteBufferSize());
}
@Override
Modified:
tomcat/tc8.0.x/trunk/java/org/apache/coyote/http11/Http11NioProtocol.java
URL:
http://svn.apache.org/viewvc/tomcat/tc8.0.x/trunk/java/org/apache/coyote/http11/Http11NioProtocol.java?rev=1713733&r1=1713732&r2=1713733&view=diff
==============================================================================
--- tomcat/tc8.0.x/trunk/java/org/apache/coyote/http11/Http11NioProtocol.java
(original)
+++ tomcat/tc8.0.x/trunk/java/org/apache/coyote/http11/Http11NioProtocol.java
Tue Nov 10 21:46:22 2015
@@ -21,10 +21,9 @@ import java.nio.ByteBuffer;
import java.nio.channels.SocketChannel;
import java.util.Iterator;
-import javax.servlet.http.HttpUpgradeHandler;
-
import org.apache.coyote.AbstractProtocol;
import org.apache.coyote.Processor;
+import org.apache.coyote.UpgradeToken;
import org.apache.coyote.http11.upgrade.NioProcessor;
import org.apache.juli.logging.Log;
import org.apache.juli.logging.LogFactory;
@@ -274,9 +273,9 @@ public class Http11NioProtocol extends A
@Override
protected Processor<NioChannel> createUpgradeProcessor(
SocketWrapper<NioChannel> socket, ByteBuffer leftoverInput,
- HttpUpgradeHandler httpUpgradeProcessor)
+ UpgradeToken upgradeToken)
throws IOException {
- return new NioProcessor(socket, leftoverInput,
httpUpgradeProcessor,
+ return new NioProcessor(socket, leftoverInput, upgradeToken,
proto.getEndpoint().getSelectorPool(),
proto.getUpgradeAsyncWriteBufferSize());
}
Modified: tomcat/tc8.0.x/trunk/java/org/apache/coyote/http11/Http11Protocol.java
URL:
http://svn.apache.org/viewvc/tomcat/tc8.0.x/trunk/java/org/apache/coyote/http11/Http11Protocol.java?rev=1713733&r1=1713732&r2=1713733&view=diff
==============================================================================
--- tomcat/tc8.0.x/trunk/java/org/apache/coyote/http11/Http11Protocol.java
(original)
+++ tomcat/tc8.0.x/trunk/java/org/apache/coyote/http11/Http11Protocol.java Tue
Nov 10 21:46:22 2015
@@ -20,10 +20,9 @@ import java.io.IOException;
import java.net.Socket;
import java.nio.ByteBuffer;
-import javax.servlet.http.HttpUpgradeHandler;
-
import org.apache.coyote.AbstractProtocol;
import org.apache.coyote.Processor;
+import org.apache.coyote.UpgradeToken;
import org.apache.coyote.http11.upgrade.BioProcessor;
import org.apache.juli.logging.Log;
import org.apache.tomcat.util.net.AbstractEndpoint;
@@ -179,9 +178,9 @@ public class Http11Protocol extends Abst
@Override
protected Processor<Socket> createUpgradeProcessor(
SocketWrapper<Socket> socket, ByteBuffer leftoverInput,
- HttpUpgradeHandler httpUpgradeProcessor)
+ UpgradeToken upgradeToken)
throws IOException {
- return new BioProcessor(socket, leftoverInput,
httpUpgradeProcessor,
+ return new BioProcessor(socket, leftoverInput, upgradeToken,
proto.getUpgradeAsyncWriteBufferSize());
}
Modified:
tomcat/tc8.0.x/trunk/java/org/apache/coyote/http11/upgrade/AbstractProcessor.java
URL:
http://svn.apache.org/viewvc/tomcat/tc8.0.x/trunk/java/org/apache/coyote/http11/upgrade/AbstractProcessor.java?rev=1713733&r1=1713732&r2=1713733&view=diff
==============================================================================
---
tomcat/tc8.0.x/trunk/java/org/apache/coyote/http11/upgrade/AbstractProcessor.java
(original)
+++
tomcat/tc8.0.x/trunk/java/org/apache/coyote/http11/upgrade/AbstractProcessor.java
Tue Nov 10 21:46:22 2015
@@ -22,11 +22,11 @@ import java.util.concurrent.Executor;
import javax.servlet.ServletInputStream;
import javax.servlet.ServletOutputStream;
-import javax.servlet.http.HttpUpgradeHandler;
import javax.servlet.http.WebConnection;
import org.apache.coyote.Processor;
import org.apache.coyote.Request;
+import org.apache.coyote.UpgradeToken;
import org.apache.juli.logging.Log;
import org.apache.tomcat.util.net.AbstractEndpoint.Handler.SocketState;
import org.apache.tomcat.util.net.SSLSupport;
@@ -41,14 +41,14 @@ public abstract class AbstractProcessor<
StringManager.getManager(Constants.Package);
protected abstract Log getLog();
- private final HttpUpgradeHandler httpUpgradeHandler;
+ private final UpgradeToken upgradeToken;
private final AbstractServletInputStream upgradeServletInputStream;
private final AbstractServletOutputStream<S> upgradeServletOutputStream;
- protected AbstractProcessor (HttpUpgradeHandler httpUpgradeHandler,
+ protected AbstractProcessor(UpgradeToken upgradeToken,
AbstractServletInputStream upgradeServletInputStream,
AbstractServletOutputStream<S> upgradeServletOutputStream) {
- this.httpUpgradeHandler = httpUpgradeHandler;
+ this.upgradeToken = upgradeToken;
this.upgradeServletInputStream = upgradeServletInputStream;
this.upgradeServletOutputStream = upgradeServletOutputStream;
}
@@ -84,8 +84,8 @@ public abstract class AbstractProcessor<
}
@Override
- public HttpUpgradeHandler getHttpUpgradeHandler() {
- return httpUpgradeHandler;
+ public UpgradeToken getUpgradeToken() {
+ return upgradeToken;
}
@Override
Modified:
tomcat/tc8.0.x/trunk/java/org/apache/coyote/http11/upgrade/AprProcessor.java
URL:
http://svn.apache.org/viewvc/tomcat/tc8.0.x/trunk/java/org/apache/coyote/http11/upgrade/AprProcessor.java?rev=1713733&r1=1713732&r2=1713733&view=diff
==============================================================================
---
tomcat/tc8.0.x/trunk/java/org/apache/coyote/http11/upgrade/AprProcessor.java
(original)
+++
tomcat/tc8.0.x/trunk/java/org/apache/coyote/http11/upgrade/AprProcessor.java
Tue Nov 10 21:46:22 2015
@@ -18,8 +18,7 @@ package org.apache.coyote.http11.upgrade
import java.nio.ByteBuffer;
-import javax.servlet.http.HttpUpgradeHandler;
-
+import org.apache.coyote.UpgradeToken;
import org.apache.juli.logging.Log;
import org.apache.juli.logging.LogFactory;
import org.apache.tomcat.jni.Socket;
@@ -35,9 +34,9 @@ public class AprProcessor extends Abstra
private static final int INFINITE_TIMEOUT = -1;
public AprProcessor(SocketWrapper<Long> wrapper, ByteBuffer leftoverInput,
- HttpUpgradeHandler httpUpgradeProcessor, AprEndpoint endpoint,
+ UpgradeToken upgradeToken, AprEndpoint endpoint,
int asyncWriteBufferSize) {
- super(httpUpgradeProcessor,
+ super(upgradeToken,
new AprServletInputStream(wrapper, leftoverInput),
new AprServletOutputStream(wrapper, asyncWriteBufferSize,
endpoint));
Modified:
tomcat/tc8.0.x/trunk/java/org/apache/coyote/http11/upgrade/BioProcessor.java
URL:
http://svn.apache.org/viewvc/tomcat/tc8.0.x/trunk/java/org/apache/coyote/http11/upgrade/BioProcessor.java?rev=1713733&r1=1713732&r2=1713733&view=diff
==============================================================================
---
tomcat/tc8.0.x/trunk/java/org/apache/coyote/http11/upgrade/BioProcessor.java
(original)
+++
tomcat/tc8.0.x/trunk/java/org/apache/coyote/http11/upgrade/BioProcessor.java
Tue Nov 10 21:46:22 2015
@@ -20,8 +20,7 @@ import java.io.IOException;
import java.net.Socket;
import java.nio.ByteBuffer;
-import javax.servlet.http.HttpUpgradeHandler;
-
+import org.apache.coyote.UpgradeToken;
import org.apache.juli.logging.Log;
import org.apache.juli.logging.LogFactory;
import org.apache.tomcat.util.net.SocketWrapper;
@@ -35,9 +34,9 @@ public class BioProcessor extends Abstra
private static final int INFINITE_TIMEOUT = 0;
public BioProcessor(SocketWrapper<Socket> wrapper, ByteBuffer
leftoverInput,
- HttpUpgradeHandler httpUpgradeProcessor,
+ UpgradeToken upgradeToken,
int asyncWriteBufferSize) throws IOException {
- super(httpUpgradeProcessor, new BioServletInputStream(wrapper,
leftoverInput),
+ super(upgradeToken, new BioServletInputStream(wrapper, leftoverInput),
new BioServletOutputStream(wrapper, asyncWriteBufferSize));
wrapper.getSocket().setSoTimeout(INFINITE_TIMEOUT);
Modified:
tomcat/tc8.0.x/trunk/java/org/apache/coyote/http11/upgrade/Nio2Processor.java
URL:
http://svn.apache.org/viewvc/tomcat/tc8.0.x/trunk/java/org/apache/coyote/http11/upgrade/Nio2Processor.java?rev=1713733&r1=1713732&r2=1713733&view=diff
==============================================================================
---
tomcat/tc8.0.x/trunk/java/org/apache/coyote/http11/upgrade/Nio2Processor.java
(original)
+++
tomcat/tc8.0.x/trunk/java/org/apache/coyote/http11/upgrade/Nio2Processor.java
Tue Nov 10 21:46:22 2015
@@ -18,8 +18,7 @@ package org.apache.coyote.http11.upgrade
import java.nio.ByteBuffer;
-import javax.servlet.http.HttpUpgradeHandler;
-
+import org.apache.coyote.UpgradeToken;
import org.apache.juli.logging.Log;
import org.apache.juli.logging.LogFactory;
import org.apache.tomcat.util.net.AbstractEndpoint;
@@ -36,9 +35,9 @@ public class Nio2Processor extends Abstr
public Nio2Processor(AbstractEndpoint<Nio2Channel> endpoint,
SocketWrapper<Nio2Channel> wrapper, ByteBuffer leftoverInput,
- HttpUpgradeHandler httpUpgradeProcessor,
+ UpgradeToken upgradeToken,
int asyncWriteBufferSize) {
- super(httpUpgradeProcessor,
+ super(upgradeToken,
new Nio2ServletInputStream(wrapper, endpoint),
new Nio2ServletOutputStream(wrapper, asyncWriteBufferSize,
endpoint));
Modified:
tomcat/tc8.0.x/trunk/java/org/apache/coyote/http11/upgrade/NioProcessor.java
URL:
http://svn.apache.org/viewvc/tomcat/tc8.0.x/trunk/java/org/apache/coyote/http11/upgrade/NioProcessor.java?rev=1713733&r1=1713732&r2=1713733&view=diff
==============================================================================
---
tomcat/tc8.0.x/trunk/java/org/apache/coyote/http11/upgrade/NioProcessor.java
(original)
+++
tomcat/tc8.0.x/trunk/java/org/apache/coyote/http11/upgrade/NioProcessor.java
Tue Nov 10 21:46:22 2015
@@ -18,8 +18,7 @@ package org.apache.coyote.http11.upgrade
import java.nio.ByteBuffer;
-import javax.servlet.http.HttpUpgradeHandler;
-
+import org.apache.coyote.UpgradeToken;
import org.apache.juli.logging.Log;
import org.apache.juli.logging.LogFactory;
import org.apache.tomcat.util.net.NioChannel;
@@ -35,9 +34,9 @@ public class NioProcessor extends Abstra
private static final int INFINITE_TIMEOUT = -1;
public NioProcessor(SocketWrapper<NioChannel> wrapper, ByteBuffer
leftoverInput,
- HttpUpgradeHandler httpUpgradeProcessor, NioSelectorPool pool,
+ UpgradeToken upgradeToken, NioSelectorPool pool,
int asyncWriteBufferSize) {
- super(httpUpgradeProcessor,
+ super(upgradeToken,
new NioServletInputStream(wrapper, pool),
new NioServletOutputStream(wrapper, asyncWriteBufferSize,
pool));
Modified:
tomcat/tc8.0.x/trunk/java/org/apache/tomcat/websocket/server/WsHttpUpgradeHandler.java
URL:
http://svn.apache.org/viewvc/tomcat/tc8.0.x/trunk/java/org/apache/tomcat/websocket/server/WsHttpUpgradeHandler.java?rev=1713733&r1=1713732&r2=1713733&view=diff
==============================================================================
---
tomcat/tc8.0.x/trunk/java/org/apache/tomcat/websocket/server/WsHttpUpgradeHandler.java
(original)
+++
tomcat/tc8.0.x/trunk/java/org/apache/tomcat/websocket/server/WsHttpUpgradeHandler.java
Tue Nov 10 21:46:22 2015
@@ -52,8 +52,6 @@ public class WsHttpUpgradeHandler implem
private static final StringManager sm =
StringManager.getManager(Constants.PACKAGE_NAME);
- private final ClassLoader applicationClassLoader;
-
private Endpoint ep;
private EndpointConfig endpointConfig;
private WsServerContainer webSocketContainer;
@@ -68,11 +66,6 @@ public class WsHttpUpgradeHandler implem
private WsSession wsSession;
- public WsHttpUpgradeHandler() {
- applicationClassLoader =
Thread.currentThread().getContextClassLoader();
- }
-
-
public void preInit(Endpoint ep, EndpointConfig endpointConfig,
WsServerContainer wsc, WsHandshakeRequest handshakeRequest,
List<Extension> negotiatedExtensionsPhase2, String subProtocol,
@@ -117,9 +110,6 @@ public class WsHttpUpgradeHandler implem
// Need to call onOpen using the web application's class loader
// Create the frame using the application's class loader so it can pick
// up application specific config from the ServerContainerImpl
- Thread t = Thread.currentThread();
- ClassLoader cl = t.getContextClassLoader();
- t.setContextClassLoader(applicationClassLoader);
try {
WsRemoteEndpointImplServer wsRemoteEndpointServer =
new WsRemoteEndpointImplServer(sos, webSocketContainer);
@@ -140,8 +130,6 @@ public class WsHttpUpgradeHandler implem
sis.setReadListener(new WsReadListener(this, wsFrame));
} catch (DeploymentException e) {
throw new IllegalArgumentException(e);
- } finally {
- t.setContextClassLoader(cl);
}
}
@@ -159,15 +147,7 @@ public class WsHttpUpgradeHandler implem
private void onError(Throwable throwable) {
- // Need to call onError using the web application's class loader
- Thread t = Thread.currentThread();
- ClassLoader cl = t.getContextClassLoader();
- t.setContextClassLoader(applicationClassLoader);
- try {
- ep.onError(wsSession, throwable);
- } finally {
- t.setContextClassLoader(cl);
- }
+ ep.onError(wsSession, throwable);
}
Modified: tomcat/tc8.0.x/trunk/res/checkstyle/org-import-control.xml
URL:
http://svn.apache.org/viewvc/tomcat/tc8.0.x/trunk/res/checkstyle/org-import-control.xml?rev=1713733&r1=1713732&r2=1713733&view=diff
==============================================================================
--- tomcat/tc8.0.x/trunk/res/checkstyle/org-import-control.xml (original)
+++ tomcat/tc8.0.x/trunk/res/checkstyle/org-import-control.xml Tue Nov 10
21:46:22 2015
@@ -87,6 +87,7 @@
<allow pkg="javax.servlet"/>
<allow pkg="org.apache.coyote"/>
<allow pkg="org.apache.juli"/>
+ <allow pkg="org.apache.tomcat"/>
<allow pkg="org.apache.tomcat.jni"/>
<allow pkg="org.apache.tomcat.util"/>
</subpackage>
Modified: tomcat/tc8.0.x/trunk/webapps/docs/changelog.xml
URL:
http://svn.apache.org/viewvc/tomcat/tc8.0.x/trunk/webapps/docs/changelog.xml?rev=1713733&r1=1713732&r2=1713733&view=diff
==============================================================================
--- tomcat/tc8.0.x/trunk/webapps/docs/changelog.xml (original)
+++ tomcat/tc8.0.x/trunk/webapps/docs/changelog.xml Tue Nov 10 21:46:22 2015
@@ -175,6 +175,10 @@
Cancel pending blocking IO operation following a timeout in the NIO2
connector. (remm)
</fix>
+ <fix>
+ Add instance manager support for upgrade handlers, and set context
+ class loader. (remm)
+ </fix>
</changelog>
</subsection>
<subsection name="Jasper">
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]