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."});
     }