Author: taylor Date: Fri Jun 12 22:30:03 2015 New Revision: 1685182 URL: http://svn.apache.org/r1685182 Log: S2-1325: portlet preferences caching improvements
Modified: portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/engine/JetspeedServlet.java portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/main/java/org/apache/jetspeed/components/portletpreferences/PortletPreferencesServiceImpl.java portals/jetspeed-2/portal/trunk/components/jetspeed-security/src/main/java/org/apache/jetspeed/security/impl/UserManagerImpl.java portals/jetspeed-2/portal/trunk/components/jetspeed-security/src/test/java/org/apache/jetspeed/security/stubs/StubPortletPreferences.java portals/jetspeed-2/portal/trunk/components/jetspeed-sso/src/test/java/org/apache/jetspeed/sso/StubPortletPreferences.java portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/components/portletpreferences/PortletPreferencesProvider.java portals/jetspeed-2/portal/trunk/jetspeed-portal-resources/src/main/resources/assembly/security-managers.xml Modified: portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/engine/JetspeedServlet.java URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/engine/JetspeedServlet.java?rev=1685182&r1=1685181&r2=1685182&view=diff ============================================================================== --- portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/engine/JetspeedServlet.java (original) +++ portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/engine/JetspeedServlet.java Fri Jun 12 22:30:03 2015 @@ -27,6 +27,7 @@ import org.apache.jetspeed.components.Co import org.apache.jetspeed.components.JetspeedBeanDefinitionFilter; import org.apache.jetspeed.components.SpringComponentManager; import org.apache.jetspeed.components.factorybeans.ServletConfigFactoryBean; +import org.apache.jetspeed.components.portletpreferences.PortletPreferencesProvider; import org.apache.jetspeed.container.session.PortalSessionsManager; import org.apache.jetspeed.engine.servlet.ServletHelper; import org.apache.jetspeed.exception.JetspeedException; @@ -389,6 +390,10 @@ public class JetspeedServlet extends Htt psm.portalSessionCreated(se.getSession()); } } + PortletPreferencesProvider preferencesProvider = engine.getComponentManager().lookupComponent("portletPreferencesProvider"); + if (preferencesProvider != null) { + preferencesProvider.sessionCreatedEvent(se.getSession()); + } } public void sessionDestroyed(HttpSessionEvent se) @@ -410,6 +415,11 @@ public class JetspeedServlet extends Htt statistics.logUserLogout(ipAddress, subjectUserPrincipal.getName(), sessionLength); UserContentCacheManager userContentCacheManager = engine.getComponentManager().lookupComponent("userContentCacheManager"); userContentCacheManager.evictUserContentCache(subjectUserPrincipal.getName(), se.getSession().getId()); + // clear preferences cache + PortletPreferencesProvider preferencesProvider = engine.getComponentManager().lookupComponent("portletPreferencesProvider"); + if (preferencesProvider != null) { + preferencesProvider.sessionDestroyedEvent(se.getSession()); + } } /** Modified: portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/main/java/org/apache/jetspeed/components/portletpreferences/PortletPreferencesServiceImpl.java URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/main/java/org/apache/jetspeed/components/portletpreferences/PortletPreferencesServiceImpl.java?rev=1685182&r1=1685181&r2=1685182&view=diff ============================================================================== --- portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/main/java/org/apache/jetspeed/components/portletpreferences/PortletPreferencesServiceImpl.java (original) +++ portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/main/java/org/apache/jetspeed/components/portletpreferences/PortletPreferencesServiceImpl.java Fri Jun 12 22:30:03 2015 @@ -45,6 +45,7 @@ import org.springframework.orm.ojb.suppo import javax.portlet.PortletRequest; import javax.portlet.PreferencesValidator; import javax.portlet.ValidatorException; +import javax.servlet.http.HttpSession; import java.util.Collection; import java.util.HashMap; import java.util.Iterator; @@ -459,6 +460,10 @@ public class PortletPreferencesServiceIm */ public void preloadUserPreferences() { + if (enableSessionCache) { + return; + } + JetspeedPreferencesMap map = new JetspeedPreferencesMap(); Criteria c = new Criteria(); c.addEqualTo(DTYPE, DISCRIMINATOR_USER); @@ -751,31 +756,33 @@ public class PortletPreferencesServiceIm public Map<String, PortletPreference> getUserPreferences(org.apache.jetspeed.om.portlet.PortletDefinition portletdefinition, String windowId, String userName) { - JetspeedPreferencesMap userPreferences = new JetspeedPreferencesMap(); String appName = portletdefinition.getApplication().getName(); String portletName = portletdefinition.getPortletName(); - - String userCacheKey = getUserPreferenceKey(appName, portletName,windowId, userName); - CacheElement cachedDefaults = preferenceCache.get(userCacheKey); - if (cachedDefaults != null) - { - userPreferences = (JetspeedPreferencesMap) cachedDefaults.getContent(); + String userCacheKey = getUserPreferenceKey(appName, portletName, windowId, userName); + + if (!enableSessionCache) { + JetspeedPreferencesMap userPreferences = null; + CacheElement cachedDefaults = preferenceCache.get(userCacheKey); + if (cachedDefaults != null) { + userPreferences = (JetspeedPreferencesMap) cachedDefaults.getContent(); + return userPreferences; + } } - else + JetspeedPreferencesMap userPreferences = new JetspeedPreferencesMap(); + Criteria c = new Criteria(); + c.addEqualTo(DTYPE, DISCRIMINATOR_USER); + c.addEqualTo(APPLICATION_NAME, appName); + c.addEqualTo(PORTLET_NAME, portletName); + c.addEqualTo(USER_NAME, userName); + c.addEqualTo(ENTITY_ID, windowId); + QueryByCriteria query = QueryFactory.newQuery(DatabasePreference.class, c); + Iterator<DatabasePreference> preferences = getPersistenceBrokerTemplate().getIteratorByQuery(query); + while (preferences.hasNext()) { - Criteria c = new Criteria(); - c.addEqualTo(DTYPE, DISCRIMINATOR_USER); - c.addEqualTo(APPLICATION_NAME, appName); - c.addEqualTo(PORTLET_NAME, portletName); - c.addEqualTo(USER_NAME, userName); - c.addEqualTo(ENTITY_ID, windowId); - QueryByCriteria query = QueryFactory.newQuery(DatabasePreference.class, c); - Iterator<DatabasePreference> preferences = getPersistenceBrokerTemplate().getIteratorByQuery(query); - while (preferences.hasNext()) - { - DatabasePreference preference = preferences.next(); - userPreferences.put(preference.getName(), new JetspeedPreferenceImpl(preference.getName(), preference.getValues(), preference.isReadOnly())); - } + DatabasePreference preference = preferences.next(); + userPreferences.put(preference.getName(), new JetspeedPreferenceImpl(preference.getName(), preference.getValues(), preference.isReadOnly())); + } + if (!enableSessionCache) { preferenceCache.put(preferenceCache.createElement(userCacheKey, userPreferences)); } return userPreferences; @@ -961,7 +968,25 @@ public class PortletPreferencesServiceIm if (result == null) { result = sessionPreferences.createWindowPreferences(window.getPortletEntityId()); } - return result; + return clonePreferences(result); + } + + protected Map<String,PortletPreference> clonePreferences(Map<String,PortletPreference> original) { + Map<String,PortletPreference> clone = new HashMap<>(); + for (Map.Entry<String,PortletPreference> entry : original.entrySet()) { + clone.put(entry.getKey(), entry.getValue().clone()); + } + return clone; + } + + protected void removeUserPreferencesFromSession() { + RequestContextComponent rcc = getRequestContextComponent(); + if (rcc != null) { + RequestContext rc = rcc.getRequestContext(); + if (rc != null) { + rc.getRequest().getSession(true).removeAttribute(SESSION_CACHE_KEY); + } + } } protected UserSessionPreferences getUserSessionPreferences() { @@ -988,4 +1013,14 @@ public class PortletPreferencesServiceIm return requestContextComponent; } + @Override + public void sessionCreatedEvent(HttpSession session) { + } + + @Override + public void sessionDestroyedEvent(HttpSession session) { + if (enableSessionCache && session != null) { + session.removeAttribute(SESSION_CACHE_KEY); + } + } } Modified: portals/jetspeed-2/portal/trunk/components/jetspeed-security/src/main/java/org/apache/jetspeed/security/impl/UserManagerImpl.java URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-security/src/main/java/org/apache/jetspeed/security/impl/UserManagerImpl.java?rev=1685182&r1=1685181&r2=1685182&view=diff ============================================================================== --- portals/jetspeed-2/portal/trunk/components/jetspeed-security/src/main/java/org/apache/jetspeed/security/impl/UserManagerImpl.java (original) +++ portals/jetspeed-2/portal/trunk/components/jetspeed-security/src/main/java/org/apache/jetspeed/security/impl/UserManagerImpl.java Fri Jun 12 22:30:03 2015 @@ -16,6 +16,7 @@ */ package org.apache.jetspeed.security.impl; +import org.apache.jetspeed.Jetspeed; import org.apache.jetspeed.components.portletpreferences.PortletPreferencesProvider; import org.apache.jetspeed.security.AuthenticatedUser; import org.apache.jetspeed.security.AuthenticatedUserImpl; @@ -72,7 +73,6 @@ public class UserManagerImpl extends Bas private RoleManager roleManager; private GroupManager groupManager; private Map<String, UserSubjectPrincipalsResolver> usprMap = new HashMap<String, UserSubjectPrincipalsResolver>(); - private PortletPreferencesProvider preferencesProvider = null; public UserManagerImpl(JetspeedPrincipalType principalType, JetspeedPrincipalType roleType, JetspeedPrincipalType groupType, JetspeedPrincipalAccessManager jpam, JetspeedPrincipalStorageManager jpsm, UserPasswordCredentialManager credentialManager) @@ -83,17 +83,6 @@ public class UserManagerImpl extends Bas this.groupType = groupType; } - public UserManagerImpl(JetspeedPrincipalType principalType, JetspeedPrincipalType roleType, JetspeedPrincipalType groupType, - JetspeedPrincipalAccessManager jpam, JetspeedPrincipalStorageManager jpsm, UserPasswordCredentialManager credentialManager, - PortletPreferencesProvider preferencesProvider) - { - super(principalType, jpam, jpsm); - this.credentialManager = credentialManager; - this.roleType = roleType; - this.groupType = groupType; - this.preferencesProvider = preferencesProvider; - } - public void checkInitialized() { if (groupManager == null) @@ -260,12 +249,22 @@ public class UserManagerImpl extends Bas super.removePrincipal(user); // Since 2.3.0 - if (preferencesProvider != null) { - preferencesProvider.removeUserPreferences(username); + PortletPreferencesProvider provider = getPreferencesProvider(); + if (provider != null) { + provider.removeUserPreferences(username); } } - - public void removePrincipal(String principalName) throws SecurityException + + protected PortletPreferencesProvider getPreferencesProvider() { + try { + return Jetspeed.getComponentManager().lookupComponent("org.apache.jetspeed.components.portletpreferences.PortletPreferencesProvider"); + } + catch (Exception e) { + return null; + } + } + + public void removePrincipal(String principalName) throws SecurityException { removeUser(principalName); } Modified: portals/jetspeed-2/portal/trunk/components/jetspeed-security/src/test/java/org/apache/jetspeed/security/stubs/StubPortletPreferences.java URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-security/src/test/java/org/apache/jetspeed/security/stubs/StubPortletPreferences.java?rev=1685182&r1=1685181&r2=1685182&view=diff ============================================================================== --- portals/jetspeed-2/portal/trunk/components/jetspeed-security/src/test/java/org/apache/jetspeed/security/stubs/StubPortletPreferences.java (original) +++ portals/jetspeed-2/portal/trunk/components/jetspeed-security/src/test/java/org/apache/jetspeed/security/stubs/StubPortletPreferences.java Fri Jun 12 22:30:03 2015 @@ -29,6 +29,7 @@ import org.apache.pluto.container.Portle import javax.portlet.PortletRequest; import javax.portlet.PreferencesValidator; import javax.portlet.ValidatorException; +import javax.servlet.http.HttpSession; import java.util.Map; import java.util.Set; @@ -152,4 +153,14 @@ public class StubPortletPreferences impl public PreferencesValidator getPreferencesValidator(org.apache.pluto.container.om.portlet.PortletDefinition portletDefinition) throws ValidatorException { return null; } + + @Override + public void sessionDestroyedEvent(HttpSession session) { + + } + + @Override + public void sessionCreatedEvent(HttpSession session) { + + } } Modified: portals/jetspeed-2/portal/trunk/components/jetspeed-sso/src/test/java/org/apache/jetspeed/sso/StubPortletPreferences.java URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-sso/src/test/java/org/apache/jetspeed/sso/StubPortletPreferences.java?rev=1685182&r1=1685181&r2=1685182&view=diff ============================================================================== --- portals/jetspeed-2/portal/trunk/components/jetspeed-sso/src/test/java/org/apache/jetspeed/sso/StubPortletPreferences.java (original) +++ portals/jetspeed-2/portal/trunk/components/jetspeed-sso/src/test/java/org/apache/jetspeed/sso/StubPortletPreferences.java Fri Jun 12 22:30:03 2015 @@ -29,6 +29,7 @@ import org.apache.pluto.container.Portle import javax.portlet.PortletRequest; import javax.portlet.PreferencesValidator; import javax.portlet.ValidatorException; +import javax.servlet.http.HttpSession; import java.util.Map; import java.util.Set; @@ -152,4 +153,14 @@ public class StubPortletPreferences impl public PreferencesValidator getPreferencesValidator(org.apache.pluto.container.om.portlet.PortletDefinition portletDefinition) throws ValidatorException { return null; } + + @Override + public void sessionCreatedEvent(HttpSession session) { + + } + + @Override + public void sessionDestroyedEvent(HttpSession session) { + + } } Modified: portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/components/portletpreferences/PortletPreferencesProvider.java URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/components/portletpreferences/PortletPreferencesProvider.java?rev=1685182&r1=1685181&r2=1685182&view=diff ============================================================================== --- portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/components/portletpreferences/PortletPreferencesProvider.java (original) +++ portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/components/portletpreferences/PortletPreferencesProvider.java Fri Jun 12 22:30:03 2015 @@ -24,6 +24,7 @@ import org.apache.jetspeed.om.portlet.Pr import org.apache.pluto.container.PortletPreference; import org.apache.pluto.container.PortletPreferencesService; +import javax.servlet.http.HttpSession; import java.util.Map; import java.util.Set; @@ -186,4 +187,7 @@ public interface PortletPreferencesProvi */ public void removeUserPreferences(String user); + public void sessionCreatedEvent(HttpSession session); + public void sessionDestroyedEvent(HttpSession session); + } Modified: portals/jetspeed-2/portal/trunk/jetspeed-portal-resources/src/main/resources/assembly/security-managers.xml URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/jetspeed-portal-resources/src/main/resources/assembly/security-managers.xml?rev=1685182&r1=1685181&r2=1685182&view=diff ============================================================================== --- portals/jetspeed-2/portal/trunk/jetspeed-portal-resources/src/main/resources/assembly/security-managers.xml (original) +++ portals/jetspeed-2/portal/trunk/jetspeed-portal-resources/src/main/resources/assembly/security-managers.xml Fri Jun 12 22:30:03 2015 @@ -142,7 +142,6 @@ <constructor-arg index="3" ref="org.apache.jetspeed.security.spi.JetspeedSecurityPersistenceManager" /> <constructor-arg index="4" ref="org.apache.jetspeed.security.spi.JetspeedPrincipalStorageManager" /> <constructor-arg index="5" ref="org.apache.jetspeed.security.spi.UserPasswordCredentialManager" /> - <constructor-arg index="6" ref="org.apache.jetspeed.components.portletpreferences.PortletPreferencesProvider"/> </bean> <bean class="org.springframework.beans.factory.config.MethodInvokingFactoryBean"> --------------------------------------------------------------------- To unsubscribe, e-mail: jetspeed-dev-unsubscr...@portals.apache.org For additional commands, e-mail: jetspeed-dev-h...@portals.apache.org