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;