[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