From f6e848097c5fccdec2266cd10b7c7df495d984fc Mon Sep 17 00:00:00 2001 From: jfarcand Date: Thu, 20 Sep 2012 14:28:15 -0400 Subject: [PATCH] Port fix for 596, #611 --- .../org/atmosphere/cpr/AtmosphereFramework.java | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/modules/cpr/src/main/java/org/atmosphere/cpr/AtmosphereFramework.java b/modules/cpr/src/main/java/org/atmosphere/cpr/AtmosphereFramework.java index a07372698ba..31388f08955 100644 --- a/modules/cpr/src/main/java/org/atmosphere/cpr/AtmosphereFramework.java +++ b/modules/cpr/src/main/java/org/atmosphere/cpr/AtmosphereFramework.java @@ -1144,7 +1144,7 @@ public void loadAtmosphereHandlersFromPath(URLClassLoader classloader, String re for (String className : possibleComponentsCandidate) { try { className = className.replace('\\', '/'); - className = className.replaceFirst("^.*/(WEB-INF|target)/(test-)?classes/(.*)\\.class", "$3").replace("/", "."); + className = className.replaceFirst("^.*/(WEB-INF|target)(?:/scala-[^/]+)?/(test-)?classes/(.*)\\.class", "$3").replace("/", "."); Class clazz = classloader.loadClass(className); if (AtmosphereHandler.class.isAssignableFrom(clazz)) { @@ -1275,8 +1275,19 @@ public Action doCometSupport(AtmosphereRequest req, AtmosphereResponse res) thro s = req.getHeader(X_ATMOSPHERE_TRACKING_ID); if (s == null || s.equals("0")) { - s = UUID.randomUUID().toString(); - res.setHeader(X_ATMOSPHERE_TRACKING_ID, s); + s = HeaderConfig.UUID.randomUUID().toString(); + res.setHeader(WebSocket, s); + } else { + // This may breaks 1.0.0 application because the WebSocket's associated AtmosphereResource will + // all have the same UUID, and retrieving the original one for WebSocket, so we don't set it at all. + // Null means it is not an HTTP request. + if (req.resource() == null) { + res.setHeader(X_ATMOSPHERE_TRACKING_ID, s); + } else if (req.getAttribute(WebSocket.WEBSOCKET_INITIATED) == null){ + // WebSocket reconnect, in case an application manually set the header + // (impossible to retrieve the headers normally with WebSocket or SSE) + res.setHeader(X_ATMOSPHERE_TRACKING_ID, s); + } } if (req.getAttribute(SUSPENDED_ATMOSPHERE_RESOURCE_UUID) == null) {