You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by fr...@apache.org on 2001/12/13 17:24:28 UTC

cvs commit: xml-cocoon2/scratchpad/src/org/apache/cocoon/jispstore MRUMemoryStore.java JispFilesystemStore.java

froehlich    01/12/13 08:24:28

  Modified:    scratchpad/src/org/apache/cocoon/jispstore
                        MRUMemoryStore.java JispFilesystemStore.java
  Log:
  added Parameterizable interface, and made MRUMemoryStore ready for the
  JispFilesystemStore
  
  Revision  Changes    Path
  1.2       +67 -87    xml-cocoon2/scratchpad/src/org/apache/cocoon/jispstore/MRUMemoryStore.java
  
  Index: MRUMemoryStore.java
  ===================================================================
  RCS file: /home/cvs/xml-cocoon2/scratchpad/src/org/apache/cocoon/jispstore/MRUMemoryStore.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- MRUMemoryStore.java	2001/12/13 00:04:34	1.1
  +++ MRUMemoryStore.java	2001/12/13 16:24:28	1.2
  @@ -7,18 +7,13 @@
    *****************************************************************************/
   package org.apache.cocoon.jispstore;
   
  -import org.apache.avalon.excalibur.collections.SynchronizedPriorityQueue;
   import org.apache.avalon.framework.activity.Disposable;
  -import org.apache.avalon.excalibur.collections.SynchronizedPriorityQueue;
   import org.apache.avalon.framework.component.ComponentException;
   import org.apache.avalon.framework.component.ComponentManager;
   import org.apache.avalon.framework.component.Composable;
  -import org.apache.avalon.framework.configuration.Configurable;
  -import org.apache.avalon.framework.configuration.Configuration;
  -import org.apache.avalon.framework.configuration.ConfigurationException;
  -import org.apache.avalon.framework.context.Context;
  -import org.apache.avalon.framework.context.ContextException;
  -import org.apache.avalon.framework.context.Contextualizable;
  +import org.apache.avalon.framework.parameters.Parameters;
  +import org.apache.avalon.framework.parameters.Parameterizable;
  +import org.apache.avalon.framework.parameters.ParameterException;
   import org.apache.avalon.framework.logger.AbstractLoggable;
   import org.apache.avalon.framework.parameters.Parameters;
   import org.apache.avalon.framework.thread.ThreadSafe;
  @@ -28,13 +23,7 @@
   import org.apache.cocoon.components.store.Store;
   import org.apache.cocoon.components.store.StoreJanitor;
   import org.apache.cocoon.util.ClassUtils;
  -import org.apache.cocoon.util.IOUtils;
  -import org.apache.regexp.RE;
  -import org.apache.regexp.RESyntaxException;
  -
  -import java.io.File;
  -import java.io.IOException;
  -import java.net.URLEncoder;
  +
   import java.util.Enumeration;
   import java.util.Hashtable;
   import java.util.LinkedList;
  @@ -53,20 +42,19 @@
   public final class MRUMemoryStore
   extends AbstractLoggable
   implements Store,
  -           Configurable,
  +           Parameterizable,
              ThreadSafe,
              Composable,
              Disposable {
   
  -    private int maxobjects;
  -    private boolean filesystem;
  -    private Hashtable cache;
  -    private LinkedList mrulist;
  -    private File cachefile;
  -    private Store fsstore;
  -    private StoreJanitor storejanitor;
  -    private FilesystemQueue filesystemQueue;
  -    private ComponentManager manager;
  +    private int mMaxobjects;
  +    private boolean mFilesystem;
  +    private Hashtable mCache;
  +    private LinkedList mMRUList;
  +    private Store mFsstore;
  +    private StoreJanitor mStorejanitor;
  +    private FilesystemQueue mFilesystemQueue;
  +    private ComponentManager mComponetManager;
   
       /**
        * Get components of the ComponentManager
  @@ -74,50 +62,51 @@
        * @param the ComponentManager
        */
       public void compose(ComponentManager manager) throws ComponentException {
  -        this.manager = manager;
  +        this.mComponetManager = manager;
           getLogger().debug("Looking up " + Store.ROLE + "/JispFilesystemStore");
  -        this.fsstore = (Store)manager.lookup(Store.ROLE + "/JispFilesystemStore");
  +        this.mFsstore = (Store)manager.lookup(Store.ROLE + "/JispFilesystemStore");
           getLogger().debug("Looking up " + StoreJanitor.ROLE);
  -        this.storejanitor = (StoreJanitor)manager.lookup(StoreJanitor.ROLE);
  +        this.mStorejanitor = (StoreJanitor)manager.lookup(StoreJanitor.ROLE);
           getLogger().debug("Looking up " + FilesystemQueue.ROLE);
  -        this.filesystemQueue = (FilesystemQueue)manager.lookup(FilesystemQueue.ROLE);
  +        this.mFilesystemQueue = (FilesystemQueue)manager.lookup(FilesystemQueue.ROLE);
       }
   
       /**
  -     * Initialize the MRUMemoryStore.
  +     * Configure the MRUMemoryStore.
        * A few options can be used :
        * <UL>
  -     *  <LI>maxobjects = how many objects will be stored in memory (Default: 10 objects)</LI>
  -     *  <LI>filesystem = use filesystem storage to keep object persistent (Default: false)</LI>
  +     *  <LI>mMaxobjects = how many objects will be stored in memory (Default: 10 objects)</LI>
  +     *  <LI>mFilesystem = use filesystem storage to keep object persistent (Default: false)</LI>
        * </UL>
        *
  -     * @param the Configuration of the application
  -     * @exception ConfigurationException
  +     * @param the Parameters of the application
  +     * @exception ParameterException
        */
  -    public void configure(Configuration conf) throws ConfigurationException {
  -        Parameters params = Parameters.fromConfiguration(conf);
  -        this.maxobjects            = params.getParameterAsInteger("maxobjects",100);
  -        this.filesystem            = params.getParameterAsBoolean("filesystem",false);
  -        if ((this.maxobjects < 1)) {
  -            throw new ConfigurationException("MRUMemoryStore maxobjects must be at least 1 milli second!");
  +    public void parameterize(Parameters params) throws ParameterException {
  +        this.mMaxobjects            = params.getParameterAsInteger("maxobjects",100);
  +        this.mFilesystem            = params.getParameterAsBoolean("filesystem",false);
  +        if ((this.mMaxobjects < 1)) {
  +            throw new ParameterException("MRUMemoryStore maxobjects must be at least 1 milli second!");
           }
   
  -        this.cache = new Hashtable((int)(this.maxobjects * 1.2));
  -        this.mrulist     = new LinkedList();
  -        this.storejanitor.register(this);
  +        this.mCache = new Hashtable((int)(this.mMaxobjects * 1.2));
  +        this.mMRUList     = new LinkedList();
  +        this.mStorejanitor.register(this);
       }
   
       /**
        * Dispose the component
        */
       public void dispose() {
  -        if (this.manager != null) {
  -            this.manager.release(this.storejanitor);
  -            this.storejanitor = null;
  -            this.manager.release(this.filesystemQueue);
  -            this.filesystemQueue = null;
  -            this.manager.release(this.fsstore);
  -            this.fsstore = null;
  +        this.getLogger().debug("dispose()");
  +
  +        if (this.mComponetManager != null) {
  +            this.mComponetManager.release(this.mStorejanitor);
  +            this.mStorejanitor = null;
  +            this.mComponetManager.release(this.mFilesystemQueue);
  +            this.mFilesystemQueue = null;
  +            this.mComponetManager.release(this.mFsstore);
  +            this.mFsstore = null;
           }
       }
   
  @@ -146,28 +135,28 @@
           getLogger().debug("Holding object in memory. value: " + value);
   
           /** ...first test if the max. objects in cache is reached... */
  -        while (this.mrulist.size() >= this.maxobjects) {
  +        while (this.mMRUList.size() >= this.mMaxobjects) {
               /** ...ok, heapsize is reached, remove the last element... */
               this.free();
           }
   
           /** put the object on the filesystem */
  -        if(this.filesystem) {
  +        if(this.mFilesystem) {
               if(this.checkSerializable(value) &&
  -               !this.fsstore.containsKey(key)) {
  +               !this.mFsstore.containsKey(key)) {
                   this.getLogger().debug("Storing object on fs");
                   try {
  -                    this.filesystemQueue.insert(new FilesystemQueueObject(key,value));
  +                    this.mFilesystemQueue.insert(new FilesystemQueueObject(key,value));
                   } catch(Exception e) {
                       this.getLogger().error("Error storing Object on fs",e);
                   }
               }
           }
           /** ..put the new object in the cache, on the top of course ... */
  -        this.cache.put(key, value);
  -        this.mrulist.remove(key);
  -        this.mrulist.addFirst(key);
  -        this.getLogger().debug("Cache size=" + cache.size());
  +        this.mCache.put(key, value);
  +        this.mMRUList.remove(key);
  +        this.mMRUList.addFirst(key);
  +        this.getLogger().debug("Cache size=" + mCache.size());
       }
   
       /**
  @@ -178,36 +167,27 @@
        */
       public Object get(Object key) {
           this.getLogger().debug("Getting object from memory. Key: " + key);
  -        Object tmpobject = this.cache.get(key);
  +        Object tmpobject = this.mCache.get(key);
           if ( tmpobject != null ) {
               /** put the accessed key on top of the linked list */
  -            this.mrulist.remove(key);
  -            this.mrulist.addFirst(key);
  +            this.mMRUList.remove(key);
  +            this.mMRUList.addFirst(key);
               return tmpobject;
           }
   
           this.getLogger().debug("Object not found in memory");
           /** try to fetch from filesystem */
  -        if(this.filesystem) {
  -            tmpobject = this.fsstore.get(key);
  +        if(this.mFilesystem) {
  +            tmpobject = this.mFsstore.get(key);
               if (tmpobject == null) {
                   this.getLogger().debug( "Object was NOT found on fs.  Looked for: " + key);
                   return null;
               } else {
                   this.getLogger().debug("Object was found on fs");
  -                try {
  -                    tmpobject = IOUtils.deserializeObject((File)tmpobject);
  -                    if(!this.cache.containsKey(key)) {
  -                        this.hold(key,tmpobject);
  -                    }
  -                    return tmpobject;
  -                } catch (ClassNotFoundException ce) {
  -                    this.getLogger().error("Error in get()!", ce);
  -                    return null;
  -                } catch (IOException ioe) {
  -                    this.getLogger().error("Error in get()!", ioe);
  -                    return null;
  +                if(!this.mCache.containsKey(key)) {
  +                    this.hold(key,tmpobject);
                   }
  +                return tmpobject;
               }
           }
           return null;
  @@ -220,10 +200,10 @@
        */
       public void remove(Object key) {
           this.getLogger().debug("Removing object from store");
  -        this.cache.remove(key);
  -        this.mrulist.remove(key);
  -        if(this.filesystem && key != null) {
  -            this.fsstore.remove(key);
  +        this.mCache.remove(key);
  +        this.mMRUList.remove(key);
  +        if(this.mFilesystem && key != null) {
  +            this.mFsstore.remove(key);
           }
       }
   
  @@ -234,10 +214,10 @@
        * @return true if the key exists
        */
       public boolean containsKey(Object key) {
  -        if(filesystem) {
  -            return (this.cache.containsKey(key) || this.fsstore.containsKey(key));
  +        if(mFilesystem) {
  +            return (this.mCache.containsKey(key) || this.mFsstore.containsKey(key));
           } else {
  -            return this.cache.containsKey(key);
  +            return this.mCache.containsKey(key);
           }
       }
   
  @@ -247,7 +227,7 @@
        * @return the enumeration of the cache
        */
       public Enumeration keys() {
  -        return null;
  +        return this.mCache.keys();
       }
   
       /**
  @@ -256,11 +236,11 @@
        */
       public void free() {
           try {
  -            if(this.cache.size() > 0) {
  +            if(this.mCache.size() > 0) {
                   this.getLogger().debug("Freeing cache");
  -                this.cache.remove(this.mrulist.getLast());
  -                this.mrulist.removeLast();
  -                this.getLogger().debug("Cache size=" + cache.size());
  +                this.mCache.remove(this.mMRUList.getLast());
  +                this.mMRUList.removeLast();
  +                this.getLogger().debug("Cache size=" + mCache.size());
               }
           } catch (Exception e) {
               this.getLogger().error("Error in free()", e);
  
  
  
  1.4       +33 -18    xml-cocoon2/scratchpad/src/org/apache/cocoon/jispstore/JispFilesystemStore.java
  
  Index: JispFilesystemStore.java
  ===================================================================
  RCS file: /home/cvs/xml-cocoon2/scratchpad/src/org/apache/cocoon/jispstore/JispFilesystemStore.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- JispFilesystemStore.java	2001/12/13 14:52:36	1.3
  +++ JispFilesystemStore.java	2001/12/13 16:24:28	1.4
  @@ -13,6 +13,9 @@
   import org.apache.avalon.framework.activity.Initializable;
   import org.apache.avalon.framework.logger.AbstractLoggable;
   import org.apache.avalon.framework.thread.ThreadSafe;
  +import org.apache.avalon.framework.parameters.Parameters;
  +import org.apache.avalon.framework.parameters.Parameterizable;
  +import org.apache.avalon.framework.parameters.ParameterException;
   
   import org.apache.cocoon.Constants;
   import org.apache.cocoon.util.IOUtils;
  @@ -26,23 +29,27 @@
   import java.io.Serializable;
   import java.util.Enumeration;
   
  +/**
  + * JispFilesystemStore
  + *
  + * @author <a href="mailto:g-froehlich@gmx.de">Gerhard Froehlich</a>
  + */
   public final class JispFilesystemStore 
   extends AbstractLoggable
   implements Store,
              Contextualizable,
              ThreadSafe,
  -           Initializable {
  +           Initializable,
  +           Parameterizable {
   
       /** The directory repository */
       protected File mDirectoryFile;
       protected volatile String mDirectoryPath;
   
  -    /** some statics for the moment */
  -    private static String DATABASE_NAME = "cocoon.data";
  -    private static String INDEX_NAME = "cocoon.idx";
  -    private static int ORDER = 1001;
  -
       /** The database */
  +    private String mDatabaseName;
  +    private String mIndexName;
  +    private int mOrder;
       private IndexedObjectDatabase mDatabase;
       private BTreeIndex mIndex;
   
  @@ -68,22 +75,20 @@
           getLogger().debug("initialize() JispFilesystemStore");
   
           try {
  -
  -            getLogger().debug("Path to data file=" + this.getDirectoryPath() + DATABASE_NAME);
  -            File myFile = new File(this.getDirectoryPath() + DATABASE_NAME);
  -            getLogger().debug("File exists=" + myFile.exists());
  +            getLogger().debug("initialize(): Path to Datafile=" + this.getDirectoryPath() + mDatabaseName);
  +            File myFile = new File(this.getDirectoryPath() + mDatabaseName);
   
               if (myFile.exists()) {
  -                this.getLogger().debug("Data file exists");
  -                mDatabase = new IndexedObjectDatabase(getDirectoryPath() + DATABASE_NAME,false);
  -                mIndex = new BTreeIndex(this.getDirectoryPath() + INDEX_NAME);
  +                this.getLogger().debug("initialize(): Datafile exists");
  +                mDatabase = new IndexedObjectDatabase(getDirectoryPath() + mDatabaseName,false);
  +                mIndex = new BTreeIndex(this.getDirectoryPath() + mIndexName);
                   mDatabase.attachIndex(mIndex);
                   mIndex.dumpTree();
               } else {
  -                this.getLogger().debug("Data file not exists");
  -                mDatabase = new IndexedObjectDatabase(getDirectoryPath() + DATABASE_NAME,false);
  -                mIndex = new BTreeIndex(this.getDirectoryPath() + INDEX_NAME,
  -                                           ORDER, new JispKey(),false);
  +                this.getLogger().debug("initialize(): Datafile not exists");
  +                mDatabase = new IndexedObjectDatabase(getDirectoryPath() + mDatabaseName,false);
  +                mIndex = new BTreeIndex(this.getDirectoryPath() + mIndexName,
  +                                           mOrder, new JispKey(),false);
                   mDatabase.attachIndex(mIndex);
                   mIndex.dumpTree();
               }   
  @@ -92,6 +97,16 @@
           }
       }
   
  +    public void parameterize(Parameters params) throws ParameterException {
  +        mDatabaseName = params.getParameter("datafile","cocoon.dat");
  +        mIndexName = params.getParameter("indexfile","cocoon.idx");
  +        mOrder = params.getParameterAsInteger("order",1001);
  +
  +        this.getLogger().debug("parameterize(..): mDatabaseName=" + mDatabaseName);
  +        this.getLogger().debug("parameterize(..): mIndexName=" + mIndexName);
  +        this.getLogger().debug("parameterize(..): mOrder=" + mOrder);
  +    }
  +
       /**
        * Sets the repository's location
        */
  @@ -141,7 +156,7 @@
               if(readObj != null) {
                   this.getLogger().debug("get(): FOUND!!= " + readObj);
               } else {
  -                this.getLogger().debug("get(): NOT FOUND!!= " + readObj);
  +                this.getLogger().debug("get(): NOT_FOUND!!");
               }
               
           } catch (Exception e) {
  
  
  

----------------------------------------------------------------------
In case of troubles, e-mail:     webmaster@xml.apache.org
To unsubscribe, e-mail:          cocoon-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: cocoon-cvs-help@xml.apache.org