You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jetspeed-dev@portals.apache.org by ta...@apache.org on 2009/02/13 02:47:31 UTC

svn commit: r743949 - in /portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/container: providers/EventProviderImpl.java services/JetspeedPortalCallbackServices.java

Author: taylor
Date: Fri Feb 13 01:47:30 2009
New Revision: 743949

URL: http://svn.apache.org/viewvc?rev=743949&view=rev
Log:
https://issues.apache.org/jira/browse/JS2-927
Events now firing. this is a first implementation of basic interportlet communication. Refinements:
* Event Queue - there is a static Hashmap to represent the Event Queue. I will be replacing this with a more robust event queue.
* Advanced Algorithms - default algorithm only notifies portlets on the same page
* refine service api - introduce EventCoordinationService
* support for container initiated events
* Threading

Tested with Sun's EventingMap example (continents) 

Modified:
    portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/container/providers/EventProviderImpl.java
    portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/container/services/JetspeedPortalCallbackServices.java

Modified: portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/container/providers/EventProviderImpl.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/container/providers/EventProviderImpl.java?rev=743949&r1=743948&r2=743949&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/container/providers/EventProviderImpl.java (original)
+++ portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/container/providers/EventProviderImpl.java Fri Feb 13 01:47:30 2009
@@ -20,8 +20,10 @@
 import java.io.StringWriter;
 import java.io.Writer;
 import java.util.Collection;
+import java.util.HashMap;
 import java.util.LinkedList;
 import java.util.List;
+import java.util.Map;
 
 import javax.portlet.Event;
 import javax.servlet.http.HttpServletRequest;
@@ -60,11 +62,13 @@
 public class EventProviderImpl implements EventProvider, Cloneable
 {
     private static Log log = LogFactory.getLog(EventProviderImpl.class);
-    private final PortletWindow portletWindow;
-    private EventList savedEvents = new EventList();
+    private final PortletWindow portletWindow;    
     private final RequestContext rc;
     private final PortletWindowAccessor windowAccessor;
     
+    // IMPROVEME: (a lot) this is a simple-non-production implementation of an event queue
+    private static Map<String, EventList> eventQueue = new HashMap<String, EventList>();
+    
     public EventProviderImpl()
     {
         windowAccessor = null;
@@ -83,6 +87,7 @@
             throws IllegalArgumentException
     {
         System.out.println("registering to fire events");
+        EventList savedEvents = new EventList();        
         if (isDeclaredAsPublishingEvent(qname)) 
         {
             if (value != null && !isValueInstanceOfDefinedClass(qname, value))
@@ -119,6 +124,7 @@
                     {
                         Thread.currentThread().setContextClassLoader(cl);
                     }
+                    out = null;
                     if (out != null) 
                     {
                         savedEvents.addEvent(new EventImpl(qname,
@@ -140,19 +146,23 @@
                 log.warn(e);
             }
         }
+        eventQueue.put(this.portletWindow.getId().toString(), savedEvents);
     }
     
     public static final int MAX_EVENTS_SIZE = 10; // TODO
     
     public void fireEvents(EventContainer eventContainer)
     {
-        System.out.println("firing events");
-
+        String eventTargetWindow = this.portletWindow.getId().toString();
+        System.out.println("firing events for " + eventTargetWindow);
+        EventList savedEvents = this.eventQueue.get(eventTargetWindow);
+        if (savedEvents == null)
+            return;
         while (savedEvents.hasMoreEvents()
                 && savedEvents.getSize() < MAX_EVENTS_SIZE) 
         {
-            Event event = getArbitraryEvent();
-            this.savedEvents.setProcessed(event);
+            Event event = getArbitraryEvent(savedEvents);
+            savedEvents.setProcessed(event);
             
             List<PortletWindow> windows = getAllPortletsRegisteredForEvent(event);
 
@@ -175,7 +185,7 @@
                     // TODO: handle
                     e.printStackTrace();
                 }
-                    
+                this.eventQueue.remove(eventTargetWindow);    
 // TODO: threading                
 //                PortletWindow window = new PortletWindowImpl(container, config, portalURL);
 //                if (portletNames != null) {
@@ -198,6 +208,7 @@
 //                    }
                 }
             }
+        
 //            waitForEventExecution();
 //            try {
 //                Thread.sleep(WAITING_CYCLE);
@@ -259,12 +270,12 @@
         return true;
     }
     
-    private Event getArbitraryEvent() 
+    private Event getArbitraryEvent(EventList savedEvents) 
     {
         Event eActual = null;
-        for (Event event : this.savedEvents.getEvents()) 
+        for (Event event : savedEvents.getEvents()) 
         {
-            if (this.savedEvents.isNotProcessed(event)) 
+            if (savedEvents.isNotProcessed(event)) 
             {
                 eActual = event;
             }

Modified: portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/container/services/JetspeedPortalCallbackServices.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/container/services/JetspeedPortalCallbackServices.java?rev=743949&r1=743948&r2=743949&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/container/services/JetspeedPortalCallbackServices.java (original)
+++ portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/container/services/JetspeedPortalCallbackServices.java Fri Feb 13 01:47:30 2009
@@ -93,13 +93,7 @@
             org.apache.pluto.PortletWindow portletWindow)
     {   
         RequestContext rc = (RequestContext) request.getAttribute(PortalReservedParameters.REQUEST_CONTEXT_ATTRIBUTE);
-        EventProvider provider = (EventProvider)rc.getObjects().get(PER_REQUEST_EVENT_PROVIDER);
-        if (provider == null)
-        {
-            provider  = new EventProviderImpl(rc, portletWindow, this.windowAccessor);
-            rc.getObjects().put(PER_REQUEST_EVENT_PROVIDER, provider);
-        }
-        return provider;
+        return new EventProviderImpl(rc, portletWindow, this.windowAccessor);
     }
 
     public EventProvider getEventProvider()



---------------------------------------------------------------------
To unsubscribe, e-mail: jetspeed-dev-unsubscribe@portals.apache.org
For additional commands, e-mail: jetspeed-dev-help@portals.apache.org