Author: imario
Date: Fri Nov 17 14:52:44 2006
New Revision: 476349

URL: http://svn.apache.org/viewvc?view=rev&rev=476349
Log:
added WeakRefFilesCache which should be a little bit faster in freeing 
resources, though, not sure about it yet.
optimized freeing resources int SharedRandomContentInputStream

Added:
    
jakarta/commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs/cache/WeakRefFilesCache.java
   (with props)
Modified:
    
jakarta/commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs/cache/SoftRefFilesCache.java
    
jakarta/commons/proper/vfs/trunk/sandbox/src/main/java/org/apache/commons/vfs/provider/mime/MimeFileSystem.java
    
jakarta/commons/proper/vfs/trunk/sandbox/src/main/java/org/apache/commons/vfs/util/SharedRandomContentInputStream.java

Modified: 
jakarta/commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs/cache/SoftRefFilesCache.java
URL: 
http://svn.apache.org/viewvc/jakarta/commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs/cache/SoftRefFilesCache.java?view=diff&rev=476349&r1=476348&r2=476349
==============================================================================
--- 
jakarta/commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs/cache/SoftRefFilesCache.java
 (original)
+++ 
jakarta/commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs/cache/SoftRefFilesCache.java
 Fri Nov 17 14:52:44 2006
@@ -145,7 +145,7 @@
 
                Map files = getOrCreateFilesystemCache(file.getFileSystem());
 
-               Reference ref = new SoftReference(file, refqueue);
+               Reference ref = createReference(file, refqueue);
                FileSystemAndNameKey key = new FileSystemAndNameKey(file
                                .getFileSystem(), file.getName());
 
@@ -156,13 +156,18 @@
                }
        }
 
