Author: agilliland
Date: Tue Apr 18 19:22:14 2006
New Revision: 395109

URL: http://svn.apache.org/viewcvs?rev=395109&view=rev
Log:
adding custom L3 cache mapping for looking up users by username and weblogs by 
handle.  this builds upon the functionality already in the hibernate L2 cache.


Modified:
    
incubator/roller/branches/roller-newbackend/src/org/roller/business/hibernate/HibernateUserManagerImpl.java

Modified: 
incubator/roller/branches/roller-newbackend/src/org/roller/business/hibernate/HibernateUserManagerImpl.java
URL: 
http://svn.apache.org/viewcvs/incubator/roller/branches/roller-newbackend/src/org/roller/business/hibernate/HibernateUserManagerImpl.java?rev=395109&r1=395108&r2=395109&view=diff
==============================================================================
--- 
incubator/roller/branches/roller-newbackend/src/org/roller/business/hibernate/HibernateUserManagerImpl.java
 (original)
+++ 
incubator/roller/branches/roller-newbackend/src/org/roller/business/hibernate/HibernateUserManagerImpl.java
 Tue Apr 18 19:22:14 2006
@@ -4,8 +4,7 @@
 package org.roller.business.hibernate;
 
 import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Date;
+import java.util.Hashtable;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
@@ -51,6 +50,9 @@
     
     private HibernatePersistenceStrategy strategy = null;
     
+    private Map weblogHandleToIdMap = new Hashtable();
+    private Map userNameToIdMap = new Hashtable();
+    
     
     /**
      * @param strategy
@@ -383,9 +385,24 @@
         if (handle==null )
             throw new RollerException("Handle cannot be null");
         
+        // check cache first
+        // NOTE: if we ever allow changing handles then this needs updating
+        if(this.weblogHandleToIdMap.containsKey(handle)) {
+            
+            log.debug("weblogHandleToId CACHE HIT - "+handle);
+            
+            WebsiteData weblog = this.getWebsite((String) 
this.weblogHandleToIdMap.get(handle));
+            if(weblog != null && 
+                    (enabled == null || enabled.equals(weblog.getEnabled()))) {
+                return weblog;
+            }
+        }
+        
+        // cache failed, do lookup
         try {
             Session session = 
((HibernatePersistenceStrategy)this.strategy).getSession();
             Criteria criteria = session.createCriteria(WebsiteData.class);
+            
             if (enabled != null) {
                 criteria.add(
                         Expression.conjunction()
@@ -396,7 +413,15 @@
                         Expression.conjunction()
                         .add(Expression.eq("handle", handle)));
             }
-            WebsiteData website = (WebsiteData)criteria.uniqueResult();
+            
+            WebsiteData website = (WebsiteData) criteria.uniqueResult();
+            
+            // add mapping to cache
+            if(website != null) {
+                log.debug("weblogHandleToId CACHE MISS - "+handle);
+                this.weblogHandleToIdMap.put(website.getHandle(), 
website.getId());
+            }
+            
             return website;
         } catch (HibernateException e) {
             throw new RollerException(e);
@@ -446,9 +471,24 @@
         if (userName==null )
             throw new RollerException("userName cannot be null");
         
+        // check cache first
+        // NOTE: if we ever allow changing usernames then this needs updating
+        if(this.userNameToIdMap.containsKey(userName)) {
+            
+            log.debug("userNameToIdMap CACHE HIT - "+userName);
+            
+            UserData user = this.getUser((String) 
this.userNameToIdMap.get(userName));
+            if(user != null && 
+                    (enabled == null || enabled.equals(user.getEnabled()))) {
+                return user;
+            }
+        }
+        
+        // cache failed, do lookup
         try {
             Session session = 
((HibernatePersistenceStrategy)this.strategy).getSession();
             Criteria criteria = session.createCriteria(UserData.class);
+            
             if (enabled != null) {
                 criteria.add(
                         Expression.conjunction()
@@ -459,7 +499,16 @@
                         Expression.conjunction()
                         .add(Expression.eq("userName", userName)));
             }
-            return (UserData)criteria.uniqueResult();
+            
+            UserData user = (UserData) criteria.uniqueResult();
+            
+            // add mapping to cache
+            if(user != null) {
+                log.debug("userNameToIdMap CACHE MISS - "+userName);
+                this.userNameToIdMap.put(user.getUserName(), user.getId());
+            }
+            
+            return user;
         } catch (HibernateException e) {
             throw new RollerException(e);
         }


Reply via email to