On Tue, Sep 4, 2012 at 8:54 PM, Emond Papegaaij
<[email protected]> wrote:
> You read all the commits, don't you? :) That line shouldn't have been

Yes, this saves me time later when debugging problems :-) And keeps me
up-to-date.

> there, I often use System.out.println for temporary debug lines,
> because it stands out of the rest of the logging due to the missing
> timestamp etc. I've removed it.

I've noticed ;-)

>
> On Tue, Sep 4, 2012 at 8:41 PM, Martin Grigorov <[email protected]> wrote:
>> On Tue, Sep 4, 2012 at 8:29 PM,  <[email protected]> wrote:
>>> Updated Branches:
>>>   refs/heads/master c0c9635d9 -> 659ee9b33
>>>
>>>
>>> WICKET-4729: support multiple tabs with the same page
>>>
>>>
>>> Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
>>> Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/659ee9b3
>>> Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/659ee9b3
>>> Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/659ee9b3
>>>
>>> Branch: refs/heads/master
>>> Commit: 659ee9b337944a461bef400aedbe5f71a5abccf2
>>> Parents: c0c9635
>>> Author: Emond Papegaaij <[email protected]>
>>> Authored: Tue Sep 4 20:27:45 2012 +0200
>>> Committer: Emond Papegaaij <[email protected]>
>>> Committed: Tue Sep 4 20:27:56 2012 +0200
>>>
>>> ----------------------------------------------------------------------
>>>  .../wicket/atmosphere/AtmosphereBehavior.java      |   17 +++++-
>>>  .../org/apache/wicket/atmosphere/EventBus.java     |   44 +++++++++++++--
>>>  2 files changed, 54 insertions(+), 7 deletions(-)
>>> ----------------------------------------------------------------------
>>>
>>>
>>> http://git-wip-us.apache.org/repos/asf/wicket/blob/659ee9b3/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/AtmosphereBehavior.java
>>> ----------------------------------------------------------------------
>>> diff --git 
>>> a/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/AtmosphereBehavior.java
>>>  
>>> b/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/AtmosphereBehavior.java
>>> index 3f574bb..f4641bd 100644
>>> --- 
>>> a/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/AtmosphereBehavior.java
>>> +++ 
>>> b/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/AtmosphereBehavior.java
>>> @@ -18,9 +18,11 @@ package org.apache.wicket.atmosphere;
>>>
>>>  import javax.servlet.http.HttpServletRequest;
>>>
>>> +import org.apache.wicket.Application;
>>>  import org.apache.wicket.Component;
>>>  import org.apache.wicket.IResourceListener;
>>>  import org.apache.wicket.MetaDataKey;
>>> +import org.apache.wicket.Session;
>>>  import org.apache.wicket.WicketRuntimeException;
>>>  import org.apache.wicket.ajax.json.JSONException;
>>>  import org.apache.wicket.ajax.json.JSONObject;
>>> @@ -66,13 +68,25 @@ public class AtmosphereBehavior extends Behavior
>>>
>>>         private static final long serialVersionUID = 1L;
>>>
>>> +       private String applicationKey;
>>> +
>>> +       private String sessionId;
>>> +
>>>         private Component component;
>>>
>>> +
>>>         /**
>>>          * Construct.
>>>          */
>>>         public AtmosphereBehavior()
>>>         {
>>> +               applicationKey = Application.get().getApplicationKey();
>>> +               sessionId = Session.get().getId();
>>> +       }
>>> +
>>> +       private EventBus findEventBus()
>>> +       {
>>> +               return EventBus.get(Application.get(applicationKey));
>>>         }
>>>
>>>         @Override
>>> @@ -97,7 +111,7 @@ public class AtmosphereBehavior extends Behavior
>>>                 Meteor meteor = Meteor.build(request.getContainerRequest());
>>>                 String uuid = getUUID(meteor.getAtmosphereResource());
>>>                 component.getPage().setMetaData(ATMOSPHERE_UUID, uuid);
>>> -               EventBus.get().registerPage(uuid, component.getPage());
>>> +               findEventBus().registerPage(uuid, component.getPage());
>>>
>>>                 // Add us to the listener list.
>>>                 meteor.addListener(this);
>>> @@ -169,6 +183,7 @@ public class AtmosphereBehavior extends Behavior
>>>                         log.info(String.format("%s connection dropped from 
>>> ip %s:%s", transport == null
>>>                                 ? "websocket" : transport, 
>>> req.getRemoteAddr(), req.getRemotePort()));
>>>                 }
>>> +               
>>> findEventBus().unregisterConnection(getUUID(event.getResource()));
>>>         }
>>>
>>>         @Override
>>>
>>> http://git-wip-us.apache.org/repos/asf/wicket/blob/659ee9b3/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/EventBus.java
>>> ----------------------------------------------------------------------
>>> diff --git 
>>> a/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/EventBus.java
>>>  
>>> b/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/EventBus.java
>>> index 2a0dfd4..794cf28 100644
>>> --- 
>>> a/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/EventBus.java
>>> +++ 
>>> b/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/EventBus.java
>>> @@ -19,6 +19,7 @@ package org.apache.wicket.atmosphere;
>>>  import java.util.Collection;
>>>  import java.util.Collections;
>>>  import java.util.Iterator;
>>> +import java.util.Map;
>>>
>>>  import javax.servlet.http.HttpServletRequest;
>>>  import javax.servlet.http.HttpServletRequestWrapper;
>>> @@ -38,11 +39,10 @@ import org.atmosphere.cpr.BroadcasterFactory;
>>>  import org.slf4j.Logger;
>>>  import org.slf4j.LoggerFactory;
>>>
>>> -import com.google.common.collect.BiMap;
>>>  import com.google.common.collect.Collections2;
>>> -import com.google.common.collect.HashBiMap;
>>>  import com.google.common.collect.HashMultimap;
>>>  import com.google.common.collect.Iterators;
>>> +import com.google.common.collect.Maps;
>>>  import com.google.common.collect.Multimap;
>>>
>>>  /**
>>> @@ -74,7 +74,16 @@ public class EventBus implements UnboundListener
>>>          */
>>>         public static EventBus get()
>>>         {
>>> -               return Application.get().getMetaData(EVENT_BUS_KEY);
>>> +               return get(Application.get());
>>> +       }
>>> +
>>> +       /**
>>> +        * @param application
>>> +        * @return the {@code EventBus} registered for the given Wicket 
>>> application.
>>> +        */
>>> +       public static EventBus get(Application application)
>>> +       {
>>> +               return application.getMetaData(EVENT_BUS_KEY);
>>>         }
>>>
>>>         private WebApplication application;
>>> @@ -83,7 +92,7 @@ public class EventBus implements UnboundListener
>>>
>>>         private Multimap<PageKey, EventSubscription> subscriptions = 
>>> HashMultimap.create();
>>>
>>> -       private BiMap<String, PageKey> trackedPages = HashBiMap.create();
>>> +       private Map<String, PageKey> trackedPages = Maps.newHashMap();
>>>
>>>         /**
>>>          * Creates and registers an {@code EventBus} for the given 
>>> application. The first broadcaster
>>> @@ -125,7 +134,7 @@ public class EventBus implements UnboundListener
>>>                 PageKey pageKey = new PageKey(page.getPageId(), 
>>> Session.get().getId());
>>>                 if (oldPage != null && !oldPage.equals(pageKey))
>>>                         subscriptions.removeAll(oldPage);
>>> -               trackedPages.forcePut(trackingId, pageKey);
>>> +               trackedPages.put(trackingId, pageKey);
>>>                 log.info("registered page {} for session {}",
>>>                         new Object[] { pageKey.getPageId(), 
>>> pageKey.getSessionId() });
>>>         }
>>> @@ -150,7 +159,26 @@ public class EventBus implements UnboundListener
>>>                                                 
>>> subscription.getBehaviorIndex() == null ? "" : ":" +
>>>                                                         
>>> subscription.getBehaviorIndex() });
>>>                 }
>>> -               subscriptions.put(new PageKey(page.getPageId(), 
>>> Session.get().getId()), subscription);
>>> +               PageKey pageKey = new PageKey(page.getPageId(), 
>>> Session.get().getId());
>>> +               if (!subscriptions.containsEntry(pageKey, subscription))
>>> +               {
>>> +                       subscriptions.put(pageKey, subscription);
>>> +               }
>>> +       }
>>> +
>>> +       /**
>>> +        * Unregisters all subscriptions for the given tracking id.
>>> +        *
>>> +        * @param trackingId
>>> +        */
>>> +       public synchronized void unregisterConnection(String trackingId)
>>> +       {
>>> +               PageKey pageKey = trackedPages.remove(trackingId);
>>> +               if (log.isInfoEnabled() && pageKey != null)
>>> +               {
>>> +                       log.info("unregistering page {} for session {}", 
>>> new Object[] { pageKey.getPageId(),
>>> +                                       pageKey.getSessionId() });
>>> +               }
>>>         }
>>>
>>>         /**
>>> @@ -167,6 +195,10 @@ public class EventBus implements UnboundListener
>>>                 {
>>>                         for (AtmosphereResource resource : 
>>> broadcaster.getAtmosphereResources())
>>>                         {
>>> +                               if (resource.isCancelled())
>>> +                               {
>>> +                                       System.out.println("cancelled");
>>
>> SLF4J ? ;-)                    ^^
>>
>>> +                               }
>>>                                 ThreadContext.detach();
>>>                                 ThreadContext.setApplication(application);
>>>                                 PageKey key;
>>>
>>
>>
>>
>> --
>> Martin Grigorov
>> jWeekend
>> Training, Consulting, Development
>> http://jWeekend.com



-- 
Martin Grigorov
jWeekend
Training, Consulting, Development
http://jWeekend.com

Reply via email to