+       protected Reference createReference(FileObject file, ReferenceQueue 
refqueue)
+       {
+               return new SoftReference(file, refqueue);
+       }
+
        public FileObject getFile(final FileSystem filesystem, final FileName 
name)
        {
                Map files = getOrCreateFilesystemCache(filesystem);
 
                synchronized (files)
                {
-                       SoftReference ref = (SoftReference) files.get(name);
+                       Reference ref = (Reference) files.get(name);
                        if (ref == null)
                        {
                                return null;

Added: 
jakarta/commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs/cache/WeakRefFilesCache.java
URL: 
http://svn.apache.org/viewvc/jakarta/commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs/cache/WeakRefFilesCache.java?view=auto&rev=476349
==============================================================================
--- 
jakarta/commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs/cache/WeakRefFilesCache.java
 (added)
+++ 
jakarta/commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs/cache/WeakRefFilesCache.java
 Fri Nov 17 14:52:44 2006
@@ -0,0 +1,26 @@
+package org.apache.commons.vfs.cache;
+
+import org.apache.commons.vfs.FileObject;
+
+import java.lang.ref.Reference;
+import java.lang.ref.ReferenceQueue;
+import java.lang.ref.WeakReference;
+
+/**
+ * This implementation caches every file as long as it is strongly reachable by
+ * the java vm. As soon as the object is no longer reachable it will be 
discarded.
+ * In contrast to the SoftRefFilesCache this implementation might free 
resources faster
+ * as it don't wait until a memory limitation.
+ * 
+ * @author <a href="mailto:[EMAIL PROTECTED]">Mario Ivankovits</a>
+ * @version $Revision$ $Date: 2005-09-30 09:02:41 +0200 (Fr, 30 Sep
+ *          2005) $
+ * @see java.lang.ref.WeakReference
+ */
+public class WeakRefFilesCache extends SoftRefFilesCache
+{
+       protected Reference createReference(FileObject file, ReferenceQueue 
refqueue)
+       {
+               return new WeakReference(file, refqueue);
+       }
+}

Propchange: 
jakarta/commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs/cache/WeakRefFilesCache.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
jakarta/commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs/cache/WeakRefFilesCache.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: 
jakarta/commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs/cache/WeakRefFilesCache.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: 
jakarta/commons/proper/vfs/trunk/sandbox/src/main/java/org/apache/commons/vfs/provider/mime/MimeFileSystem.java
URL: 
http://svn.apache.org/viewvc/jakarta/commons/proper/vfs/trunk/sandbox/src/main/java/org/apache/commons/vfs/provider/mime/MimeFileSystem.java?view=diff&rev=476349&r1=476348&r2=476349
==============================================================================
--- 
jakarta/commons/proper/vfs/trunk/sandbox/src/main/java/org/apache/commons/vfs/provider/mime/MimeFileSystem.java
 (original)
+++ 
jakarta/commons/proper/vfs/trunk/sandbox/src/main/java/org/apache/commons/vfs/provider/mime/MimeFileSystem.java
 Fri Nov 17 14:52:44 2006
@@ -76,14 +76,13 @@
        {
                try
                {
-                       if (mimeStream instanceof 
SharedRandomContentInputStream)
+                       if (mimeStream == null)
                        {
-                               ((SharedRandomContentInputStream) 
mimeStream).closeAll();
-                       }
-                       else
-                       {
-                               mimeStream.close();
+                               return;
                        }
+
+                       closeMimeStream();
+                       mimeStream = null;
                }
                catch (IOException e)
                {
@@ -91,8 +90,25 @@
                }
        }
 
-       public Part createCommunicationLink() throws FileSystemException, 
MessagingException
+       private void closeMimeStream() throws IOException
        {
+               if (mimeStream instanceof SharedRandomContentInputStream)
+               {
+                       ((SharedRandomContentInputStream) 
mimeStream).closeAll();
+               }
+               else
+               {
+                       mimeStream.close();
+               }
+       }
+
+       public Part createCommunicationLink() throws IOException, 
MessagingException
+       {
+               if (mimeStream != null)
+               {
+                       closeMimeStream();
+               }
+
                FileObject parentLayer = getParentLayer();
                if (!parentLayer.exists())
                {

Modified: 
jakarta/commons/proper/vfs/trunk/sandbox/src/main/java/org/apache/commons/vfs/util/SharedRandomContentInputStream.java
URL: 
http://svn.apache.org/viewvc/jakarta/commons/proper/vfs/trunk/sandbox/src/main/java/org/apache/commons/vfs/util/SharedRandomContentInputStream.java?view=diff&rev=476349&r1=476348&r2=476349
==============================================================================
--- 
jakarta/commons/proper/vfs/trunk/sandbox/src/main/java/org/apache/commons/vfs/util/SharedRandomContentInputStream.java
 (original)
+++ 
jakarta/commons/proper/vfs/trunk/sandbox/src/main/java/org/apache/commons/vfs/util/SharedRandomContentInputStream.java
 Fri Nov 17 14:52:44 2006
@@ -25,7 +25,6 @@
 import java.io.IOException;
 import java.io.InputStream;
 import java.util.HashSet;
-import java.util.Iterator;
 import java.util.Set;
 
 /**
@@ -60,7 +59,7 @@
 
                synchronized(createdStreams)
                {
-                       createdStreams.add(is);
+                       createdStreams.add(this);
                }
        }
 
@@ -214,20 +213,11 @@
        {
                synchronized(createdStreams)
                {
-                       Iterator iterCreatedStreams = createdStreams.iterator();
-                       while (iterCreatedStreams.hasNext())
+                       SharedRandomContentInputStream[] streams = new 
SharedRandomContentInputStream[createdStreams.size()];
+                       createdStreams.toArray(streams);
+                       for (int i = 0; i<streams.length; i++)
                        {
-                               Object stream = iterCreatedStreams.next();
-                               iterCreatedStreams.remove();
-
-                               if (stream instanceof InputStream)
-                               {
-                                       ((InputStream) stream).close();
-                               }
-                               else if (stream instanceof RandomAccessContent)
-                               {
-                                       ((RandomAccessContent) stream).close();
-                               }
+                               streams[i].close();
                        }
                }
        }



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

Reply via email to