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 2008/10/22 21:28:55 UTC
svn commit: r707170 - in
/portals/jetspeed-2/portal/branches/JS2-871-pluto-2.0-upgrade:
components/jetspeed-portlet-factory/src/main/java/org/apache/jetspeed/factory/
jetspeed-api/src/main/java/org/apache/jetspeed/factory/
jetspeed-api/src/main/java/or...
Author: taylor
Date: Wed Oct 22 12:28:54 2008
New Revision: 707170
URL: http://svn.apache.org/viewvc?rev=707170&view=rev
Log:
https://issues.apache.org/jira/browse/JS2-871
Merges in https://issues.apache.org/jira/browse/JS2-913 - PortletFactory refactoring - Ate, please review, since the patch failed to merge and I had to merge my changes and yours in a combined hand merge
Modified:
portals/jetspeed-2/portal/branches/JS2-871-pluto-2.0-upgrade/components/jetspeed-portlet-factory/src/main/java/org/apache/jetspeed/factory/JetspeedPortletFactory.java
portals/jetspeed-2/portal/branches/JS2-871-pluto-2.0-upgrade/jetspeed-api/src/main/java/org/apache/jetspeed/factory/PortletFactory.java
portals/jetspeed-2/portal/branches/JS2-871-pluto-2.0-upgrade/jetspeed-api/src/main/java/org/apache/jetspeed/om/portlet/PortletDefinition.java
Modified: portals/jetspeed-2/portal/branches/JS2-871-pluto-2.0-upgrade/components/jetspeed-portlet-factory/src/main/java/org/apache/jetspeed/factory/JetspeedPortletFactory.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/branches/JS2-871-pluto-2.0-upgrade/components/jetspeed-portlet-factory/src/main/java/org/apache/jetspeed/factory/JetspeedPortletFactory.java?rev=707170&r1=707169&r2=707170&view=diff
==============================================================================
--- portals/jetspeed-2/portal/branches/JS2-871-pluto-2.0-upgrade/components/jetspeed-portlet-factory/src/main/java/org/apache/jetspeed/factory/JetspeedPortletFactory.java (original)
+++ portals/jetspeed-2/portal/branches/JS2-871-pluto-2.0-upgrade/components/jetspeed-portlet-factory/src/main/java/org/apache/jetspeed/factory/JetspeedPortletFactory.java Wed Oct 22 12:28:54 2008
@@ -18,7 +18,6 @@
import java.util.Collections;
import java.util.HashMap;
-import java.util.Iterator;
import java.util.Map;
import javax.portlet.Portlet;
@@ -56,14 +55,10 @@
*/
public class JetspeedPortletFactory implements PortletFactory
{
+ private static final Log log = LogFactory.getLog(JetspeedPortletFactory.class);
- private Map portletCache;
-
- private Map validatorCache;
-
- private static final Log log = LogFactory
- .getLog(JetspeedPortletFactory.class);
-
+ private Map<String, Map<String, PortletInstance>> portletCache;
+ private Map<String, Map<String, PreferencesValidator>> validatorCache;
private final Map<String, PortletFactoryInfo> classLoaderMap;
/**
@@ -92,13 +87,11 @@
boolean autoSwitchEditDefaultsModeToEditMode)
{
this.jetspeedConfig = jetspeedConfig;
- this.portletCache = Collections.synchronizedMap(new HashMap());
- this.validatorCache = Collections.synchronizedMap(new HashMap());
- classLoaderMap = Collections.synchronizedMap(new HashMap<String, PortletFactoryInfo>());
-
+ this.portletCache = Collections.synchronizedMap(new HashMap<String, Map<String, PortletInstance>>());
+ this.validatorCache = Collections.synchronizedMap(new HashMap<String, Map<String, PreferencesValidator>>());
+ this.classLoaderMap = Collections.synchronizedMap(new HashMap<String, PortletFactoryInfo>());
this.autoSwitchConfigMode = autoSwitchConfigMode;
this.autoSwitchEditDefaultsModeToEditMode = autoSwitchEditDefaultsModeToEditMode;
-
this.portletProxyUsed = (this.autoSwitchConfigMode || this.autoSwitchEditDefaultsModeToEditMode);
}
@@ -112,8 +105,7 @@
return this.portletProxyUsed;
}
- public void setCustomConfigModePortletUniqueName(
- String customConfigModePortletUniqueName)
+ public void setCustomConfigModePortletUniqueName(String customConfigModePortletUniqueName)
{
this.customConfigModePortletUniqueName = customConfigModePortletUniqueName;
}
@@ -127,6 +119,7 @@
{
synchronized (classLoaderMap)
{
+ unregisterPortletApplication(pa);
ServletContext servletContext = jetspeedConfig.getServletContext();
ServletContext portletAppContext = servletContext.getContext(pa.getName());
InternalPortletContext context = new JetspeedPortletContext(portletAppContext, pa);
@@ -144,17 +137,11 @@
if (info != null)
{
ClassLoader cl = info.getClassLoader();
- ClassLoader currentContextClassLoader = Thread
- .currentThread().getContextClassLoader();
- Iterator portletDefinitions = pa.getPortletDefinitions()
- .iterator();
- while (portletDefinitions.hasNext())
+ ClassLoader currentContextClassLoader = Thread.currentThread().getContextClassLoader();
+ Map<String, PortletInstance> instanceCache = portletCache.remove(pa.getName());
+ if (instanceCache != null)
{
- PortletDefinition pd = (PortletDefinition) portletDefinitions
- .next();
- String pdId = pd.getPortletName();
- Portlet portlet = (Portlet) portletCache.remove(pdId);
- if (portlet != null)
+ for (PortletInstance portlet : instanceCache.values())
{
try
{
@@ -163,12 +150,11 @@
}
finally
{
- Thread.currentThread().setContextClassLoader(
- currentContextClassLoader);
+ Thread.currentThread().setContextClassLoader(currentContextClassLoader);
}
}
- validatorCache.remove(pdId);
}
+ validatorCache.remove(pa.getName());
}
}
}
@@ -179,39 +165,39 @@
PreferencesValidator validator = null;
try
{
- String pdId = pd.getId().toString();
-
+ String paName = pd.getApplication().getName();
+ String pdName = pd.getPortletName();
synchronized (validatorCache)
{
- validator = (PreferencesValidator) validatorCache.get(pdId);
+ Map<String, PreferencesValidator> instanceCache = validatorCache.get(paName);
+ validator = (instanceCache != null) ? instanceCache.get(pdName) : null;
if (validator == null)
{
- String className = ((PortletDefinition) pd)
- .getPreferenceValidatorClassname();
+ String className = ((PortletDefinition) pd).getPreferenceValidatorClassname();
if (className != null)
{
- PortletApplication pa = (PortletApplication) pd
- .getPortletApplicationDefinition();
- PortletFactoryInfo info = classLoaderMap.get(pa.getName());
+ PortletFactoryInfo info = classLoaderMap.get(paName);
if (info != null)
{
ClassLoader paCl = info.getClassLoader();
- if (paCl == null) { throw new UnavailableException(
- "Portlet Application " + pa.getName()
- + " not available"); }
-
- ClassLoader currentContextClassLoader = Thread
- .currentThread().getContextClassLoader();
+ if (paCl == null)
+ {
+ throw new UnavailableException("Portlet Application " + paName + " not available");
+ }
+ ClassLoader currentContextClassLoader = Thread.currentThread().getContextClassLoader();
try
{
Class clazz = paCl.loadClass(className);
try
{
- Thread.currentThread().setContextClassLoader(
- paCl);
- validator = (PreferencesValidator) clazz
- .newInstance();
- validatorCache.put(pdId, validator);
+ Thread.currentThread().setContextClassLoader(paCl);
+ validator = (PreferencesValidator) clazz.newInstance();
+ if (instanceCache == null)
+ {
+ instanceCache = new HashMap<String, PreferencesValidator>();
+ validatorCache.put(paName, instanceCache);
+ }
+ instanceCache.put(pdName, validator);
}
finally
{
@@ -221,10 +207,7 @@
}
catch (Exception e)
{
- String msg = "Cannot create PreferencesValidator instance "
- + className
- + " for Portlet "
- + pd.getPortletName();
+ String msg = "Cannot create PreferencesValidator instance "+className+" for Portlet "+pdName;
log.error(msg, e);
}
}
@@ -248,103 +231,96 @@
* @return PortletInstance
* @throws PortletException
*/
- public PortletInstance getPortletInstance(ServletContext servletContext,
- PortletDefinition pd) throws PortletException
+ public PortletInstance getPortletInstance(ServletContext servletContext, PortletDefinition pd) throws PortletException
{
PortletInstance portlet = null;
- String pdId = pd.getId().toString();
- PortletApplication pa = (PortletApplication) pd
- .getPortletApplicationDefinition();
-
+ PortletApplication pa = pd.getApplication();
+ String paName = pa.getName();
+ String pdName = pd.getPortletName();
try
{
synchronized (portletCache)
{
- portlet = (PortletInstance) portletCache.get(pdId);
- if (null != portlet) { return portlet; }
-
- PortletFactoryInfo info = classLoaderMap.get(pa.getName());
- ClassLoader paCl = info.getClassLoader();
- if (paCl == null)
+ Map<String, PortletInstance> instanceCache = portletCache.get(paName);
+ portlet = instanceCache != null ? instanceCache.get(pdName) : null;
+ if (null != portlet)
{
- throw new UnavailableException(
- "Portlet Application " + pa.getName()
- + " not available"); }
-
- ClassLoader currentContextClassLoader = Thread.currentThread()
- .getContextClassLoader();
-
- try
+ return portlet;
+ }
+ PortletFactoryInfo info = classLoaderMap.get(paName);
+ if (info != null)
{
- Class clazz = paCl.loadClass(pd.getPortletClass());
+ ClassLoader paCl = info.getClassLoader();
+ if (paCl == null)
+ {
+ throw new UnavailableException("Portlet Application "+paName+" not available");
+ }
+ ClassLoader currentContextClassLoader = Thread.currentThread().getContextClassLoader();
try
{
- Thread.currentThread().setContextClassLoader(paCl);
- // wrap new Portlet inside PortletInstance which ensures
- // the destroy
- // method will wait for all its invocation threads to
- // complete
- // and thereby releasing all its ClassLoader locks as
- // needed for local portlets.
-
- if (this.portletProxyUsed
- && !PortletObjectProxy.isPortletObjectProxied())
+ Class clazz = paCl.loadClass(pd.getPortletClass());
+ try
{
- portlet = new JetspeedPortletProxyInstance(pd
- .getPortletName(), (Portlet) clazz
- .newInstance(),
- this.autoSwitchEditDefaultsModeToEditMode,
- this.autoSwitchConfigMode,
- this.customConfigModePortletUniqueName);
+ Thread.currentThread().setContextClassLoader(paCl);
+ // wrap new Portlet inside PortletInstance which ensures
+ // the destroy
+ // method will wait for all its invocation threads to
+ // complete
+ // and thereby releasing all its ClassLoader locks as
+ // needed for local portlets.
+
+ if (this.portletProxyUsed
+ && !PortletObjectProxy.isPortletObjectProxied())
+ {
+ portlet = new JetspeedPortletProxyInstance(pd
+ .getPortletName(), (Portlet) clazz
+ .newInstance(),
+ this.autoSwitchEditDefaultsModeToEditMode,
+ this.autoSwitchConfigMode,
+ this.customConfigModePortletUniqueName);
+ }
+ else
+ {
+ portlet = new JetspeedPortletInstance(pdName, (Portlet)clazz.newInstance());
+ }
}
- else
+ finally
{
- portlet = new JetspeedPortletInstance(pd
- .getPortletName(), (Portlet) clazz
- .newInstance());
+ Thread.currentThread().setContextClassLoader(currentContextClassLoader);
}
}
- finally
+ catch (Exception e)
{
- Thread.currentThread().setContextClassLoader(
- currentContextClassLoader);
+ String msg = "Cannot create Portlet instance " + pd.getPortletClass() + " for Portlet Application " + paName;
+ log.error(msg, e);
+ throw new UnavailableException(msg);
}
- }
- catch (Exception e)
- {
- String msg = "Cannot create Portlet instance "
- + pd.getPortletClass()
- + " for Portlet Application " + pa.getName();
- log.error(msg, e);
- throw new UnavailableException(msg);
- }
-
- PortletContext portletContext = PortalAccessor
- .createPortletContext(servletContext, pa);
- PortletConfig portletConfig = PortalAccessor
- .createPortletConfig(portletContext, pd);
-
- try
- {
+ PortletContext portletContext = PortalAccessor.createPortletContext(servletContext, pa);
+ PortletConfig portletConfig = PortalAccessor.createPortletConfig(portletContext, pd);
try
{
- Thread.currentThread().setContextClassLoader(paCl);
- portlet.init(portletConfig);
+ try
+ {
+ Thread.currentThread().setContextClassLoader(paCl);
+ portlet.init(portletConfig);
+ }
+ finally
+ {
+ Thread.currentThread().setContextClassLoader(currentContextClassLoader);
+ }
}
- finally
+ catch (PortletException e1)
{
- Thread.currentThread().setContextClassLoader(
- currentContextClassLoader);
+ log.error("Failed to initialize Portlet "+pd.getPortletClass()+" for Portlet Application "+paName, e1);
+ throw e1;
+ }
+ if (instanceCache == null)
+ {
+ instanceCache = new HashMap<String, PortletInstance>();
+ portletCache.put(paName, instanceCache);
}
+ instanceCache.put(pdName, portlet);
}
- catch (PortletException e1)
- {
- log.error("Failed to initialize Portlet "
- + pd.getPortletClass()
- + " for Portlet Application " + pa.getName(), e1);
- throw e1;
- }
- portletCache.put(pdId, portlet);
}
}
catch (PortletException pe)
@@ -353,10 +329,8 @@
}
catch (Throwable e)
{
- log.error("PortletFactory: Failed to load portlet "
- + pd.getPortletClass(), e);
- throw new UnavailableException("Failed to load portlet "
- + pd.getPortletClass() + ": " + e.toString());
+ log.error("PortletFactory: Failed to load portlet " + pd.getPortletClass(), e);
+ throw new UnavailableException("Failed to load portlet " + pd.getPortletClass() + ": " + e.toString());
}
return portlet;
}
@@ -365,16 +339,16 @@
{
if (pd != null)
{
- // System.out.println("$$$$ updating portlet config for " +
- // pd.getName());
- String key = pd.getId().toString();
- PortletInstance instance = (PortletInstance) portletCache.get(key);
- if (instance != null)
+ synchronized (portletCache)
{
- JetspeedPortletConfig config = (JetspeedPortletConfig) instance
- .getConfig();
- config.setPortletDefinition(pd);
- }
+ Map<String, PortletInstance> instanceCache = portletCache.get(pd.getApplication().getName());
+ PortletInstance instance = instanceCache != null ? instanceCache.get(pd.getPortletName()) : null;
+ if (instance != null)
+ {
+ JetspeedPortletConfig config = (JetspeedPortletConfig)instance.getConfig();
+ config.setPortletDefinition(pd);
+ }
+ }
}
}
@@ -406,11 +380,6 @@
return info.getContext();
}
throw new PortletContainerException("App context not found for application " + pad.getName());
-// ServletContext context = jetspeedConfig.getServletContext();
-// ServletContext portletAppContext = context.getContext(pad.getName());
-// JetspeedPortletContext jpc = new JetspeedPortletContext(portletAppContext, pad);
-// classLoaderMap.put(pa.getName(), new PortletFactoryInfo(cl, context));
-// return jpc;
}
}
Modified: portals/jetspeed-2/portal/branches/JS2-871-pluto-2.0-upgrade/jetspeed-api/src/main/java/org/apache/jetspeed/factory/PortletFactory.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/branches/JS2-871-pluto-2.0-upgrade/jetspeed-api/src/main/java/org/apache/jetspeed/factory/PortletFactory.java?rev=707170&r1=707169&r2=707170&view=diff
==============================================================================
--- portals/jetspeed-2/portal/branches/JS2-871-pluto-2.0-upgrade/jetspeed-api/src/main/java/org/apache/jetspeed/factory/PortletFactory.java (original)
+++ portals/jetspeed-2/portal/branches/JS2-871-pluto-2.0-upgrade/jetspeed-api/src/main/java/org/apache/jetspeed/factory/PortletFactory.java Wed Oct 22 12:28:54 2008
@@ -21,9 +21,10 @@
import javax.servlet.ServletContext;
import org.apache.jetspeed.om.portlet.PortletApplication;
+import org.apache.jetspeed.om.portlet.PortletDefinition;
import org.apache.pluto.PortletContainerException;
import org.apache.pluto.internal.InternalPortletContext;
-import org.apache.pluto.om.portlet.PortletDefinition;
+import org.apache.pluto.om.portlet.PortletApplicationDefinition;
/**
* <p>
@@ -45,7 +46,7 @@
boolean isPortletApplicationRegistered(PortletApplication pa);
ClassLoader getPortletApplicationClassLoader(PortletApplication pa);
PortletInstance getPortletInstance( ServletContext servletContext, PortletDefinition pd ) throws PortletException;
- PreferencesValidator getPreferencesValidator(PortletDefinition pd );
+ PreferencesValidator getPreferencesValidator(PortletDefinition pd);
void updatePortletConfig(PortletDefinition pd);
- InternalPortletContext getPortletContext(PortletApplication pa) throws PortletContainerException;
+ InternalPortletContext getPortletContext(PortletApplicationDefinition pa) throws PortletContainerException;
}
Modified: portals/jetspeed-2/portal/branches/JS2-871-pluto-2.0-upgrade/jetspeed-api/src/main/java/org/apache/jetspeed/om/portlet/PortletDefinition.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/branches/JS2-871-pluto-2.0-upgrade/jetspeed-api/src/main/java/org/apache/jetspeed/om/portlet/PortletDefinition.java?rev=707170&r1=707169&r2=707170&view=diff
==============================================================================
--- portals/jetspeed-2/portal/branches/JS2-871-pluto-2.0-upgrade/jetspeed-api/src/main/java/org/apache/jetspeed/om/portlet/PortletDefinition.java (original)
+++ portals/jetspeed-2/portal/branches/JS2-871-pluto-2.0-upgrade/jetspeed-api/src/main/java/org/apache/jetspeed/om/portlet/PortletDefinition.java Wed Oct 22 12:28:54 2008
@@ -40,6 +40,8 @@
*/
public interface PortletDefinition extends org.apache.pluto.om.portlet.PortletDefinition, Serializable
{
+ PortletApplication getApplication();
+
GenericMetadata getMetadata();
void setMetadata(GenericMetadata metadata);
---------------------------------------------------------------------
To unsubscribe, e-mail: jetspeed-dev-unsubscribe@portals.apache.org
For additional commands, e-mail: jetspeed-dev-help@portals.apache.org