[jboss-cvs] JBossAS SVN: r88252 - in projects/vfs/branches/Branch_2_1/src: main/java/org/jboss/virtual/plugins/context/file and 4 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Wed May 6 04:01:56 EDT 2009


Author: alesj
Date: 2009-05-06 04:01:55 -0400 (Wed, 06 May 2009)
New Revision: 88252

Added:
   projects/vfs/branches/Branch_2_1/src/main/java/org/jboss/virtual/spi/VFSContextConstraints.java
Modified:
   projects/vfs/branches/Branch_2_1/src/main/java/org/jboss/virtual/plugins/context/AbstractVFSContext.java
   projects/vfs/branches/Branch_2_1/src/main/java/org/jboss/virtual/plugins/context/file/FileSystemContext.java
   projects/vfs/branches/Branch_2_1/src/main/java/org/jboss/virtual/plugins/context/zip/ZipEntryContext.java
   projects/vfs/branches/Branch_2_1/src/main/java/org/jboss/virtual/plugins/registry/DefaultVFSRegistry.java
   projects/vfs/branches/Branch_2_1/src/main/java/org/jboss/virtual/spi/VFSContext.java
   projects/vfs/branches/Branch_2_1/src/test/java/org/jboss/test/virtual/test/MemoryTestCase.java
Log:
Port 109 fix

Modified: projects/vfs/branches/Branch_2_1/src/main/java/org/jboss/virtual/plugins/context/AbstractVFSContext.java
===================================================================
--- projects/vfs/branches/Branch_2_1/src/main/java/org/jboss/virtual/plugins/context/AbstractVFSContext.java	2009-05-06 07:33:16 UTC (rev 88251)
+++ projects/vfs/branches/Branch_2_1/src/main/java/org/jboss/virtual/plugins/context/AbstractVFSContext.java	2009-05-06 08:01:55 UTC (rev 88252)
@@ -30,6 +30,8 @@
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
+import java.util.Collections;
 import java.util.Map.Entry;
 
 import org.jboss.logging.Logger;
@@ -46,6 +48,7 @@
 import org.jboss.virtual.spi.VFSContext;
 import org.jboss.virtual.spi.VirtualFileHandler;
 import org.jboss.virtual.spi.VirtualFileHandlerVisitor;
+import org.jboss.virtual.spi.VFSContextConstraints;
 
 /**
  * AbstractVFSContext.
@@ -104,6 +107,11 @@
       this(rootURL.toURI());
    }
 
+   public Set<VFSContextConstraints> getConstraints()
+   {
+      return Collections.emptySet();
+   }
+
    /**
     * Create options.
     *

Modified: projects/vfs/branches/Branch_2_1/src/main/java/org/jboss/virtual/plugins/context/file/FileSystemContext.java
===================================================================
--- projects/vfs/branches/Branch_2_1/src/main/java/org/jboss/virtual/plugins/context/file/FileSystemContext.java	2009-05-06 07:33:16 UTC (rev 88251)
+++ projects/vfs/branches/Branch_2_1/src/main/java/org/jboss/virtual/plugins/context/file/FileSystemContext.java	2009-05-06 08:01:55 UTC (rev 88252)
@@ -29,8 +29,10 @@
 import java.net.URL;
 import java.security.AccessController;
 import java.security.PrivilegedAction;
+import java.util.Collections;
 import java.util.List;
 import java.util.Properties;
+import java.util.Set;
 
 import org.jboss.logging.Logger;
 import org.jboss.virtual.VFSUtils;
@@ -40,6 +42,7 @@
 import org.jboss.virtual.plugins.context.jar.JarUtils;
 import org.jboss.virtual.plugins.context.zip.ZipEntryContext;
 import org.jboss.virtual.spi.LinkInfo;
+import org.jboss.virtual.spi.VFSContextConstraints;
 import org.jboss.virtual.spi.VirtualFileHandler;
 
 /**
@@ -85,6 +88,9 @@
          staticLog.debug("VFS forced case sensitivity is enabled.");
    }
 
+   /** The constraints set */
+   private static final Set<VFSContextConstraints> CONSTRAINTS = Collections.singleton(VFSContextConstraints.CACHEABLE);
+
    /** The temp file */
    private transient volatile File file;
 
