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);
}