[jboss-cvs] jboss-seam/src/main/org/jboss/seam/security/management ...

Shane Bryzak sbryzak at redhat.com
Thu Jan 10 02:34:23 EST 2008


  User: sbryzak2
  Date: 08/01/10 02:34:23

  Modified:    src/main/org/jboss/seam/security/management 
                        JpaIdentityStore.java
  Log:
  string-based role cache
  
  Revision  Changes    Path
  1.11      +29 -22    jboss-seam/src/main/org/jboss/seam/security/management/JpaIdentityStore.java
  
  (In the diff below, changes in quantity of whitespace are not shown.)
  
  Index: JpaIdentityStore.java
  ===================================================================
  RCS file: /cvsroot/jboss/jboss-seam/src/main/org/jboss/seam/security/management/JpaIdentityStore.java,v
  retrieving revision 1.10
  retrieving revision 1.11
  diff -u -b -r1.10 -r1.11
  --- JpaIdentityStore.java	10 Jan 2008 02:50:36 -0000	1.10
  +++ JpaIdentityStore.java	10 Jan 2008 07:34:23 -0000	1.11
  @@ -4,8 +4,10 @@
   
   import java.security.MessageDigest;
   import java.util.ArrayList;
  +import java.util.HashMap;
   import java.util.HashSet;
   import java.util.List;
  +import java.util.Map;
   import java.util.Set;
   
   import javax.persistence.EntityManager;
  @@ -38,7 +40,7 @@
      
      private Class<? extends UserAccount> accountClass;
      
  -   private Set<UserAccount> roleCache;
  +   private Map<String,Set<String>> roleCache;
      
      @Create
      public void init()
  @@ -53,8 +55,17 @@
               .setParameter("accountType", UserAccount.AccountType.role)
               .getResultList();
         
  -      roleCache = new HashSet<UserAccount>();
  -      roleCache.addAll(roles);      
  +      roleCache = new HashMap<String,Set<String>>();
  +      
  +      for (UserAccount role : roles)
  +      {
  +         Set<String> memberships = new HashSet<String>();
  +         for (UserAccount m : role.getMemberships())
  +         {
  +            memberships.add(m.getUsername());
  +         }
  +         roleCache.put(role.getUsername(), memberships);
  +      }      
      }
      
      public boolean createAccount(String username, String password)
  @@ -315,14 +326,13 @@
      
      private void addRoleAndMemberships(String role, Set<String> roles)
      {
  -      UserAccount roleAccount = validateRole(role);
         roles.add(role);
         
  -      for (UserAccount membership : roleAccount.getMemberships())
  +      for (String membership : roleCache.get(role))
         {
  -         if (!roles.contains(membership.getUsername()))
  +         if (!roles.contains(membership))
            {
  -            addRoleAndMemberships(membership.getUsername(), roles);
  +            addRoleAndMemberships(membership, roles);
            }
         }            
      }
  @@ -389,15 +399,6 @@
       */
      protected UserAccount validateRole(String name)
      {
  -      // The role *should* be cached
  -      for (UserAccount ua : roleCache)
  -      {
  -         if (ua.getUsername().equals(name))
  -         {
  -            return ua;
  -         }
  -      }
  -      
         try
         {
            // As a last ditch effort, check the db
  @@ -408,10 +409,16 @@
               .setParameter("accountType", AccountType.role)
               .getSingleResult();
            
  -         // Force load memberships
  -         role.getMemberships().size();
  +         if (!roleCache.containsKey(role.getUsername()))
  +         {
  +            Set<String> memberships = new HashSet<String>();
  +            for (UserAccount m : role.getMemberships())
  +            {
  +               memberships.add(m.getUsername());
  +            }
            
  -         roleCache.add(role);
  +            roleCache.put(role.getUsername(), memberships);            
  +         }
            
            return role;
         }
  
  
  



More information about the jboss-cvs-commits mailing list