You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by ri...@apache.org on 2010/10/14 21:33:00 UTC

svn commit: r1022674 - in /felix/trunk/framework/src/main/java/org/apache/felix/framework: ./ cache/ resolver/ util/

Author: rickhall
Date: Thu Oct 14 19:33:00 2010
New Revision: 1022674

URL: http://svn.apache.org/viewvc?rev=1022674&view=rev
Log:
Eliminated thread local and anonymous inner classe for returning
local URLs and instead just convert the bundle URL to a local URL
at the point of return, if necessary. (FELIX-2645)

Modified:
    felix/trunk/framework/src/main/java/org/apache/felix/framework/ExtensionManager.java
    felix/trunk/framework/src/main/java/org/apache/felix/framework/ModuleImpl.java
    felix/trunk/framework/src/main/java/org/apache/felix/framework/URLHandlersBundleURLConnection.java
    felix/trunk/framework/src/main/java/org/apache/felix/framework/cache/ContentDirectoryContent.java
    felix/trunk/framework/src/main/java/org/apache/felix/framework/cache/DirectoryContent.java
    felix/trunk/framework/src/main/java/org/apache/felix/framework/cache/JarContent.java
    felix/trunk/framework/src/main/java/org/apache/felix/framework/resolver/Content.java
    felix/trunk/framework/src/main/java/org/apache/felix/framework/resolver/Module.java
    felix/trunk/framework/src/main/java/org/apache/felix/framework/util/FelixConstants.java

Modified: felix/trunk/framework/src/main/java/org/apache/felix/framework/ExtensionManager.java
URL: http://svn.apache.org/viewvc/felix/trunk/framework/src/main/java/org/apache/felix/framework/ExtensionManager.java?rev=1022674&r1=1022673&r2=1022674&view=diff
==============================================================================
--- felix/trunk/framework/src/main/java/org/apache/felix/framework/ExtensionManager.java (original)
+++ felix/trunk/framework/src/main/java/org/apache/felix/framework/ExtensionManager.java Thu Oct 14 19:33:00 2010
@@ -610,7 +610,6 @@ class ExtensionManager extends URLStream
         return null;
     }
 
-    // TODO: REMOVE - Remove when class path scanning is implemented.
     public URL getEntryAsURL(String name)
     {
         return null;
@@ -764,7 +763,6 @@ class ExtensionManager extends URLStream
             return getClass().getClassLoader().getResourceAsStream(urlPath);
         }
 
