You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@roller.apache.org by ga...@apache.org on 2006/08/12 19:55:20 UTC
svn commit: r431060 - in
/incubator/roller/trunk/src/org/apache/roller/ui/rendering/filters:
IfModifiedFeedCacheFilter.java IfModifiedWeblogPageCacheFilter.java
IfPlanetModifiedFilter.java
Author: gangolli
Date: Sat Aug 12 10:55:20 2006
New Revision: 431060
URL: http://svn.apache.org/viewvc?rev=431060&view=rev
Log:
Fixes for ROL-1201 and 1207. Eliminate all of the formatting stuff! The JDK bug 5103041 that was the instigation for all of the crufty code can in our case be cleanly avoided simply by comparing long time values from getTime() rather than using Date.compareTo() which hits the bug. The underlying JDK bug may not have been as well understood at the time the formatting code was added as a workaround.
Modified:
incubator/roller/trunk/src/org/apache/roller/ui/rendering/filters/IfModifiedFeedCacheFilter.java
incubator/roller/trunk/src/org/apache/roller/ui/rendering/filters/IfModifiedWeblogPageCacheFilter.java
incubator/roller/trunk/src/org/apache/roller/ui/rendering/filters/IfPlanetModifiedFilter.java
Modified: incubator/roller/trunk/src/org/apache/roller/ui/rendering/filters/IfModifiedFeedCacheFilter.java
URL: http://svn.apache.org/viewvc/incubator/roller/trunk/src/org/apache/roller/ui/rendering/filters/IfModifiedFeedCacheFilter.java?rev=431060&r1=431059&r2=431060&view=diff
==============================================================================
--- incubator/roller/trunk/src/org/apache/roller/ui/rendering/filters/IfModifiedFeedCacheFilter.java (original)
+++ incubator/roller/trunk/src/org/apache/roller/ui/rendering/filters/IfModifiedFeedCacheFilter.java Sat Aug 12 10:55:20 2006
@@ -24,14 +24,10 @@
package org.apache.roller.ui.rendering.filters;
import java.io.IOException;
-import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Enumeration;
import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
import java.util.Map;
-import java.util.Set;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
@@ -87,10 +83,7 @@
// the last time we expired our main feeds
private Date mainLastExpiredDate = new Date();
-
- SimpleDateFormat dateFormatter =
- new SimpleDateFormat("EEE MMM d HH:mm:ss z yyyy");
-
+
/**
* Process filter.
@@ -165,14 +158,10 @@
}
// Check the incoming if-modified-since header
- Date sinceDate =
- new Date(request.getDateHeader("If-Modified-Since"));
+ long sinceDate = request.getDateHeader("If-Modified-Since");
if (updateTime != null) {
- // convert date (JDK 1.5 workaround)
- String date = dateFormatter.format(updateTime);
- updateTime = new Date(date);
- if (updateTime.compareTo(sinceDate) <= 0) {
+ if (updateTime.getTime() <= sinceDate) {
mLogger.debug("NOT_MODIFIED "+key);
response.setStatus(HttpServletResponse.SC_NOT_MODIFIED);
return;
Modified: incubator/roller/trunk/src/org/apache/roller/ui/rendering/filters/IfModifiedWeblogPageCacheFilter.java
URL: http://svn.apache.org/viewvc/incubator/roller/trunk/src/org/apache/roller/ui/rendering/filters/IfModifiedWeblogPageCacheFilter.java?rev=431060&r1=431059&r2=431060&view=diff
==============================================================================
--- incubator/roller/trunk/src/org/apache/roller/ui/rendering/filters/IfModifiedWeblogPageCacheFilter.java (original)
+++ incubator/roller/trunk/src/org/apache/roller/ui/rendering/filters/IfModifiedWeblogPageCacheFilter.java Sat Aug 12 10:55:20 2006
@@ -24,7 +24,6 @@
package org.apache.roller.ui.rendering.filters;
import java.io.IOException;
-import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Enumeration;
import java.util.HashMap;
@@ -59,39 +58,35 @@
/**
* A filter used for caching last modified dates.
- *
+ *
* @web.filter name="IfModifiedWeblogPageCacheFilter"
*
* @author Allen Gilliland
*/
public class IfModifiedWeblogPageCacheFilter implements Filter, CacheHandler {
-
- private static Log mLogger =
+
+ private static Log mLogger =
LogFactory.getLog(IfModifiedWeblogPageCacheFilter.class);
-
+
// a unique identifier for this cache, this is used as the prefix for
// roller config properties that apply to this cache
private static final String CACHE_ID = "cache.ifmodified.weblogpage";
-
+
private Cache mCache = null;
-
- SimpleDateFormat dateFormatter =
- new SimpleDateFormat("EEE MMM d HH:mm:ss z yyyy");
-
-
+
/**
* Process filter.
*/
- public void doFilter(ServletRequest req,
- ServletResponse res,
- FilterChain chain)
+ public void doFilter(ServletRequest req,
+ ServletResponse res,
+ FilterChain chain)
throws IOException, ServletException {
-
+
mLogger.debug("entering");
-
+
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
-
+
WeblogPageRequest pageRequest = null;
try {
pageRequest = new WeblogPageRequest(request);
@@ -100,9 +95,9 @@
response.sendError(HttpServletResponse.SC_NOT_FOUND);
return;
}
-
+
String key = this.CACHE_ID+":"+this.generateKey(pageRequest);
-
+
Date updateTime = null;
try {
// we need the last expiration time for the given weblog
@@ -111,61 +106,56 @@
(Date) CacheManager.getLastExpiredDate(pageRequest.getWeblogHandle());
if(lastExpirationDate != null)
lastExpiration = lastExpirationDate.getTime();
-
+
LazyExpiringCacheEntry entry =
(LazyExpiringCacheEntry) this.mCache.get(key);
if(entry != null) {
updateTime = (Date) entry.getValue(lastExpiration);
-
+
if(updateTime == null)
mLogger.debug("HIT-INVALID "+key);
}
-
+
if (updateTime == null) {
mLogger.debug("MISS "+key);
-
+
if(pageRequest.getWeblogHandle() != null) {
// just set updateTime to now
updateTime = new Date();
this.mCache.put(key, new LazyExpiringCacheEntry(updateTime));
}
-
+
} else {
mLogger.debug("HIT "+key);
}
-
+
// Check the incoming if-modified-since header
- Date sinceDate =
- new Date(request.getDateHeader("If-Modified-Since"));
-
+ long sinceDate = request.getDateHeader("If-Modified-Since");
+
if (updateTime != null) {
- // convert date (JDK 1.5 workaround)
- String date = dateFormatter.format(updateTime);
- updateTime = new Date(date);
- if (updateTime.compareTo(sinceDate) <= 0) {
+ if (updateTime.getTime() <= sinceDate) {
mLogger.debug("NOT_MODIFIED "+key);
response.setStatus(HttpServletResponse.SC_NOT_MODIFIED);
return;
}
}
-
+
} catch (IllegalArgumentException e) {
// Thrown by getDateHeader if not in valid format. This can be
// safely ignored, the only consequence is that the NOT MODIFIED
// response is not set.
}
-
+
// Set outgoing last modified header
if (updateTime != null) {
response.setDateHeader("Last-Modified", updateTime.getTime());
}
-
+
chain.doFilter(request, response);
-
+
mLogger.debug("exiting");
}
-
-
+
/**
* Generate a cache key from a parsed weblog page request.
* This generates a key of the form ...
@@ -184,13 +174,13 @@
*
*/
private String generateKey(WeblogPageRequest pageRequest) {
-
+
StringBuffer key = new StringBuffer();
key.append("weblog/");
key.append(pageRequest.getWeblogHandle().toLowerCase());
key.append("/page/");
key.append(pageRequest.getWeblogPage());
-
+
if(pageRequest.getWeblogAnchor() != null) {
// convert to base64 because there can be spaces in anchors :/
key.append("/").append(Utilities.toBase64(pageRequest.getWeblogAnchor().getBytes()));
@@ -198,7 +188,7 @@
if(pageRequest.getWeblogDate() != null) {
key.append("/").append(pageRequest.getWeblogDate());
}
-
+
if(pageRequest.getWeblogCategory() != null) {
String cat = pageRequest.getWeblogCategory();
if(cat.startsWith("/")) {
@@ -209,32 +199,32 @@
key.append("/").append(org.apache.commons.lang.StringUtils.deleteWhitespace(cat));
}
}
-
+
// add language
key.append("/").append(pageRequest.getLanguage());
-
+
// add login state
if(pageRequest.getAuthenticUser() != null) {
key.append("/user=").append(pageRequest.getAuthenticUser());
}
-
+
return key.toString();
}
-
-
+
+
/**
* A weblog entry has changed.
*/
public void invalidate(WeblogEntryData entry) {
-
+
mLogger.debug("invalidating entry = "+entry.getAnchor());
-
+
// we need to remove the following cached items if they exist
// - the weblog main page
// - the weblog entry permalink page
// - the weblog entry category page
// - the weblog entry date archive pages
-
+
/*
Set removeSet = new HashSet();
@@ -252,18 +242,18 @@
this.mCache.remove(removeSet);
*/
}
-
-
+
+
/**
* A weblog has changed.
*/
public void invalidate(WebsiteData website) {
-
+
mLogger.debug("invalidating website = "+website.getHandle());
-
+
// we need to remove the following cached items if they exist
// - all pages for this weblog
-
+
/*
Set removeSet = new HashSet();
@@ -282,32 +272,32 @@
this.mCache.remove(removeSet);
*/
}
-
-
+
+
/**
* A bookmark has changed.
*/
public void invalidate(BookmarkData bookmark) {
this.invalidate(bookmark.getWebsite());
}
-
-
+
+
/**
* A folder has changed.
*/
public void invalidate(FolderData folder) {
this.invalidate(folder.getWebsite());
}
-
-
+
+
/**
* A comment has changed.
*/
public void invalidate(CommentData comment) {
this.invalidate(comment.getWeblogEntry());
}
-
-
+
+
/**
* A referer has changed.
*/
@@ -315,8 +305,8 @@
// ignored
// TODO: we probably should invalidate the entire website?
}
-
-
+
+
/**
* A user profile has changed.
*/
@@ -324,67 +314,67 @@
// ignored
// TODO: i don't think weblog pages currently have user info, but this may change
}
-
-
+
+
/**
* A category has changed.
*/
public void invalidate(WeblogCategoryData category) {
this.invalidate(category.getWebsite());
}
-
-
+
+
/**
* A weblog template has changed.
*/
public void invalidate(WeblogTemplate template) {
this.invalidate(template.getWebsite());
}
-
-
+
+
public void clear() {
this.mCache.clear();
}
-
-
+
+
public Map getStats() {
-
+
Map stats = new HashMap();
-
+
return stats;
}
-
-
+
+
/**
* Destroy method for this filter
*/
public void destroy() {
}
-
-
+
+
/**
* Init method for this filter
*/
public void init(FilterConfig filterConfig) {
-
+
mLogger.info("Initializing if-modified cache");
-
+
Map cacheProps = new HashMap();
Enumeration allProps = RollerConfig.keys();
String prop = null;
while(allProps.hasMoreElements()) {
prop = (String) allProps.nextElement();
-
+
// we are only interested in props for this cache
if(prop.startsWith(CACHE_ID+".")) {
- cacheProps.put(prop.substring(CACHE_ID.length()+1),
+ cacheProps.put(prop.substring(CACHE_ID.length()+1),
RollerConfig.getProperty(prop));
}
}
-
+
mLogger.info(cacheProps);
-
+
mCache = CacheManager.constructCache(this, cacheProps);
}
-
+
}
Modified: incubator/roller/trunk/src/org/apache/roller/ui/rendering/filters/IfPlanetModifiedFilter.java
URL: http://svn.apache.org/viewvc/incubator/roller/trunk/src/org/apache/roller/ui/rendering/filters/IfPlanetModifiedFilter.java?rev=431060&r1=431059&r2=431060&view=diff
==============================================================================
--- incubator/roller/trunk/src/org/apache/roller/ui/rendering/filters/IfPlanetModifiedFilter.java (original)
+++ incubator/roller/trunk/src/org/apache/roller/ui/rendering/filters/IfPlanetModifiedFilter.java Sat Aug 12 10:55:20 2006
@@ -18,7 +18,6 @@
package org.apache.roller.ui.rendering.filters;
import java.io.IOException;
-import java.text.SimpleDateFormat;
import java.util.Date;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
@@ -51,8 +50,7 @@
private long timeout = 15 * 60 * 1000;
private ExpiringCacheEntry lastUpdateTime = null;
- SimpleDateFormat dateFormatter = new SimpleDateFormat("EEE MMM d HH:mm:ss z yyyy");
-
+
/**
* Filter processing.
@@ -98,16 +96,10 @@
request.setAttribute("updateTime", updateTime);
// Check the incoming if-modified-since header
- Date sinceDate =
- new Date(request.getDateHeader("If-Modified-Since"));
+ long sinceDate = request.getDateHeader("If-Modified-Since");
if (updateTime != null) {
- // convert date (JDK 1.5 workaround)
- synchronized (dateFormatter) {
- String date = dateFormatter.format(updateTime);
- updateTime = new Date(date);
- }
- if (updateTime.compareTo(sinceDate) <= 0) {
+ if (updateTime.getTime() <= sinceDate) {
response.setStatus(HttpServletResponse.SC_NOT_MODIFIED);
return;
}