You are viewing a plain text version of this content. The canonical link for it is here.
Posted to pluto-scm@portals.apache.org by de...@apache.org on 2007/12/27 18:26:29 UTC

svn commit: r607096 - in /portals/pluto/branches/1.1-286-trunk-merge: pluto-container/src/main/java/org/apache/pluto/core/ pluto-container/src/main/java/org/apache/pluto/spi/optional/ pluto-container/src/main/java/org/apache/pluto/util/ pluto-portal-dr...

Author: dettborn
Date: Thu Dec 27 09:26:29 2007
New Revision: 607096

URL: http://svn.apache.org/viewvc?rev=607096&view=rev
Log:
update eventing:
add classloaders to PortletContextManager
modify EventProviderImpl and PortletWindowThread
the eventing mechanism runs now

Modified:
    portals/pluto/branches/1.1-286-trunk-merge/pluto-container/src/main/java/org/apache/pluto/core/DefaultPortletInvokerService.java
    portals/pluto/branches/1.1-286-trunk-merge/pluto-container/src/main/java/org/apache/pluto/core/PortletContainerImpl.java
    portals/pluto/branches/1.1-286-trunk-merge/pluto-container/src/main/java/org/apache/pluto/core/PortletContextManager.java
    portals/pluto/branches/1.1-286-trunk-merge/pluto-container/src/main/java/org/apache/pluto/spi/optional/PortletInvokerService.java
    portals/pluto/branches/1.1-286-trunk-merge/pluto-container/src/main/java/org/apache/pluto/spi/optional/PortletRegistryService.java
    portals/pluto/branches/1.1-286-trunk-merge/pluto-container/src/main/java/org/apache/pluto/util/StringUtils.java
    portals/pluto/branches/1.1-286-trunk-merge/pluto-portal-driver-impl/src/main/java/org/apache/pluto/driver/services/container/EventProviderImpl.java
    portals/pluto/branches/1.1-286-trunk-merge/pluto-portal-driver-impl/src/main/java/org/apache/pluto/driver/services/container/PortletWindowThread.java

Modified: portals/pluto/branches/1.1-286-trunk-merge/pluto-container/src/main/java/org/apache/pluto/core/DefaultPortletInvokerService.java
URL: http://svn.apache.org/viewvc/portals/pluto/branches/1.1-286-trunk-merge/pluto-container/src/main/java/org/apache/pluto/core/DefaultPortletInvokerService.java?rev=607096&r1=607095&r2=607096&view=diff
==============================================================================
--- portals/pluto/branches/1.1-286-trunk-merge/pluto-container/src/main/java/org/apache/pluto/core/DefaultPortletInvokerService.java (original)
+++ portals/pluto/branches/1.1-286-trunk-merge/pluto-container/src/main/java/org/apache/pluto/core/DefaultPortletInvokerService.java Thu Dec 27 09:26:29 2007
@@ -116,7 +116,7 @@
      * @see PortletServlet
      * @see javax.portlet.Portlet#render(javax.portlet.RenderRequest,javax.portlet.RenderResponse)
      */
-    public void event(HttpServletRequest request, HttpServletResponse response, InternalPortletWindow window, FilterManager filterManager)
+    public void event(EventRequest request, EventResponse response, InternalPortletWindow window, FilterManager filterManager)
         throws IOException, PortletException {
         if (LOG.isDebugEnabled()) {
             LOG.debug("Performing Render Invocation");

Modified: portals/pluto/branches/1.1-286-trunk-merge/pluto-container/src/main/java/org/apache/pluto/core/PortletContainerImpl.java
URL: http://svn.apache.org/viewvc/portals/pluto/branches/1.1-286-trunk-merge/pluto-container/src/main/java/org/apache/pluto/core/PortletContainerImpl.java?rev=607096&r1=607095&r2=607096&view=diff
==============================================================================
--- portals/pluto/branches/1.1-286-trunk-merge/pluto-container/src/main/java/org/apache/pluto/core/PortletContainerImpl.java (original)
+++ portals/pluto/branches/1.1-286-trunk-merge/pluto-container/src/main/java/org/apache/pluto/core/PortletContainerImpl.java Thu Dec 27 09:26:29 2007
@@ -512,7 +512,7 @@
         try {
             ContainerInvocation.setInvocation(this, internalPortletWindow);
             FilterManager filterManager = filterInitialisation(internalPortletWindow,PortletRequest.EVENT_PHASE);
-            invoker.event(request, response, internalPortletWindow, filterManager);
+            invoker.event(eventRequest, eventResponse, internalPortletWindow, filterManager);
         }
         finally {
             ContainerInvocation.clearInvocation();

Modified: portals/pluto/branches/1.1-286-trunk-merge/pluto-container/src/main/java/org/apache/pluto/core/PortletContextManager.java
URL: http://svn.apache.org/viewvc/portals/pluto/branches/1.1-286-trunk-merge/pluto-container/src/main/java/org/apache/pluto/core/PortletContextManager.java?rev=607096&r1=607095&r2=607096&view=diff
==============================================================================
--- portals/pluto/branches/1.1-286-trunk-merge/pluto-container/src/main/java/org/apache/pluto/core/PortletContextManager.java (original)
+++ portals/pluto/branches/1.1-286-trunk-merge/pluto-container/src/main/java/org/apache/pluto/core/PortletContextManager.java Thu Dec 27 09:26:29 2007
@@ -91,7 +91,10 @@
      */
     private final List registryListeners = new ArrayList();
 
-    
+    /**
+     * The classloader for the portal, key is portletWindow and value is the classloader.
+     */
+    private final Map classLoaders = new HashMap();
     
     // Constructor -------------------------------------------------------------
     
@@ -136,6 +139,7 @@
                 portletContext.getApplicationId() + "/" + portletDD.getPortletName(),
                 new PortletConfigImpl(config, portletContext, portletDD, portletAppDD)
             );
+            classLoaders.put(portletDD.getPortletName(), Thread.currentThread().getContextClassLoader());
         }
 
         return portletContext.getApplicationId();
@@ -175,7 +179,7 @@
         }
         return (InternalPortletContext) portletContexts.get(applicationId);
     }
