You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by dk...@apache.org on 2017/03/08 18:42:04 UTC

cxf git commit: Update jetty session handling to support 9.4 (don't update to 9.4 due to atmosphere)

Repository: cxf
Updated Branches:
  refs/heads/master bfa7a22c9 -> 3088952a6


Update jetty session handling to support 9.4 (don't update to 9.4 due to atmosphere)


Project: http://git-wip-us.apache.org/repos/asf/cxf/repo
Commit: http://git-wip-us.apache.org/repos/asf/cxf/commit/3088952a
Tree: http://git-wip-us.apache.org/repos/asf/cxf/tree/3088952a
Diff: http://git-wip-us.apache.org/repos/asf/cxf/diff/3088952a

Branch: refs/heads/master
Commit: 3088952a6e3385ee628cf8c91340908ed3a67aa3
Parents: bfa7a22
Author: Daniel Kulp <dk...@apache.org>
Authored: Wed Mar 8 13:32:36 2017 -0500
Committer: Daniel Kulp <dk...@apache.org>
Committed: Wed Mar 8 13:32:36 2017 -0500

----------------------------------------------------------------------
 parent/pom.xml                                  |  2 +-
 .../http_jetty/JettyHTTPServerEngine.java       | 38 +++++++++++++-------
 2 files changed, 27 insertions(+), 13 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cxf/blob/3088952a/parent/pom.xml
----------------------------------------------------------------------
diff --git a/parent/pom.xml b/parent/pom.xml
index 972ee86..98fc58d 100644
--- a/parent/pom.xml
+++ b/parent/pom.xml
@@ -119,7 +119,7 @@
         <cxf.jdom.version>1.0</cxf.jdom.version>
         <cxf.jettison.version>1.3.8</cxf.jettison.version>
         <cxf.jetty9.version>9.3.14.v20161028</cxf.jetty9.version>
-        <!-- Jetty 9.3.15 breaks atmosphere, don't upgrade until new version of 
+        <!-- Jetty 9.3.15+ and 9.4.x break atmosphere, don't upgrade until new version of 
              atmosphere is available -->
         <!--cxf.jetty9.version>9.3.16.v20170120</cxf.jetty9.version-->
         <cxf.jetty.version>${cxf.jetty9.version}</cxf.jetty.version>

http://git-wip-us.apache.org/repos/asf/cxf/blob/3088952a/rt/transports/http-jetty/src/main/java/org/apache/cxf/transport/http_jetty/JettyHTTPServerEngine.java
----------------------------------------------------------------------
diff --git a/rt/transports/http-jetty/src/main/java/org/apache/cxf/transport/http_jetty/JettyHTTPServerEngine.java b/rt/transports/http-jetty/src/main/java/org/apache/cxf/transport/http_jetty/JettyHTTPServerEngine.java
index e7def27..5bbfdcf 100644
--- a/rt/transports/http-jetty/src/main/java/org/apache/cxf/transport/http_jetty/JettyHTTPServerEngine.java
+++ b/rt/transports/http-jetty/src/main/java/org/apache/cxf/transport/http_jetty/JettyHTTPServerEngine.java
@@ -22,6 +22,7 @@ package org.apache.cxf.transport.http_jetty;
 import java.io.Closeable;
 import java.io.IOException;
 import java.io.Writer;
+import java.lang.reflect.Method;
 import java.net.URL;
 import java.security.GeneralSecurityException;
 import java.util.ArrayList;
@@ -43,6 +44,7 @@ import org.apache.cxf.Bus;
 import org.apache.cxf.common.i18n.Message;
 import org.apache.cxf.common.logging.LogUtils;
 import org.apache.cxf.common.util.PropertyUtils;
+import org.apache.cxf.common.util.ReflectionUtil;
 import org.apache.cxf.common.util.StringUtils;
 import org.apache.cxf.common.util.SystemPropertyAction;
 import org.apache.cxf.configuration.jsse.SSLUtils;
@@ -62,15 +64,12 @@ import org.eclipse.jetty.server.Request;
 import org.eclipse.jetty.server.Response;
 import org.eclipse.jetty.server.Server;
 import org.eclipse.jetty.server.ServerConnector;
-import org.eclipse.jetty.server.SessionManager;
 import org.eclipse.jetty.server.SslConnectionFactory;
 import org.eclipse.jetty.server.handler.ContextHandler;
 import org.eclipse.jetty.server.handler.ContextHandlerCollection;
 import org.eclipse.jetty.server.handler.DefaultHandler;
 import org.eclipse.jetty.server.handler.ErrorHandler;
 import org.eclipse.jetty.server.handler.HandlerCollection;
-import org.eclipse.jetty.server.session.HashSessionIdManager;
-import org.eclipse.jetty.server.session.HashSessionManager;
 import org.eclipse.jetty.server.session.SessionHandler;
 import org.eclipse.jetty.util.component.Container;
 import org.eclipse.jetty.util.ssl.SslContextFactory;
@@ -116,7 +115,7 @@ public class JettyHTTPServerEngine implements ServerEngine {
     private List<Handler> handlers;
     private ContextHandlerCollection contexts;
     private Container.Listener mBeanContainer;
-    private SessionManager sessionManager;
+    private SessionHandler sessionHandler;
     private ThreadPool threadPool;
 
 
@@ -491,19 +490,34 @@ public class JettyHTTPServerEngine implements ServerEngine {
         // bind the jetty http handler with the context handler
         if (isSessionSupport) {
             // If we have sessions, we need two handlers.
-            if (sessionManager == null) {
-                sessionManager = new HashSessionManager();
-                HashSessionIdManager idManager = new HashSessionIdManager();
-                sessionManager.setSessionIdManager(idManager);
+            SessionHandler sh = null;
+            if (Server.getVersion().startsWith("9.2") 
+                || Server.getVersion().startsWith("9.3")) {
+                if (sessionHandler == null) {
+                    sessionHandler = new SessionHandler();
+                }
+                sh = new SessionHandler();
+                try {
+                    Method get = ReflectionUtil.getDeclaredMethod(SessionHandler.class, "getSessionManager");
+                    Method set = ReflectionUtil.getDeclaredMethod(SessionHandler.class, 
+                                                                  "setSessionManager", 
+                                                                  get.getReturnType());
+                    ReflectionUtil.setAccessible(set)
+                        .invoke(sh, ReflectionUtil.setAccessible(get).invoke(sessionHandler));
+                } catch (Throwable t) {
+                    //ignore, just use the new session manager
+                }
+            } else {
+                //9.4+ stores the session id handling and cache and everything on the server, just need the handler
+                sh = new SessionHandler();
             }
-            SessionHandler sessionHandler = new SessionHandler(sessionManager);
             if (securityHandler != null) {
                 //use the securityHander which already wrap the jetty http handler
-                sessionHandler.setHandler(securityHandler);
+                sh.setHandler(securityHandler);
             } else {
-                sessionHandler.setHandler(handler);
+                sh.setHandler(handler);
             }
-            context.setHandler(sessionHandler);
+            context.setHandler(sh);
         } else {
             // otherwise, just the one.
             if (securityHandler != null) {