mcardle 2005/12/14 17:44:12 CET
Modified files:
src/net/sf/j2ep/responsehandlers ResponseHandlerBase.java
Log:
* support for first step in rewrite of backend cache code
* deals cleanly with missing ESI markers and notifies log
* reviewed header expiration
Revision Changes Path
1.17 +20 -12
esi_server/src/net/sf/j2ep/responsehandlers/ResponseHandlerBase.java
http://jahia.mine.nu:8080/cgi-bin/cvsweb.cgi/esi_server/src/net/sf/j2ep/responsehandlers/ResponseHandlerBase.java.diff?r1=1.16&r2=1.17&f=h
Index: ResponseHandlerBase.java
===================================================================
RCS file:
/home/cvs/repository/esi_server/src/net/sf/j2ep/responsehandlers/ResponseHandlerBase.java,v
retrieving revision 1.16
retrieving revision 1.17
diff -u -r1.16 -r1.17
--- ResponseHandlerBase.java 2 Dec 2005 10:47:05 -0000 1.16
+++ ResponseHandlerBase.java 14 Dec 2005 16:44:11 -0000 1.17
@@ -446,7 +446,7 @@
//can be called because object is not in cache, or some sub-object
is not in cache
FragmentCache fragmentCache = FragmentCache.getInstance();
- UrlCacheObject urlObj = (UrlCacheObject)
fragmentCache.getHashCache().get(urlKey);
+ UrlCacheObject urlObj = (UrlCacheObject)
fragmentCache.getUrlCacheObject(urlKey);
Vector threads = new Vector();
boolean fetchingSkeleton = false;
@@ -469,7 +469,7 @@
null, //TODO: will be NULL
clientRequestUrl
);
- threads.add(thread);
+ threads.add(thread);
thread.setName("from:RespHdl,["+urlKey.substring(urlKey.length()-15)+"]id:"+thread.getId());
thread.start();
}
@@ -494,7 +494,8 @@
e.printStackTrace();
}
getMethod.setFollowRedirects(false);
- GetThread thread = new
GetThread(ProxyFilter.getHttpClient(),
+ GetThread thread = new GetThread(
+ ProxyFilter.getHttpClient(),
getMethod,
this,
clientResponse,
@@ -546,7 +547,7 @@
//TODO: make use of Frag's referencedObjsStartIndex and EndIndex
vars, as this is an inefficient implementation
Enumeration fragsEnum = retrievedFrags.elements();
while (fragsEnum.hasMoreElements()) {
- //TODO: take this out fo the loop
+ //TODO: take this out of the loop
ContentCacheObject skeletonContentObj =
fragmentCache.get(urlKey).getContentCacheObject();
String oldSkelContent = new
String(skeletonContentObj.getByteContent()); //TODO: use StringBuffers
@@ -556,12 +557,17 @@
String fragUrlKey = (String) fragObj[0];
int fragPos = ((Integer) fragObj[1]).intValue();
- String openTag = "WAS:ESIINCLUDE_"+fragPos ;
- String closeTag = "WAS:END_ESIINCLUDE_"+fragPos;
+ String openTag = "WAS:ESIINCLUDE_"+fragPos+" >"; //TODO:
for more robustness, could use htmlparser to find tags - but would be slower
+ String closeTag = "/WAS:ESIINCLUDE_"+fragPos;
//String toReplace = StringUtils.getNestedString(newStr,
openTag, closeTag); //TODO: this will not work for nested fragments
- int openTagPos = oldSkelContent.indexOf(openTag);
+ int openTagPos = oldSkelContent.indexOf (openTag);
int closeTagPos = oldSkelContent.indexOf(closeTag,
openTagPos);
+ if (openTagPos==-1 || closeTagPos==-1) {
+ log.error("Could not find ESI tags ["+openTag+"] and/or
["+closeTag+"] in locally cached version of the page.");
+ continue;
+ }
+
StringBuffer newSkelContent = new StringBuffer();
newSkelContent.append( oldSkelContent.substring(0,openTagPos
+ openTag.length()) );
@@ -574,8 +580,10 @@
//if (log.isDebugEnabled()) log.debug("AFTER:
\n"+oldSkelContent);
skeletonContentObj.setByteContent(newSkelContent.toString().getBytes());
+ log.debug(" output for tag "+openTag+":
\n"+newSkelContent.toString());
if (log.isDebugEnabled()) log.debug("Refreshed Fragment
"+fragPos+" ["+fragUrlKey+"] in Skeleton ["+urlKey+"]");
}
+
}
}
@@ -608,8 +616,8 @@
if (return304NotModified==false && modSinceHeader !=-1) {
//First check if the object has been changed in the cache since
If-Modified-Since date
Date modSinceHeaderDate = new Date(modSinceHeader);
- if
(cacheObject.getUrlCacheObject().getLastUpdateDate().after(modSinceHeaderDate)
) {
- if (log.isDebugEnabled()) log.debug("Detected a HTTP 304 for
["+new Date(modSinceHeader)+"] because object has been changed/added in the
cache at "+cacheObject.getUrlCacheObject().getLastUpdateDate());
+ if
(cacheObject.getUrlCacheObject().getLastUpdateDate().before(modSinceHeaderDate)
) {
+ if (log.isDebugEnabled()) log.debug("Detected a HTTP 304 for
["+new Date(modSinceHeader)+"] because object has NOT been changed/added in the
cache since "+cacheObject.getUrlCacheObject().getLastUpdateDate());
return304NotModified = true;
}
//if it hasn't, then still check if the stored Expires header
date is after the If-Modified-Since date
@@ -619,7 +627,7 @@
try {
//TODO: move this date parsing to UrlCacheKey object
initialization
Date expiresHeaderDate = DateUtil.parseDate(
expiresRespHeader.getValue() ) ;
- if (modSinceHeaderDate.after(expiresHeaderDate)) {
+ if (expiresHeaderDate.before(modSinceHeaderDate)) {
if (log.isDebugEnabled()) log.debug("Detected a
HTTP 304 for ["+modSinceHeader+"] because of Expires Header
["+expiresRespHeader+"] from Server");
return304NotModified = true;
}
@@ -632,7 +640,7 @@
try {
//TODO: move this date parsing to UrlCacheKey object
initialization
Date lastModHeaderDate = DateUtil.parseDate(
lastModRespHeader.getValue() ) ;
- if (modSinceHeaderDate.after(lastModHeaderDate)) {
+ if (modSinceHeaderDate.before(lastModHeaderDate)) {
if (log.isDebugEnabled()) log.debug("Detected a
HTTP 304 for ["+modSinceHeader+"] because of Last-Modified Header
["+lastModRespHeader+"] from Server");
return304NotModified = true;
}
@@ -640,7 +648,7 @@
log.error("Error trying to parse Last-Modified
Header date ["+lastModRespHeader+"] : "+e);
}
}
-
+ //TODO: support Cache-Control=max-age header
}
}