-
+    
     public void remove(InternalPortletContext context) {
         portletContexts.remove(context.getApplicationId());
         Iterator configs = portletConfigs.keySet().iterator();
@@ -234,6 +238,11 @@
         String msg = "Unable to retrieve portlet application descriptor: '"+applicationId+"'"; 
         LOG.warn(msg);
         throw new PortletContainerException(msg);
+    }
+    
+    public ClassLoader getClassLoader(String portletName){
+    	
+    	return (ClassLoader)classLoaders.get(portletName);
     }
 
     public void addPortletRegistryListener(PortletRegistryListener listener) {

Modified: portals/pluto/branches/1.1-286-trunk-merge/pluto-container/src/main/java/org/apache/pluto/spi/optional/PortletInvokerService.java
URL: http://svn.apache.org/viewvc/portals/pluto/branches/1.1-286-trunk-merge/pluto-container/src/main/java/org/apache/pluto/spi/optional/PortletInvokerService.java?rev=607096&r1=607095&r2=607096&view=diff
==============================================================================
--- portals/pluto/branches/1.1-286-trunk-merge/pluto-container/src/main/java/org/apache/pluto/spi/optional/PortletInvokerService.java (original)
+++ portals/pluto/branches/1.1-286-trunk-merge/pluto-container/src/main/java/org/apache/pluto/spi/optional/PortletInvokerService.java Thu Dec 27 09:26:29 2007
@@ -43,7 +43,7 @@
     public void action(ActionRequest req, ActionResponse res, InternalPortletWindow window, FilterManager filterManager)
     	throws IOException, PortletException;
     
-    public void event(HttpServletRequest request, HttpServletResponse response, InternalPortletWindow window, FilterManager filterManager)
+    public void event(EventRequest request, EventResponse response, InternalPortletWindow window, FilterManager filterManager)
 		throws IOException, PortletException;
 
     public void render(RenderRequest req, RenderResponse res, InternalPortletWindow window, FilterManager filterManager)

Modified: portals/pluto/branches/1.1-286-trunk-merge/pluto-container/src/main/java/org/apache/pluto/spi/optional/PortletRegistryService.java
URL: http://svn.apache.org/viewvc/portals/pluto/branches/1.1-286-trunk-merge/pluto-container/src/main/java/org/apache/pluto/spi/optional/PortletRegistryService.java?rev=607096&r1=607095&r2=607096&view=diff
==============================================================================
--- portals/pluto/branches/1.1-286-trunk-merge/pluto-container/src/main/java/org/apache/pluto/spi/optional/PortletRegistryService.java (original)
+++ portals/pluto/branches/1.1-286-trunk-merge/pluto-container/src/main/java/org/apache/pluto/spi/optional/PortletRegistryService.java Thu Dec 27 09:26:29 2007
@@ -102,6 +102,8 @@
     PortletConfig getPortletConfig(String applicationId, String portletName)
         throws PortletContainerException;
 
+    ClassLoader getClassLoader(String portletName);
+    
     /**
      * Add a listener which will recieve notifications of newly
      * registered applications.

Modified: portals/pluto/branches/1.1-286-trunk-merge/pluto-container/src/main/java/org/apache/pluto/util/StringUtils.java
URL: http://svn.apache.org/viewvc/portals/pluto/branches/1.1-286-trunk-merge/pluto-container/src/main/java/org/apache/pluto/util/StringUtils.java?rev=607096&r1=607095&r2=607096&view=diff
==============================================================================
--- portals/pluto/branches/1.1-286-trunk-merge/pluto-container/src/main/java/org/apache/pluto/util/StringUtils.java (original)
+++ portals/pluto/branches/1.1-286-trunk-merge/pluto-container/src/main/java/org/apache/pluto/util/StringUtils.java Thu Dec 27 09:26:29 2007
@@ -132,15 +132,17 @@
         return strippedType.trim();
     }
 
-    public static String encode(StringBuffer url){
-    	boolean contains = url.toString().contains("|");
+    public static void encode(StringBuffer url){
+    	bla(url,"|","%7C");
+    	bla(url,"\"","%22");
+    }
+    private static void bla(StringBuffer url, String character, String change){
+    	boolean contains = url.toString().contains(character);
     	while (contains){
-    		int index = url.indexOf("|");
+    		int index = url.indexOf(character);
     		url.deleteCharAt(index);
-    		url.insert(index, "%7C", 0, 3);
-    		contains = url.toString().contains("|");
+    		url.insert(index, change, 0, 3);
+    		contains = url.toString().contains(character);
     	}
-    	
-    	return null;
     }
 }

Modified: portals/pluto/branches/1.1-286-trunk-merge/pluto-portal-driver-impl/src/main/java/org/apache/pluto/driver/services/container/EventProviderImpl.java
URL: http://svn.apache.org/viewvc/portals/pluto/branches/1.1-286-trunk-merge/pluto-portal-driver-impl/src/main/java/org/apache/pluto/driver/services/container/EventProviderImpl.java?rev=607096&r1=607095&r2=607096&view=diff
==============================================================================
--- portals/pluto/branches/1.1-286-trunk-merge/pluto-portal-driver-impl/src/main/java/org/apache/pluto/driver/services/container/EventProviderImpl.java (original)
+++ portals/pluto/branches/1.1-286-trunk-merge/pluto-portal-driver-impl/src/main/java/org/apache/pluto/driver/services/container/EventProviderImpl.java Thu Dec 27 09:26:29 2007
@@ -22,6 +22,7 @@
 import java.util.Collection;
 import java.util.HashMap;
 import java.util.HashSet;
+import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -51,9 +52,9 @@
 import org.apache.pluto.descriptors.portlet.PortletDD;
 import org.apache.pluto.driver.AttributeKeys;
 import org.apache.pluto.driver.config.DriverConfiguration;
-import org.apache.pluto.driver.core.PortletWindowImpl;
 import org.apache.pluto.driver.core.PortalRequestContext;
-import org.apache.pluto.driver.services.portal.PortletApplicationConfig;
+import org.apache.pluto.driver.core.PortletWindowImpl;
+import org.apache.pluto.driver.services.portal.PageConfig;
 import org.apache.pluto.driver.services.portal.PortletWindowConfig;
 import org.apache.pluto.driver.url.PortalURL;
 import org.apache.pluto.driver.url.impl.PortalURLParserImpl;
@@ -61,110 +62,128 @@
 import org.apache.pluto.internal.impl.EventImpl;
 import org.apache.pluto.internal.impl.InternalPortletWindowImpl;
 import org.apache.pluto.spi.EventProvider;
+import org.apache.pluto.spi.optional.PortletRegistryService;
+
+public class EventProviderImpl implements org.apache.pluto.spi.EventProvider,
+		Cloneable {
 
-public class EventProviderImpl implements org.apache.pluto.spi.EventProvider, Cloneable {
-	
 	private static final int DEFAULT_MAPSIZE = 10;
 
 	/** Logger. */
-    private static final Log LOG = LogFactory.getLog(EventProviderImpl.class);
+	private static final Log LOG = LogFactory.getLog(EventProviderImpl.class);
 
 	private static final long WAITING_CYCLE = 100;
-    
-    private HttpServletRequest request;
-    private HttpServletResponse response;
-    private PortletContainer container;
-    private PortletWindow portletWindow;
-    
-    ThreadGroup threadGroup = new ThreadGroup("FireEventThreads");
-    
-    private EventList savedEvents = new EventList();
-    
-    private Map<String,PortletWindowThread> portletWindowThreads = new HashMap<String, PortletWindowThread>();
-    	
-    /**
-     * factory method
-     * gets the EventProvider out of the Request, or sets a new one
-     * @param request The {@link HttpServletRequest} of the EventProvider
-     * @param response The {@link HttpServletResponse} of the EventProvider
-     * @return The corresponding EventProvierImpl instance
-     */
-    public static EventProviderImpl getEventProviderImpl(HttpServletRequest request,
-    		PortletWindow portletWindow) {
-    	EventProviderImpl eventProvider = (EventProviderImpl) request.getAttribute(Constants.PROVIDER);
-    	if (eventProvider == null) {
-    		eventProvider = new EventProviderImpl();
-    		eventProvider.request = request;
-    		PortalRequestContext context = PortalRequestContext.getContext(request);
-    		eventProvider.response = context.getResponse();
+
+	private HttpServletRequest request;
+
+	private HttpServletResponse response;
+
+	private PortletContainer container;
+
+	private PortletWindow portletWindow;
+
+	ThreadGroup threadGroup = new ThreadGroup("FireEventThreads");
+
+	private EventList savedEvents = new EventList();
+
+	private Map<String, PortletWindowThread> portletWindowThreads = new HashMap<String, PortletWindowThread>();
+
+	/** PortletRegistryService used to obtain PortletApplicationConfig objects */
+	private PortletRegistryService portletRegistry;
+
+	/**
+	 * factory method gets the EventProvider out of the Request, or sets a new
+	 * one
+	 * 
+	 * @param request
+	 *            The {@link HttpServletRequest} of the EventProvider
+	 * @param response
+	 *            The {@link HttpServletResponse} of the EventProvider
+	 * @return The corresponding EventProvierImpl instance
+	 */
+	public static EventProviderImpl getEventProviderImpl(
+			HttpServletRequest request, PortletWindow portletWindow) {
+		EventProviderImpl eventProvider = (EventProviderImpl) request
+				.getAttribute(Constants.PROVIDER);
+		if (eventProvider == null) {
+			eventProvider = new EventProviderImpl();
+			eventProvider.request = request;
+			PortalRequestContext context = PortalRequestContext
+					.getContext(request);
+			eventProvider.response = context.getResponse();
 			ServletContext servletContext = context.getServletContext();
-			eventProvider.container = (PortletContainer) servletContext.getAttribute(AttributeKeys.PORTLET_CONTAINER);
-    		request.setAttribute(Constants.PROVIDER, eventProvider);
-    	}
-    	try {
-    		eventProvider = (EventProviderImpl) eventProvider.clone();
-    	} catch (CloneNotSupportedException e) {
-    		throw new IllegalStateException(e);
-    	} 
-    	eventProvider.portletWindow = portletWindow;
-    	return eventProvider;
-    }
-    
-    /**
-     * factory method, for accessing the static elements without a
-     * request / response
-     * FIXME: bad idea 
-     * @return The EventProvider for accessing the static elements
-     */
-    public static EventProvider getEventProviderImpl() {
+			eventProvider.container = (PortletContainer) servletContext
+					.getAttribute(AttributeKeys.PORTLET_CONTAINER);
+			request.setAttribute(Constants.PROVIDER, eventProvider);
+		}
+		try {
+			eventProvider = (EventProviderImpl) eventProvider.clone();
+		} catch (CloneNotSupportedException e) {
+			throw new IllegalStateException(e);
+		}
+		eventProvider.portletWindow = portletWindow;
+		return eventProvider;
+	}
+
+	/**
+	 * factory method, for accessing the static elements without a request /
+	 * response FIXME: bad idea
+	 * 
+	 * @return The EventProvider for accessing the static elements
+	 */
+	public static EventProvider getEventProviderImpl() {
 		return new EventProviderImpl();
 	}
-   
-    /**
-     * c'tor
-     */
-    private EventProviderImpl(){
-    	
-    }
-    
-    /**
-     * Register an event, which should be fired within that request
-     * @param qname
-     * @param value
-     * @throws {@link IllegalArgumentException}
-     */
-    public void registerToFireEvent(QName qname, Serializable value) 
-    throws IllegalArgumentException {
+
+	/**
+	 * c'tor
+	 */
+	private EventProviderImpl() {
+
+	}
+
+	/**
+	 * Register an event, which should be fired within that request
+	 * 
+	 * @param qname
+	 * @param value
+	 * @throws {@link IllegalArgumentException}
+	 */
+	public void registerToFireEvent(QName qname, Serializable value)
+			throws IllegalArgumentException {
 		if (isDeclaredAsPublishingEvent(qname)) {
-			
-			if (value != null && !isValueInstanceOfDefinedClass(qname,value))
-				throw new IllegalArgumentException("Payload has not the right class");
-		
+
+			if (value != null && !isValueInstanceOfDefinedClass(qname, value))
+				throw new IllegalArgumentException(
+						"Payload has not the right class");
+
 			try {
-	
+
 				if (value == null) {
-					savedEvents.addEvent(new EventImpl(qname,value));
+					savedEvents.addEvent(new EventImpl(qname, value));
 				} else if (!(value instanceof Serializable)) {
-					throw new IllegalArgumentException("Object payload must implement Serializable");
-				}
-				else {
-					
+					throw new IllegalArgumentException(
+							"Object payload must implement Serializable");
+				} else {
+
 					Class clazz = value.getClass();
-	
+
 					JAXBContext jc = JAXBContext.newInstance(clazz);
-	
-					Marshaller marshaller  = jc.createMarshaller();
-	
+
+					Marshaller marshaller = jc.createMarshaller();
+
 					Writer out = new StringWriter();
-	
-					JAXBElement<Serializable> element = new JAXBElement<Serializable>(qname,clazz,value);
+
+					JAXBElement<Serializable> element = new JAXBElement<Serializable>(
+							qname, clazz, value);
 					marshaller.marshal(element, out);
-	//					marshaller.marshal(value, out);
-	
+					// marshaller.marshal(value, out);
+
 					if (out != null) {
-						savedEvents.addEvent(new EventImpl(qname,(Serializable) out.toString()));
-					} else { 
-						savedEvents.addEvent(new EventImpl(qname,value));
+						savedEvents.addEvent(new EventImpl(qname,
+								(Serializable) out.toString()));
+					} else {
+						savedEvents.addEvent(new EventImpl(qname, value));
 					}
 				}
 			} catch (JAXBException e) {
@@ -174,57 +193,64 @@
 			} catch (FactoryConfigurationError e) {
 				// TODO Auto-generated catch block
 				e.printStackTrace();
-	//				} catch (ClassNotFoundException e) {
-	//				// TODO Auto-generated catch block
-	//				e.printStackTrace();
+				// } catch (ClassNotFoundException e) {
+				// // TODO Auto-generated catch block
+				// e.printStackTrace();
 			}
-		}	
-    }
+		}
+	}
 
 	/**
-	 * Fire all saved events
-	 * Note, that the order isn't important @see PLT14.3.2 
-	 * @param eventContainer The {@link PortletContainerImpl} to fire the events
+	 * Fire all saved events Note, that the order isn't important
+	 * 
+	 * @see PLT14.3.2
+	 * @param eventContainer
+	 *            The {@link PortletContainerImpl} to fire the events
 	 */
 	public void fireEvents(EventContainer eventContainer) {
 		ServletContext servletContext = eventContainer.getServletContext();
-		DriverConfiguration driverConfig = (DriverConfiguration) servletContext.getAttribute(
-        		AttributeKeys.DRIVER_CONFIG);
+		DriverConfiguration driverConfig = (DriverConfiguration) servletContext
+				.getAttribute(AttributeKeys.DRIVER_CONFIG);
 
 		PortalURL portalURL = PortalURLParserImpl.getParser().parse(request);
-		
-		while (savedEvents.hasMoreEvents() && savedEvents.getSize() < Constants.MAX_EVENTS_SIZE){
-			
+
+		while (savedEvents.hasMoreEvents()
+				&& savedEvents.getSize() < Constants.MAX_EVENTS_SIZE) {
+
 			Event eActual = getArbitraryEvent();
-			
+
 			this.savedEvents.setProcessed(eActual);
-			
-        	List<String> portletNames = getAllPortletsRegisteredForEvent(eActual,driverConfig);
-        	
-        	Collection<PortletWindowConfig> portlets = getAllPortlets(driverConfig);
-        	
-        	// iterate all portlets in the portal        	
-        	for (PortletWindowConfig config : portlets) {
-        		PortletWindow window = new PortletWindowImpl(config, portalURL);
-        		if (portletNames != null) {
-        			for (String portlet : portletNames) {
-        				if (portlet.equals(config.getId())){
-
-        					// the thread now is a new one, with possible waiting,
-        					// for the old to exit
-        					PortletWindowThread portletWindowThread = 
-        						getPortletWindowThread(eventContainer, config, window);
-
-        					// is this event 
-        					portletWindowThread.addEvent(eActual);
-
-        					portletWindowThread.start();
-        				}
-        			}
-        		}
-        	}
-        	waitForEventExecution();
-        	try {
+
+			List<String> portletNames = getAllPortletsRegisteredForEvent(
+					eActual, driverConfig);
+
+			Collection<PortletWindowConfig> portlets = getAllPortlets(driverConfig);
+
+			// iterate all portlets in the portal
+			for (PortletWindowConfig config : portlets) {
+				PortletWindow window = new PortletWindowImpl(config, portalURL);
+				if (portletNames != null) {
+					for (String portlet : portletNames) {
+						if (portlet.equals(config.getId())) {
+
+							// the thread now is a new one, with possible
+							// waiting,
+							// for the old to exit
+							
+
+							PortletWindowThread portletWindowThread = getPortletWindowThread(
+									eventContainer, config, window);
+
+							// is this event
+							portletWindowThread.addEvent(eActual);
+
+							portletWindowThread.start();
+						}
+					}
+				}
+			}
+			waitForEventExecution();
+			try {
 				Thread.sleep(WAITING_CYCLE);
 			} catch (InterruptedException e) {
 				// TODO Auto-generated catch block
@@ -234,55 +260,76 @@
 		waitForEventExecution();
 	}
 
-	private List<String> getAllPortletsRegisteredForEvent(Event event, DriverConfiguration driverConfig) {
+	private List<String> getAllPortletsRegisteredForEvent(Event event,
+			DriverConfiguration driverConfig) {
 		Set<String> resultSet = new HashSet<String>();
 		List<String> resultList = new ArrayList<String>();
 		QName eventName = event.getQName();
 		Collection<PortletWindowConfig> portlets = getAllPortlets(driverConfig);
-		
+
 		for (PortletWindowConfig portlet : portlets) {
 			String contextPath = portlet.getContextPath();
 			PortletAppDD portletAppDD = null;
 			try {
-				portletAppDD = container.getPortletApplicationDescriptor(contextPath);
+				portletAppDD = container
+						.getPortletApplicationDescriptor(contextPath);
 				List<PortletDD> portletDDs = portletAppDD.getPortlets();
 				List<QName> aliases = getAllAliases(eventName, portletAppDD);
 				for (PortletDD portletDD : portletDDs) {
-					List<QName> processingEvents = portletDD.getProcessingEvents();
-					if ((processingEvents != null) && processingEvents.contains(eventName)){
-						if (portletDD.getPortletName().equals(portlet.getPortletName()) ){
-							resultSet.add(portlet.getId());							
+					List<QName> processingEvents = portletDD
+							.getProcessingEvents();
+					if ((processingEvents != null)
+							&& processingEvents.contains(eventName)) {
+						if (portletDD.getPortletName().equals(
+								portlet.getPortletName())) {
+							resultSet.add(portlet.getId());
 						}
 					} else {
-						
-						if (processingEvents!= null) {
-							for (QName name : processingEvents) {		
+
+						if (processingEvents != null) {
+							for (QName name : processingEvents) {
 								// add also grouped portlets, that ends with "."
-								if (name.toString().endsWith(".") && eventName.toString().startsWith(name.toString())
-										&& portletDD.getPortletName().equals(portlet.getPortletName())){
+								if (name.toString().endsWith(".")
+										&& eventName.toString().startsWith(
+												name.toString())
+										&& portletDD.getPortletName().equals(
+												portlet.getPortletName())) {
 									resultSet.add(portlet.getId());
 								}
 								// also look for alias names:
 								if (aliases != null) {
 									for (QName alias : aliases) {
-										if (alias.toString().equals(name.toString()) && 
-												portletDD.getPortletName().equals(portlet.getPortletName())) {
+										if (alias.toString().equals(
+												name.toString())
+												&& portletDD
+														.getPortletName()
+														.equals(
+																portlet
+																		.getPortletName())) {
 											resultSet.add(portlet.getId());
 										}
 									}
-								}								
+								}
 								// also look for default namespaced events
-								if (name.getNamespaceURI() == null || name.getNamespaceURI().equals("")){
-									String defaultNamespace = portletAppDD.getDefaultNamespace();
-									QName qname = new QName(defaultNamespace,name.getLocalPart());
-									if (eventName.toString().equals(qname.toString()) &&
-											portletDD.getPortletName().equals(portlet.getPortletName())){
+								if (name.getNamespaceURI() == null
+										|| name.getNamespaceURI().equals("")) {
+									String defaultNamespace = portletAppDD
+											.getDefaultNamespace();
+									QName qname = new QName(defaultNamespace,
+											name.getLocalPart());
+									if (eventName.toString().equals(
+											qname.toString())
+											&& portletDD
+													.getPortletName()
+													.equals(
+															portlet
+																	.getPortletName())) {
 										resultSet.add(portlet.getId());
 									}
 								}
 							}
 						}
-					} 
+					}
 				}
 			} catch (PortletContainerException e) {
 				// TODO Auto-generated catch block
@@ -290,7 +337,7 @@
 			}
 		}
 
-		//make list
+		// make list
 		for (String name : resultSet) {
 			resultList.add(name);
 		}
@@ -300,7 +347,8 @@
 	private List<QName> getAllAliases(QName eventName, PortletAppDD portletAppDD) {
 		if (portletAppDD.getEvents() != null) {
 			for (EventDefinitionDD eventDefinition : portletAppDD.getEvents()) {
-				if (eventName.toString().equals(eventDefinition.getName().toString())){
+				if (eventName.toString().equals(
+						eventDefinition.getName().toString())) {
 					return eventDefinition.getAlias();
 				}
 			}
@@ -309,40 +357,53 @@
 	}
 
 	/**
-	 * gets the right PortletWindowThread or makes a new one,
-	 * if theres none
+	 * gets the right PortletWindowThread or makes a new one, if theres none
+	 * 
 	 * @param eventContainer
 	 * @param config
 	 * @param window
 	 * @return
 	 */
-	private PortletWindowThread getPortletWindowThread(EventContainer eventContainer, PortletWindowConfig config, PortletWindow window) {
-		String windowID = window.getId().getStringId();
-		PortletWindowThread portletWindowThread = portletWindowThreads.get(windowID);
-		if (portletWindowThread == null){
-			portletWindowThread = new PortletWindowThread(
-					threadGroup,config.getId(),this, window, eventContainer);
-			portletWindowThreads.put(windowID, portletWindowThread);
-		} else {
-			// a thread could be started twice, so we make a new one,
-			// after the old thread stopped
-//			try {
-			try {
-				portletWindowThread.join();
-			} catch (InterruptedException e) {
-				// TODO Auto-generated catch block
-				e.printStackTrace();
+	private PortletWindowThread getPortletWindowThread(
+			EventContainer eventContainer, PortletWindowConfig config,
+			PortletWindow window) {
+		ServletContext servletContext = eventContainer.getServletContext();
+		if (portletRegistry == null) {
+			portletRegistry = ((PortletContainer) servletContext
+					.getAttribute(AttributeKeys.PORTLET_CONTAINER))
+					.getOptionalContainerServices().getPortletRegistryService();
+		}
+		if (portletRegistry != null){
+			String windowID = window.getId().getStringId();
+			PortletWindowThread portletWindowThread = portletWindowThreads
+					.get(windowID);
+			if (portletWindowThread == null) {
+				portletWindowThread = new PortletWindowThread(threadGroup, config
+						.getId(), this, window, eventContainer,portletRegistry);
+				portletWindowThreads.put(windowID, portletWindowThread);
+			} else {
+				// a thread could be started twice, so we make a new one,
+				// after the old thread stopped
+				// try {
+				try {
+					portletWindowThread.join();
+				} catch (InterruptedException e) {
+					// TODO Auto-generated catch block
+					e.printStackTrace();
+				}
+				portletWindowThreads.remove(portletWindowThread);
+				portletWindowThread = new PortletWindowThread(threadGroup, config
+						.getId(), this, window, eventContainer,portletRegistry);
+				portletWindowThreads.put(windowID, portletWindowThread);
+				// } catch (InterruptedException e) {
+				// // TODO Auto-generated catch block
+				// e.printStackTrace();
+				// }
 			}
-			portletWindowThreads.remove(portletWindowThread);
-			portletWindowThread = new PortletWindowThread(
-					threadGroup,config.getId(),this, window, eventContainer);
-			portletWindowThreads.put(windowID, portletWindowThread);
-//			} catch (InterruptedException e) {
-//				// TODO Auto-generated catch block
-//				e.printStackTrace();
-//			}
+			return portletWindowThread;
 		}
-		return portletWindowThread;
+		else 
+			return null;
 	}
 
 	/**
@@ -350,9 +411,9 @@
 	 */
 	private void waitForEventExecution() {
 		long counter = 0;
-		while (threadGroup.activeCount()>0) {
+		while (threadGroup.activeCount() > 0) {
 			try {
-				counter =+ WAITING_CYCLE;
+				counter = +WAITING_CYCLE;
 				if (counter > 500) {
 					threadGroup.stop();
 				}
@@ -366,28 +427,61 @@
 
 	/**
 	 * gets an arbitrary event, which is not processed yet.
+	 * 
 	 * @return the arbitrary event
 	 */
 	private Event getArbitraryEvent() {
 		Event eActual = null;
 		for (Event event : this.savedEvents.getEvents()) {
-			if (this.savedEvents.isNotProcessed(event)){
+			if (this.savedEvents.isNotProcessed(event)) {
 				eActual = event;
-			}				
+			}
 		}
 		return eActual;
 	}
 
-
 	/**
 	 * 
 	 */
-	private Collection<PortletWindowConfig> getAllPortlets(DriverConfiguration driverConfig) {
-//		Collection<PortletApplicationConfig> apps = driverConfig.getPortletApplications();
+	private Collection<PortletWindowConfig> getAllPortlets(
+			DriverConfiguration driverConfig) {
 		Collection<PortletWindowConfig> portlets = new ArrayList<PortletWindowConfig>();
-//		for (PortletApplicationConfig app : apps) {
-//			portlets.addAll(app.getPortlets());			
+		ServletContext servletContext = PortalRequestContext
+			.getContext(request).getServletContext();
+//		if (portletRegistry == null) {
+//			portletRegistry = ((PortletContainer) servletContext
+//					.getAttribute(AttributeKeys.PORTLET_CONTAINER))
+//					.getOptionalContainerServices().getPortletRegistryService();
 //		}
+//		if (portletRegistry != null){
+			Collection pages = driverConfig.getPages();
+			if (pages != null){
+				Iterator iPages = pages.iterator();
+				while(iPages.hasNext()){
+					PageConfig pageConfig = (PageConfig) iPages.next();
+					Collection portletIDs = pageConfig.getPortletIds();
+					if (portletIDs != null){
+						Iterator iPortletIDs = portletIDs.iterator();
+						while(iPortletIDs.hasNext()){
+							portlets.add(PortletWindowConfig.fromId(iPortletIDs.next().toString()));
+						}
+					}
+				}
+			}
+			
+//			PortletWindowConfig.fromId(((PageConfig)driverConfig.getPages().iterator().next()).getPortletIds().iterator().next().toString());
+//			Iterator i = portletRegistry.getRegisteredPortletApplications();
+//			while(i.hasNext()){
+//				portlets.addAll(((PortletAppDD)portletRegistry.getRegisteredPortletApplications().next()).getPortlets());
+//			}
+//		}
+
+		// Collection<PortletApplicationConfig> apps =
+		// driverConfig.getPortletApplications();
+		
+		// for (PortletApplicationConfig app : apps) {
+		// portlets.addAll(app.getPortlets());
+		// }
 		return portlets;
 	}
 
@@ -404,29 +498,47 @@
 	public HttpServletResponse getResponse() {
 		return response;
 	}
-	
+
 	/**
 	 * Gets the saved events.
 	 * 
 	 * @return the saved events
 	 */
-	public EventList getSavedEvents(){
+	public EventList getSavedEvents() {
 		return savedEvents;
 	}
-	
+
 	private boolean isDeclaredAsPublishingEvent(QName qname) {
-		ServletContext servletContext = PortalRequestContext.getContext(request).getServletContext();
-		InternalPortletWindow internalPortletWindow = new InternalPortletWindowImpl(servletContext, this.portletWindow);
-		List<QName> events = internalPortletWindow.getPortletEntity()
-		.getPortletDefinition().getPublishingEvents();
+		ServletContext servletContext = PortalRequestContext
+				.getContext(request).getServletContext();
+		InternalPortletWindow internalPortletWindow = new InternalPortletWindowImpl(
+				servletContext, this.portletWindow);
+		String applicationId = PortletWindowConfig
+				.parseContextPath(internalPortletWindow.getId().getStringId());
+		String portletName = PortletWindowConfig
+				.parsePortletName(internalPortletWindow.getId().getStringId());
+		if (portletRegistry == null) {
+			portletRegistry = ((PortletContainer) servletContext
+					.getAttribute(AttributeKeys.PORTLET_CONTAINER))
+					.getOptionalContainerServices().getPortletRegistryService();
+		}
+		List<QName> events = null;
+		try {
+			events = portletRegistry.getPortletDescriptor(applicationId,
+					portletName).getPublishingEvents();
+		} catch (PortletContainerException e1) {
+			// TODO Auto-generated catch block
+			e1.printStackTrace();
+		}
 		if (events != null) {
 			String contextPath = portletWindow.getContextPath();
 			try {
-				PortletAppDD portletAppDD =	container.getPortletApplicationDescriptor(contextPath);
+				PortletAppDD portletAppDD = container
+						.getPortletApplicationDescriptor(contextPath);
 				String defaultNamespace = portletAppDD.getDefaultNamespace();
 				if (defaultNamespace == null) {
 					defaultNamespace = XMLConstants.NULL_NS_URI;
-				} 
+				}
 				for (QName name : events) {
 					String namespaceURI = name.getNamespaceURI();
 					if (XMLConstants.NULL_NS_URI.equals(namespaceURI)) {
@@ -438,26 +550,29 @@
 				}
 			} catch (PortletContainerException e) {
 				LOG.error(qname, e);
-			} 
+			}
 		}
 		return false;
 	}
-	
-	private boolean isValueInstanceOfDefinedClass(QName qname, Serializable value){
+
+	private boolean isValueInstanceOfDefinedClass(QName qname,
+			Serializable value) {
 		PortletAppDD portletAppDD = null;
 		try {
-			 portletAppDD =
-				 container.getPortletApplicationDescriptor(portletWindow.getContextPath());
-			 if (portletAppDD.getEvents() != null) {
-				 for (EventDefinitionDD event : portletAppDD.getEvents()) {
-					 if (event.getName().toString().equals(qname.toString())){
-						 return value.getClass().getName().equals(event.getJavaClass());
-					 }
-				 }
-			 }
+			portletAppDD = container
+					.getPortletApplicationDescriptor(portletWindow
+							.getContextPath());
+			if (portletAppDD.getEvents() != null) {
+				for (EventDefinitionDD event : portletAppDD.getEvents()) {
+					if (event.getName().toString().equals(qname.toString())) {
+						return value.getClass().getName().equals(
+								event.getJavaClass());
+					}
+				}
+			}
 		} catch (PortletContainerException e) {
 			LOG.error(qname, e);
-		} 
+		}
 		// event not declared
 		return true;
 	}

Modified: portals/pluto/branches/1.1-286-trunk-merge/pluto-portal-driver-impl/src/main/java/org/apache/pluto/driver/services/container/PortletWindowThread.java
URL: http://svn.apache.org/viewvc/portals/pluto/branches/1.1-286-trunk-merge/pluto-portal-driver-impl/src/main/java/org/apache/pluto/driver/services/container/PortletWindowThread.java?rev=607096&r1=607095&r2=607096&view=diff
==============================================================================
--- portals/pluto/branches/1.1-286-trunk-merge/pluto-portal-driver-impl/src/main/java/org/apache/pluto/driver/services/container/PortletWindowThread.java (original)
+++ portals/pluto/branches/1.1-286-trunk-merge/pluto-portal-driver-impl/src/main/java/org/apache/pluto/driver/services/container/PortletWindowThread.java Thu Dec 27 09:26:29 2007
@@ -46,6 +46,7 @@
 import org.apache.pluto.driver.core.PortalRequestContext;
 import org.apache.pluto.driver.core.PortalServletRequest;
 import org.apache.pluto.internal.impl.EventImpl;
+import org.apache.pluto.spi.optional.PortletRegistryService;
 
 public class PortletWindowThread extends Thread {
 	
@@ -55,14 +56,18 @@
 	
 	private EventContainer eventContainer;
 	
+	/** PortletRegistryService used to obtain PortletApplicationConfig objects */
+	private PortletRegistryService portletRegistry;
+	
 	private List<Event> events = new ArrayList<Event>();
 
 	public PortletWindowThread(ThreadGroup group, String name,
-			EventProviderImpl eventProvider, PortletWindow window, EventContainer eventContainer) {
+			EventProviderImpl eventProvider, PortletWindow window, EventContainer eventContainer, PortletRegistryService portletRegistry) {
 		super(group, name);
 		this.eventProvider = eventProvider;
 		this.portletWindow = window;
-		this.eventContainer = eventContainer;		
+		this.eventContainer = eventContainer;
+		this.portletRegistry = portletRegistry;
 	}
 
 	public PortletWindowThread(String name, 
@@ -108,7 +113,7 @@
 			        		// now test if object is jaxb
 			        		EventDefinitionDD eventDefinitionDD = getEventDefintion(event.getQName()); 
 			        		
-			        		ClassLoader loader = Thread.currentThread().getContextClassLoader();
+			        		ClassLoader loader = portletRegistry.getClassLoader(portletWindow.getPortletName());//Thread.currentThread().getContextClassLoader();
 			        		Class<? extends Serializable> clazz = loader.loadClass(eventDefinitionDD.getJavaClass()).asSubclass(Serializable.class);
 
 			        		JAXBContext jc = JAXBContext.newInstance(clazz);