diff --git a/modules/cpr/src/main/java/org/atmosphere/cpr/AtmosphereResourceImpl.java b/modules/cpr/src/main/java/org/atmosphere/cpr/AtmosphereResourceImpl.java index c2a85f6115e..7add62dc3b9 100644 --- a/modules/cpr/src/main/java/org/atmosphere/cpr/AtmosphereResourceImpl.java +++ b/modules/cpr/src/main/java/org/atmosphere/cpr/AtmosphereResourceImpl.java @@ -199,7 +199,7 @@ public void suspend(long timeout, boolean flushComment) { String id = broadcaster.getID(); Class clazz = broadcaster.getClass(); broadcaster = BroadcasterFactory.getDefault().lookup(clazz, id, false); - if (broadcaster == null) { + if (broadcaster == null || broadcaster.getAtmosphereResources().size() > 0) { broadcaster = BroadcasterFactory.getDefault().lookup(clazz, id + "/" + UUID.randomUUID(), true); } } diff --git a/modules/cpr/src/main/java/org/atmosphere/cpr/Meteor.java b/modules/cpr/src/main/java/org/atmosphere/cpr/Meteor.java index 21f174acc61..a4d44aec206 100755 --- a/modules/cpr/src/main/java/org/atmosphere/cpr/Meteor.java +++ b/modules/cpr/src/main/java/org/atmosphere/cpr/Meteor.java @@ -63,8 +63,8 @@ */ public class Meteor { - private final static ConcurrentHashMap cache = - new ConcurrentHashMap(); + private final static ConcurrentHashMap cache = + new ConcurrentHashMap(); private final AtmosphereResource r; @@ -74,13 +74,13 @@ private Meteor(AtmosphereResource r, List l, Serializer s) { this.r = r; - r.setSerializer(s); + this.r.setSerializer(s); if (l != null) { for (BroadcastFilter f : l) { - r.getBroadcaster().getBroadcasterConfig().addFilter(f); + this.r.getBroadcaster().getBroadcasterConfig().addFilter(f); } } - cache.put(r.getRequest(), this); + cache.put(this.r, this); } /** @@ -101,10 +101,6 @@ public static Meteor lookup(HttpServletRequest r) { * @return a {@link Meteor} than can be used to resume, suspend and broadcast {@link Object} */ public final static Meteor build(HttpServletRequest r) { - - Meteor m = lookup(r); - if (m != null) return m; - return build(r, null); } @@ -201,7 +197,7 @@ public Meteor suspend(long l, boolean outputComments) { */ public Meteor resume() { r.resume(); - cache.remove(r.getRequest()); + cache.remove(r); return this; } diff --git a/modules/cpr/src/test/java/org/atmosphere/tests/BroadcasterScopeTest.java b/modules/cpr/src/test/java/org/atmosphere/tests/BroadcasterScopeTest.java index 2a2fe4752c8..6e968e32392 100644 --- a/modules/cpr/src/test/java/org/atmosphere/tests/BroadcasterScopeTest.java +++ b/modules/cpr/src/test/java/org/atmosphere/tests/BroadcasterScopeTest.java @@ -91,6 +91,7 @@ public void doGet(HttpServletRequest req, HttpServletResponse res) throws IOExce @Override public void onSuspend(final AtmosphereResourceEvent event){ + event.getResource().getRequest().setAttribute(AtmosphereServlet.RESUME_ON_BROADCAST, "true"); } @Override @@ -102,8 +103,7 @@ public void onDisconnect(AtmosphereResourceEvent event) { - event.getResource().getRequest().setAttribute(AtmosphereServlet.RESUME_ON_BROADCAST, "true"); + public void onBroadcast(AtmosphereResourceEvent event) { } });