Author: thomas.diesler(a)jboss.com
Date: 2009-11-20 12:16:41 -0500 (Fri, 20 Nov 2009)
New Revision: 96647
Modified:
projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/service/internal/PackageAdminImpl.java
projects/jboss-osgi/trunk/reactor/framework/src/test/java/org/jboss/test/osgi/resolver/AbstractImportExportTest.java
projects/jboss-osgi/trunk/reactor/framework/src/test/java/org/jboss/test/osgi/resolver/AbstractResolverTest.java
Log:
Implement PackageAdmin.getBundle()
Modified:
projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/service/internal/PackageAdminImpl.java
===================================================================
---
projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/service/internal/PackageAdminImpl.java 2009-11-20
16:42:40 UTC (rev 96646)
+++
projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/service/internal/PackageAdminImpl.java 2009-11-20
17:16:41 UTC (rev 96647)
@@ -85,10 +85,28 @@
}
}
- @SuppressWarnings("unchecked")
+ @SuppressWarnings("rawtypes")
public Bundle getBundle(Class clazz)
{
- throw new NotImplementedException();
+ if (clazz == null)
+ throw new IllegalArgumentException("Null class");
+
+ Bundle retBundle = null;
+ ClassLoader classLoader = clazz.getClassLoader();
+ for (AbstractBundleState aux : bundleManager.getBundles())
+ {
+ if (aux instanceof OSGiBundleState)
+ {
+ OSGiBundleState bundleState = (OSGiBundleState)aux;
+ ClassLoader bundleLoader = bundleState.getDeploymentUnit().getClassLoader();
+ if(bundleLoader == classLoader)
+ {
+ retBundle = aux.getBundleInternal();
+ break;
+ }
+ }
+ }
+ return retBundle;
}
public int getBundleType(Bundle bundle)
@@ -109,12 +127,12 @@
public ExportedPackage[] getExportedPackages(Bundle bundle)
{
AbstractBundleState abstractBundleState = bundleManager.getBundleState(bundle);
-
+
// [TODO] exported packages for the system bundle
if (abstractBundleState instanceof OSGiBundleState == false)
throw new UnsupportedOperationException("FIXME: getExportedPackages for
System bundle");
- OSGiBundleState bundleState = (OSGiBundleState) abstractBundleState;
+ OSGiBundleState bundleState = (OSGiBundleState)abstractBundleState;
DeploymentUnit unit = bundleState.getDeploymentUnit();
ClassLoadingMetaData metaData = unit.getAttachment(ClassLoadingMetaData.class);
if (metaData == null)
@@ -189,7 +207,7 @@
List<OSGiBundleState> resolvableBundles = new
ArrayList<OSGiBundleState>();
for (ResolverBundle aux : bundleResolver.resolve(unresolvedBundles))
resolvableBundles.add(OSGiBundleState.assertBundleState(aux.getBundle()));
-
+
boolean allResolved = resolvableBundles.containsAll(unresolvedBundles);
int resolved = 1;
Modified:
projects/jboss-osgi/trunk/reactor/framework/src/test/java/org/jboss/test/osgi/resolver/AbstractImportExportTest.java
===================================================================
---
projects/jboss-osgi/trunk/reactor/framework/src/test/java/org/jboss/test/osgi/resolver/AbstractImportExportTest.java 2009-11-20
16:42:40 UTC (rev 96646)
+++
projects/jboss-osgi/trunk/reactor/framework/src/test/java/org/jboss/test/osgi/resolver/AbstractImportExportTest.java 2009-11-20
17:16:41 UTC (rev 96647)
@@ -40,6 +40,7 @@
import org.jboss.virtual.VirtualFile;
import org.junit.Test;
import org.osgi.framework.Bundle;
+import org.osgi.service.packageadmin.PackageAdmin;
/**
* An abstract {@link Resolver} test.
@@ -52,9 +53,6 @@
@Test
public void testSimpleImport() throws Exception
{
- Resolver resolver = getTestResolver();
- assertEquals("No bundles in resolver", 0, resolver.getBundles().size());
-
// Bundle-SymbolicName: simpleimport
// Import-Package: org.jboss.test.osgi.classloader.support.a
VirtualFile fileA = assembleBundle("bundleA",
"/bundles/resolver/simpleimport");
@@ -68,23 +66,17 @@
try
{
// Resolve the installed bundles
- resolver.resolve(null);
+ PackageAdmin packageAdmin = getPackageAdmin();
+ packageAdmin.resolveBundles(null);
- // Verify resBundle for bundleA
- ResolverBundle resBundleA = resolver.getBundle(bundleA);
- assertTrue("BundleA resolved", resBundleA.isResolved());
- ImportPackage importPackage =
resBundleA.getImportPackage(A.class.getPackage().getName());
- assertNotNull("Exporter not null", importPackage.getExporter());
+ // Verify bundle states
+ assertEquals("BundleA RESOLVED", Bundle.RESOLVED,
bundleA.getState());
+ assertEquals("BundleB RESOLVED", Bundle.RESOLVED,
bundleB.getState());
- // Verify that bundleA is wired to the exporter
- ExportPackage exporter = resolver.getExporter(bundleA,
A.class.getPackage().getName());
- assertEquals(bundleB.getSymbolicName(),
exporter.getOwner().getSymbolicName());
-
- // Verify resBundle for bundleB
- ResolverBundle resBundleB = resolver.getBundle(bundleB);
- assertTrue("BundleB resolved", resBundleB.isResolved());
- ExportPackage exportPackage =
resBundleB.getExportPackage(A.class.getPackage().getName());
- assertEquals("Importers not null", 1,
exportPackage.getImporters().size());
+ // Verify that the class was loaded from bundleB
+ Class<?> classA = bundleA.loadClass(A.class.getName());
+ Bundle loaderBundle = packageAdmin.getBundle(classA);
+ assertEquals(bundleB.getSymbolicName(), loaderBundle.getSymbolicName());
}
finally
{
@@ -100,9 +92,6 @@
@Test
public void testSimpleImportPackageFails() throws Exception
{
- Resolver resolver = getTestResolver();
- assertEquals("No bundles in resolver", 0, resolver.getBundles().size());
-
// Bundle-SymbolicName: simpleimport
// Import-Package: org.jboss.test.osgi.classloader.support.a
VirtualFile fileA = assembleBundle("bundleA",
"/bundles/resolver/simpleimport");
@@ -110,17 +99,11 @@
try
{
// Resolve the installed bundles
- resolver.resolve(null);
+ PackageAdmin packageAdmin = getPackageAdmin();
+ packageAdmin.resolveBundles(null);
- // Verify resBundle for bundleA
- ResolverBundle resBundleA = resolver.getBundle(bundleA);
- assertFalse("BundleA not resolved", resBundleA.isResolved());
- ImportPackage importPackage =
resBundleA.getImportPackage(A.class.getPackage().getName());
- assertNull("Exporter null", importPackage.getExporter());
-
- // Verify that bundleA is not wired
- ExportPackage exporter = resolver.getExporter(bundleA,
A.class.getPackage().getName());
- assertNull("Exporter null", exporter);
+ // Verify bundle states
+ assertEquals("BundleA INSTALLED", Bundle.INSTALLED,
bundleA.getState());
}
finally
{
@@ -132,7 +115,7 @@
public void testExplicitBundleResolve() throws Exception
{
Resolver resolver = getTestResolver();
- assertEquals("No bundles in resolver", 0, resolver.getBundles().size());
+ assertEquals("No bundles in framework", 1,
getSystemContext().getBundles().length);
// Bundle-SymbolicName: simpleimport
// Import-Package: org.jboss.test.osgi.classloader.support.a
@@ -176,7 +159,7 @@
public void testSelfImportPackage() throws Exception
{
Resolver resolver = getTestResolver();
- assertEquals("No bundles in resolver", 0, resolver.getBundles().size());
+ assertEquals("No bundles in framework", 1,
getSystemContext().getBundles().length);
// Bundle-SymbolicName: selfimport
// Export-Package: org.jboss.test.osgi.classloader.support.a
@@ -208,7 +191,7 @@
public void testVersionImportPackage() throws Exception
{
Resolver resolver = getTestResolver();
- assertEquals("No bundles in resolver", 0, resolver.getBundles().size());
+ assertEquals("No bundles in framework", 1,
getSystemContext().getBundles().length);
//Bundle-SymbolicName: packageimportversion
//Import-Package:
org.jboss.test.osgi.classloader.support.a;version="[0.0.0,1.0.0]"
@@ -256,7 +239,7 @@
public void testVersionImportPackageFails() throws Exception
{
Resolver resolver = getTestResolver();
- assertEquals("No bundles in resolver", 0, resolver.getBundles().size());
+ assertEquals("No bundles in framework", 1,
getSystemContext().getBundles().length);
//Bundle-SymbolicName: packageimportversionfails
//Import-Package:
org.jboss.test.osgi.classloader.support.a;version="[3.0,4.0)"
@@ -304,7 +287,7 @@
public void testOptionalImportPackage() throws Exception
{
Resolver resolver = getTestResolver();
- assertEquals("No bundles in resolver", 0, resolver.getBundles().size());
+ assertEquals("No bundles in framework", 1,
getSystemContext().getBundles().length);
//Bundle-SymbolicName: packageimportoptional
//Import-Package: org.jboss.test.osgi.classloader.support.a;resolution:=optional
@@ -335,7 +318,7 @@
public void testOptionalImportPackageWired() throws Exception
{
Resolver resolver = getTestResolver();
- assertEquals("No bundles in resolver", 0, resolver.getBundles().size());
+ assertEquals("No bundles in framework", 1,
getSystemContext().getBundles().length);
//Bundle-SymbolicName: packageimportoptional
//Import-Package: org.jboss.test.osgi.classloader.support.a;resolution:=optional
@@ -383,7 +366,7 @@
public void testOptionalImportPackageNotWired() throws Exception
{
Resolver resolver = getTestResolver();
- assertEquals("No bundles in resolver", 0, resolver.getBundles().size());
+ assertEquals("No bundles in framework", 1,
getSystemContext().getBundles().length);
//Bundle-SymbolicName: packageimportoptional
//Import-Package: org.jboss.test.osgi.classloader.support.a;resolution:=optional
@@ -434,7 +417,7 @@
public void testBundleNameImportPackage() throws Exception
{
Resolver resolver = getTestResolver();
- assertEquals("No bundles in resolver", 0, resolver.getBundles().size());
+ assertEquals("No bundles in framework", 1,
getSystemContext().getBundles().length);
//Bundle-SymbolicName: bundlenameimport
//Import-Package:
org.jboss.test.osgi.classloader.support.a;bundle-symbolic-name=simpleexport
@@ -482,7 +465,7 @@
public void testBundleNameImportPackageFails() throws Exception
{
Resolver resolver = getTestResolver();
- assertEquals("No bundles in resolver", 0, resolver.getBundles().size());
+ assertEquals("No bundles in framework", 1,
getSystemContext().getBundles().length);
//Bundle-SymbolicName: bundlenameimport
//Import-Package:
org.jboss.test.osgi.classloader.support.a;bundle-symbolic-name=simpleexport
@@ -530,7 +513,7 @@
public void testBundleVersionImportPackage() throws Exception
{
Resolver resolver = getTestResolver();
- assertEquals("No bundles in resolver", 0, resolver.getBundles().size());
+ assertEquals("No bundles in framework", 1,
getSystemContext().getBundles().length);
//Bundle-SymbolicName: bundleversionimport
//Import-Package:
org.jboss.test.osgi.classloader.support.a;bundle-version="[0.0.0,1.0.0)"
@@ -581,7 +564,7 @@
public void testBundleVersionImportPackageFails() throws Exception
{
Resolver resolver = getTestResolver();
- assertEquals("No bundles in resolver", 0, resolver.getBundles().size());
+ assertEquals("No bundles in framework", 1,
getSystemContext().getBundles().length);
//Bundle-SymbolicName: bundleversionimportfails
//Import-Package:
org.jboss.test.osgi.classloader.support.a;bundle-version="[1.0.0,2.0.0)"
Modified:
projects/jboss-osgi/trunk/reactor/framework/src/test/java/org/jboss/test/osgi/resolver/AbstractResolverTest.java
===================================================================
---
projects/jboss-osgi/trunk/reactor/framework/src/test/java/org/jboss/test/osgi/resolver/AbstractResolverTest.java 2009-11-20
16:42:40 UTC (rev 96646)
+++
projects/jboss-osgi/trunk/reactor/framework/src/test/java/org/jboss/test/osgi/resolver/AbstractResolverTest.java 2009-11-20
17:16:41 UTC (rev 96647)
@@ -34,7 +34,10 @@
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
+import org.osgi.framework.BundleContext;
import org.osgi.framework.BundleException;
+import org.osgi.framework.ServiceReference;
+import org.osgi.service.packageadmin.PackageAdmin;
/**
* An abstract {@link Resolver} test.
@@ -88,4 +91,17 @@
OSGiBundleManager bundleManager = framework.getBundleManager();
return bundleManager.getPlugin(ResolverPlugin.class);
}
+
+ protected PackageAdmin getPackageAdmin()
+ {
+ BundleContext sysContext = getSystemContext();
+ ServiceReference sref =
sysContext.getServiceReference(PackageAdmin.class.getName());
+ return (PackageAdmin)sysContext.getService(sref);
+ }
+
+ protected BundleContext getSystemContext()
+ {
+ BundleContext sysContext = framework.getBundleContext();
+ return sysContext;
+ }
}
\ No newline at end of file