remm        2002/10/07 01:25:37

  Modified:    catalina/src/share/org/apache/naming/resources
                        ProxyDirContext.java
  Log:
  - Port patch.
  - Fix caching bugs.
  
  Revision  Changes    Path
  1.2       +31 -23    
jakarta-tomcat-catalina/catalina/src/share/org/apache/naming/resources/ProxyDirContext.java
  
  Index: ProxyDirContext.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/naming/resources/ProxyDirContext.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- ProxyDirContext.java      18 Jul 2002 16:47:34 -0000      1.1
  +++ ProxyDirContext.java      7 Oct 2002 08:25:37 -0000       1.2
  @@ -267,7 +267,6 @@
           if (entry != null) {
               if (entry.resource != null) {
                   // Check content caching.
  -                
                   return entry.resource;
               } else {
                   return entry.context;
  @@ -1375,7 +1374,8 @@
       /**
        * Lookup in cache.
        */
  -    protected CacheEntry cacheLookup(String name) {
  +    protected CacheEntry cacheLookup(String name)
  +        throws NamingException {
           if (cache == null)
               return (null);
           CacheEntry cacheEntry = (CacheEntry) cache.get(name);
  @@ -1383,9 +1383,7 @@
               cacheEntry = new CacheEntry();
               cacheEntry.name = name;
               // Load entry
  -            if (!cacheLoad(cacheEntry))
  -                return null;
  -            return (cacheEntry);
  +            cacheLoad(cacheEntry);
           } else {
               if (!validate(cacheEntry)) {
                   if (!revalidate(cacheEntry)) {
  @@ -1396,8 +1394,11 @@
                           System.currentTimeMillis() + cacheTTL;
                   }
               }
  -            return (cacheEntry);
           }
  +        if (!cacheEntry.exists) {
  +            throw new NamingException("Resource not found");
  +        }
  +        return (cacheEntry);
       }
   
   
  @@ -1405,8 +1406,10 @@
        * Validate entry.
        */
       protected boolean validate(CacheEntry entry) {
  -        if ((entry.resource != null) 
  -            && (entry.resource.getContent() != null) 
  +        if (((!entry.exists)
  +             || (entry.context != null)
  +             || ((entry.resource != null) 
  +                 && (entry.resource.getContent() != null)))
               && (System.currentTimeMillis() < entry.timestamp)) {
               return true;
           }
  @@ -1420,6 +1423,8 @@
       protected boolean revalidate(CacheEntry entry) {
           // Get the attributes at the given path, and check the last 
           // modification date
  +        if (!entry.exists)
  +            return false;
           if (entry.attributes == null)
               return false;
           long lastModified = entry.attributes.getLastModified();
  @@ -1447,14 +1452,12 @@
       /**
        * Load entry into cache.
        */
  -    protected boolean cacheLoad(CacheEntry entry) {
  -
  -        if (cache == null)
  -            return false;
  +    protected void cacheLoad(CacheEntry entry) {
   
           String name = entry.name;
   
           // Retrieve missing info
  +        boolean exists = true;
   
           // Retrieving attributes
           if (entry.attributes == null) {
  @@ -1467,12 +1470,12 @@
                       entry.attributes = (ResourceAttributes) attributes;
                   }
               } catch (NamingException e) {
  -                return false;
  +                exists = false;
               }
           }
   
           // Retriving object
  -        if ((entry.resource == null) && (entry.context == null)) {
  +        if ((exists) && (entry.resource == null) && (entry.context == null)) {
               try {
                   Object object = dirContext.lookup(name);
                   if (object instanceof InputStream) {
  @@ -1486,12 +1489,13 @@
                           (object.toString().getBytes()));
                   }
               } catch (NamingException e) {
  -                return false;
  +                exists = false;
               }
           }
   
           // Load object content
  -        if ((entry.resource != null) && (entry.resource.getContent() == null) 
  +        if ((exists) && (entry.resource != null) 
  +            && (entry.resource.getContent() == null) 
               && (entry.attributes.getContentLength() >= 0)
               && (entry.attributes.getContentLength() < cacheObjectMaxSize)) {
               int length = (int) entry.attributes.getContentLength();
  @@ -1518,15 +1522,16 @@
                   }
               }
           }
  -        
  +
  +        // Set existence flag
  +        entry.exists = exists;
  +
           // Set timestamp
           entry.timestamp = System.currentTimeMillis() + cacheTTL;
   
           // Add new entry to cache
           cache.put(name, entry);
   
  -        return true;
  -
       }
   
   
  @@ -1554,6 +1559,7 @@
           ResourceAttributes attributes = null;
           Resource resource = null;
           DirContext context = null;
  +        boolean exists = true;
   
   
           // ----------------------------------------------------- Public Methods
  @@ -1565,11 +1571,13 @@
               attributes = null;
               resource = null;
               context = null;
  +            exists = true;
           }
   
   
           public String toString() {
               return ("Cache entry: " + name + "\n"
  +                    + "Exists: " + exists + "\n"
                       + "Attributes: " + attributes + "\n"
                       + "Resource: " + resource + "\n"
                       + "Context: " + context);
  
  
  

--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to