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);