@@ -195,6 +201,11 @@
       this.file = file;
    }
 
+   public Set<VFSContextConstraints> getConstraints()
+   {
+      return CONSTRAINTS;
+   }
+
    public String getName()
    {
       return (root != null) ? root.getName() : file.getName();

Modified: projects/vfs/branches/Branch_2_1/src/main/java/org/jboss/virtual/plugins/context/zip/ZipEntryContext.java
===================================================================
--- projects/vfs/branches/Branch_2_1/src/main/java/org/jboss/virtual/plugins/context/zip/ZipEntryContext.java	2009-05-06 07:33:16 UTC (rev 88251)
+++ projects/vfs/branches/Branch_2_1/src/main/java/org/jboss/virtual/plugins/context/zip/ZipEntryContext.java	2009-05-06 08:01:55 UTC (rev 88252)
@@ -47,6 +47,7 @@
 import java.util.Map;
 import java.util.TreeMap;
 import java.util.UUID;
+import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.zip.ZipEntry;
 import java.util.zip.ZipInputStream;
@@ -64,6 +65,7 @@
 import org.jboss.virtual.spi.TempInfo;
 import org.jboss.virtual.spi.VFSContext;
 import org.jboss.virtual.spi.VirtualFileHandler;
+import org.jboss.virtual.spi.VFSContextConstraints;
 
 /**
  * <tt>ZipEntryContext</tt> implements a {@link org.jboss.virtual.spi.VFSContext}
@@ -118,6 +120,9 @@
    /** The empty bytes const */
    private static final byte[] NO_BYTES = new byte[0];
 
+   /** The constraints set */
+   private static final Set<VFSContextConstraints> CONSTRAINTS = Collections.singleton(VFSContextConstraints.CACHEABLE);
+
    /** Abstracted access to zip archive - either ZipFileWrapper or ZipStreamWrapper */
    private volatile ZipWrapper zipSource;
 
@@ -440,6 +445,11 @@
       throw new IllegalArgumentException("No such entry: " + is + ", " + relative);
    }
 
+   public Set<VFSContextConstraints> getConstraints()
+   {
+      return CONSTRAINTS;
+   }
+
    /**
     * Returns archive file name - if this is a top-level ZipEntryContext.
     * Otherwise it returns the last component of URL.

Modified: projects/vfs/branches/Branch_2_1/src/main/java/org/jboss/virtual/plugins/registry/DefaultVFSRegistry.java
===================================================================
--- projects/vfs/branches/Branch_2_1/src/main/java/org/jboss/virtual/plugins/registry/DefaultVFSRegistry.java	2009-05-06 07:33:16 UTC (rev 88251)
+++ projects/vfs/branches/Branch_2_1/src/main/java/org/jboss/virtual/plugins/registry/DefaultVFSRegistry.java	2009-05-06 08:01:55 UTC (rev 88252)
@@ -26,12 +26,14 @@
 import java.net.URISyntaxException;
 import java.net.URL;
 import java.util.List;
+import java.util.Set;
 
+import org.jboss.virtual.VFSUtils;
 import org.jboss.virtual.VirtualFile;
-import org.jboss.virtual.VFSUtils;
+import org.jboss.virtual.spi.TempInfo;
 import org.jboss.virtual.spi.VFSContext;
+import org.jboss.virtual.spi.VFSContextConstraints;
 import org.jboss.virtual.spi.VirtualFileHandler;
-import org.jboss.virtual.spi.TempInfo;
 import org.jboss.virtual.spi.cache.VFSCache;
 import org.jboss.virtual.spi.cache.VFSCacheFactory;
 import org.jboss.virtual.spi.registry.VFSRegistry;
@@ -53,14 +55,32 @@
       return VFSCacheFactory.getInstance();
    }
 
+   /**
+    * Is the vfs context cacheable.
+    *
+    * @param context the vfs context
+    * @return true if context is cacheable, false otherwise
+    */
+   protected boolean isCacheable(VFSContext context)
+   {
+      Set<VFSContextConstraints> constraints = context.getConstraints();
+      return constraints != null && constraints.contains(VFSContextConstraints.CACHEABLE);
+   }
+
    public void addContext(VFSContext context)
    {
-      getCache().putContext(context);
+      if (isCacheable(context))
+      {
+         getCache().putContext(context);
+      }
    }
 
    public void removeContext(VFSContext context)
    {
-      getCache().removeContext(context);
+      if (isCacheable(context))
+      {
+         getCache().removeContext(context);
+      }
    }
 
    public VirtualFile getFile(URI uri) throws IOException

