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

Reply via email to