-        // TODO: REMOVE - Remove when class path scanning is implemented.
         public URL getLocalURL(int index, String urlPath)
         {
             return getClass().getClassLoader().getResource(urlPath);

Modified: felix/trunk/framework/src/main/java/org/apache/felix/framework/ModuleImpl.java
URL: http://svn.apache.org/viewvc/felix/trunk/framework/src/main/java/org/apache/felix/framework/ModuleImpl.java?rev=1022674&r1=1022673&r2=1022674&view=diff
==============================================================================
--- felix/trunk/framework/src/main/java/org/apache/felix/framework/ModuleImpl.java (original)
+++ felix/trunk/framework/src/main/java/org/apache/felix/framework/ModuleImpl.java Thu Oct 14 19:33:00 2010
@@ -145,6 +145,8 @@ public class ModuleImpl implements Modul
 
     // Boolean flag to enable/disable implicit boot delegation.
     private final boolean m_implicitBootDelegation;
+    // Boolean flag to enable/disable local URLs.
+    private final boolean m_useLocalURLs;
 
     // Re-usable security manager for accessing class context.
     private static SecurityManagerEx m_sm = new SecurityManagerEx();
@@ -158,13 +160,6 @@ public class ModuleImpl implements Modul
     // Flag indicating whether we are on an old JVM or not.
     private volatile static boolean m_isPreJava5 = false;
 
-    static ThreadLocal<Boolean> m_jarUrl = new ThreadLocal<Boolean>() {
-        @Override
-        protected Boolean initialValue() {
-            return false;
-        }
-    };
-
     /**
      * This constructor is used by the extension manager, since it needs
      * a constructor that does not throw an exception.
@@ -201,6 +196,9 @@ public class ModuleImpl implements Modul
         m_activationExcludes = null;
         m_activationIncludes = null;
         m_implicitBootDelegation = false;
+        m_useLocalURLs =
+            (m_configMap.get(FelixConstants.USE_LOCALURLS_PROP) == null)
+                ? false : true;
         m_bootClassLoader = m_defBootClassLoader;
     }
 
@@ -228,6 +226,10 @@ public class ModuleImpl implements Modul
                 (String) m_configMap.get(
                     FelixConstants.IMPLICIT_BOOT_DELEGATION_PROP)).booleanValue();
 
+        m_useLocalURLs =
+            (m_configMap.get(FelixConstants.USE_LOCALURLS_PROP) == null)
+                ? false : true;
+
         ClassLoader bootLoader = m_defBootClassLoader;
         Object map = m_configMap.get(FelixConstants.BOOT_CLASSLOADERS_PROP);
         if (map instanceof Map)
@@ -1113,39 +1115,28 @@ public class ModuleImpl implements Modul
 
     private URL createURL(int port, String path)
     {
-         if (useJarUrl())
-         {
-             return getLocalURL(port, path);
-         }
-         // Add a slash if there is one already, otherwise
-         // the is no slash separating the host from the file
-         // in the resulting URL.
-         if (!path.startsWith("/"))
-         {
-             path = "/" + path;
-         }
-
-         try
-         {
-             return m_secureAction.createURL(null,
-                 FelixConstants.BUNDLE_URL_PROTOCOL + "://" +
-                 m_id + ":" + port + path, m_streamHandler);
-         }
-         catch (MalformedURLException ex)
-         {
-             m_logger.log(m_bundle,
-                 Logger.LOG_ERROR,
-                 "Unable to create resource URL.",
-                 ex);
-         }
-         return null;
-    }
-
-    private boolean useJarUrl()
-    {
-        String val = (String) ((BundleImpl) getBundle()).getFramework()
-                        .getConfig().get("org.apache.felix.jarurls");
-        return m_jarUrl.get() && Boolean.parseBoolean(val);
+        // Add a slash if there is one already, otherwise
+        // the is no slash separating the host from the file
+        // in the resulting URL.
+        if (!path.startsWith("/"))
+        {
+            path = "/" + path;
+        }
+
+        try
+        {
+            return m_secureAction.createURL(null,
+                FelixConstants.BUNDLE_URL_PROTOCOL + "://" +
+                m_id + ":" + port + path, m_streamHandler);
+        }
+        catch (MalformedURLException ex)
+        {
+            m_logger.log(m_bundle,
+                Logger.LOG_ERROR,
+                "Unable to create resource URL.",
+                ex);
+        }
+        return null;
     }
 
     //
@@ -1718,16 +1709,30 @@ public class ModuleImpl implements Modul
 
         public Enumeration getResources(String name)
         {
-            boolean jarUrl = m_jarUrl.get();
-            try
-            {
-                m_jarUrl.set(true);
-                return ModuleImpl.this.getResourcesByDelegation(name);
-            }
-            finally
+            Enumeration urls = ModuleImpl.this.getResourcesByDelegation(name);
+            if (m_useLocalURLs)
             {
-                m_jarUrl.set(jarUrl);
+                List<URL> localURLs = new ArrayList();
+                while (urls.hasMoreElements())
+                {
+                    URL url = (URL) urls.nextElement();
+                    if (url.getProtocol().equals("bundle"))
+                    {
+                        try
+                        {
+                            url = ((URLHandlersBundleURLConnection)
+                                url.openConnection()).getLocalURL();
+                        }
+                        catch (IOException ex)
+                        {
+                            // Ignore and add original url.
+                        }
+                    }
+                    localURLs.add(url);
+                }
+                urls = new IteratorToEnumeration(localURLs.iterator());
             }
+            return urls;
         }
 
         protected Enumeration findResources(String name)
@@ -2028,16 +2033,23 @@ public class ModuleImpl implements Modul
 
         public URL getResource(String name)
         {
-            boolean jarUrl = m_jarUrl.get();
-            try
-            {
-                m_jarUrl.set(true);
-                return ModuleImpl.this.getResourceByDelegation(name);
-            }
-            finally
+            URL url = ModuleImpl.this.getResourceByDelegation(name);
+            if (m_useLocalURLs)
             {
-                m_jarUrl.set(jarUrl);
+                if (url.getProtocol().equals("bundle"))
+                {
+                    try
+                    {
+                        url = ((URLHandlersBundleURLConnection)
+                            url.openConnection()).getLocalURL();
+                    }
+                    catch (IOException ex)
+                    {
+                        // Ignore and return original url.
+                    }
+                }
             }
+            return url;
         }
 
         protected URL findResource(String name)
@@ -2052,16 +2064,30 @@ public class ModuleImpl implements Modul
         // can't. As a workaround, we make findResources() delegate instead.
         protected Enumeration findResources(String name)
         {
-            boolean jarUrl = m_jarUrl.get();
-            try
-            {
-                m_jarUrl.set(true);
-                return getResourcesByDelegation(name);
-            }
-            finally
+            Enumeration urls = ModuleImpl.this.getResourcesByDelegation(name);
+            if (m_useLocalURLs)
             {
-                m_jarUrl.set(jarUrl);
+                List<URL> localURLs = new ArrayList();
+                while (urls.hasMoreElements())
+                {
+                    URL url = (URL) urls.nextElement();
+                    if (url.getProtocol().equals("bundle"))
+                    {
+                        try
+                        {
+                            url = ((URLHandlersBundleURLConnection)
+                                url.openConnection()).getLocalURL();
+                        }
+                        catch (IOException ex)
+                        {
+                            // Ignore and add original url.
+                        }
+                    }
+                    localURLs.add(url);
+                }
+                urls = Collections.enumeration(localURLs);
             }
+            return urls;
         }
 
         protected String findLibrary(String name)

Modified: felix/trunk/framework/src/main/java/org/apache/felix/framework/URLHandlersBundleURLConnection.java
URL: http://svn.apache.org/viewvc/felix/trunk/framework/src/main/java/org/apache/felix/framework/URLHandlersBundleURLConnection.java?rev=1022674&r1=1022673&r2=1022674&view=diff
==============================================================================
--- felix/trunk/framework/src/main/java/org/apache/felix/framework/URLHandlersBundleURLConnection.java (original)
+++ felix/trunk/framework/src/main/java/org/apache/felix/framework/URLHandlersBundleURLConnection.java Thu Oct 14 19:33:00 2010
@@ -201,7 +201,6 @@ class URLHandlersBundleURLConnection ext
      *
      * @return the local URL
      */
-    // TODO: REMOVE - Remove when class path scanning is implemented.
     URL getLocalURL()
     {
         if ((m_targetModule == null) || (m_classPathIdx < 0))
@@ -210,4 +209,4 @@ class URLHandlersBundleURLConnection ext
         }
         return m_targetModule.getLocalURL(m_classPathIdx, url.getPath());
     }