Modified: projects/vfs/branches/Branch_2_1/src/main/java/org/jboss/virtual/spi/VFSContext.java
===================================================================
--- projects/vfs/branches/Branch_2_1/src/main/java/org/jboss/virtual/spi/VFSContext.java	2009-05-06 07:33:16 UTC (rev 88251)
+++ projects/vfs/branches/Branch_2_1/src/main/java/org/jboss/virtual/spi/VFSContext.java	2009-05-06 08:01:55 UTC (rev 88252)
@@ -24,6 +24,7 @@
 import java.io.IOException;
 import java.net.URI;
 import java.util.List;
+import java.util.Set;
 
 import org.jboss.virtual.VFS;
 
@@ -38,6 +39,13 @@
 public interface VFSContext
 {
    /**
+    * Get context's constraints.
+    *
+    * @return the constraints
+    */
+   Set<VFSContextConstraints> getConstraints();
+
+   /**
     * Get the name.
     *
     * @return the name

Copied: projects/vfs/branches/Branch_2_1/src/main/java/org/jboss/virtual/spi/VFSContextConstraints.java (from rev 88251, projects/vfs/trunk/src/main/java/org/jboss/virtual/spi/VFSContextConstraints.java)
===================================================================
--- projects/vfs/branches/Branch_2_1/src/main/java/org/jboss/virtual/spi/VFSContextConstraints.java	                        (rev 0)
+++ projects/vfs/branches/Branch_2_1/src/main/java/org/jboss/virtual/spi/VFSContextConstraints.java	2009-05-06 08:01:55 UTC (rev 88252)
@@ -0,0 +1,34 @@
+/*
+  * JBoss, Home of Professional Open Source
+  * Copyright 2005, JBoss Inc., and individual contributors as indicated
+  * by the @authors tag. See the copyright.txt in the distribution for a
+  * full listing of individual contributors.
+  *
+  * This is free software; you can redistribute it and/or modify it
+  * under the terms of the GNU Lesser General Public License as
+  * published by the Free Software Foundation; either version 2.1 of
+  * the License, or (at your option) any later version.
+  *
+  * This software is distributed in the hope that it will be useful,
+  * but WITHOUT ANY WARRANTY; without even the implied warranty of
+  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+  * Lesser General Public License for more details.
+  *
+  * You should have received a copy of the GNU Lesser General Public
+  * License along with this software; if not, write to the Free
+  * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+  * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+  */
+package org.jboss.virtual.spi;
+
+/**
+ * A virtual file context constraints enum.
+ * It describes the context's constraints.
+ * e.g. can we cache it
+ *
+ * @author ales.justin at jboss.org
+ */
+public enum VFSContextConstraints
+{
+   CACHEABLE
+}
\ No newline at end of file

Modified: projects/vfs/branches/Branch_2_1/src/test/java/org/jboss/test/virtual/test/MemoryTestCase.java
===================================================================
--- projects/vfs/branches/Branch_2_1/src/test/java/org/jboss/test/virtual/test/MemoryTestCase.java	2009-05-06 07:33:16 UTC (rev 88251)
+++ projects/vfs/branches/Branch_2_1/src/test/java/org/jboss/test/virtual/test/MemoryTestCase.java	2009-05-06 08:01:55 UTC (rev 88252)
@@ -25,20 +25,26 @@
 import java.io.InputStream;
 import java.net.URI;
 import java.net.URL;
+import java.util.ArrayList;
+import java.util.Enumeration;
 import java.util.HashMap;
 import java.util.List;
 
 import junit.framework.Test;
+import org.jboss.util.collection.Iterators;
 import org.jboss.util.id.GUID;
+import org.jboss.virtual.MemoryFileFactory;
 import org.jboss.virtual.VFS;
 import org.jboss.virtual.VirtualFile;
-import org.jboss.virtual.MemoryFileFactory;
 import org.jboss.virtual.plugins.context.memory.MemoryContextFactory;
 import org.jboss.virtual.plugins.context.memory.MemoryContextHandler;
+import org.jboss.virtual.plugins.cache.IterableTimedVFSCache;
 import org.jboss.virtual.spi.VFSContext;
 import org.jboss.virtual.spi.VFSContextFactory;
 import org.jboss.virtual.spi.VFSContextFactoryLocator;
 import org.jboss.virtual.spi.VirtualFileHandler;
+import org.jboss.virtual.spi.cache.VFSCache;
+import org.jboss.virtual.spi.cache.VFSCacheFactory;
 
 /**
  * Memory vfs tests.
@@ -324,7 +330,81 @@
       URL rootD = new URL("vfsmemory", guid, "/classes");
       assertEquals(rootC, rootD);
    }
-   
+
+   public void testClassLoaderNoCache() throws Exception
+   {
+      doTestClassLoader();
+   }
+
+   public void testClassLoaderWithCache() throws Exception
+   {
+      VFSCache cache = new IterableTimedVFSCache();
+      cache.start();
+      VFSCacheFactory.setInstance(cache);
+      try
+      {
+         doTestClassLoader();
+      }
+      finally
+      {
+         VFSCacheFactory.setInstance(null);
+         cache.stop();         
+      }
+   }
+
+   @SuppressWarnings({"unchecked", "deprecation"})
+   private void doTestClassLoader() throws IOException
+   {
+      URL root = getResource("/vfs/test/nested/nested.jar");
+      final VirtualFile nested = VFS.createNewRoot(root);
+
+      // flush - so we only get in-memory contexts (if they exist)
+      VFSCacheFactory.getInstance().flush();
+
+      root = new URL("vfsmemory://aopdomain");
+      final VFS vfs = MemoryFileFactory.createRoot(root);
+      URL leaf = new URL("vfsmemory://aopdomain/org/acme/leaf");
+      MemoryFileFactory.putFile(leaf, new byte[]{'a', 'b', 'c'});
+
+      ClassLoader cl = new ClassLoader()
+      {
+         @Override
+         public Enumeration<URL> getResources(String name) throws IOException
+         {
+            try
+            {
+               List<URL> urls = new ArrayList<URL>();
+               urls.add(nested.findChild(name).toURL());
+               urls.add(vfs.findChild(name).toURL());
+               return Iterators.toEnumeration(urls.iterator());
+            }
+            catch (Exception e)
+            {
+               IOException ioe = new IOException();
+               ioe.initCause(e);
+               throw ioe;
+            }
+         }
+      };
+
+      Enumeration<URL> urls = cl.getResources("");
+      while (urls.hasMoreElements())
+      {
+         URL url = urls.nextElement();
+         VirtualFile file = VFS.getRoot(url);
+         assertNotNull(file);
+      }
+
+      // duplicate resources call, after contexts have been populated
+      urls = cl.getResources("");
+      while (urls.hasMoreElements())
+      {
+         URL url = urls.nextElement();
+         VirtualFile file = VFS.getRoot(url);
+         assertNotNull(file);
+      }
+   }
+
    protected void setUp() throws Exception
    {
       super.setUp();




More information about the jboss-cvs-commits mailing list