svn commit: r1685182 - in /portals/jetspeed-2/portal/trunk: components/jetspeed-portal/src/main/java/org/apache/jetspeed/engine/ components/jetspeed-registry/src/main/java/org/apache/jetspeed/components/portletpreferences/ components/jetspeed-security/...

[email protected]
Newsgroups gmane.comp.jakarta.jetspeed.devel
Message-ID <[email protected]>
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">
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.