-}
+}
\ No newline at end of file

Modified: felix/trunk/framework/src/main/java/org/apache/felix/framework/cache/ContentDirectoryContent.java
URL: http://svn.apache.org/viewvc/felix/trunk/framework/src/main/java/org/apache/felix/framework/cache/ContentDirectoryContent.java?rev=1022674&r1=1022673&r2=1022674&view=diff
==============================================================================
--- felix/trunk/framework/src/main/java/org/apache/felix/framework/cache/ContentDirectoryContent.java (original)
+++ felix/trunk/framework/src/main/java/org/apache/felix/framework/cache/ContentDirectoryContent.java Thu Oct 14 19:33:00 2010
@@ -82,7 +82,6 @@ public class ContentDirectoryContent imp
         return m_content.getEntryAsStream(m_rootPath + name);
     }
 
-    // TODO: REMOVE - Remove when class path scanning is implemented.
     public URL getEntryAsURL(String name)
     {
         return m_content.getEntryAsURL(m_rootPath + name);

Modified: felix/trunk/framework/src/main/java/org/apache/felix/framework/cache/DirectoryContent.java
URL: http://svn.apache.org/viewvc/felix/trunk/framework/src/main/java/org/apache/felix/framework/cache/DirectoryContent.java?rev=1022674&r1=1022673&r2=1022674&view=diff
==============================================================================
--- felix/trunk/framework/src/main/java/org/apache/felix/framework/cache/DirectoryContent.java (original)
+++ felix/trunk/framework/src/main/java/org/apache/felix/framework/cache/DirectoryContent.java Thu Oct 14 19:33:00 2010
@@ -133,7 +133,6 @@ public class DirectoryContent implements
         return new FileInputStream(new File(m_dir, name));
     }
 
