[jboss-dev-forums] [JBoss Microcontainer Development] - Module adds invalid delegates

thomas.diesler@jboss.com do-not-reply at jboss.com
Mon Sep 14 04:51:29 EDT 2009


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

Consider this use case

ExportImportPackageUnitTestCase.testSelfImportPackage


  |       //Bundle-Name: BundleB
  |       //Bundle-SymbolicName: org.jboss.test.osgi.classloader.bundleB
  |       //Export-Package: org.jboss.test.osgi.classloader.support.b
  |       //Import-Package: org.jboss.test.osgi.classloader.support.a
  | 
  |          //Bundle-Name: BundleA
  |          //Bundle-Version: 1.0.0
  |          //Bundle-SymbolicName: org.jboss.test.osgi.classloader.bundleA
  |          //Export-Package: org.jboss.test.osgi.classloader.support.a, org.jboss.test.osgi.classloader.support.b
  |          //Import-Package: org.jboss.test.osgi.classloader.support.a, org.jboss.test.osgi.classloader.support.b
  | 

BundleB imports PackageA from BundleA, but *not* PackageB.

Classes in PackageB are expected to get loaded from the bundle that the class load is initiated from.


  |             bundleB.start();
  |             assertEquals("Bundle ACTIVE", Bundle.ACTIVE, bundleB.getState());
  |             
  |             // BundleA is expected to resolve when BundleB gets started
  |             assertEquals("Bundle RESOLVED", Bundle.RESOLVED, bundleA.getState());
  |             assertLoadClass(bundleA, A.class, bundleA);
  |             assertLoadClass(bundleA, B.class, bundleA);
  | 
  |             // BundleB imports A from BundleA
  |             assertLoadClass(bundleB, A.class, bundleA);
  |             
  |             // BundleB does not import B
  |             assertLoadClass(bundleB, B.class, bundleB);
  | 

---------------------

The code in Module.addDelegates(...) incorrectly adds the DelegateLoader from the dependent module irrespectively of the packages that are actually being imported. this effectively makes makes all the packages from BundleA visible to BundleB


  |             Module other = item.getModule();
  |             DelegateLoader delegate = iDependOnModule.getDelegateLoader(other, requirement);
  | 
  |             // Check for re-export by the module
  |             if (requirement.wantReExports())
  |                addDelegates(iDependOnModule, delegates, dynamic, visited, true);
  |             
  |             // We want a module's re-exports (i.e. part of its imports) before the module itself
  |             if (delegate != null)
  |                delegates.add(delegate); 
  | 

View the original post : http://www.jboss.org/index.html?module=bb&op=viewtopic&p=4255007#4255007

Reply to the post : http://www.jboss.org/index.html?module=bb&op=posting&mode=reply&p=4255007



More information about the jboss-dev-forums mailing list