2 Replies Latest reply on Aug 28, 2009 5:24 AM by thomas.diesler

    Fundamental class space issue

    thomas.diesler

      Please consider this

      A imports X
      B imports X

      Can X load a class from A or B?
      Can A load a class from B and vice versa?

      https://jira.jboss.org/jira/browse/JBOSGI-142

      This works with Felix, but fails with the MC Framework.

       BundleContext sysContext = framework.getBundleContext();
       Bundle bundleX = sysContext.installBundle(getBundleLocation("jbosgi142-bundleX.jar"));
       bundleX.start();
      
       String classX = bundleLoadClass(bundleX, BeanX.class);
      
       Bundle bundleA = sysContext.installBundle(getBundleLocation("jbosgi142-bundleA.jar"));
       bundleA.start();
      
       String classA = bundleLoadClass(bundleA, BeanA.class);
      
       Bundle bundleB = sysContext.installBundle(getBundleLocation("jbosgi142-bundleB.jar"));
       bundleB.start();
      
       String classB = bundleLoadClass(bundleB, BeanB.class);
      
       assertEquals("BundleA loads BeanB", classB, bundleLoadClass(bundleA, BeanB.class));
       assertEquals("BundleA loads BeanX", classX, bundleLoadClass(bundleA, BeanX.class));
      
       assertEquals("BundleB loads BeanA", classA, bundleLoadClass(bundleB, BeanA.class));
       assertEquals("BundleB loads BeanX", classX, bundleLoadClass(bundleB, BeanX.class));
      
       assertEquals("BundleX loads BeanA", classA, bundleLoadClass(bundleX, BeanA.class));
       assertEquals("BundleX loads BeanB", classB, bundleLoadClass(bundleX, BeanB.class));
      


        • 1. Re: Fundamental class space issue
          thomas.diesler

          bundleA and bundleB do not seem to share the same class space.

          java.lang.ClassNotFoundException: org.jboss.test.osgi.jbosgi142.bundleB.BeanB from OSGiBundleClassLoader@bfd66a{VFSClassLoaderPolicy@95f290{name=vfszip:/home/tdiesler/svn/jboss-osgi/trunk/testsuite/functional/target/test-libs/jbosgi142-bundleA.jar/ domain=ClassLoaderDomain@cef6f1{name=DefaultDomain parentPolicy=(before=[javax.imageio, javax.imageio.stream, javax.management, javax.management.remote, javax.naming, javax.naming.event, javax.naming.spi, javax.net, javax.net.ssl, javax.xml.datatype, javax.xml.namespace, javax.xml.parsers, javax.xml.transform, javax.xml.transform.dom, javax.xml.transform.sax, javax.xml.transform.stream, javax.xml.validation, org.jboss.logging, org.jboss.osgi.spi.capability, org.jboss.osgi.spi.logging, org.jboss.osgi.spi.management, org.jboss.osgi.spi.service, org.jboss.osgi.spi.testing, org.jboss.osgi.spi.util, org.osgi.framework, org.osgi.service.packageadmin, org.osgi.service.startlevel, org.osgi.util.tracker, org.w3c.dom, org.w3c.dom.events, org.w3c.dom.ls, org.w3c.dom.ranges, org.w3c.dom.traversal, org.w3c.dom.views, org.xml.sax, org.xml.sax.ext, org.xml.sax.helpers] <INCLUDE_JAVA> after=<NOTHING>) parent=sun.misc.Launcher$AppClassLoader@93dee9} roots=[DelegatingHandler@6815360[path= context=file:/home/tdiesler/svn/jboss-osgi/trunk/testsuite/functional/target/test-libs/jbosgi142-bundleA.jar real=vfszip:/home/tdiesler/svn/jboss-osgi/trunk/testsuite/functional/target/test-libs/jbosgi142-bundleA.jar]] delegates=[DelegateLoader@175b7f9{delegate=VFSClassLoaderPolicy@95f290{vfszip:/home/tdiesler/svn/jboss-osgi/trunk/testsuite/functional/target/test-libs/jbosgi142-bundleA.jar/}}, FilteredDelegateLoader@ffeef1{delegate=VFSClassLoaderPolicy@1f42731{vfszip:/home/tdiesler/svn/jboss-osgi/trunk/testsuite/functional/target/test-libs/jbosgi142-bundleX.jar/}}] exported=[org.jboss.test.osgi.jbosgi142.bundleA]}}
           at org.jboss.classloader.spi.base.BaseClassLoader.loadClass(BaseClassLoader.java:448)
           at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
           at org.jboss.osgi.plugins.facade.bundle.OSGiBundleState.loadClass(OSGiBundleState.java:217)
           at org.jboss.osgi.plugins.facade.bundle.OSGiBundleWrapper.loadClass(OSGiBundleWrapper.java:171)
           at org.jboss.test.osgi.jbosgi142.OSGI142TestCase.bundleLoadClass(OSGI142TestCase.java:93)
           at org.jboss.test.osgi.jbosgi142.OSGI142TestCase.testLoadClass(OSGI142TestCase.java:79)
          


          • 2. Re: Fundamental class space issue
            thomas.diesler

            mvn -Dframework=equinox -Dtest=OSGI142TestCase test

            java.lang.ClassNotFoundException: org.jboss.test.osgi.jbosgi142.bundleB.BeanB
             at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:489)
             at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:405)
             at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:393)
             at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:105)
             at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
             at org.eclipse.osgi.internal.loader.BundleLoader.loadClass(BundleLoader.java:321)
             at org.eclipse.osgi.framework.internal.core.BundleHost.loadClass(BundleHost.java:231)
             at org.eclipse.osgi.framework.internal.core.AbstractBundle.loadClass(AbstractBundle.java:1193)
             at org.jboss.test.osgi.jbosgi142.OSGI142TestCase.bundleLoadClass(OSGI142TestCase.java:93)
             at org.jboss.test.osgi.jbosgi142.OSGI142TestCase.testLoadClass(OSGI142TestCase.java:79)