-    // TODO: REMOVE - Remove when class path scanning is implemented.
     public URL getEntryAsURL(String name)
     {
         if ((name.length() > 0) && (name.charAt(0) == '/'))

Modified: felix/trunk/framework/src/main/java/org/apache/felix/framework/cache/JarContent.java
URL: http://svn.apache.org/viewvc/felix/trunk/framework/src/main/java/org/apache/felix/framework/cache/JarContent.java?rev=1022674&r1=1022673&r2=1022674&view=diff
==============================================================================
--- felix/trunk/framework/src/main/java/org/apache/felix/framework/cache/JarContent.java (original)
+++ felix/trunk/framework/src/main/java/org/apache/felix/framework/cache/JarContent.java Thu Oct 14 19:33:00 2010
@@ -192,7 +192,6 @@ public class JarContent implements Conte
         return is;
     }
 
-    // TODO: REMOVE - Remove when class path scanning is implemented.
     public URL getEntryAsURL(String name)
     {
         try

Modified: felix/trunk/framework/src/main/java/org/apache/felix/framework/resolver/Content.java
URL: http://svn.apache.org/viewvc/felix/trunk/framework/src/main/java/org/apache/felix/framework/resolver/Content.java?rev=1022674&r1=1022673&r2=1022674&view=diff
==============================================================================
--- felix/trunk/framework/src/main/java/org/apache/felix/framework/resolver/Content.java (original)
+++ felix/trunk/framework/src/main/java/org/apache/felix/framework/resolver/Content.java Thu Oct 14 19:33:00 2010
@@ -113,13 +113,12 @@ public interface Content
 
     /**
      * <p>
-     *  This method allows retrieving an entry as a plain standard URL.
+     *  This method allows retrieving an entry as a local URL.
      * </p>
      *
      * @param name The name of the entry to retrieve as a URL
-     * @return A URL using a standard protocol such as file, jar
+     * @return A URL using a local protocol such as file, jar
      *           or null if not possible.
      */
-    // TODO: REMOVE - Remove when class path scanning is implemented.
     URL getEntryAsURL(String name);
 }
\ No newline at end of file

Modified: felix/trunk/framework/src/main/java/org/apache/felix/framework/resolver/Module.java
URL: http://svn.apache.org/viewvc/felix/trunk/framework/src/main/java/org/apache/felix/framework/resolver/Module.java?rev=1022674&r1=1022673&r2=1022674&view=diff
==============================================================================
--- felix/trunk/framework/src/main/java/org/apache/felix/framework/resolver/Module.java (original)
+++ felix/trunk/framework/src/main/java/org/apache/felix/framework/resolver/Module.java Thu Oct 14 19:33:00 2010
@@ -72,6 +72,5 @@ public interface Module
         throws IOException;
     InputStream getInputStream(int index, String urlPath)
         throws IOException;
-    // TODO: REMOVE - Remove when class path scanning is implemented.
     URL getLocalURL(int index, String urlPath);
 }
\ No newline at end of file

Modified: felix/trunk/framework/src/main/java/org/apache/felix/framework/util/FelixConstants.java
URL: http://svn.apache.org/viewvc/felix/trunk/framework/src/main/java/org/apache/felix/framework/util/FelixConstants.java?rev=1022674&r1=1022673&r2=1022674&view=diff
==============================================================================
--- felix/trunk/framework/src/main/java/org/apache/felix/framework/util/FelixConstants.java (original)
+++ felix/trunk/framework/src/main/java/org/apache/felix/framework/util/FelixConstants.java Thu Oct 14 19:33:00 2010
@@ -53,6 +53,7 @@ public interface FelixConstants extends 
     public static final String SERVICE_URLHANDLERS_PROP = "felix.service.urlhandlers";
     public static final String IMPLICIT_BOOT_DELEGATION_PROP = "felix.bootdelegation.implicit";
     public static final String BOOT_CLASSLOADERS_PROP = "felix.bootdelegation.classloaders";
+    public static final String USE_LOCALURLS_PROP = "felix.jarurls";
 
     // Start level-related constants.
     public static final int FRAMEWORK_INACTIVE_STARTLEVEL = 0;