You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicemix.apache.org by gn...@apache.org on 2009/02/19 10:34:14 UTC
svn commit: r745789 - in /servicemix/smx4/nmr/trunk/jbi/deployer: pom.xml
src/main/java/org/apache/servicemix/jbi/deployer/impl/ComponentInstaller.java
Author: gnodet
Date: Thu Feb 19 09:34:14 2009
New Revision: 745789
URL: http://svn.apache.org/viewvc?rev=745789&view=rev
Log:
SMX4NMR-97: The JBI components classloader sometime fails to load classes or resources
Modified:
servicemix/smx4/nmr/trunk/jbi/deployer/pom.xml
servicemix/smx4/nmr/trunk/jbi/deployer/src/main/java/org/apache/servicemix/jbi/deployer/impl/ComponentInstaller.java
Modified: servicemix/smx4/nmr/trunk/jbi/deployer/pom.xml
URL: http://svn.apache.org/viewvc/servicemix/smx4/nmr/trunk/jbi/deployer/pom.xml?rev=745789&r1=745788&r2=745789&view=diff
==============================================================================
--- servicemix/smx4/nmr/trunk/jbi/deployer/pom.xml (original)
+++ servicemix/smx4/nmr/trunk/jbi/deployer/pom.xml Thu Feb 19 09:34:14 2009
@@ -54,6 +54,10 @@
</dependency>
<dependency>
<groupId>org.apache.felix</groupId>
+ <artifactId>org.apache.felix.prefs</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.felix</groupId>
<artifactId>org.osgi.core</artifactId>
<scope>provided</scope>
</dependency>
Modified: servicemix/smx4/nmr/trunk/jbi/deployer/src/main/java/org/apache/servicemix/jbi/deployer/impl/ComponentInstaller.java
URL: http://svn.apache.org/viewvc/servicemix/smx4/nmr/trunk/jbi/deployer/src/main/java/org/apache/servicemix/jbi/deployer/impl/ComponentInstaller.java?rev=745789&r1=745788&r2=745789&view=diff
==============================================================================
--- servicemix/smx4/nmr/trunk/jbi/deployer/src/main/java/org/apache/servicemix/jbi/deployer/impl/ComponentInstaller.java (original)
+++ servicemix/smx4/nmr/trunk/jbi/deployer/src/main/java/org/apache/servicemix/jbi/deployer/impl/ComponentInstaller.java Thu Feb 19 09:34:14 2009
@@ -40,6 +40,7 @@
import org.apache.servicemix.jbi.deployer.descriptor.SharedLibraryList;
import org.apache.servicemix.jbi.deployer.utils.FileUtil;
import org.apache.servicemix.jbi.deployer.utils.QueryUtils;
+import org.apache.xbean.classloader.MultiParentClassLoader;
import org.osgi.framework.Bundle;
import org.osgi.framework.BundleException;
import org.osgi.service.prefs.BackingStoreException;
@@ -211,39 +212,35 @@
if (sharedLibs != null) {
parents = new ClassLoader[sharedLibs.length + 2];
for (int i = 0; i < sharedLibs.length; i++) {
- parents[i + 2] = getSharedLibraryClassLoader(sharedLibs[i].getName());
+ parents[i] = getSharedLibraryClassLoader(sharedLibs[i].getName());
}
} else {
parents = new ClassLoader[2];
}
- parents[0] = BundleDelegatingClassLoader.createBundleClassLoaderFor(getBundleContext().getBundle(0));
- parents[1] = BundleDelegatingClassLoader.createBundleClassLoaderFor(bundle, getClass().getClassLoader());
+ parents[parents.length - 2] = BundleDelegatingClassLoader.createBundleClassLoaderFor(bundle, getClass().getClassLoader());
+ parents[parents.length - 1] = BundleDelegatingClassLoader.createBundleClassLoaderFor(getBundleContext().getBundle(0));
// Create urls
URL[] urls = new URL[classPathNames.length];
for (int i = 0; i < classPathNames.length; i++) {
- urls[i] = bundle.getResource(classPathNames[i]);
- if (urls[i] == null) {
- throw new IllegalArgumentException("SharedLibrary classpath entry not found: '" + classPathNames[i] + "'");
+ File f = new File(installRoot, classPathNames[i]);
+ if (!f.isFile()) {
+ throw new IllegalArgumentException("Component classpath entry not found: '" + classPathNames[i] + "'");
}
- Enumeration en = bundle.findEntries(classPathNames[i], null, false);
- if (en != null && en.hasMoreElements()) {
- try {
- urls[i] = new URL(urls[i].toString() + "/");
- } catch (MalformedURLException e) {
- // Ignore
- }
+ try {
+ urls[i] = f.getCanonicalFile().toURL();
+ } catch (IOException e) {
+ throw new IllegalArgumentException("Component classpath entry not found: '" + classPathNames[i] + "'");
}
}
// Create classloader
- return new OsgiMultiParentClassLoader(
- bundle,
+ return new MultiParentClassLoader(
name,
urls,
parents,
!parentFirst,
- new String[]{"javax.xml.bind"},
+ new String[0],
new String[]{"java.", "javax."});
}