You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@avalon.apache.org by cz...@apache.org on 2002/05/06 14:16:16 UTC

cvs commit: jakarta-avalon-excalibur/store/src/java/org/apache/excalibur/store/impl AbstractFilesystemStore.java MRUMemoryStore.java

cziegeler    02/05/06 05:16:15

  Modified:    store/src/java/org/apache/excalibur/store/impl
                        AbstractFilesystemStore.java MRUMemoryStore.java
  Log:
  Fixing key generation for stores
  
  Revision  Changes    Path
  1.2       +21 -2     jakarta-avalon-excalibur/store/src/java/org/apache/excalibur/store/impl/AbstractFilesystemStore.java
  
  Index: AbstractFilesystemStore.java
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-excalibur/store/src/java/org/apache/excalibur/store/impl/AbstractFilesystemStore.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- AbstractFilesystemStore.java	2 May 2002 10:04:05 -0000	1.1
  +++ AbstractFilesystemStore.java	6 May 2002 12:16:15 -0000	1.2
  @@ -21,7 +21,7 @@
    *
    * @author ?
    * @author <a href="mailto:vgritsenko@apache.org">Vadim Gritsenko</a>
  - * @version CVS $Id: AbstractFilesystemStore.java,v 1.1 2002/05/02 10:04:05 cziegeler Exp $
  + * @version CVS $Id: AbstractFilesystemStore.java,v 1.2 2002/05/06 12:16:15 cziegeler Exp $
    */
   public abstract class AbstractFilesystemStore
   extends AbstractLogEnabled
  @@ -286,6 +286,18 @@
        */
       protected String decode( String filename )
       {
  +        // if the key is longer than 127 bytes a File.separator
  +        // is added each 127 bytes
  +        if (filename.length() > 127) {
  +            int c = filename.length() / 127;
  +            int pos = c * 127;
  +            StringBuffer out = new StringBuffer(filename);
  +            while (pos > 0) {
  +                out.delete(pos,pos+1);
  +                pos -= 127;
  +            }
  +            filename = out.toString();
  +        }
           return java.net.URLDecoder.decode( filename );
       }
   
  @@ -324,7 +336,7 @@
        * it may normally happen). For this reason, it's highly recommended
        * (even if not mandated) that Strings be used as keys.
        */
  -    public String encode(String s) {
  +    protected String encode(String s) {
           final StringBuffer out = new StringBuffer( s.length() );
           final ByteArrayOutputStream buf = new ByteArrayOutputStream( 32 );
           final OutputStreamWriter writer = new OutputStreamWriter( buf );
  @@ -370,6 +382,13 @@
               }
           }
   
  +        // if the key is longer than 127 bytes add a File.separator
  +        // each 127 bytes
  +        int pos = 127;
  +        while (out.length() > pos) {
  +            out.insert(pos, File.separatorChar);
  +            pos += 127;
  +        }
           return out.toString();
       }
   
  
  
  
  1.2       +5 -18     jakarta-avalon-excalibur/store/src/java/org/apache/excalibur/store/impl/MRUMemoryStore.java
  
  Index: MRUMemoryStore.java
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-excalibur/store/src/java/org/apache/excalibur/store/impl/MRUMemoryStore.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- MRUMemoryStore.java	2 May 2002 08:55:39 -0000	1.1
  +++ MRUMemoryStore.java	6 May 2002 12:16:15 -0000	1.2
  @@ -38,7 +38,7 @@
    * @author <a href="mailto:g-froehlich@gmx.de">Gerhard Froehlich</a>
    * @author <a href="mailto:dims@yahoo.com">Davanum Srinivas</a>
    * @author <a href="mailto:vgritsenko@apache.org">Vadim Gritsenko</a>
  - * @version CVS $Id: MRUMemoryStore.java,v 1.1 2002/05/02 08:55:39 cziegeler Exp $
  + * @version CVS $Id: MRUMemoryStore.java,v 1.2 2002/05/06 12:16:15 cziegeler Exp $
    */
   public final class MRUMemoryStore
   extends AbstractLogEnabled
  @@ -116,8 +116,7 @@
                       try {
                           Object value = this.cache.remove(key);
                           if(checkSerializable(value)) {
  -                             persistentStore.store(getFileName(key.toString()),
  -                                                   value);
  +                             persistentStore.store(key, value);
                           }
                       } catch (IOException ioe) {
                           getLogger().error("Error in dispose()", ioe);
  @@ -192,7 +191,7 @@
   
           /** try to fetch from filesystem */
           if (this.persistent) {
  -            value = this.persistentStore.get(getFileName(key.toString()));
  +            value = this.persistentStore.get(key);
               if (value != null) {
                   try {
                       if(!this.cache.containsKey(key)) {
  @@ -222,7 +221,7 @@
           this.cache.remove(key);
           this.mrulist.remove(key);
           if(this.persistent && key != null) {
  -            this.persistentStore.remove(getFileName(key.toString()));
  +            this.persistentStore.remove(key);
           }
       }
   
  @@ -281,8 +280,7 @@
                       // Swap object on fs.
                       if(checkSerializable(value)) {
                           try {
  -                            this.persistentStore.store(
  -                                getFileName(key.toString()), value);
  +                            this.persistentStore.store(key, value);
                           } catch(Exception e) {
                               getLogger().error("Error storing object on fs", e);
                           }
  @@ -311,16 +309,5 @@
           return (object instanceof java.io.Serializable);
       }
   
  -    /**
  -     * This method puts together a filename for
  -     * the object, which shall be stored on the
  -     * filesystem.
  -     *
  -     * @param key The key of the object
  -     * @return the filename of the key
  -     */
  -    private String getFileName(String key) {
  -        return URLEncoder.encode(key.toString());
  -    }
   }
   
  
  
  

--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>