JBoss-OSGI SVN: r96568 - in projects/jboss-osgi/trunk/reactor/framework/src/test: resources/META-INF and 2 other directories.
by jboss-osgi-commits@lists.jboss.org
Author: thomas.diesler(a)jboss.com
Date: 2009-11-19 09:16:52 -0500 (Thu, 19 Nov 2009)
New Revision: 96568
Added:
projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/simpleexportother/
Removed:
projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/simpleexportsecond/
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/resources/META-INF/resolver-rules.drl
projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/simpleexportother/META-INF/MANIFEST.MF
Log:
Prefer wire to exporter with lower bundle id
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-19 13:46:21 UTC (rev 96567)
+++ projects/jboss-osgi/trunk/reactor/framework/src/test/java/org/jboss/test/osgi/resolver/AbstractImportExportTest.java 2009-11-19 14:16:52 UTC (rev 96568)
@@ -809,9 +809,9 @@
// Export-Package: org.jboss.test.osgi.classloader.support.a
VirtualFile fileA = assembleBundle("bundleA", "/bundles/resolver/simpleexport", A.class);
- // Bundle-SymbolicName: simpleexport
+ // Bundle-SymbolicName: simpleexportother
// Export-Package: org.jboss.test.osgi.classloader.support.a
- VirtualFile fileB = assembleBundle("bundleB", "/bundles/resolver/simpleexportsecond", A.class);
+ VirtualFile fileB = assembleBundle("bundleB", "/bundles/resolver/simpleexportother", A.class);
// Bundle-SymbolicName: simpleimport
// Import-Package: org.jboss.test.osgi.classloader.support.a
@@ -875,9 +875,9 @@
// Export-Package: org.jboss.test.osgi.classloader.support.a
VirtualFile fileA = assembleBundle("bundleA", "/bundles/resolver/simpleexport", A.class);
- // Bundle-SymbolicName: simpleexport
+ // Bundle-SymbolicName: simpleexportother
// Export-Package: org.jboss.test.osgi.classloader.support.a
- VirtualFile fileB = assembleBundle("bundleB", "/bundles/resolver/simpleexportsecond", A.class);
+ VirtualFile fileB = assembleBundle("bundleB", "/bundles/resolver/simpleexportother", A.class);
// Bundle-SymbolicName: simpleimport
// Import-Package: org.jboss.test.osgi.classloader.support.a
@@ -1057,6 +1057,138 @@
}
}
+ @Test
+ public void testPreferredExporterLowerId() throws Exception
+ {
+ Resolver resolver = getTestResolver();
+ assertEquals("No bundles in resolver", 0, resolver.getBundles().size());
+
+ // Bundle-SymbolicName: simpleexport
+ // Export-Package: org.jboss.test.osgi.classloader.support.a
+ VirtualFile fileA = assembleBundle("bundleA", "/bundles/resolver/simpleexport", A.class);
+
+ // Bundle-SymbolicName: simpleexportother
+ // Export-Package: org.jboss.test.osgi.classloader.support.a
+ VirtualFile fileB = assembleBundle("bundleB", "/bundles/resolver/simpleexportother", A.class);
+
+ // Bundle-SymbolicName: simpleimport
+ // Import-Package: org.jboss.test.osgi.classloader.support.a
+ VirtualFile fileC = assembleBundle("bundleC", "/bundles/resolver/simpleimport");
+
+ Bundle bundleA = framework.installBundle(fileA);
+ try
+ {
+ Bundle bundleB = framework.installBundle(fileB);
+ try
+ {
+ // Resolve the installed bundles
+ resolver.resolve(null);
+
+ // Verify resBundle for bundleA
+ ResolverBundle resBundleA = resolver.getBundle(bundleA);
+ assertTrue("BundleA resolved", resBundleA.isResolved());
+
+ // Verify resBundle for bundleB
+ ResolverBundle resBundleB = resolver.getBundle(bundleB);
+ assertTrue("BundleB resolved", resBundleB.isResolved());
+
+ Bundle bundleC = framework.installBundle(fileC);
+ try
+ {
+ // Resolve the installed bundles
+ resolver.resolve(null);
+
+ // Verify resBundle for bundleC
+ ResolverBundle resBundleC = resolver.getBundle(bundleC);
+ assertTrue("BundleC resolved", resBundleC.isResolved());
+
+ // Verify that bundleC is wired to bundleA
+ ExportPackage exporter = resolver.getExporter(bundleC, A.class.getPackage().getName());
+ assertNotNull("Exporter not null", exporter);
+ assertEquals("Wired to bundleA", bundleA.getSymbolicName(), exporter.getOwner().getSymbolicName());
+ }
+ finally
+ {
+ bundleC.uninstall();
+ }
+ }
+ finally
+ {
+ bundleB.uninstall();
+ }
+ }
+ finally
+ {
+ bundleA.uninstall();
+ }
+ }
+
+ @Test
+ public void testPreferredExporterLowerIdReverse() throws Exception
+ {
+ Resolver resolver = getTestResolver();
+ assertEquals("No bundles in resolver", 0, resolver.getBundles().size());
+
+ // Bundle-SymbolicName: simpleexportother
+ // Export-Package: org.jboss.test.osgi.classloader.support.a
+ VirtualFile fileA = assembleBundle("bundleA", "/bundles/resolver/simpleexportother", A.class);
+
+ // Bundle-SymbolicName: simpleexport
+ // Export-Package: org.jboss.test.osgi.classloader.support.a
+ VirtualFile fileB = assembleBundle("bundleB", "/bundles/resolver/simpleexport", A.class);
+
+ // Bundle-SymbolicName: simpleimport
+ // Import-Package: org.jboss.test.osgi.classloader.support.a
+ VirtualFile fileC = assembleBundle("bundleC", "/bundles/resolver/simpleimport");
+
+ Bundle bundleA = framework.installBundle(fileA);
+ try
+ {
+ Bundle bundleB = framework.installBundle(fileB);
+ try
+ {
+ // Resolve the installed bundles
+ resolver.resolve(null);
+
+ // Verify resBundle for bundleA
+ ResolverBundle resBundleA = resolver.getBundle(bundleA);
+ assertTrue("BundleA resolved", resBundleA.isResolved());
+
+ // Verify resBundle for bundleB
+ ResolverBundle resBundleB = resolver.getBundle(bundleB);
+ assertTrue("BundleB resolved", resBundleB.isResolved());
+
+ Bundle bundleC = framework.installBundle(fileC);
+ try
+ {
+ // Resolve the installed bundles
+ resolver.resolve(null);
+
+ // Verify resBundle for bundleC
+ ResolverBundle resBundleC = resolver.getBundle(bundleC);
+ assertTrue("BundleC resolved", resBundleC.isResolved());
+
+ // Verify that bundleC is wired to bundleA
+ ExportPackage exporter = resolver.getExporter(bundleC, A.class.getPackage().getName());
+ assertNotNull("Exporter not null", exporter);
+ assertEquals("Wired to bundleA", bundleA.getSymbolicName(), exporter.getOwner().getSymbolicName());
+ }
+ finally
+ {
+ bundleC.uninstall();
+ }
+ }
+ finally
+ {
+ bundleB.uninstall();
+ }
+ }
+ finally
+ {
+ bundleA.uninstall();
+ }
+ }
+
/*
public void testLogger() throws Exception
{
Modified: projects/jboss-osgi/trunk/reactor/framework/src/test/resources/META-INF/resolver-rules.drl
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/test/resources/META-INF/resolver-rules.drl 2009-11-19 13:46:21 UTC (rev 96567)
+++ projects/jboss-osgi/trunk/reactor/framework/src/test/resources/META-INF/resolver-rules.drl 2009-11-19 14:16:52 UTC (rev 96568)
@@ -87,11 +87,11 @@
salience 2000
when
$importer : ResolverBundle( state == Bundle.INSTALLED, resolved == false )
- $reqbundle : RequiredBundle( ) from $importer.requiredBundles
- not RequiredBundle( owner == $importer, this == $reqbundle )
+ $reqbnd : RequiredBundle( ) from $importer.requiredBundles
+ not RequiredBundle( owner == $importer, this == $reqbnd )
then
- log("Add " + $reqbundle);
- insert( $reqbundle );
+ log("Add " + $reqbnd);
+ insert( $reqbnd );
end
@@ -161,14 +161,16 @@
* associated with a higher version on the ExportPackage.
*/
rule "Retract WireCandidate to lower version"
-salience 1000
+salience 400
when
- $expkeep : ExportPackage( )
+ $bndkeep : ResolverBundle( )
+ $expkeep : ExportPackage( owner == $bndkeep )
$wckeep : WireCandidate( exportPackage == $expkeep )
- $resdel : ResolverBundle( resolved == false )
- $expdel : ExportPackage( this != $expkeep, owner == $resdel )
+ $bnddel : ResolverBundle( )
+ $expdel : ExportPackage( this != $expkeep, owner == $bnddel )
$wcdel : WireCandidate( importPackage == $wckeep.importPackage, exportPackage == $expdel )
- eval ( $expkeep.getVersion().compareTo($expdel.getVersion()) > 0 )
+ eval( $expkeep.getVersion().compareTo($expdel.getVersion()) > 0 )
+ eval( $bnddel.isResolved() == false || ( $bnddel.isResolved() == true && $bndkeep.isResolved() == true ) )
then
log("Retract lower version " + $wcdel);
retract ( $wcdel );
@@ -176,16 +178,36 @@
/**************************************************************************************************
* A rule that retracts a WireCandidate if there is another
+* associated with a lower bundle id.
+*/
+rule "Retract WireCandidate to higher bundle id"
+salience 300
+when
+ $bndkeep : ResolverBundle( )
+ $expkeep : ExportPackage( owner == $bndkeep )
+ $wckeep : WireCandidate( exportPackage == $expkeep )
+ $bnddel : ResolverBundle( )
+ $expdel : ExportPackage( this != $expkeep, owner == $bnddel )
+ $wcdel : WireCandidate( importPackage == $wckeep.importPackage, exportPackage == $expdel )
+ eval ( $bnddel.getBundleId() > $bndkeep.getBundleId() )
+ eval( $bnddel.isResolved() == false || ( $bnddel.isResolved() == true && $bndkeep.isResolved() == true ) )
+then
+ log("Retract higher bundle id " + $wcdel);
+ retract ( $wcdel );
+end
+
+/**************************************************************************************************
+* A rule that retracts a WireCandidate if there is another
* associated with an already resolved exporter.
*/
rule "Retract WireCandidate to unresolved exporter"
salience 200
when
- $reskeep : ResolverBundle( resolved == true )
- $expkeep : ExportPackage( owner == $reskeep )
+ $bndkeep : ResolverBundle( resolved == true )
+ $expkeep : ExportPackage( owner == $bndkeep )
$wckeep : WireCandidate( exportPackage == $expkeep )
- $resdel : ResolverBundle( resolved == false )
- $expdel : ExportPackage( this != $expkeep, owner == $resdel )
+ $bnddel : ResolverBundle( resolved == false )
+ $expdel : ExportPackage( this != $expkeep, owner == $bnddel )
$wcdel : WireCandidate( importPackage == $wckeep.importPackage, exportPackage == $expdel )
then
log("Retract unresolved exporter " + $wcdel);
@@ -199,10 +221,10 @@
salience 100
when
$provider : ResolverBundle( )
- $reqbundle : RequiredBundle( symbolicName == $provider.symbolicName, version == null, provider == null )
+ $reqbnd : RequiredBundle( symbolicName == $provider.symbolicName, version == null, provider == null )
then
- log("RequiredBundle match " + $reqbundle + " --> " + $provider);
- modify ( $reqbundle ) { setProvider( $provider ) };
+ log("RequiredBundle match " + $reqbnd + " --> " + $provider);
+ modify ( $reqbnd ) { setProvider( $provider ) };
end
/**************************************************************************************************
@@ -213,11 +235,11 @@
salience 100
when
$provider : ResolverBundle( )
- $reqbundle : RequiredBundle( symbolicName == $provider.symbolicName, version != null, provider == null )
- eval( inRange( $reqbundle.getVersion(), $provider.getVersion()))
+ $reqbnd : RequiredBundle( symbolicName == $provider.symbolicName, version != null, provider == null )
+ eval( inRange( $reqbnd.getVersion(), $provider.getVersion()))
then
- log("RequiredBundle match " + $reqbundle + " --> " + $provider);
- modify ( $reqbundle ) { setProvider( $provider ) };
+ log("RequiredBundle match " + $reqbnd + " --> " + $provider);
+ modify ( $reqbnd ) { setProvider( $provider ) };
end
/**************************************************************************************************
@@ -345,10 +367,10 @@
rule "Retract uninstalled RequiredBundles"
when
$importer : ResolverBundle( state == Bundle.UNINSTALLED )
- $reqbundle : RequiredBundle( owner == $importer )
+ $reqbnd : RequiredBundle( owner == $importer )
then
- log("Uninstall " + $reqbundle);
- retract ( $reqbundle );
+ log("Uninstall " + $reqbnd);
+ retract ( $reqbnd );
end
/**************************************************************************************************
Copied: projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/simpleexportother (from rev 96553, projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/simpleexportsecond)
Modified: projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/simpleexportother/META-INF/MANIFEST.MF
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/simpleexportsecond/META-INF/MANIFEST.MF 2009-11-19 07:09:26 UTC (rev 96553)
+++ projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/simpleexportother/META-INF/MANIFEST.MF 2009-11-19 14:16:52 UTC (rev 96568)
@@ -1,3 +1,3 @@
Bundle-ManifestVersion: 2
-Bundle-SymbolicName: simpleexportsecond
+Bundle-SymbolicName: simpleexportother
Export-Package: org.jboss.test.osgi.classloader.support.a
14 years, 7 months
JBoss-OSGI SVN: r96566 - in projects/jboss-osgi/trunk/reactor/framework: src/main/java/org/jboss/osgi/framework/resolver and 10 other directories.
by jboss-osgi-commits@lists.jboss.org
Author: thomas.diesler(a)jboss.com
Date: 2009-11-19 08:46:19 -0500 (Thu, 19 Nov 2009)
New Revision: 96566
Added:
projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/ResolverBundle.java
projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/ResolverBundleImpl.java
projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/packageexportversion100/
projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/packageexportversion200/
projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/packageexportversion200/META-INF/
projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/packageexportversion200/META-INF/MANIFEST.MF
Removed:
projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/Resolvable.java
projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/ResolvableImpl.java
projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/packageexportversion/
Modified:
projects/jboss-osgi/trunk/reactor/framework/.settings/org.eclipse.jdt.core.prefs
projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/AbstractResolver.java
projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/NamedElement.java
projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/RequiredBundle.java
projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/Resolver.java
projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/ExportPackageImpl.java
projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/ImportPackageImpl.java
projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/NamedElementImpl.java
projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/RequiredBundleImpl.java
projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/basic/BasicResolverImpl.java
projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/drools/RuleBasedResolverImpl.java
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/ResolverMetadataTest.java
projects/jboss-osgi/trunk/reactor/framework/src/test/java/org/jboss/test/osgi/resolver/ResolverSmokeTest.java
projects/jboss-osgi/trunk/reactor/framework/src/test/resources/META-INF/resolver-rules.drl
projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/packageexportversion100/META-INF/MANIFEST.MF
Log:
Prefer wire to exporter with higher package version
Modified: projects/jboss-osgi/trunk/reactor/framework/.settings/org.eclipse.jdt.core.prefs
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/.settings/org.eclipse.jdt.core.prefs 2009-11-19 13:33:05 UTC (rev 96565)
+++ projects/jboss-osgi/trunk/reactor/framework/.settings/org.eclipse.jdt.core.prefs 2009-11-19 13:46:19 UTC (rev 96566)
@@ -1,5 +1,12 @@
-#Thu Sep 03 16:27:07 CEST 2009
+#Thu Nov 19 14:05:44 CET 2009
eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
org.eclipse.jdt.core.compiler.source=1.5
Modified: projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/AbstractResolver.java
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/AbstractResolver.java 2009-11-19 13:33:05 UTC (rev 96565)
+++ projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/AbstractResolver.java 2009-11-19 13:46:19 UTC (rev 96566)
@@ -31,32 +31,32 @@
import org.jboss.osgi.framework.bundle.OSGiBundleState;
import org.jboss.osgi.framework.plugins.ResolverPlugin;
import org.jboss.osgi.framework.plugins.internal.AbstractPlugin;
-import org.jboss.osgi.framework.resolver.internal.ResolvableImpl;
+import org.jboss.osgi.framework.resolver.internal.ResolverBundleImpl;
import org.osgi.framework.Bundle;
import org.osgi.framework.Version;
/**
- * An abstract resolver that maintains the {@link Resolvable} bundles.
+ * An abstract resolver that maintains the {@link ResolverBundle} bundles.
*
* @author thomas.diesler(a)jboss.com
* @since 09-Nov-2009
*/
public abstract class AbstractResolver extends AbstractPlugin implements ResolverPlugin
{
- private Map<OSGiBundleState, Resolvable> resolverBundleMap = new ConcurrentHashMap<OSGiBundleState, Resolvable>();
+ private Map<OSGiBundleState, ResolverBundle> resolverBundleMap = new ConcurrentHashMap<OSGiBundleState, ResolverBundle>();
public AbstractResolver(OSGiBundleManager bundleManager)
{
super(bundleManager);
}
- public List<Resolvable> getBundles()
+ public List<ResolverBundle> getBundles()
{
- List<Resolvable> values = new ArrayList<Resolvable>(resolverBundleMap.values());
+ List<ResolverBundle> values = new ArrayList<ResolverBundle>(resolverBundleMap.values());
return Collections.unmodifiableList(values);
}
- public Resolvable getBundle(Bundle bundle)
+ public ResolverBundle getBundle(Bundle bundle)
{
if (bundle == null)
throw new IllegalArgumentException("Null bundle");
@@ -65,7 +65,7 @@
return resolverBundleMap.get(bundleState);
}
- public Resolvable getBundle(String symbolicName, Version version)
+ public ResolverBundle getBundle(String symbolicName, Version version)
{
if (symbolicName == null)
throw new IllegalArgumentException("Null symbolicName");
@@ -73,8 +73,8 @@
if (version == null)
version = Version.emptyVersion;
- Resolvable retBundle = null;
- for (Resolvable aux : resolverBundleMap.values())
+ ResolverBundle retBundle = null;
+ for (ResolverBundle aux : resolverBundleMap.values())
{
if (aux.getSymbolicName().equals(symbolicName) && aux.getVersion().equals(version))
{
@@ -85,15 +85,15 @@
return retBundle;
}
- public Resolvable addBundle(Bundle bundle)
+ public ResolverBundle addBundle(Bundle bundle)
{
OSGiBundleState bundleState = OSGiBundleState.assertBundleState(bundle);
- ResolvableImpl resolvable = new ResolvableImpl(bundle);
- resolverBundleMap.put(bundleState, resolvable);
- return resolvable;
+ ResolverBundleImpl resBundle = new ResolverBundleImpl(bundle);
+ resolverBundleMap.put(bundleState, resBundle);
+ return resBundle;
}
- public Resolvable removeBundle(Bundle bundle)
+ public ResolverBundle removeBundle(Bundle bundle)
{
OSGiBundleState bundleState = OSGiBundleState.assertBundleState(bundle);
return resolverBundleMap.remove(bundleState);
Modified: projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/NamedElement.java
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/NamedElement.java 2009-11-19 13:33:05 UTC (rev 96565)
+++ projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/NamedElement.java 2009-11-19 13:46:19 UTC (rev 96566)
@@ -37,7 +37,7 @@
*
* @return the owner
*/
- Resolvable getOwner();
+ ResolverBundle getOwner();
/**
* Get the element name
Modified: projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/RequiredBundle.java
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/RequiredBundle.java 2009-11-19 13:33:05 UTC (rev 96565)
+++ projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/RequiredBundle.java 2009-11-19 13:46:19 UTC (rev 96566)
@@ -57,10 +57,10 @@
*
* @return the owner
*/
- Resolvable getProvider();
+ ResolverBundle getProvider();
/**
* Set the provider for this bundle requirement
*/
- void setProvider(Resolvable provider);
+ void setProvider(ResolverBundle provider);
}
\ No newline at end of file
Deleted: projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/Resolvable.java
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/Resolvable.java 2009-11-19 13:33:05 UTC (rev 96565)
+++ projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/Resolvable.java 2009-11-19 13:46:19 UTC (rev 96566)
@@ -1,126 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- * Copyright 2005, JBoss Inc., and individual contributors as indicated
- * by the @authors tag. See the copyright.txt in the distribution for a
- * full listing of individual contributors.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-package org.jboss.osgi.framework.resolver;
-
-import java.util.List;
-
-import org.osgi.framework.Bundle;
-import org.osgi.framework.Version;
-
-/**
- * An abstraction of a resolvable bundle.
- *
- * @author thomas.diesler(a)jboss.com
- * @since 09-Nov-2009
- */
-public interface Resolvable
-{
- /**
- * Get the underlying bundle that this resolvable is associated with.
- *
- * @return the bundle
- */
- Bundle getBundle();
-
- /**
- * Get the bundle's symbolic name.
- *
- * @return the symbolic name
- */
- String getSymbolicName();
-
- /**
- * Get the bundle's version.
- *
- * @return the version
- */
- Version getVersion();
-
- /**
- * Get the bundle's state.
- *
- * @return the state
- */
- int getState();
-
- /**
- * Get the list of exported packages in the declared order.
- * @return The list of exported packages or an empty list if the bundle does not export any packages.
- */
- List<ExportPackage> getExportPackages();
-
- /**
- * Get an exported package by name.
- *
- * @param packageName the package name
- * @return The exported package or null if the bundle does not export that package.
- */
- ExportPackage getExportPackage(String packageName);
-
- /**
- * Get the list of imported packages in the declared order.
- * @return The list of imported packages or an empty list if the bundle does not import any packages.
- */
- List<ImportPackage> getImportPackages();
-
- /**
- * Get an imported package by name.
- *
- * @param packageName the package name
- * @return The imported package or null if the bundle does not import that package.
- */
- ImportPackage getImportPackage(String packageName);
-
- /**
- * Get the list of required bundles.
- *
- * @return The list of required bundles or an empty list.
- */
- List<RequiredBundle> getRequiredBundles();
-
- /**
- * Get the required bundle by symbolic name.
- *
- * @param symbolicName the required bundle's symbolic name
- * @return null if there is no required bundle by this name
- */
- RequiredBundle getRequiredBundle(String symbolicName);
-
- /**
- * Return true if this resolvable is a singleton.
- *
- * @return true when this is a singleton
- */
- boolean isSingleton();
-
- /**
- * Return true if this resolvable has been resolved.
- *
- * @return true when it is resolved
- */
- boolean isResolved();
-
- /**
- * Mark this resolvable as resolved.
- */
- void markResolved();
-}
\ No newline at end of file
Modified: projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/Resolver.java
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/Resolver.java 2009-11-19 13:33:05 UTC (rev 96565)
+++ projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/Resolver.java 2009-11-19 13:46:19 UTC (rev 96566)
@@ -35,43 +35,43 @@
public interface Resolver
{
/**
- * Get the registered resolvable bundles.
- * @return The list of registered resolvable bundles.
+ * Get the registered resBundle bundles.
+ * @return The list of registered resBundle bundles.
*/
- List<Resolvable> getBundles();
+ List<ResolverBundle> getBundles();
/**
- * Get the registered resolvable bundle.
+ * Get the registered resBundle bundle.
*
* @param symbolicName the symbolic name of the bundle
* @param version the version of the bundle
- * @return The registered resolvable bundle.
+ * @return The registered resBundle bundle.
*/
- Resolvable getBundle(String symbolicName, Version version);
+ ResolverBundle getBundle(String symbolicName, Version version);
/**
- * Get the registered resolvable bundle.
+ * Get the registered resBundle bundle.
*
* @param bundle the bundle
- * @return The registered resolvable bundle.
+ * @return The registered resBundle bundle.
*/
- Resolvable getBundle(Bundle bundle);
+ ResolverBundle getBundle(Bundle bundle);
/**
* Add a bundle to the resolver.
*
* @param bundle the bundle
- * @return The resolvable associated with the added bundle.
+ * @return The resBundle associated with the added bundle.
*/
- Resolvable addBundle(Bundle bundle);
+ ResolverBundle addBundle(Bundle bundle);
/**
* Remove a bundle from the resolver.
* @param bundle the bundle
- * @return The resolvable associated with the removed bundle.
+ * @return The resBundle associated with the removed bundle.
*/
- Resolvable removeBundle(Bundle bundle);
+ ResolverBundle removeBundle(Bundle bundle);
/**
* Resolve the given list of bundles.
@@ -79,7 +79,7 @@
* @param bundles the bundles to resolve
* @return The list of resolved bundles in the resolve order or an empty list
*/
- List<Resolvable> resolve(List<Bundle> bundles);
+ List<ResolverBundle> resolve(List<Bundle> bundles);
/**
* Get the exporter for the given import package.
Copied: projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/ResolverBundle.java (from rev 96553, projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/Resolvable.java)
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/ResolverBundle.java (rev 0)
+++ projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/ResolverBundle.java 2009-11-19 13:46:19 UTC (rev 96566)
@@ -0,0 +1,133 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.osgi.framework.resolver;
+
+import java.util.List;
+
+import org.osgi.framework.Bundle;
+import org.osgi.framework.Version;
+
+/**
+ * An abstraction of a resBundle bundle.
+ *
+ * @author thomas.diesler(a)jboss.com
+ * @since 09-Nov-2009
+ */
+public interface ResolverBundle
+{
+ /**
+ * Get the underlying bundle.
+ *
+ * @return the bundle
+ */
+ Bundle getBundle();
+
+ /**
+ * Get the bundle's id.
+ *
+ * @return the bundle id
+ */
+ long getBundleId();
+
+ /**
+ * Get the bundle's symbolic name.
+ *
+ * @return the symbolic name
+ */
+ String getSymbolicName();
+
+ /**
+ * Get the bundle's version.
+ *
+ * @return the version
+ */
+ Version getVersion();
+
+ /**
+ * Get the bundle's state.
+ *
+ * @return the state
+ */
+ int getState();
+
+ /**
+ * Get the list of exported packages in the declared order.
+ * @return The list of exported packages or an empty list if the bundle does not export any packages.
+ */
+ List<ExportPackage> getExportPackages();
+
+ /**
+ * Get an exported package by name.
+ *
+ * @param packageName the package name
+ * @return The exported package or null if the bundle does not export that package.
+ */
+ ExportPackage getExportPackage(String packageName);
+
+ /**
+ * Get the list of imported packages in the declared order.
+ * @return The list of imported packages or an empty list if the bundle does not import any packages.
+ */
+ List<ImportPackage> getImportPackages();
+
+ /**
+ * Get an imported package by name.
+ *
+ * @param packageName the package name
+ * @return The imported package or null if the bundle does not import that package.
+ */
+ ImportPackage getImportPackage(String packageName);
+
+ /**
+ * Get the list of required bundles.
+ *
+ * @return The list of required bundles or an empty list.
+ */
+ List<RequiredBundle> getRequiredBundles();
+
+ /**
+ * Get the required bundle by symbolic name.
+ *
+ * @param symbolicName the required bundle's symbolic name
+ * @return null if there is no required bundle by this name
+ */
+ RequiredBundle getRequiredBundle(String symbolicName);
+
+ /**
+ * Return true if this resBundle is a singleton.
+ *
+ * @return true when this is a singleton
+ */
+ boolean isSingleton();
+
+ /**
+ * Return true if this resBundle has been resolved.
+ *
+ * @return true when it is resolved
+ */
+ boolean isResolved();
+
+ /**
+ * Mark this resBundle as resolved.
+ */
+ void markResolved();
+}
\ No newline at end of file
Modified: projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/ExportPackageImpl.java
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/ExportPackageImpl.java 2009-11-19 13:33:05 UTC (rev 96565)
+++ projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/ExportPackageImpl.java 2009-11-19 13:46:19 UTC (rev 96566)
@@ -32,7 +32,7 @@
import org.jboss.osgi.framework.metadata.ParameterizedAttribute;
import org.jboss.osgi.framework.resolver.ExportPackage;
import org.jboss.osgi.framework.resolver.ImportPackage;
-import org.jboss.osgi.framework.resolver.Resolvable;
+import org.jboss.osgi.framework.resolver.ResolverBundle;
import org.osgi.framework.Constants;
import org.osgi.framework.Version;
@@ -46,7 +46,7 @@
{
private Set<ImportPackage> importers = new HashSet<ImportPackage>();
- public ExportPackageImpl(Resolvable owner, ParameterizedAttribute attr)
+ public ExportPackageImpl(ResolverBundle owner, ParameterizedAttribute attr)
{
super(owner, attr);
}
@@ -108,7 +108,7 @@
public String toShortString()
{
- ResolvableImpl owner = (ResolvableImpl)getOwner();
+ ResolverBundleImpl owner = (ResolverBundleImpl)getOwner();
return owner.toShortString() + super.toShortString();
}
Modified: projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/ImportPackageImpl.java
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/ImportPackageImpl.java 2009-11-19 13:33:05 UTC (rev 96565)
+++ projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/ImportPackageImpl.java 2009-11-19 13:46:19 UTC (rev 96566)
@@ -27,7 +27,7 @@
import org.jboss.osgi.framework.metadata.internal.AbstractVersionRange;
import org.jboss.osgi.framework.resolver.ExportPackage;
import org.jboss.osgi.framework.resolver.ImportPackage;
-import org.jboss.osgi.framework.resolver.Resolvable;
+import org.jboss.osgi.framework.resolver.ResolverBundle;
import org.osgi.framework.Constants;
/**
@@ -40,7 +40,7 @@
{
private ExportPackage exporter;
- public ImportPackageImpl(Resolvable owner, ParameterizedAttribute attr)
+ public ImportPackageImpl(ResolverBundle owner, ParameterizedAttribute attr)
{
super(owner, attr);
}
@@ -89,7 +89,7 @@
public String toShortString()
{
- ResolvableImpl owner = (ResolvableImpl)getOwner();
+ ResolverBundleImpl owner = (ResolverBundleImpl)getOwner();
return owner.toShortString() + super.toShortString();
}
Modified: projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/NamedElementImpl.java
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/NamedElementImpl.java 2009-11-19 13:33:05 UTC (rev 96565)
+++ projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/NamedElementImpl.java 2009-11-19 13:46:19 UTC (rev 96566)
@@ -29,7 +29,7 @@
import org.jboss.osgi.framework.metadata.Parameter;
import org.jboss.osgi.framework.metadata.ParameterizedAttribute;
import org.jboss.osgi.framework.resolver.NamedElement;
-import org.jboss.osgi.framework.resolver.Resolvable;
+import org.jboss.osgi.framework.resolver.ResolverBundle;
/**
* A common named element
@@ -39,11 +39,11 @@
*/
abstract class NamedElementImpl implements NamedElement
{
- private Resolvable owner;
+ private ResolverBundle owner;
private OSGiMetaData metaData;
private ParameterizedAttribute paramattr;
- public NamedElementImpl(Resolvable owner, ParameterizedAttribute attr)
+ public NamedElementImpl(ResolverBundle owner, ParameterizedAttribute attr)
{
if (owner == null)
throw new IllegalArgumentException("Null element owner");
@@ -57,7 +57,7 @@
this.metaData = bundleState.getOSGiMetaData();
}
- public Resolvable getOwner()
+ public ResolverBundle getOwner()
{
return owner;
}
Modified: projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/RequiredBundleImpl.java
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/RequiredBundleImpl.java 2009-11-19 13:33:05 UTC (rev 96565)
+++ projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/RequiredBundleImpl.java 2009-11-19 13:46:19 UTC (rev 96566)
@@ -26,7 +26,7 @@
import org.jboss.osgi.framework.metadata.VersionRange;
import org.jboss.osgi.framework.metadata.internal.AbstractVersionRange;
import org.jboss.osgi.framework.resolver.RequiredBundle;
-import org.jboss.osgi.framework.resolver.Resolvable;
+import org.jboss.osgi.framework.resolver.ResolverBundle;
import org.osgi.framework.Constants;
/**
@@ -37,9 +37,9 @@
*/
public class RequiredBundleImpl extends NamedElementImpl implements RequiredBundle
{
- private Resolvable provider;
+ private ResolverBundle provider;
- public RequiredBundleImpl(Resolvable owner, ParameterizedAttribute attr)
+ public RequiredBundleImpl(ResolverBundle owner, ParameterizedAttribute attr)
{
super(owner, attr);
if (getSymbolicName().equals(owner.getSymbolicName()))
@@ -70,12 +70,12 @@
return optional;
}
- public Resolvable getProvider()
+ public ResolverBundle getProvider()
{
return provider;
}
- public void setProvider(Resolvable provider)
+ public void setProvider(ResolverBundle provider)
{
this.provider = provider;
}
Deleted: projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/ResolvableImpl.java
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/ResolvableImpl.java 2009-11-19 13:33:05 UTC (rev 96565)
+++ projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/ResolvableImpl.java 2009-11-19 13:46:19 UTC (rev 96566)
@@ -1,175 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- * Copyright 2005, JBoss Inc., and individual contributors as indicated
- * by the @authors tag. See the copyright.txt in the distribution for a
- * full listing of individual contributors.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-package org.jboss.osgi.framework.resolver.internal;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.jboss.osgi.framework.bundle.OSGiBundleState;
-import org.jboss.osgi.framework.metadata.OSGiMetaData;
-import org.jboss.osgi.framework.metadata.PackageAttribute;
-import org.jboss.osgi.framework.metadata.ParameterizedAttribute;
-import org.jboss.osgi.framework.resolver.ExportPackage;
-import org.jboss.osgi.framework.resolver.ImportPackage;
-import org.jboss.osgi.framework.resolver.RequiredBundle;
-import org.jboss.osgi.framework.resolver.Resolvable;
-import org.osgi.framework.Bundle;
-import org.osgi.framework.Version;
-
-/**
- * An abstraction of a resolvable bundle.
- *
- * @author thomas.diesler(a)jboss.com
- * @since 09-Nov-2009
- */
-public class ResolvableImpl implements Resolvable
-{
- private OSGiBundleState bundleState;
- private OSGiMetaData metaData;
- private boolean resolved;
-
- private Map<String, ExportPackage> exportedPackages = new LinkedHashMap<String, ExportPackage>();
- private Map<String, ImportPackage> importedPackages = new LinkedHashMap<String, ImportPackage>();
- private Map<String, RequiredBundle> requiredBundles = new LinkedHashMap<String, RequiredBundle>();
-
- public ResolvableImpl(Bundle bundle)
- {
- this.bundleState = OSGiBundleState.assertBundleState(bundle);
- this.metaData = bundleState.getOSGiMetaData();
-
- // Initialize exported packages
- List<PackageAttribute> exportPackages = metaData.getExportPackages();
- if (exportPackages != null)
- {
- for (PackageAttribute attr : exportPackages)
- {
- String packageName = attr.getAttribute();
- exportedPackages.put(packageName, new ExportPackageImpl(this, attr));
- }
- }
-
- // Initialize imported packages
- List<PackageAttribute> importPackages = metaData.getImportPackages();
- if (importPackages != null)
- {
- for (PackageAttribute attr : importPackages)
- {
- String packageName = attr.getAttribute();
- importedPackages.put(packageName, new ImportPackageImpl(this, attr));
- }
- }
-
- // Initialize required bundles
- List<ParameterizedAttribute> requireBundles = metaData.getRequireBundles();
- if (requireBundles != null)
- {
- for (ParameterizedAttribute attr : requireBundles)
- {
- String symbolicName = attr.getAttribute();
- RequiredBundleImpl req = new RequiredBundleImpl(this, attr);
- requiredBundles.put(symbolicName, req);
- }
- }
- }
-
- public Bundle getBundle()
- {
- return bundleState.getBundleInternal();
- }
-
- public String getSymbolicName()
- {
- return bundleState.getSymbolicName();
- }
-
- public Version getVersion()
- {
- return bundleState.getVersion();
- }
-
- public int getState()
- {
- return bundleState.getState();
- }
-
- public ExportPackage getExportPackage(String packageName)
- {
- return exportedPackages.get(packageName);
- }
-
- public List<ExportPackage> getExportPackages()
- {
- List<ExportPackage> values = new ArrayList<ExportPackage>(exportedPackages.values());
- return Collections.unmodifiableList(values);
- }
-
- public ImportPackage getImportPackage(String packageName)
- {
- return importedPackages.get(packageName);
- }
-
- public List<ImportPackage> getImportPackages()
- {
- List<ImportPackage> values = new ArrayList<ImportPackage>(importedPackages.values());
- return Collections.unmodifiableList(values);
- }
-
- public List<RequiredBundle> getRequiredBundles()
- {
- List<RequiredBundle> values = new ArrayList<RequiredBundle>(requiredBundles.values());
- return Collections.unmodifiableList(values);
- }
-
- public RequiredBundle getRequiredBundle(String symbolicName)
- {
- return requiredBundles.get(symbolicName);
- }
-
- public boolean isResolved()
- {
- return resolved;
- }
-
- public void markResolved()
- {
- this.resolved = true;
- }
-
- public boolean isSingleton()
- {
- return metaData.isSingleton();
- }
-
- public String toShortString()
- {
- return getSymbolicName() + "-" + getVersion();
- }
-
- @Override
- public String toString()
- {
- return "Resolvable[" + toShortString() + "]";
- }
-}
\ No newline at end of file
Copied: projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/ResolverBundleImpl.java (from rev 96553, projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/ResolvableImpl.java)
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/ResolverBundleImpl.java (rev 0)
+++ projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/ResolverBundleImpl.java 2009-11-19 13:46:19 UTC (rev 96566)
@@ -0,0 +1,180 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.osgi.framework.resolver.internal;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.jboss.osgi.framework.bundle.OSGiBundleState;
+import org.jboss.osgi.framework.metadata.OSGiMetaData;
+import org.jboss.osgi.framework.metadata.PackageAttribute;
+import org.jboss.osgi.framework.metadata.ParameterizedAttribute;
+import org.jboss.osgi.framework.resolver.ExportPackage;
+import org.jboss.osgi.framework.resolver.ImportPackage;
+import org.jboss.osgi.framework.resolver.RequiredBundle;
+import org.jboss.osgi.framework.resolver.ResolverBundle;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.Version;
+
+/**
+ * An abstraction of a resBundle bundle.
+ *
+ * @author thomas.diesler(a)jboss.com
+ * @since 09-Nov-2009
+ */
+public class ResolverBundleImpl implements ResolverBundle
+{
+ private OSGiBundleState bundleState;
+ private OSGiMetaData metaData;
+ private boolean resolved;
+
+ private Map<String, ExportPackage> exportedPackages = new LinkedHashMap<String, ExportPackage>();
+ private Map<String, ImportPackage> importedPackages = new LinkedHashMap<String, ImportPackage>();
+ private Map<String, RequiredBundle> requiredBundles = new LinkedHashMap<String, RequiredBundle>();
+
+ public ResolverBundleImpl(Bundle bundle)
+ {
+ this.bundleState = OSGiBundleState.assertBundleState(bundle);
+ this.metaData = bundleState.getOSGiMetaData();
+
+ // Initialize exported packages
+ List<PackageAttribute> exportPackages = metaData.getExportPackages();
+ if (exportPackages != null)
+ {
+ for (PackageAttribute attr : exportPackages)
+ {
+ String packageName = attr.getAttribute();
+ exportedPackages.put(packageName, new ExportPackageImpl(this, attr));
+ }
+ }
+
+ // Initialize imported packages
+ List<PackageAttribute> importPackages = metaData.getImportPackages();
+ if (importPackages != null)
+ {
+ for (PackageAttribute attr : importPackages)
+ {
+ String packageName = attr.getAttribute();
+ importedPackages.put(packageName, new ImportPackageImpl(this, attr));
+ }
+ }
+
+ // Initialize required bundles
+ List<ParameterizedAttribute> requireBundles = metaData.getRequireBundles();
+ if (requireBundles != null)
+ {
+ for (ParameterizedAttribute attr : requireBundles)
+ {
+ String symbolicName = attr.getAttribute();
+ RequiredBundleImpl req = new RequiredBundleImpl(this, attr);
+ requiredBundles.put(symbolicName, req);
+ }
+ }
+ }
+
+ public Bundle getBundle()
+ {
+ return bundleState.getBundleInternal();
+ }
+
+ public long getBundleId()
+ {
+ return bundleState.getBundleId();
+ }
+
+ public String getSymbolicName()
+ {
+ return bundleState.getSymbolicName();
+ }
+
+ public Version getVersion()
+ {
+ return bundleState.getVersion();
+ }
+
+ public int getState()
+ {
+ return bundleState.getState();
+ }
+
+ public ExportPackage getExportPackage(String packageName)
+ {
+ return exportedPackages.get(packageName);
+ }
+
+ public List<ExportPackage> getExportPackages()
+ {
+ List<ExportPackage> values = new ArrayList<ExportPackage>(exportedPackages.values());
+ return Collections.unmodifiableList(values);
+ }
+
+ public ImportPackage getImportPackage(String packageName)
+ {
+ return importedPackages.get(packageName);
+ }
+
+ public List<ImportPackage> getImportPackages()
+ {
+ List<ImportPackage> values = new ArrayList<ImportPackage>(importedPackages.values());
+ return Collections.unmodifiableList(values);
+ }
+
+ public List<RequiredBundle> getRequiredBundles()
+ {
+ List<RequiredBundle> values = new ArrayList<RequiredBundle>(requiredBundles.values());
+ return Collections.unmodifiableList(values);
+ }
+
+ public RequiredBundle getRequiredBundle(String symbolicName)
+ {
+ return requiredBundles.get(symbolicName);
+ }
+
+ public boolean isResolved()
+ {
+ return resolved;
+ }
+
+ public void markResolved()
+ {
+ this.resolved = true;
+ }
+
+ public boolean isSingleton()
+ {
+ return metaData.isSingleton();
+ }
+
+ public String toShortString()
+ {
+ return getSymbolicName() + "-" + getVersion();
+ }
+
+ @Override
+ public String toString()
+ {
+ return "Bundle[" + toShortString() + "]";
+ }
+}
\ No newline at end of file
Modified: projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/basic/BasicResolverImpl.java
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/basic/BasicResolverImpl.java 2009-11-19 13:33:05 UTC (rev 96565)
+++ projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/basic/BasicResolverImpl.java 2009-11-19 13:46:19 UTC (rev 96566)
@@ -43,7 +43,7 @@
import org.jboss.osgi.framework.metadata.ParameterizedAttribute;
import org.jboss.osgi.framework.resolver.AbstractResolver;
import org.jboss.osgi.framework.resolver.ExportPackage;
-import org.jboss.osgi.framework.resolver.Resolvable;
+import org.jboss.osgi.framework.resolver.ResolverBundle;
import org.osgi.framework.Bundle;
import org.osgi.framework.Constants;
@@ -66,9 +66,9 @@
super(bundleManager);
}
- public Resolvable removeBundle(Bundle bundle)
+ public ResolverBundle removeBundle(Bundle bundle)
{
- Resolvable removedBundle = super.removeBundle(bundle);
+ ResolverBundle removedBundle = super.removeBundle(bundle);
OSGiBundleState bundleState = OSGiBundleState.assertBundleState(bundle);
bundleCapabilitiesMap.remove(bundleState);
@@ -84,12 +84,12 @@
return removedBundle;
}
- public List<Resolvable> resolve(List<Bundle> bundles)
+ public List<ResolverBundle> resolve(List<Bundle> bundles)
{
- List<Resolvable> resolvedBundles = new ArrayList<Resolvable>();
+ List<ResolverBundle> resolvedBundles = new ArrayList<ResolverBundle>();
for (OSGiBundleState aux : resolveBundles(bundles))
{
- Resolvable resBundle = getBundle(aux);
+ ResolverBundle resBundle = getBundle(aux);
if (resBundle == null)
throw new IllegalStateException("Cannot obtain bundle for: " + aux);
resolvedBundles.add(resBundle);
@@ -182,7 +182,7 @@
return null;
OSGiBundleState exportingBundle = match.getExportingBundle();
- Resolvable resolverBundle = getBundle(exportingBundle);
+ ResolverBundle resolverBundle = getBundle(exportingBundle);
return resolverBundle.getExportPackage(importPackage);
}
Modified: projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/drools/RuleBasedResolverImpl.java
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/drools/RuleBasedResolverImpl.java 2009-11-19 13:33:05 UTC (rev 96565)
+++ projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/drools/RuleBasedResolverImpl.java 2009-11-19 13:46:19 UTC (rev 96566)
@@ -39,7 +39,7 @@
import org.jboss.osgi.framework.resolver.AbstractResolver;
import org.jboss.osgi.framework.resolver.ExportPackage;
import org.jboss.osgi.framework.resolver.ImportPackage;
-import org.jboss.osgi.framework.resolver.Resolvable;
+import org.jboss.osgi.framework.resolver.ResolverBundle;
import org.osgi.framework.Bundle;
/**
@@ -51,7 +51,7 @@
public class RuleBasedResolverImpl extends AbstractResolver
{
private StatefulKnowledgeSession ksession;
- private Map<Resolvable, FactHandle> facts = new ConcurrentHashMap<Resolvable, FactHandle>();
+ private Map<ResolverBundle, FactHandle> facts = new ConcurrentHashMap<ResolverBundle, FactHandle>();
public RuleBasedResolverImpl(OSGiBundleManager bundleManager)
{
@@ -68,33 +68,33 @@
}
@Override
- public Resolvable addBundle(Bundle bundle)
+ public ResolverBundle addBundle(Bundle bundle)
{
- Resolvable resolvable = super.addBundle(bundle);
- return resolvable;
+ ResolverBundle resBundle = super.addBundle(bundle);
+ return resBundle;
}
@Override
- public Resolvable removeBundle(Bundle bundle)
+ public ResolverBundle removeBundle(Bundle bundle)
{
- Resolvable resolvable = super.removeBundle(bundle);
- FactHandle factHandle = facts.get(resolvable);
+ ResolverBundle resBundle = super.removeBundle(bundle);
+ FactHandle factHandle = facts.get(resBundle);
if (factHandle != null)
{
- ksession.update(factHandle, resolvable);
+ ksession.update(factHandle, resBundle);
ksession.fireAllRules();
ksession.retract(factHandle);
}
- return resolvable;
+ return resBundle;
}
- public List<Resolvable> resolve(List<Bundle> bundles)
+ public List<ResolverBundle> resolve(List<Bundle> bundles)
{
- // Get the list of unresolved resolvables
- List<Resolvable> unresolved = new ArrayList<Resolvable>();
+ // Get the list of unresolved resBundles
+ List<ResolverBundle> unresolved = new ArrayList<ResolverBundle>();
if (bundles == null)
{
- for (Resolvable aux : getBundles())
+ for (ResolverBundle aux : getBundles())
{
if (aux.isResolved() == false)
unresolved.add(aux);
@@ -104,17 +104,17 @@
{
for (Bundle bundle : bundles)
{
- Resolvable aux = getBundle(bundle);
+ ResolverBundle aux = getBundle(bundle);
if (aux == null)
- throw new IllegalStateException("Cannot obtain resolvable for: " + bundle);
+ throw new IllegalStateException("Cannot obtain resBundle for: " + bundle);
if (aux.isResolved() == false)
unresolved.add(aux);
}
}
- // Insert the missing resolvables into the knowledge base
- for (Resolvable aux : unresolved)
+ // Insert the missing resBundles into the knowledge base
+ for (ResolverBundle aux : unresolved)
{
FactHandle factHandle = ksession.getFactHandle(aux);
if (factHandle == null)
@@ -128,8 +128,8 @@
ksession.fireAllRules();
// Return teh list of resolved bundles
- List<Resolvable> resolved = new ArrayList<Resolvable>();
- for (Resolvable aux : getBundles())
+ List<ResolverBundle> resolved = new ArrayList<ResolverBundle>();
+ for (ResolverBundle aux : getBundles())
{
if (aux.isResolved())
resolved.add(aux);
@@ -139,11 +139,11 @@
public ExportPackage getExporter(Bundle bundle, String packageName)
{
- Resolvable resolvable = getBundle(bundle);
- if (resolvable == null)
+ ResolverBundle resBundle = getBundle(bundle);
+ if (resBundle == null)
throw new IllegalStateException("Cannot find resovable for: " + bundle);
- ImportPackage importPackage = resolvable.getImportPackage(packageName);
+ ImportPackage importPackage = resBundle.getImportPackage(packageName);
if (importPackage == null)
throw new IllegalStateException("Cannot find import package: " + packageName);
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-19 13:33:05 UTC (rev 96565)
+++ projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/service/internal/PackageAdminImpl.java 2009-11-19 13:46:19 UTC (rev 96566)
@@ -39,7 +39,7 @@
import org.jboss.osgi.framework.plugins.PackageAdminServicePlugin;
import org.jboss.osgi.framework.plugins.ResolverPlugin;
import org.jboss.osgi.framework.plugins.internal.AbstractServicePlugin;
-import org.jboss.osgi.framework.resolver.Resolvable;
+import org.jboss.osgi.framework.resolver.ResolverBundle;
import org.jboss.osgi.framework.resolver.Resolver;
import org.jboss.osgi.spi.NotImplementedException;
import org.osgi.framework.Bundle;
@@ -187,7 +187,7 @@
// Resolve the bundles through the resolver
Resolver bundleResolver = bundleManager.getPlugin(ResolverPlugin.class);
List<OSGiBundleState> resolvableBundles = new ArrayList<OSGiBundleState>();
- for (Resolvable aux : bundleResolver.resolve(unresolvedBundles))
+ for (ResolverBundle aux : bundleResolver.resolve(unresolvedBundles))
resolvableBundles.add(OSGiBundleState.assertBundleState(aux.getBundle()));
boolean allResolved = resolvableBundles.containsAll(unresolvedBundles);
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-19 13:33:05 UTC (rev 96565)
+++ projects/jboss-osgi/trunk/reactor/framework/src/test/java/org/jboss/test/osgi/resolver/AbstractImportExportTest.java 2009-11-19 13:46:19 UTC (rev 96566)
@@ -34,7 +34,7 @@
import org.jboss.osgi.framework.resolver.ExportPackage;
import org.jboss.osgi.framework.resolver.ImportPackage;
-import org.jboss.osgi.framework.resolver.Resolvable;
+import org.jboss.osgi.framework.resolver.ResolverBundle;
import org.jboss.osgi.framework.resolver.Resolver;
import org.jboss.test.osgi.classloader.support.a.A;
import org.jboss.virtual.VirtualFile;
@@ -71,20 +71,20 @@
// Resolve the installed bundles
resolver.resolve(null);
- // Verify resolvable for bundleA
- Resolvable resolvableA = resolver.getBundle(bundleA);
- assertTrue("BundleA resolved", resolvableA.isResolved());
- ImportPackage importPackage = resolvableA.getImportPackage(A.class.getPackage().getName());
+ // 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 that bundleA is wired to the exporter
ExportPackage exporter = resolver.getExporter(bundleA, A.class.getPackage().getName());
assertEquals(bundleB.getSymbolicName(), exporter.getOwner().getSymbolicName());
- // Verify resolvable for bundleB
- Resolvable resolvableB = resolver.getBundle(bundleB);
- assertTrue("BundleB resolved", resolvableB.isResolved());
- ExportPackage exportPackage = resolvableB.getExportPackage(A.class.getPackage().getName());
+ // 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());
}
finally
@@ -113,10 +113,10 @@
// Resolve the installed bundles
resolver.resolve(null);
- // Verify resolvable for bundleA
- Resolvable resolvableA = resolver.getBundle(bundleA);
- assertFalse("BundleA not resolved", resolvableA.isResolved());
- ImportPackage importPackage = resolvableA.getImportPackage(A.class.getPackage().getName());
+ // 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
@@ -148,19 +148,19 @@
try
{
// Only resolve BundleB
- List<Resolvable> resolved = resolver.resolve(Arrays.asList(new Bundle[] { bundleB }));
+ List<ResolverBundle> resolved = resolver.resolve(Arrays.asList(new Bundle[] { bundleB }));
assertEquals("BundleB resolved", 1, resolved.size());
assertEquals(bundleB.getSymbolicName(), resolved.get(0).getSymbolicName());
- // Verify resolvable for bundleA
- Resolvable resolvableA = resolver.getBundle(bundleA);
- assertFalse("BundleA not resolved", resolvableA.isResolved());
+ // Verify resBundle for bundleA
+ ResolverBundle resBundleA = resolver.getBundle(bundleA);
+ assertFalse("BundleA not resolved", resBundleA.isResolved());
// Resolve the installed bundles
resolver.resolve(null);
- // Verify resolvable for bundleA
- assertTrue("BundleA resolved", resolvableA.isResolved());
+ // Verify resBundle for bundleA
+ assertTrue("BundleA resolved", resBundleA.isResolved());
}
finally
{
@@ -189,10 +189,10 @@
// Resolve the installed bundles
resolver.resolve(null);
- // Verify resolvable for bundleA
- Resolvable resolvableA = resolver.getBundle(bundleA);
- assertTrue("BundleA resolved", resolvableA.isResolved());
- ImportPackage importPackage = resolvableA.getImportPackage(A.class.getPackage().getName());
+ // 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 that bundleA is wired to the exporter
@@ -217,29 +217,29 @@
Bundle bundleA = framework.installBundle(fileA);
try
{
- //Bundle-SymbolicName: packageexportversion
+ //Bundle-SymbolicName: packageexportversion100
//Export-Package: org.jboss.test.osgi.classloader.support.a;version=1.0.0
- VirtualFile fileB = assembleBundle("bundleB", "/bundles/resolver/packageexportversion", A.class);
+ VirtualFile fileB = assembleBundle("bundleB", "/bundles/resolver/packageexportversion100", A.class);
Bundle bundleB = framework.installBundle(fileB);
try
{
// Resolve the installed bundles
resolver.resolve(null);
- // Verify resolvable for bundleA
- Resolvable resolvableA = resolver.getBundle(bundleA);
- assertTrue("BundleA resolved", resolvableA.isResolved());
- ImportPackage importPackage = resolvableA.getImportPackage(A.class.getPackage().getName());
+ // 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 that bundleA is wired to the exporter
ExportPackage exporter = resolver.getExporter(bundleA, A.class.getPackage().getName());
assertEquals(bundleB.getSymbolicName(), exporter.getOwner().getSymbolicName());
- // Verify resolvable for bundleB
- Resolvable resolvableB = resolver.getBundle(bundleB);
- assertTrue("BundleB resolved", resolvableB.isResolved());
- ExportPackage exportPackage = resolvableB.getExportPackage(A.class.getPackage().getName());
+ // 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());
}
finally
@@ -265,29 +265,29 @@
Bundle bundleA = framework.installBundle(fileA);
try
{
- //Bundle-SymbolicName: packageexportversion
+ //Bundle-SymbolicName: packageexportversion100
//Export-Package: org.jboss.test.osgi.classloader.support.a;version=1.0.0
- VirtualFile fileB = assembleBundle("bundleB", "/bundles/resolver/packageexportversion", A.class);
+ VirtualFile fileB = assembleBundle("bundleB", "/bundles/resolver/packageexportversion100", A.class);
Bundle bundleB = framework.installBundle(fileB);
try
{
// Resolve the installed bundles
resolver.resolve(null);
- // Verify resolvable for bundleA
- Resolvable resolvableA = resolver.getBundle(bundleA);
- assertFalse("BundleA not resolved", resolvableA.isResolved());
- ImportPackage importPackage = resolvableA.getImportPackage(A.class.getPackage().getName());
+ // 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 resolvable for bundleB
- Resolvable resolvableB = resolver.getBundle(bundleB);
- assertTrue("BundleB resolved", resolvableB.isResolved());
- ExportPackage exportPackage = resolvableB.getExportPackage(A.class.getPackage().getName());
+ // Verify resBundle for bundleB
+ ResolverBundle resBundleB = resolver.getBundle(bundleB);
+ assertTrue("BundleB resolved", resBundleB.isResolved());
+ ExportPackage exportPackage = resBundleB.getExportPackage(A.class.getPackage().getName());
assertEquals("Importers null", 0, exportPackage.getImporters().size());
}
finally
@@ -316,10 +316,10 @@
// Resolve the installed bundles
resolver.resolve(null);
- // Verify resolvable for bundleA
- Resolvable resolvableA = resolver.getBundle(bundleA);
- assertTrue("BundleA resolved", resolvableA.isResolved());
- ImportPackage importPackage = resolvableA.getImportPackage(A.class.getPackage().getName());
+ // Verify resBundle for bundleA
+ ResolverBundle resBundleA = resolver.getBundle(bundleA);
+ assertTrue("BundleA resolved", resBundleA.isResolved());
+ ImportPackage importPackage = resBundleA.getImportPackage(A.class.getPackage().getName());
assertNull("Exporter null", importPackage.getExporter());
// Verify that bundleA is not wired to an exporter
@@ -353,20 +353,20 @@
// Resolve the installed bundles
resolver.resolve(null);
- // Verify resolvable for bundleA
- Resolvable resolvableA = resolver.getBundle(bundleA);
- assertTrue("BundleA resolved", resolvableA.isResolved());
- ImportPackage importPackage = resolvableA.getImportPackage(A.class.getPackage().getName());
+ // 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 that bundleA is wired to an exporter
ExportPackage exporter = resolver.getExporter(bundleA, A.class.getPackage().getName());
assertEquals(bundleB.getSymbolicName(), exporter.getOwner().getSymbolicName());
- // Verify resolvable for bundleB
- Resolvable resolvableB = resolver.getBundle(bundleB);
- assertTrue("BundleB resolved", resolvableB.isResolved());
- ExportPackage exportPackage = resolvableB.getExportPackage(A.class.getPackage().getName());
+ // 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());
}
finally
@@ -404,20 +404,20 @@
// Resolve the installed bundles
resolver.resolve(null);
- // Verify resolvable for bundleA
- Resolvable resolvableA = resolver.getBundle(bundleA);
- assertTrue("BundleA resolved", resolvableA.isResolved());
- ImportPackage importPackage = resolvableA.getImportPackage(A.class.getPackage().getName());
+ // Verify resBundle for bundleA
+ ResolverBundle resBundleA = resolver.getBundle(bundleA);
+ assertTrue("BundleA resolved", resBundleA.isResolved());
+ ImportPackage importPackage = resBundleA.getImportPackage(A.class.getPackage().getName());
assertNull("Exporter null", importPackage.getExporter());
// Verify that bundleA is not wired to an exporter
ExportPackage exporter = resolver.getExporter(bundleA, A.class.getPackage().getName());
assertNull("Exporter null", exporter);
- // Verify resolvable for bundleB
- Resolvable resolvableB = resolver.getBundle(bundleB);
- assertTrue("BundleB resolved", resolvableB.isResolved());
- ExportPackage exportPackage = resolvableB.getExportPackage(A.class.getPackage().getName());
+ // Verify resBundle for bundleB
+ ResolverBundle resBundleB = resolver.getBundle(bundleB);
+ assertTrue("BundleB resolved", resBundleB.isResolved());
+ ExportPackage exportPackage = resBundleB.getExportPackage(A.class.getPackage().getName());
assertEquals("Importers null", 0, exportPackage.getImporters().size());
}
finally
@@ -452,20 +452,20 @@
// Resolve the installed bundles
resolver.resolve(null);
- // Verify resolvable for bundleA
- Resolvable resolvableA = resolver.getBundle(bundleA);
- assertTrue("BundleA resolved", resolvableA.isResolved());
- ImportPackage importPackage = resolvableA.getImportPackage(A.class.getPackage().getName());
+ // 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 that bundleA is wired to the exporter
ExportPackage exporter = resolver.getExporter(bundleA, A.class.getPackage().getName());
assertEquals(bundleB.getSymbolicName(), exporter.getOwner().getSymbolicName());
- // Verify resolvable for bundleB
- Resolvable resolvableB = resolver.getBundle(bundleB);
- assertTrue("BundleB resolved", resolvableB.isResolved());
- ExportPackage exportPackage = resolvableB.getExportPackage(A.class.getPackage().getName());
+ // 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());
}
finally
@@ -500,20 +500,20 @@
// Resolve the installed bundles
resolver.resolve(null);
- // Verify resolvable for bundleA
- Resolvable resolvableA = resolver.getBundle(bundleA);
- assertFalse("BundleA not resolved", resolvableA.isResolved());
- ImportPackage importPackage = resolvableA.getImportPackage(A.class.getPackage().getName());
+ // 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 resolvable for bundleB
- Resolvable resolvableB = resolver.getBundle(bundleB);
- assertTrue("BundleB resolved", resolvableB.isResolved());
- ExportPackage exportPackage = resolvableB.getExportPackage(A.class.getPackage().getName());
+ // Verify resBundle for bundleB
+ ResolverBundle resBundleB = resolver.getBundle(bundleB);
+ assertTrue("BundleB resolved", resBundleB.isResolved());
+ ExportPackage exportPackage = resBundleB.getExportPackage(A.class.getPackage().getName());
assertEquals("Importers null", 0, exportPackage.getImporters().size());
}
finally
@@ -551,20 +551,20 @@
// Resolve the installed bundles
resolver.resolve(null);
- // Verify resolvable for bundleA
- Resolvable resolvableA = resolver.getBundle(bundleA);
- assertTrue("BundleA resolved", resolvableA.isResolved());
- ImportPackage importPackage = resolvableA.getImportPackage(A.class.getPackage().getName());
+ // 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 that bundleA is wired to an exporter
ExportPackage exporter = resolver.getExporter(bundleA, A.class.getPackage().getName());
assertEquals(bundleB.getSymbolicName(), exporter.getOwner().getSymbolicName());
- // Verify resolvable for bundleB
- Resolvable resolvableB = resolver.getBundle(bundleB);
- assertTrue("BundleB resolved", resolvableB.isResolved());
- ExportPackage exportPackage = resolvableB.getExportPackage(A.class.getPackage().getName());
+ // 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());
}
finally
@@ -602,20 +602,20 @@
// Resolve the installed bundles
resolver.resolve(null);
- // Verify resolvable for bundleA
- Resolvable resolvableA = resolver.getBundle(bundleA);
- assertFalse("BundleA not resolved", resolvableA.isResolved());
- ImportPackage importPackage = resolvableA.getImportPackage(A.class.getPackage().getName());
+ // 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 resolvable for bundleB
- Resolvable resolvableB = resolver.getBundle(bundleB);
- assertTrue("BundleB resolved", resolvableB.isResolved());
- ExportPackage exportPackage = resolvableB.getExportPackage(A.class.getPackage().getName());
+ // Verify resBundle for bundleB
+ ResolverBundle resBundleB = resolver.getBundle(bundleB);
+ assertTrue("BundleB resolved", resBundleB.isResolved());
+ ExportPackage exportPackage = resBundleB.getExportPackage(A.class.getPackage().getName());
assertEquals("Importers null", 0, exportPackage.getImporters().size());
}
finally
@@ -650,13 +650,13 @@
// Resolve the installed bundles
resolver.resolve(null);
- // Verify resolvable for bundleA
- Resolvable resolvableA = resolver.getBundle(bundleA);
- assertTrue("BundleA resolved", resolvableA.isResolved());
+ // Verify resBundle for bundleA
+ ResolverBundle resBundleA = resolver.getBundle(bundleA);
+ assertTrue("BundleA resolved", resBundleA.isResolved());
- // Verify resolvable for bundleB
- Resolvable resolvableB = resolver.getBundle(bundleB);
- assertTrue("BundleB resolved", resolvableB.isResolved());
+ // Verify resBundle for bundleB
+ ResolverBundle resBundleB = resolver.getBundle(bundleB);
+ assertTrue("BundleB resolved", resBundleB.isResolved());
}
finally
{
@@ -684,9 +684,9 @@
// Resolve the installed bundles
resolver.resolve(null);
- // Verify resolvable for bundleA
- Resolvable resolvableA = resolver.getBundle(bundleA);
- assertFalse("BundleA not resolved", resolvableA.isResolved());
+ // Verify resBundle for bundleA
+ ResolverBundle resBundleA = resolver.getBundle(bundleA);
+ assertFalse("BundleA not resolved", resBundleA.isResolved());
}
finally
{
@@ -709,9 +709,9 @@
// Resolve the installed bundles
resolver.resolve(null);
- // Verify resolvable for bundleA
- Resolvable resolvableA = resolver.getBundle(bundleA);
- assertTrue("BundleA resolved", resolvableA.isResolved());
+ // Verify resBundle for bundleA
+ ResolverBundle resBundleA = resolver.getBundle(bundleA);
+ assertTrue("BundleA resolved", resBundleA.isResolved());
}
finally
{
@@ -740,13 +740,13 @@
// Resolve the installed bundles
resolver.resolve(null);
- // Verify resolvable for bundleA
- Resolvable resolvableA = resolver.getBundle(bundleA);
- assertTrue("BundleA resolved", resolvableA.isResolved());
+ // Verify resBundle for bundleA
+ ResolverBundle resBundleA = resolver.getBundle(bundleA);
+ assertTrue("BundleA resolved", resBundleA.isResolved());
- // Verify resolvable for bundleB
- Resolvable resolvableB = resolver.getBundle(bundleB);
- assertTrue("BundleB resolved", resolvableB.isResolved());
+ // Verify resBundle for bundleB
+ ResolverBundle resBundleB = resolver.getBundle(bundleB);
+ assertTrue("BundleB resolved", resBundleB.isResolved());
}
finally
{
@@ -780,13 +780,13 @@
// Resolve the installed bundles
resolver.resolve(null);
- // Verify resolvable for bundleA
- Resolvable resolvableA = resolver.getBundle(bundleA);
- assertFalse("BundleA not resolved", resolvableA.isResolved());
+ // Verify resBundle for bundleA
+ ResolverBundle resBundleA = resolver.getBundle(bundleA);
+ assertFalse("BundleA not resolved", resBundleA.isResolved());
- // Verify resolvable for bundleB
- Resolvable resolvableB = resolver.getBundle(bundleB);
- assertTrue("BundleB resolved", resolvableB.isResolved());
+ // Verify resBundle for bundleB
+ ResolverBundle resBundleB = resolver.getBundle(bundleB);
+ assertTrue("BundleB resolved", resBundleB.isResolved());
}
finally
{
@@ -800,7 +800,7 @@
}
@Test
- public void testResolvedExporterPreferred() throws Exception
+ public void testPreferredExporterResolved() throws Exception
{
Resolver resolver = getTestResolver();
assertEquals("No bundles in resolver", 0, resolver.getBundles().size());
@@ -823,9 +823,9 @@
// Resolve the installed bundles
resolver.resolve(null);
- // Verify resolvable for bundleA
- Resolvable resolvableA = resolver.getBundle(bundleA);
- assertTrue("BundleA resolved", resolvableA.isResolved());
+ // Verify resBundle for bundleA
+ ResolverBundle resBundleA = resolver.getBundle(bundleA);
+ assertTrue("BundleA resolved", resBundleA.isResolved());
Bundle bundleB = framework.installBundle(fileB);
try
@@ -836,13 +836,13 @@
// Resolve the installed bundles
resolver.resolve(null);
- // Verify resolvable for bundleB
- Resolvable resolvableB = resolver.getBundle(bundleB);
- assertTrue("BundleB resolved", resolvableB.isResolved());
+ // Verify resBundle for bundleB
+ ResolverBundle resBundleB = resolver.getBundle(bundleB);
+ assertTrue("BundleB resolved", resBundleB.isResolved());
- // Verify resolvable for bundleC
- Resolvable resolvableC = resolver.getBundle(bundleC);
- assertTrue("BundleC resolved", resolvableC.isResolved());
+ // Verify resBundle for bundleC
+ ResolverBundle resBundleC = resolver.getBundle(bundleC);
+ assertTrue("BundleC resolved", resBundleC.isResolved());
// Verify that bundleC is wired to bundleA
ExportPackage exporter = resolver.getExporter(bundleC, A.class.getPackage().getName());
@@ -866,7 +866,7 @@
}
@Test
- public void testResolvedExporterPreferredReverse() throws Exception
+ public void testPreferredExporterResolvedReverse() throws Exception
{
Resolver resolver = getTestResolver();
assertEquals("No bundles in resolver", 0, resolver.getBundles().size());
@@ -889,9 +889,9 @@
// Resolve the installed bundles
resolver.resolve(null);
- // Verify resolvable for bundleA
- Resolvable resolvableB = resolver.getBundle(bundleB);
- assertTrue("BundleB resolved", resolvableB.isResolved());
+ // Verify resBundle for bundleA
+ ResolverBundle resBundleB = resolver.getBundle(bundleB);
+ assertTrue("BundleB resolved", resBundleB.isResolved());
Bundle bundleA = framework.installBundle(fileA);
try
@@ -902,13 +902,13 @@
// Resolve the installed bundles
resolver.resolve(null);
- // Verify resolvable for bundleA
- Resolvable resolvableA = resolver.getBundle(bundleA);
- assertTrue("BundleA resolved", resolvableA.isResolved());
+ // Verify resBundle for bundleA
+ ResolverBundle resBundleA = resolver.getBundle(bundleA);
+ assertTrue("BundleA resolved", resBundleA.isResolved());
- // Verify resolvable for bundleC
- Resolvable resolvableC = resolver.getBundle(bundleC);
- assertTrue("BundleC resolved", resolvableC.isResolved());
+ // Verify resBundle for bundleC
+ ResolverBundle resBundleC = resolver.getBundle(bundleC);
+ assertTrue("BundleC resolved", resBundleC.isResolved());
// Verify that bundleC is wired to bundleB
ExportPackage exporter = resolver.getExporter(bundleC, A.class.getPackage().getName());
@@ -931,7 +931,133 @@
}
}
- @Ignore
+ @Test
+ public void testPreferredExporterHigherVersion() throws Exception
+ {
+ Resolver resolver = getTestResolver();
+ assertEquals("No bundles in resolver", 0, resolver.getBundles().size());
+
+ //Bundle-SymbolicName: packageexportversion100
+ //Export-Package: org.jboss.test.osgi.classloader.support.a;version=1.0.0
+ VirtualFile fileA = assembleBundle("bundleA", "/bundles/resolver/packageexportversion100", A.class);
+
+ //Bundle-SymbolicName: packageexportversion200
+ //Export-Package: org.jboss.test.osgi.classloader.support.a;version=2.0.0
+ VirtualFile fileB = assembleBundle("bundleB", "/bundles/resolver/packageexportversion200", A.class);
+
+ // Bundle-SymbolicName: simpleimport
+ // Import-Package: org.jboss.test.osgi.classloader.support.a
+ VirtualFile fileC = assembleBundle("bundleC", "/bundles/resolver/simpleimport");
+
+ Bundle bundleA = framework.installBundle(fileA);
+ try
+ {
+ Bundle bundleB = framework.installBundle(fileB);
+ try
+ {
+ Bundle bundleC = framework.installBundle(fileC);
+ try
+ {
+ // Resolve the installed bundles
+ resolver.resolve(null);
+
+ // Verify resBundle for bundleA
+ ResolverBundle resBundleA = resolver.getBundle(bundleA);
+ assertTrue("BundleA resolved", resBundleA.isResolved());
+
+ // Verify resBundle for bundleB
+ ResolverBundle resBundleB = resolver.getBundle(bundleB);
+ assertTrue("BundleB resolved", resBundleB.isResolved());
+
+ // Verify resBundle for bundleC
+ ResolverBundle resBundleC = resolver.getBundle(bundleC);
+ assertTrue("BundleC resolved", resBundleC.isResolved());
+
+ // Verify that bundleC is wired to bundleB
+ ExportPackage exporter = resolver.getExporter(bundleC, A.class.getPackage().getName());
+ assertNotNull("Exporter not null", exporter);
+ assertEquals("Wired to bundleB", bundleB.getSymbolicName(), exporter.getOwner().getSymbolicName());
+ }
+ finally
+ {
+ bundleC.uninstall();
+ }
+ }
+ finally
+ {
+ bundleB.uninstall();
+ }
+ }
+ finally
+ {
+ bundleA.uninstall();
+ }
+ }
+
+ @Test
+ public void testPreferredExporterHigherVersionReverse() throws Exception
+ {
+ Resolver resolver = getTestResolver();
+ assertEquals("No bundles in resolver", 0, resolver.getBundles().size());
+
+ //Bundle-SymbolicName: packageexportversion200
+ //Export-Package: org.jboss.test.osgi.classloader.support.a;version=2.0.0
+ VirtualFile fileA = assembleBundle("bundleA", "/bundles/resolver/packageexportversion200", A.class);
+
+ //Bundle-SymbolicName: packageexportversion100
+ //Export-Package: org.jboss.test.osgi.classloader.support.a;version=1.0.0
+ VirtualFile fileB = assembleBundle("bundleB", "/bundles/resolver/packageexportversion100", A.class);
+
+ // Bundle-SymbolicName: simpleimport
+ // Import-Package: org.jboss.test.osgi.classloader.support.a
+ VirtualFile fileC = assembleBundle("bundleC", "/bundles/resolver/simpleimport");
+
+ Bundle bundleA = framework.installBundle(fileA);
+ try
+ {
+ Bundle bundleB = framework.installBundle(fileB);
+ try
+ {
+ Bundle bundleC = framework.installBundle(fileC);
+ try
+ {
+ // Resolve the installed bundles
+ resolver.resolve(null);
+
+ // Verify resBundle for bundleA
+ ResolverBundle resBundleA = resolver.getBundle(bundleA);
+ assertTrue("BundleA resolved", resBundleA.isResolved());
+
+ // Verify resBundle for bundleB
+ ResolverBundle resBundleB = resolver.getBundle(bundleB);
+ assertTrue("BundleB resolved", resBundleB.isResolved());
+
+ // Verify resBundle for bundleC
+ ResolverBundle resBundleC = resolver.getBundle(bundleC);
+ assertTrue("BundleC resolved", resBundleC.isResolved());
+
+ // Verify that bundleC is wired to bundleA
+ ExportPackage exporter = resolver.getExporter(bundleC, A.class.getPackage().getName());
+ assertNotNull("Exporter not null", exporter);
+ assertEquals("Wired to bundleA", bundleA.getSymbolicName(), exporter.getOwner().getSymbolicName());
+ }
+ finally
+ {
+ bundleC.uninstall();
+ }
+ }
+ finally
+ {
+ bundleB.uninstall();
+ }
+ }
+ finally
+ {
+ bundleA.uninstall();
+ }
+ }
+
+ /*
public void testLogger() throws Exception
{
Resolver resolver = getTestResolver();
@@ -951,13 +1077,13 @@
// Resolve the logging bundle
resolver.resolve(null);
- // Verify resolvable for bundleA
- Resolvable resolvableA = resolver.getBundle(bundleA);
- assertTrue("BundleA resolved", resolvableA.isResolved());
+ // Verify resBundle for bundleA
+ resBundle resBundleA = resolver.getBundle(bundleA);
+ assertTrue("BundleA resolved", resBundleA.isResolved());
- // Verify resolvable for bundleB
- Resolvable resolvableB = resolver.getBundle(bundleB);
- assertTrue("BundleB resolved", resolvableB.isResolved());
+ // Verify resBundle for bundleB
+ resBundle resBundleB = resolver.getBundle(bundleB);
+ assertTrue("BundleB resolved", resBundleB.isResolved());
}
finally
@@ -970,6 +1096,7 @@
bundleA.uninstall();
}
}
+ */
@Test
public void testAttributeImportPackage() throws Exception
Modified: projects/jboss-osgi/trunk/reactor/framework/src/test/java/org/jboss/test/osgi/resolver/ResolverMetadataTest.java
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/test/java/org/jboss/test/osgi/resolver/ResolverMetadataTest.java 2009-11-19 13:33:05 UTC (rev 96565)
+++ projects/jboss-osgi/trunk/reactor/framework/src/test/java/org/jboss/test/osgi/resolver/ResolverMetadataTest.java 2009-11-19 13:46:19 UTC (rev 96566)
@@ -34,7 +34,7 @@
import org.jboss.osgi.framework.resolver.ExportPackage;
import org.jboss.osgi.framework.resolver.ImportPackage;
import org.jboss.osgi.framework.resolver.RequiredBundle;
-import org.jboss.osgi.framework.resolver.Resolvable;
+import org.jboss.osgi.framework.resolver.ResolverBundle;
import org.jboss.osgi.framework.resolver.Resolver;
import org.jboss.test.osgi.classloader.support.a.A;
import org.jboss.virtual.VirtualFile;
@@ -62,7 +62,7 @@
Resolver resolver = getTestResolver();
assertEquals(1, resolver.getBundles().size());
- Resolvable resolvableA = resolver.getBundle(bundleA.getSymbolicName(), null);
+ ResolverBundle resolvableA = resolver.getBundle(bundleA.getSymbolicName(), null);
assertNotNull("Resolvable not null", resolvableA);
resolvableA = resolver.getBundle(bundleA.getSymbolicName(), bundleA.getVersion());
@@ -111,7 +111,7 @@
Bundle bundleA = framework.installBundle(fileA);
try
{
- Resolvable resolvableA = getTestResolver().getBundle(bundleA);
+ ResolverBundle resolvableA = getTestResolver().getBundle(bundleA);
List<ImportPackage> importPackages = resolvableA.getImportPackages();
assertNotNull("ImportPackages not null", importPackages);
@@ -140,7 +140,7 @@
Bundle bundleA = framework.installBundle(fileA);
try
{
- Resolvable resolvableA = getTestResolver().getBundle(bundleA);
+ ResolverBundle resolvableA = getTestResolver().getBundle(bundleA);
assertTrue("Sigleton", resolvableA.isSingleton());
}
finally
@@ -158,7 +158,7 @@
Bundle bundleA = framework.installBundle(fileA);
try
{
- Resolvable resolvableA = getTestResolver().getBundle(bundleA);
+ ResolverBundle resolvableA = getTestResolver().getBundle(bundleA);
List<RequiredBundle> requiredBundles = resolvableA.getRequiredBundles();
assertEquals("RequiredBundles not null", 1, requiredBundles.size());
RequiredBundle reqBundle = requiredBundles.get(0);
@@ -181,7 +181,7 @@
Bundle bundleA = framework.installBundle(fileA);
try
{
- Resolvable resolvableA = getTestResolver().getBundle(bundleA);
+ ResolverBundle resolvableA = getTestResolver().getBundle(bundleA);
List<RequiredBundle> requiredBundles = resolvableA.getRequiredBundles();
assertEquals("RequiredBundles not null", 1, requiredBundles.size());
RequiredBundle reqBundle = requiredBundles.get(0);
@@ -204,7 +204,7 @@
Bundle bundleA = framework.installBundle(fileA);
try
{
- Resolvable resolvableA = getTestResolver().getBundle(bundleA);
+ ResolverBundle resolvableA = getTestResolver().getBundle(bundleA);
List<RequiredBundle> requiredBundles = resolvableA.getRequiredBundles();
assertEquals("RequiredBundles not null", 1, requiredBundles.size());
RequiredBundle reqBundle = requiredBundles.get(0);
Modified: projects/jboss-osgi/trunk/reactor/framework/src/test/java/org/jboss/test/osgi/resolver/ResolverSmokeTest.java
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/test/java/org/jboss/test/osgi/resolver/ResolverSmokeTest.java 2009-11-19 13:33:05 UTC (rev 96565)
+++ projects/jboss-osgi/trunk/reactor/framework/src/test/java/org/jboss/test/osgi/resolver/ResolverSmokeTest.java 2009-11-19 13:46:19 UTC (rev 96566)
@@ -32,7 +32,7 @@
import org.jboss.osgi.framework.bundle.OSGiBundleManager;
import org.jboss.osgi.framework.launch.OSGiFramework;
import org.jboss.osgi.framework.plugins.ResolverPlugin;
-import org.jboss.osgi.framework.resolver.Resolvable;
+import org.jboss.osgi.framework.resolver.ResolverBundle;
import org.jboss.osgi.framework.resolver.Resolver;
import org.jboss.osgi.spi.framework.OSGiBootstrap;
import org.jboss.osgi.spi.framework.OSGiBootstrapProvider;
@@ -87,10 +87,10 @@
unresolved.add(bundle);
}
- List<Resolvable> installedBundles = resolver.getBundles();
+ List<ResolverBundle> installedBundles = resolver.getBundles();
assertEquals("All bundles installed", bundlePaths.size(), installedBundles.size());
- List<Resolvable> resolved = resolver.resolve(unresolved);
+ List<ResolverBundle> resolved = resolver.resolve(unresolved);
assertEquals("All bundles resolved", unresolved.size(), resolved.size());
}
finally
Modified: projects/jboss-osgi/trunk/reactor/framework/src/test/resources/META-INF/resolver-rules.drl
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/test/resources/META-INF/resolver-rules.drl 2009-11-19 13:33:05 UTC (rev 96565)
+++ projects/jboss-osgi/trunk/reactor/framework/src/test/resources/META-INF/resolver-rules.drl 2009-11-19 13:46:19 UTC (rev 96566)
@@ -51,12 +51,12 @@
/**************************************************************************************************
* A rule that inserts the ImportPackage facts for newly inserted
-* Resolvable objects.
+* ResolverBundle objects.
*/
-rule "Add ImportPackage for new Resolvable"
-salience 10000
+rule "Add ImportPackage for new ResolverBundle"
+salience 2000
when
- $importer : Resolvable( resolved == false, state == Bundle.INSTALLED )
+ $importer : ResolverBundle( state == Bundle.INSTALLED, resolved == false )
$import : ImportPackage( ) from $importer.importPackages
not ImportPackage( owner == $importer, this == $import )
then
@@ -66,12 +66,12 @@
/**************************************************************************************************
* A rule that inserts the ExportPackage facts for newly inserted
-* Resolvable objects.
+* ResolverBundle objects.
*/
-rule "Add ExportPackage for new Resolvable"
-salience 10000
+rule "Add ExportPackage for new ResolverBundle"
+salience 2000
when
- $exporter : Resolvable( resolved == false, state == Bundle.INSTALLED )
+ $exporter : ResolverBundle( state == Bundle.INSTALLED, resolved == false )
$export : ExportPackage( ) from $exporter.exportPackages
not ExportPackage( owner == $exporter, this == $export )
then
@@ -81,12 +81,12 @@
/**************************************************************************************************
* A rule that inserts the RequiredBundle facts for newly inserted
-* Resolvable objects.
+* ResolverBundle objects.
*/
-rule "Add RequiredBundle for new Resolvable"
-salience 10000
+rule "Add RequiredBundle for new ResolverBundle"
+salience 2000
when
- $importer : Resolvable( resolved == false, state == Bundle.INSTALLED )
+ $importer : ResolverBundle( state == Bundle.INSTALLED, resolved == false )
$reqbundle : RequiredBundle( ) from $importer.requiredBundles
not RequiredBundle( owner == $importer, this == $reqbundle )
then
@@ -94,6 +94,7 @@
insert( $reqbundle );
end
+
/**************************************************************************************************
* A rule that inserts the WireCandidate facts for every combination
* of matching import/export package names.
@@ -116,7 +117,7 @@
* version miss-match.
*/
rule "Retract package version miss-match"
-salience 100
+salience 1000
when
$import : ImportPackage( exporter == null, version != VersionRange.allVersions )
$wc : WireCandidate( importPackage == $import )
@@ -131,7 +132,7 @@
* of the bundle-symbolic-name on the ImportPackage.
*/
rule "Retract bundle symbolic name miss-match"
-salience 100
+salience 1000
when
$import : ImportPackage( exporter == null, bundleSymbolicName != null )
$wc : WireCandidate( importPackage == $import, exportPackage.owner.symbolicName != $import.bundleSymbolicName )
@@ -145,7 +146,7 @@
* of the bundle-version on the ImportPackage.
*/
rule "Retract bundle version miss-match"
-salience 100
+salience 1000
when
$import : ImportPackage( exporter == null, bundleVersion != null )
$wc : WireCandidate( importPackage == $import )
@@ -157,21 +158,37 @@
/**************************************************************************************************
* A rule that retracts a WireCandidate if there is another
+* associated with a higher version on the ExportPackage.
+*/
+rule "Retract WireCandidate to lower version"
+salience 1000
+when
+ $expkeep : ExportPackage( )
+ $wckeep : WireCandidate( exportPackage == $expkeep )
+ $resdel : ResolverBundle( resolved == false )
+ $expdel : ExportPackage( this != $expkeep, owner == $resdel )
+ $wcdel : WireCandidate( importPackage == $wckeep.importPackage, exportPackage == $expdel )
+ eval ( $expkeep.getVersion().compareTo($expdel.getVersion()) > 0 )
+then
+ log("Retract lower version " + $wcdel);
+ retract ( $wcdel );
+end
+
+/**************************************************************************************************
+* A rule that retracts a WireCandidate if there is another
* associated with an already resolved exporter.
*/
rule "Retract WireCandidate to unresolved exporter"
-salience 100
+salience 200
when
- $importer : Resolvable( resolved == false )
- $import : ImportPackage( owner == $importer, exporter == null )
- $reskeep : Resolvable( resolved == true )
+ $reskeep : ResolverBundle( resolved == true )
$expkeep : ExportPackage( owner == $reskeep )
- $wckeep : WireCandidate( importPackage == $import, exportPackage == $expkeep )
- $resdel : Resolvable( resolved == false )
+ $wckeep : WireCandidate( exportPackage == $expkeep )
+ $resdel : ResolverBundle( resolved == false )
$expdel : ExportPackage( this != $expkeep, owner == $resdel )
- $wcdel : WireCandidate( importPackage == $import, exportPackage == $expdel )
+ $wcdel : WireCandidate( importPackage == $wckeep.importPackage, exportPackage == $expdel )
then
- log("Restract unresolved exporter " + $wcdel);
+ log("Retract unresolved exporter " + $wcdel);
retract ( $wcdel );
end
@@ -181,7 +198,7 @@
rule "RequiredBundle match on bundle-symbolic-name only"
salience 100
when
- $provider : Resolvable( )
+ $provider : ResolverBundle( )
$reqbundle : RequiredBundle( symbolicName == $provider.symbolicName, version == null, provider == null )
then
log("RequiredBundle match " + $reqbundle + " --> " + $provider);
@@ -195,7 +212,7 @@
rule "RequiredBundle match on bundle-symbolic-name and bundle-version"
salience 100
when
- $provider : Resolvable( )
+ $provider : ResolverBundle( )
$reqbundle : RequiredBundle( symbolicName == $provider.symbolicName, version != null, provider == null )
eval( inRange( $reqbundle.getVersion(), $provider.getVersion()))
then
@@ -211,9 +228,9 @@
rule "Wire to resolved exporter"
salience 50
when
- $importer : Resolvable( resolved == false )
+ $importer : ResolverBundle( resolved == false )
$import : ImportPackage( owner == $importer, exporter == null )
- $exporter : Resolvable( resolved == true )
+ $exporter : ResolverBundle( resolved == true )
$export : ExportPackage( owner == $exporter )
$wc : WireCandidate( importPackage == $import, exportPackage == $export )
not( WireCandidate( this != $wc, importPackage == $import ) )
@@ -242,16 +259,16 @@
end
/**************************************************************************************************
-* A rule that marks the Resolvable as resolved on the condition that
+* A rule that marks the ResolverBundle as resolved on the condition that
*
-* # All ImportPackage wire to an exporter
+* # There are no ImportPackages
* # All non-optional RequiredBundles have a provider
*/
rule "Resolve required imports"
salience 20
when
- $importer : Resolvable( state != Bundle.UNINSTALLED, resolved == false )
- not( ImportPackage( owner == $importer, exporter == null ))
+ $importer : ResolverBundle( state != Bundle.UNINSTALLED, resolved == false )
+ not( ImportPackage( owner == $importer ))
not( RequiredBundle( owner == $importer, optional == false, provider == null ))
then
log("Resolved " + $importer);
@@ -259,14 +276,14 @@
end
/**************************************************************************************************
-* A rule that marks the Resolvable as resolved on the condition that
+* A rule that marks the ResolverBundle as resolved on the condition that
*
* # All non-optional ImportPackage wire to an exporter
* # All non-optional RequiredBundles have a provider
*/
rule "Resolve optional imports"
when
- $importer : Resolvable( state != Bundle.UNINSTALLED, resolved == false )
+ $importer : ResolverBundle( state != Bundle.UNINSTALLED, resolved == false )
not( ImportPackage( owner == $importer, optional == false, exporter == null ))
not( RequiredBundle( owner == $importer, optional == false, provider == null ))
then
@@ -279,7 +296,7 @@
*/
rule "Retract uninstalled ImportPackage"
when
- $importer : Resolvable( state == Bundle.UNINSTALLED )
+ $importer : ResolverBundle( state == Bundle.UNINSTALLED )
$import : ImportPackage( owner == $importer )
then
log("Uninstall " + $import);
@@ -291,7 +308,7 @@
*/
rule "Retract uninstalled ExportPackage"
when
- $exporter : Resolvable( state == Bundle.UNINSTALLED )
+ $exporter : ResolverBundle( state == Bundle.UNINSTALLED )
$export : ExportPackage( owner == $exporter )
then
log("Uninstall " + $export);
@@ -323,11 +340,11 @@
end
/**************************************************************************************************
-* A rule that retracts RequiredBundles facts for UNINSTALLED Resolvables
+* A rule that retracts RequiredBundles facts for UNINSTALLED ResolverBundles
*/
rule "Retract uninstalled RequiredBundles"
when
- $importer : Resolvable( state == Bundle.UNINSTALLED )
+ $importer : ResolverBundle( state == Bundle.UNINSTALLED )
$reqbundle : RequiredBundle( owner == $importer )
then
log("Uninstall " + $reqbundle);
Copied: projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/packageexportversion100 (from rev 96553, projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/packageexportversion)
Modified: projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/packageexportversion100/META-INF/MANIFEST.MF
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/packageexportversion/META-INF/MANIFEST.MF 2009-11-19 07:09:26 UTC (rev 96553)
+++ projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/packageexportversion100/META-INF/MANIFEST.MF 2009-11-19 13:46:19 UTC (rev 96566)
@@ -1,3 +1,3 @@
Bundle-ManifestVersion: 2
-Bundle-SymbolicName: packageexportversion
+Bundle-SymbolicName: packageexportversion100
Export-Package: org.jboss.test.osgi.classloader.support.a;version=1.0.0
Added: projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/packageexportversion200/META-INF/MANIFEST.MF
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/packageexportversion200/META-INF/MANIFEST.MF (rev 0)
+++ projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/packageexportversion200/META-INF/MANIFEST.MF 2009-11-19 13:46:19 UTC (rev 96566)
@@ -0,0 +1,3 @@
+Bundle-ManifestVersion: 2
+Bundle-SymbolicName: packageexportversion200
+Export-Package: org.jboss.test.osgi.classloader.support.a;version=2.0.0
14 years, 7 months
JBoss-OSGI SVN: r96555 - projects/jboss-osgi/trunk/reactor/framework/src/test/resources/META-INF.
by jboss-osgi-commits@lists.jboss.org
Author: thomas.diesler(a)jboss.com
Date: 2009-11-19 05:00:29 -0500 (Thu, 19 Nov 2009)
New Revision: 96555
Modified:
projects/jboss-osgi/trunk/reactor/framework/src/test/resources/META-INF/resolver-rules.drl
Log:
Prefer wire to resolved exporter
Modified: projects/jboss-osgi/trunk/reactor/framework/src/test/resources/META-INF/resolver-rules.drl
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/test/resources/META-INF/resolver-rules.drl 2009-11-19 09:56:32 UTC (rev 96554)
+++ projects/jboss-osgi/trunk/reactor/framework/src/test/resources/META-INF/resolver-rules.drl 2009-11-19 10:00:29 UTC (rev 96555)
@@ -41,7 +41,7 @@
*/
function void log(String message)
{
- // System.out.println(message);
+ //System.out.println(message);
}
# Types ###########################################################################################
@@ -56,9 +56,9 @@
rule "Add ImportPackage for new Resolvable"
salience 10000
when
- $owner : Resolvable( resolved == false, state == Bundle.INSTALLED )
- $import : ImportPackage( ) from $owner.importPackages
- not ImportPackage( owner == $owner, this == $import )
+ $importer : Resolvable( resolved == false, state == Bundle.INSTALLED )
+ $import : ImportPackage( ) from $importer.importPackages
+ not ImportPackage( owner == $importer, this == $import )
then
log("Add " + $import);
insert( $import );
@@ -71,9 +71,9 @@
rule "Add ExportPackage for new Resolvable"
salience 10000
when
- $owner : Resolvable( resolved == false, state == Bundle.INSTALLED )
- $export : ExportPackage( ) from $owner.exportPackages
- not ExportPackage( owner == $owner, this == $export )
+ $exporter : Resolvable( resolved == false, state == Bundle.INSTALLED )
+ $export : ExportPackage( ) from $exporter.exportPackages
+ not ExportPackage( owner == $exporter, this == $export )
then
log("Add " + $export);
insert( $export );
@@ -86,9 +86,9 @@
rule "Add RequiredBundle for new Resolvable"
salience 10000
when
- $owner : Resolvable( resolved == false, state == Bundle.INSTALLED )
- $reqbundle : RequiredBundle( ) from $owner.requiredBundles
- not RequiredBundle( owner == $owner, this == $reqbundle )
+ $importer : Resolvable( resolved == false, state == Bundle.INSTALLED )
+ $reqbundle : RequiredBundle( ) from $importer.requiredBundles
+ not RequiredBundle( owner == $importer, this == $reqbundle )
then
log("Add " + $reqbundle);
insert( $reqbundle );
@@ -162,8 +162,8 @@
rule "Retract WireCandidate to unresolved exporter"
salience 100
when
- $owner : Resolvable( resolved == false )
- $import : ImportPackage( owner == $owner, exporter == null )
+ $importer : Resolvable( resolved == false )
+ $import : ImportPackage( owner == $importer, exporter == null )
$reskeep : Resolvable( resolved == true )
$expkeep : ExportPackage( owner == $reskeep )
$wckeep : WireCandidate( importPackage == $import, exportPackage == $expkeep )
@@ -205,41 +205,82 @@
/**************************************************************************************************
* A rule that applies the WireCandidate if there is only one
-* possible WireCandidate left that refers to an ImportPackage.
+* possible WireCandidate left associated with an ImportPackage.
+* The exporter must be resolved.
*/
-rule "Use WireCandidate"
+rule "Wire to resolved exporter"
+salience 50
when
- $owner : Resolvable( resolved == false )
- $import : ImportPackage( owner == $owner, exporter == null )
- $wc : WireCandidate( importPackage == $import )
+ $importer : Resolvable( resolved == false )
+ $import : ImportPackage( owner == $importer, exporter == null )
+ $exporter : Resolvable( resolved == true )
+ $export : ExportPackage( owner == $exporter )
+ $wc : WireCandidate( importPackage == $import, exportPackage == $export )
not( WireCandidate( this != $wc, importPackage == $import ) )
then
- log("Use " + $wc);
+ log("Wire to resolved exporter " + $wc);
modify ( $import ) { setExporter( $wc.getExportPackage() ) };
retract ( $wc );
end
/**************************************************************************************************
-* A rule that marks the Resolvable as resolved if there
-* is no more ImportPackage that is not wired to an ExportPackage.
+* A rule that applies the WireCandidate if there is only one
+* possible WireCandidate left associated with an ImportPackage.
+* The exporter is also the importer.
*/
-rule "Mark resolved"
+rule "Wire self import"
+salience 50
when
- $owner : Resolvable( state != Bundle.UNINSTALLED, resolved == false )
- not( ImportPackage( owner == $owner, optional == false, exporter == null ))
- not( RequiredBundle( owner == $owner, optional == false, provider == null ))
+ $import : ImportPackage( exporter == null )
+ $export : ExportPackage( owner == $import.owner )
+ $wc : WireCandidate( importPackage == $import, exportPackage == $export )
+ not( WireCandidate( this != $wc, importPackage == $import ) )
then
- log("Resolved " + $owner);
- modify ( $owner ) { markResolved ( ) };
+ log("Wire self import " + $wc);
+ modify ( $import ) { setExporter( $wc.getExportPackage() ) };
+ retract ( $wc );
end
/**************************************************************************************************
+* A rule that marks the Resolvable as resolved on the condition that
+*
+* # All ImportPackage wire to an exporter
+* # All non-optional RequiredBundles have a provider
+*/
+rule "Resolve required imports"
+salience 20
+when
+ $importer : Resolvable( state != Bundle.UNINSTALLED, resolved == false )
+ not( ImportPackage( owner == $importer, exporter == null ))
+ not( RequiredBundle( owner == $importer, optional == false, provider == null ))
+then
+ log("Resolved " + $importer);
+ modify ( $importer ) { markResolved ( ) };
+end
+
+/**************************************************************************************************
+* A rule that marks the Resolvable as resolved on the condition that
+*
+* # All non-optional ImportPackage wire to an exporter
+* # All non-optional RequiredBundles have a provider
+*/
+rule "Resolve optional imports"
+when
+ $importer : Resolvable( state != Bundle.UNINSTALLED, resolved == false )
+ not( ImportPackage( owner == $importer, optional == false, exporter == null ))
+ not( RequiredBundle( owner == $importer, optional == false, provider == null ))
+then
+ log("Resolved " + $importer);
+ modify ( $importer ) { markResolved ( ) };
+end
+
+/**************************************************************************************************
* A rule that retracts ImportPackage facts for UNINSTALLED bundles
*/
rule "Retract uninstalled ImportPackage"
when
- $owner : Resolvable( state == Bundle.UNINSTALLED )
- $import : ImportPackage( owner == $owner )
+ $importer : Resolvable( state == Bundle.UNINSTALLED )
+ $import : ImportPackage( owner == $importer )
then
log("Uninstall " + $import);
retract ( $import );
@@ -250,8 +291,8 @@
*/
rule "Retract uninstalled ExportPackage"
when
- $owner : Resolvable( state == Bundle.UNINSTALLED )
- $export : ExportPackage( owner == $owner )
+ $exporter : Resolvable( state == Bundle.UNINSTALLED )
+ $export : ExportPackage( owner == $exporter )
then
log("Uninstall " + $export);
retract ( $export );
@@ -286,8 +327,8 @@
*/
rule "Retract uninstalled RequiredBundles"
when
- $owner : Resolvable( state == Bundle.UNINSTALLED )
- $reqbundle : RequiredBundle( owner == $owner )
+ $importer : Resolvable( state == Bundle.UNINSTALLED )
+ $reqbundle : RequiredBundle( owner == $importer )
then
log("Uninstall " + $reqbundle);
retract ( $reqbundle );
14 years, 7 months
JBoss-OSGI SVN: r96547 - in projects/jboss-osgi/trunk/hudson/hudson-home: jobs/JBoss-5.2.0 and 1 other directory.
by jboss-osgi-commits@lists.jboss.org
Author: thomas.diesler(a)jboss.com
Date: 2009-11-19 01:12:45 -0500 (Thu, 19 Nov 2009)
New Revision: 96547
Modified:
projects/jboss-osgi/trunk/hudson/hudson-home/command.sh
projects/jboss-osgi/trunk/hudson/hudson-home/jobs/JBoss-5.2.0/config.xml
Log:
Update AS52 version
Modified: projects/jboss-osgi/trunk/hudson/hudson-home/command.sh
===================================================================
--- projects/jboss-osgi/trunk/hudson/hudson-home/command.sh 2009-11-19 05:35:59 UTC (rev 96546)
+++ projects/jboss-osgi/trunk/hudson/hudson-home/command.sh 2009-11-19 06:12:45 UTC (rev 96547)
@@ -33,7 +33,7 @@
;;
'jboss520')
SERVER_NAME=default
- JBOSS_BUILD=jboss-5.2.0.Beta1
+ JBOSS_BUILD=jboss-6.0.0.M1
JBOSS_ZIP=$HUDSON_HOME/../jboss/$JBOSS_BUILD.zip
RUNTIME_HOME=$WORKSPACE/$JBOSS_BUILD
RUNTIME_LOG=$RUNTIME_HOME/server/$SERVER_NAME/log/server.log
Modified: projects/jboss-osgi/trunk/hudson/hudson-home/jobs/JBoss-5.2.0/config.xml
===================================================================
--- projects/jboss-osgi/trunk/hudson/hudson-home/jobs/JBoss-5.2.0/config.xml 2009-11-19 05:35:59 UTC (rev 96546)
+++ projects/jboss-osgi/trunk/hudson/hudson-home/jobs/JBoss-5.2.0/config.xml 2009-11-19 06:12:45 UTC (rev 96547)
@@ -37,7 +37,7 @@
HUDSONDIR=$OSGIDIR/hudson
HUDSONBIN=$HUDSONDIR/hudson-home/bin
-JBOSS_VERSION=jboss-5.2.0.Beta1
+JBOSS_VERSION=jboss-6.0.0.M1
SERVER_NAME=default
JBOSS_HOME=$WORKSPACE/jbossas/build/output/$JBOSS_VERSION
@@ -83,4 +83,4 @@
</builders>
<publishers/>
<buildWrappers/>
-</project>
\ No newline at end of file
+</project>
14 years, 7 months
JBoss-OSGI SVN: r96469 - projects/jboss-osgi/trunk/reactor/framework/src/test/resources/META-INF.
by jboss-osgi-commits@lists.jboss.org
Author: thomas.diesler(a)jboss.com
Date: 2009-11-17 16:36:08 -0500 (Tue, 17 Nov 2009)
New Revision: 96469
Modified:
projects/jboss-osgi/trunk/reactor/framework/src/test/resources/META-INF/resolver-rules.drl
Log:
Retract WireCandidate to unresolved exporte
Modified: projects/jboss-osgi/trunk/reactor/framework/src/test/resources/META-INF/resolver-rules.drl
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/test/resources/META-INF/resolver-rules.drl 2009-11-17 20:16:38 UTC (rev 96468)
+++ projects/jboss-osgi/trunk/reactor/framework/src/test/resources/META-INF/resolver-rules.drl 2009-11-17 21:36:08 UTC (rev 96469)
@@ -156,6 +156,26 @@
end
/**************************************************************************************************
+* A rule that retracts a WireCandidate if there is another
+* associated with an already resolved exporter.
+*/
+rule "Retract WireCandidate to unresolved exporter"
+salience 100
+when
+ $owner : Resolvable( resolved == false )
+ $import : ImportPackage( owner == $owner, exporter == null )
+ $reskeep : Resolvable( resolved == true )
+ $expkeep : ExportPackage( owner == $reskeep )
+ $wckeep : WireCandidate( importPackage == $import, exportPackage == $expkeep )
+ $resdel : Resolvable( resolved == false )
+ $expdel : ExportPackage( this != $expkeep, owner == $resdel )
+ $wcdel : WireCandidate( importPackage == $import, exportPackage == $expdel )
+then
+ log("Restract unresolved exporter " + $wcdel);
+ retract ( $wcdel );
+end
+
+/**************************************************************************************************
* A rule that sets the provider for a RequiredBundle if there is a match
*/
rule "RequiredBundle match on bundle-symbolic-name only"
@@ -200,23 +220,6 @@
end
/**************************************************************************************************
-* A rule that applies the WireCandidate if there is an already
-* resolved exporter.
-*/
-rule "Use WireCandidate to resolved exporter"
-when
- $importer : Resolvable( resolved == false )
- $import : ImportPackage( owner == $importer, exporter == null )
- $exporter : Resolvable( resolved == true )
- $export : ExportPackage( owner == $exporter )
- $wc : WireCandidate( importPackage == $import, exportPackage == $export )
-then
- log("Use resolved exporter " + $wc);
- modify ( $wc.getImportPackage() ) { setExporter( $wc.getExportPackage() ) };
- retract ( $wc );
-end
-
-/**************************************************************************************************
* A rule that marks the Resolvable as resolved if there
* is no more ImportPackage that is not wired to an ExportPackage.
*/
14 years, 7 months
JBoss-OSGI SVN: r96465 - in projects/jboss-osgi/trunk/reactor/framework/src: main/java/org/jboss/osgi/framework/resolver/internal/drools and 10 other directories.
by jboss-osgi-commits@lists.jboss.org
Author: thomas.diesler(a)jboss.com
Date: 2009-11-17 13:15:51 -0500 (Tue, 17 Nov 2009)
New Revision: 96465
Added:
projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/packageexportversion/
projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/packageimportoptional/
projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/packageimportversion/
projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/packageimportversionfails/
projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/simpleexportsecond/
projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/simpleexportsecond/META-INF/
projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/simpleexportsecond/META-INF/MANIFEST.MF
Removed:
projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/bundlenameexport/
projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/optionalimportpackage/
projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/versionexportpackage/
projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/versionimportpackage/
projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/versionimportpackagefails/
Modified:
projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/ExportPackageImpl.java
projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/ImportPackageImpl.java
projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/ResolvableImpl.java
projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/drools/WireCandidate.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/resources/META-INF/resolver-rules.drl
projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/bundlenameimport/META-INF/MANIFEST.MF
projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/packageexportversion/META-INF/MANIFEST.MF
projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/packageimportoptional/META-INF/MANIFEST.MF
projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/packageimportversion/META-INF/MANIFEST.MF
projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/packageimportversionfails/META-INF/MANIFEST.MF
Log:
Support Require-Bundle. Use wire preferrence to already resolved bundle
Modified: projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/ExportPackageImpl.java
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/ExportPackageImpl.java 2009-11-17 17:54:23 UTC (rev 96464)
+++ projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/ExportPackageImpl.java 2009-11-17 18:15:51 UTC (rev 96465)
@@ -106,8 +106,14 @@
importers.remove(importer);
}
+ public String toShortString()
+ {
+ ResolvableImpl owner = (ResolvableImpl)getOwner();
+ return owner.toShortString() + super.toShortString();
+ }
+
public String toString()
{
- return "ExportPackage" + toShortString();
+ return "ExportPackage[" + toShortString() + "]";
}
}
\ No newline at end of file
Modified: projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/ImportPackageImpl.java
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/ImportPackageImpl.java 2009-11-17 17:54:23 UTC (rev 96464)
+++ projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/ImportPackageImpl.java 2009-11-17 18:15:51 UTC (rev 96465)
@@ -87,8 +87,14 @@
}
+ public String toShortString()
+ {
+ ResolvableImpl owner = (ResolvableImpl)getOwner();
+ return owner.toShortString() + super.toShortString();
+ }
+
public String toString()
{
- return "ImportPackage" + toShortString();
+ return "ImportPackage[" + toShortString() + "]";
}
}
\ No newline at end of file
Modified: projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/ResolvableImpl.java
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/ResolvableImpl.java 2009-11-17 17:54:23 UTC (rev 96464)
+++ projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/ResolvableImpl.java 2009-11-17 18:15:51 UTC (rev 96465)
@@ -162,9 +162,14 @@
return metaData.isSingleton();
}
+ public String toShortString()
+ {
+ return getSymbolicName() + "-" + getVersion();
+ }
+
@Override
public String toString()
{
- return "Resolvable[" + getSymbolicName() + "-" + getVersion() + "]";
+ return "Resolvable[" + toShortString() + "]";
}
}
\ No newline at end of file
Modified: projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/drools/WireCandidate.java
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/drools/WireCandidate.java 2009-11-17 17:54:23 UTC (rev 96464)
+++ projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/drools/WireCandidate.java 2009-11-17 18:15:51 UTC (rev 96465)
@@ -23,7 +23,6 @@
import org.jboss.osgi.framework.resolver.ExportPackage;
import org.jboss.osgi.framework.resolver.ImportPackage;
-import org.jboss.osgi.framework.resolver.Resolvable;
import org.jboss.osgi.framework.resolver.internal.ExportPackageImpl;
import org.jboss.osgi.framework.resolver.internal.ImportPackageImpl;
@@ -61,11 +60,7 @@
@Override
public String toString()
{
- Resolvable impOwner = importPackage.getOwner();
- String importer = impOwner.getSymbolicName() + "-" + impOwner.getVersion() + importPackage.toShortString();
- Resolvable expOwner = exportPackage.getOwner();
- String exporter = expOwner.getSymbolicName() + "-" + expOwner.getVersion() + exportPackage.toShortString();
- return "WireCandidate[" + importer + "] --> [" + exporter + "]";
+ return "WireCandidate[" + importPackage.toShortString() + " --> " + exportPackage.toShortString() + "]";
}
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-17 17:54:23 UTC (rev 96464)
+++ projects/jboss-osgi/trunk/reactor/framework/src/test/java/org/jboss/test/osgi/resolver/AbstractImportExportTest.java 2009-11-17 18:15:51 UTC (rev 96465)
@@ -211,15 +211,15 @@
Resolver resolver = getTestResolver();
assertEquals("No bundles in resolver", 0, resolver.getBundles().size());
- //Bundle-SymbolicName: versionimportpackage
+ //Bundle-SymbolicName: packageimportversion
//Import-Package: org.jboss.test.osgi.classloader.support.a;version="[0.0.0,1.0.0]"
- VirtualFile fileA = assembleBundle("bundleA", "/bundles/resolver/versionimportpackage");
+ VirtualFile fileA = assembleBundle("bundleA", "/bundles/resolver/packageimportversion");
Bundle bundleA = framework.installBundle(fileA);
try
{
- //Bundle-SymbolicName: versionexportpackage
+ //Bundle-SymbolicName: packageexportversion
//Export-Package: org.jboss.test.osgi.classloader.support.a;version=1.0.0
- VirtualFile fileB = assembleBundle("bundleB", "/bundles/resolver/versionexportpackage", A.class);
+ VirtualFile fileB = assembleBundle("bundleB", "/bundles/resolver/packageexportversion", A.class);
Bundle bundleB = framework.installBundle(fileB);
try
{
@@ -259,15 +259,15 @@
Resolver resolver = getTestResolver();
assertEquals("No bundles in resolver", 0, resolver.getBundles().size());
- //Bundle-SymbolicName: versionimportpackagefails
+ //Bundle-SymbolicName: packageimportversionfails
//Import-Package: org.jboss.test.osgi.classloader.support.a;version="[3.0,4.0)"
- VirtualFile fileA = assembleBundle("bundleA", "/bundles/resolver/versionimportpackagefails");
+ VirtualFile fileA = assembleBundle("bundleA", "/bundles/resolver/packageimportversionfails");
Bundle bundleA = framework.installBundle(fileA);
try
{
- //Bundle-SymbolicName: versionexportpackage
+ //Bundle-SymbolicName: packageexportversion
//Export-Package: org.jboss.test.osgi.classloader.support.a;version=1.0.0
- VirtualFile fileB = assembleBundle("bundleB", "/bundles/resolver/versionexportpackage", A.class);
+ VirtualFile fileB = assembleBundle("bundleB", "/bundles/resolver/packageexportversion", A.class);
Bundle bundleB = framework.installBundle(fileB);
try
{
@@ -307,9 +307,9 @@
Resolver resolver = getTestResolver();
assertEquals("No bundles in resolver", 0, resolver.getBundles().size());
- //Bundle-SymbolicName: optionalimportpackage
+ //Bundle-SymbolicName: packageimportoptional
//Import-Package: org.jboss.test.osgi.classloader.support.a;resolution:=optional
- VirtualFile fileA = assembleBundle("bundleA", "/bundles/resolver/optionalimportpackage");
+ VirtualFile fileA = assembleBundle("bundleA", "/bundles/resolver/packageimportoptional");
Bundle bundleA = framework.installBundle(fileA);
try
{
@@ -338,9 +338,9 @@
Resolver resolver = getTestResolver();
assertEquals("No bundles in resolver", 0, resolver.getBundles().size());
- //Bundle-SymbolicName: optionalimportpackage
+ //Bundle-SymbolicName: packageimportoptional
//Import-Package: org.jboss.test.osgi.classloader.support.a;resolution:=optional
- VirtualFile fileA = assembleBundle("bundleA", "/bundles/resolver/optionalimportpackage");
+ VirtualFile fileA = assembleBundle("bundleA", "/bundles/resolver/packageimportoptional");
Bundle bundleA = framework.installBundle(fileA);
try
{
@@ -386,9 +386,9 @@
Resolver resolver = getTestResolver();
assertEquals("No bundles in resolver", 0, resolver.getBundles().size());
- //Bundle-SymbolicName: optionalimportpackage
+ //Bundle-SymbolicName: packageimportoptional
//Import-Package: org.jboss.test.osgi.classloader.support.a;resolution:=optional
- VirtualFile fileA = assembleBundle("bundleA", "/bundles/resolver/optionalimportpackage");
+ VirtualFile fileA = assembleBundle("bundleA", "/bundles/resolver/packageimportoptional");
Bundle bundleA = framework.installBundle(fileA);
try
{
@@ -438,14 +438,14 @@
assertEquals("No bundles in resolver", 0, resolver.getBundles().size());
//Bundle-SymbolicName: bundlenameimport
- //Import-Package: org.jboss.test.osgi.classloader.support.a;bundle-symbolic-name=bundlenameexport
+ //Import-Package: org.jboss.test.osgi.classloader.support.a;bundle-symbolic-name=simpleexport
VirtualFile fileA = assembleBundle("bundleA", "/bundles/resolver/bundlenameimport");
Bundle bundleA = framework.installBundle(fileA);
try
{
- //Bundle-SymbolicName: bundlenameexport
+ //Bundle-SymbolicName: simpleexport
//Export-Package: org.jboss.test.osgi.classloader.support.a
- VirtualFile fileB = assembleBundle("bundleB", "/bundles/resolver/bundlenameexport", A.class);
+ VirtualFile fileB = assembleBundle("bundleB", "/bundles/resolver/simpleexport", A.class);
Bundle bundleB = framework.installBundle(fileB);
try
{
@@ -486,14 +486,14 @@
assertEquals("No bundles in resolver", 0, resolver.getBundles().size());
//Bundle-SymbolicName: bundlenameimport
- //Import-Package: org.jboss.test.osgi.classloader.support.a;bundle-symbolic-name=bundlenameexport
+ //Import-Package: org.jboss.test.osgi.classloader.support.a;bundle-symbolic-name=simpleexport
VirtualFile fileA = assembleBundle("bundleA", "/bundles/resolver/bundlenameimport");
Bundle bundleA = framework.installBundle(fileA);
try
{
- // Bundle-SymbolicName: simpleexport
- // Export-Package: org.jboss.test.osgi.classloader.support.a
- VirtualFile fileB = assembleBundle("bundleB", "/bundles/resolver/simpleexport", A.class);
+ //Bundle-SymbolicName: sigleton;singleton:=true
+ //Export-Package: org.jboss.test.osgi.classloader.support.a
+ VirtualFile fileB = assembleBundle("bundleB", "/bundles/resolver/singleton", A.class);
Bundle bundleB = framework.installBundle(fileB);
try
{
@@ -694,12 +694,289 @@
}
}
+ @Test
+ public void testRequireBundleOptional() throws Exception
+ {
+ Resolver resolver = getTestResolver();
+ assertEquals("No bundles in resolver", 0, resolver.getBundles().size());
+
+ //Bundle-SymbolicName: requirebundleoptional
+ //Require-Bundle: simpleexport;resolution:=optional
+ VirtualFile fileA = assembleBundle("bundleA", "/bundles/resolver/requirebundleoptional");
+ Bundle bundleA = framework.installBundle(fileA);
+ try
+ {
+ // Resolve the installed bundles
+ resolver.resolve(null);
+
+ // Verify resolvable for bundleA
+ Resolvable resolvableA = resolver.getBundle(bundleA);
+ assertTrue("BundleA resolved", resolvableA.isResolved());
+ }
+ finally
+ {
+ bundleA.uninstall();
+ }
+ }
+
+ @Test
+ public void testRequireBundleVersion() throws Exception
+ {
+ Resolver resolver = getTestResolver();
+ assertEquals("No bundles in resolver", 0, resolver.getBundles().size());
+
+ //Bundle-SymbolicName: requirebundleversion
+ //Require-Bundle: simpleexport;bundle-version="[0.0.0,1.0.0]"
+ VirtualFile fileA = assembleBundle("bundleA", "/bundles/resolver/requirebundleversion");
+ Bundle bundleA = framework.installBundle(fileA);
+ try
+ {
+ // Bundle-SymbolicName: simpleexport
+ // Export-Package: org.jboss.test.osgi.classloader.support.a
+ VirtualFile fileB = assembleBundle("bundleB", "/bundles/resolver/simpleexport", A.class);
+ Bundle bundleB = framework.installBundle(fileB);
+ try
+ {
+ // Resolve the installed bundles
+ resolver.resolve(null);
+
+ // Verify resolvable for bundleA
+ Resolvable resolvableA = resolver.getBundle(bundleA);
+ assertTrue("BundleA resolved", resolvableA.isResolved());
+
+ // Verify resolvable for bundleB
+ Resolvable resolvableB = resolver.getBundle(bundleB);
+ assertTrue("BundleB resolved", resolvableB.isResolved());
+ }
+ finally
+ {
+ bundleB.uninstall();
+ }
+ }
+ finally
+ {
+ bundleA.uninstall();
+ }
+ }
+
+ @Test
+ public void testRequireBundleVersionFails() throws Exception
+ {
+ Resolver resolver = getTestResolver();
+ assertEquals("No bundles in resolver", 0, resolver.getBundles().size());
+
+ //Bundle-SymbolicName: versionrequirebundlefails
+ //Require-Bundle: simpleexport;bundle-version="[1.0.0,2.0.0)"
+ VirtualFile fileA = assembleBundle("bundleA", "/bundles/resolver/requirebundleversionfails");
+ Bundle bundleA = framework.installBundle(fileA);
+ try
+ {
+ // Bundle-SymbolicName: simpleexport
+ // Export-Package: org.jboss.test.osgi.classloader.support.a
+ VirtualFile fileB = assembleBundle("bundleB", "/bundles/resolver/simpleexport", A.class);
+ Bundle bundleB = framework.installBundle(fileB);
+ try
+ {
+ // Resolve the installed bundles
+ resolver.resolve(null);
+
+ // Verify resolvable for bundleA
+ Resolvable resolvableA = resolver.getBundle(bundleA);
+ assertFalse("BundleA not resolved", resolvableA.isResolved());
+
+ // Verify resolvable for bundleB
+ Resolvable resolvableB = resolver.getBundle(bundleB);
+ assertTrue("BundleB resolved", resolvableB.isResolved());
+ }
+ finally
+ {
+ bundleB.uninstall();
+ }
+ }
+ finally
+ {
+ bundleA.uninstall();
+ }
+ }
+
+ @Test
+ public void testResolvedExporterPreferred() throws Exception
+ {
+ Resolver resolver = getTestResolver();
+ assertEquals("No bundles in resolver", 0, resolver.getBundles().size());
+
+ // Bundle-SymbolicName: simpleexport
+ // Export-Package: org.jboss.test.osgi.classloader.support.a
+ VirtualFile fileA = assembleBundle("bundleA", "/bundles/resolver/simpleexport", A.class);
+
+ // Bundle-SymbolicName: simpleexport
+ // Export-Package: org.jboss.test.osgi.classloader.support.a
+ VirtualFile fileB = assembleBundle("bundleB", "/bundles/resolver/simpleexportsecond", A.class);
+
+ // Bundle-SymbolicName: simpleimport
+ // Import-Package: org.jboss.test.osgi.classloader.support.a
+ VirtualFile fileC = assembleBundle("bundleC", "/bundles/resolver/simpleimport");
+
+ Bundle bundleA = framework.installBundle(fileA);
+ try
+ {
+ // Resolve the installed bundles
+ resolver.resolve(null);
+
+ // Verify resolvable for bundleA
+ Resolvable resolvableA = resolver.getBundle(bundleA);
+ assertTrue("BundleA resolved", resolvableA.isResolved());
+
+ Bundle bundleB = framework.installBundle(fileB);
+ try
+ {
+ Bundle bundleC = framework.installBundle(fileC);
+ try
+ {
+ // Resolve the installed bundles
+ resolver.resolve(null);
+
+ // Verify resolvable for bundleB
+ Resolvable resolvableB = resolver.getBundle(bundleB);
+ assertTrue("BundleB resolved", resolvableB.isResolved());
+
+ // Verify resolvable for bundleC
+ Resolvable resolvableC = resolver.getBundle(bundleC);
+ assertTrue("BundleC resolved", resolvableC.isResolved());
+
+ // Verify that bundleC is wired to bundleA
+ ExportPackage exporter = resolver.getExporter(bundleC, A.class.getPackage().getName());
+ assertNotNull("Exporter not null", exporter);
+ assertEquals("Wired to bundleA", bundleA.getSymbolicName(), exporter.getOwner().getSymbolicName());
+ }
+ finally
+ {
+ bundleC.uninstall();
+ }
+ }
+ finally
+ {
+ bundleB.uninstall();
+ }
+ }
+ finally
+ {
+ bundleA.uninstall();
+ }
+ }
+
+ @Test
+ public void testResolvedExporterPreferredReverse() throws Exception
+ {
+ Resolver resolver = getTestResolver();
+ assertEquals("No bundles in resolver", 0, resolver.getBundles().size());
+
+ // Bundle-SymbolicName: simpleexport
+ // Export-Package: org.jboss.test.osgi.classloader.support.a
+ VirtualFile fileA = assembleBundle("bundleA", "/bundles/resolver/simpleexport", A.class);
+
+ // Bundle-SymbolicName: simpleexport
+ // Export-Package: org.jboss.test.osgi.classloader.support.a
+ VirtualFile fileB = assembleBundle("bundleB", "/bundles/resolver/simpleexportsecond", A.class);
+
+ // Bundle-SymbolicName: simpleimport
+ // Import-Package: org.jboss.test.osgi.classloader.support.a
+ VirtualFile fileC = assembleBundle("bundleC", "/bundles/resolver/simpleimport");
+
+ Bundle bundleB = framework.installBundle(fileB);
+ try
+ {
+ // Resolve the installed bundles
+ resolver.resolve(null);
+
+ // Verify resolvable for bundleA
+ Resolvable resolvableB = resolver.getBundle(bundleB);
+ assertTrue("BundleB resolved", resolvableB.isResolved());
+
+ Bundle bundleA = framework.installBundle(fileA);
+ try
+ {
+ Bundle bundleC = framework.installBundle(fileC);
+ try
+ {
+ // Resolve the installed bundles
+ resolver.resolve(null);
+
+ // Verify resolvable for bundleA
+ Resolvable resolvableA = resolver.getBundle(bundleA);
+ assertTrue("BundleA resolved", resolvableA.isResolved());
+
+ // Verify resolvable for bundleC
+ Resolvable resolvableC = resolver.getBundle(bundleC);
+ assertTrue("BundleC resolved", resolvableC.isResolved());
+
+ // Verify that bundleC is wired to bundleB
+ ExportPackage exporter = resolver.getExporter(bundleC, A.class.getPackage().getName());
+ assertNotNull("Exporter not null", exporter);
+ assertEquals("Wired to bundleB", bundleB.getSymbolicName(), exporter.getOwner().getSymbolicName());
+ }
+ finally
+ {
+ bundleC.uninstall();
+ }
+ }
+ finally
+ {
+ bundleA.uninstall();
+ }
+ }
+ finally
+ {
+ bundleB.uninstall();
+ }
+ }
+
@Ignore
+ public void testLogger() throws Exception
+ {
+ Resolver resolver = getTestResolver();
+ assertEquals("No bundles in resolver", 0, resolver.getBundles().size());
+
+ String pathA = getTestArchivePath("bundles/org.osgi.compendium.jar");
+ Bundle bundleA = framework.getBundleContext().installBundle(pathA);
+ try
+ {
+ // Resolve the compendium
+ resolver.resolve(null);
+
+ String pathB = getTestArchivePath("bundles/org.apache.felix.log.jar");
+ Bundle bundleB = framework.getBundleContext().installBundle(pathB);
+ try
+ {
+ // Resolve the logging bundle
+ resolver.resolve(null);
+
+ // Verify resolvable for bundleA
+ Resolvable resolvableA = resolver.getBundle(bundleA);
+ assertTrue("BundleA resolved", resolvableA.isResolved());
+
+ // Verify resolvable for bundleB
+ Resolvable resolvableB = resolver.getBundle(bundleB);
+ assertTrue("BundleB resolved", resolvableB.isResolved());
+
+ }
+ finally
+ {
+ bundleB.uninstall();
+ }
+ }
+ finally
+ {
+ bundleA.uninstall();
+ }
+ }
+
+ @Test
public void testAttributeImportPackage() throws Exception
{
}
- @Ignore
+ @Test
public void testAttributeImportPackageFails() throws Exception
{
}
Modified: projects/jboss-osgi/trunk/reactor/framework/src/test/resources/META-INF/resolver-rules.drl
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/test/resources/META-INF/resolver-rules.drl 2009-11-17 17:54:23 UTC (rev 96464)
+++ projects/jboss-osgi/trunk/reactor/framework/src/test/resources/META-INF/resolver-rules.drl 2009-11-17 18:15:51 UTC (rev 96465)
@@ -158,17 +158,32 @@
/**************************************************************************************************
* A rule that sets the provider for a RequiredBundle if there is a match
*/
-rule "Set RequiredBundle provider on match"
+rule "RequiredBundle match on bundle-symbolic-name only"
salience 100
when
$provider : Resolvable( )
- $reqbundle : RequiredBundle( symbolicName == $provider.symbolicName, provider == null )
+ $reqbundle : RequiredBundle( symbolicName == $provider.symbolicName, version == null, provider == null )
then
log("RequiredBundle match " + $reqbundle + " --> " + $provider);
modify ( $reqbundle ) { setProvider( $provider ) };
end
/**************************************************************************************************
+* A rule that sets the provider for a RequiredBundle if there is a match on
+* bundle-symbolic-name and bundle-version
+*/
+rule "RequiredBundle match on bundle-symbolic-name and bundle-version"
+salience 100
+when
+ $provider : Resolvable( )
+ $reqbundle : RequiredBundle( symbolicName == $provider.symbolicName, version != null, provider == null )
+ eval( inRange( $reqbundle.getVersion(), $provider.getVersion()))
+then
+ log("RequiredBundle match " + $reqbundle + " --> " + $provider);
+ modify ( $reqbundle ) { setProvider( $provider ) };
+end
+
+/**************************************************************************************************
* A rule that applies the WireCandidate if there is only one
* possible WireCandidate left that refers to an ImportPackage.
*/
@@ -180,17 +195,34 @@
not( WireCandidate( this != $wc, importPackage == $import ) )
then
log("Use " + $wc);
+ modify ( $import ) { setExporter( $wc.getExportPackage() ) };
+ retract ( $wc );
+end
+
+/**************************************************************************************************
+* A rule that applies the WireCandidate if there is an already
+* resolved exporter.
+*/
+rule "Use WireCandidate to resolved exporter"
+when
+ $importer : Resolvable( resolved == false )
+ $import : ImportPackage( owner == $importer, exporter == null )
+ $exporter : Resolvable( resolved == true )
+ $export : ExportPackage( owner == $exporter )
+ $wc : WireCandidate( importPackage == $import, exportPackage == $export )
+then
+ log("Use resolved exporter " + $wc);
modify ( $wc.getImportPackage() ) { setExporter( $wc.getExportPackage() ) };
retract ( $wc );
end
/**************************************************************************************************
-* A rule that marls the Resolvable as resolved if there
+* A rule that marks the Resolvable as resolved if there
* is no more ImportPackage that is not wired to an ExportPackage.
*/
rule "Mark resolved"
when
- $owner : Resolvable( resolved == false )
+ $owner : Resolvable( state != Bundle.UNINSTALLED, resolved == false )
not( ImportPackage( owner == $owner, optional == false, exporter == null ))
not( RequiredBundle( owner == $owner, optional == false, provider == null ))
then
@@ -254,7 +286,7 @@
$owner : Resolvable( state == Bundle.UNINSTALLED )
$reqbundle : RequiredBundle( owner == $owner )
then
- log("Unistall " + $reqbundle);
+ log("Uninstall " + $reqbundle);
retract ( $reqbundle );
end
@@ -264,7 +296,7 @@
rule "Report unresolved import"
salience -1000
when
- $import : ImportPackage( exporter == null )
+ $import : ImportPackage( exporter == null, optional == false )
then
log("Unresolved " + $import );
end
Modified: projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/bundlenameimport/META-INF/MANIFEST.MF
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/bundlenameimport/META-INF/MANIFEST.MF 2009-11-17 17:54:23 UTC (rev 96464)
+++ projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/bundlenameimport/META-INF/MANIFEST.MF 2009-11-17 18:15:51 UTC (rev 96465)
@@ -1,3 +1,3 @@
Bundle-ManifestVersion: 2
Bundle-SymbolicName: bundlenameimport
-Import-Package: org.jboss.test.osgi.classloader.support.a;bundle-symbolic-name=bundlenameexport
+Import-Package: org.jboss.test.osgi.classloader.support.a;bundle-symbolic-name=simpleexport
Copied: projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/packageexportversion (from rev 96450, projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/versionexportpackage)
Modified: projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/packageexportversion/META-INF/MANIFEST.MF
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/versionexportpackage/META-INF/MANIFEST.MF 2009-11-16 20:22:45 UTC (rev 96450)
+++ projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/packageexportversion/META-INF/MANIFEST.MF 2009-11-17 18:15:51 UTC (rev 96465)
@@ -1,3 +1,3 @@
Bundle-ManifestVersion: 2
-Bundle-SymbolicName: versionexportpackage
+Bundle-SymbolicName: packageexportversion
Export-Package: org.jboss.test.osgi.classloader.support.a;version=1.0.0
Copied: projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/packageimportoptional (from rev 96450, projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/optionalimportpackage)
Modified: projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/packageimportoptional/META-INF/MANIFEST.MF
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/optionalimportpackage/META-INF/MANIFEST.MF 2009-11-16 20:22:45 UTC (rev 96450)
+++ projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/packageimportoptional/META-INF/MANIFEST.MF 2009-11-17 18:15:51 UTC (rev 96465)
@@ -1,3 +1,3 @@
Bundle-ManifestVersion: 2
-Bundle-SymbolicName: optionalimportpackage
+Bundle-SymbolicName: packageimportoptional
Import-Package: org.jboss.test.osgi.classloader.support.a;resolution:=optional
Copied: projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/packageimportversion (from rev 96450, projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/versionimportpackage)
Modified: projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/packageimportversion/META-INF/MANIFEST.MF
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/versionimportpackage/META-INF/MANIFEST.MF 2009-11-16 20:22:45 UTC (rev 96450)
+++ projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/packageimportversion/META-INF/MANIFEST.MF 2009-11-17 18:15:51 UTC (rev 96465)
@@ -1,3 +1,3 @@
Bundle-ManifestVersion: 2
-Bundle-SymbolicName: versionimportpackage
+Bundle-SymbolicName: packageimportversion
Import-Package: org.jboss.test.osgi.classloader.support.a;version="[0.0.0,1.0.0]"
Copied: projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/packageimportversionfails (from rev 96450, projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/versionimportpackagefails)
Modified: projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/packageimportversionfails/META-INF/MANIFEST.MF
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/versionimportpackagefails/META-INF/MANIFEST.MF 2009-11-16 20:22:45 UTC (rev 96450)
+++ projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/packageimportversionfails/META-INF/MANIFEST.MF 2009-11-17 18:15:51 UTC (rev 96465)
@@ -1,3 +1,3 @@
Bundle-ManifestVersion: 2
-Bundle-SymbolicName: versionimportpackagefails
+Bundle-SymbolicName: versionimportversionfails
Import-Package: org.jboss.test.osgi.classloader.support.a;version="[3.0,4.0)"
Added: projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/simpleexportsecond/META-INF/MANIFEST.MF
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/simpleexportsecond/META-INF/MANIFEST.MF (rev 0)
+++ projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/simpleexportsecond/META-INF/MANIFEST.MF 2009-11-17 18:15:51 UTC (rev 96465)
@@ -0,0 +1,3 @@
+Bundle-ManifestVersion: 2
+Bundle-SymbolicName: simpleexportsecond
+Export-Package: org.jboss.test.osgi.classloader.support.a
14 years, 7 months
JBoss-OSGI SVN: r96452 - in projects/jboss-osgi/trunk/testsuite/functional/src/test/java/org/jboss/test/osgi: jbosgi151 and 1 other directory.
by jboss-osgi-commits@lists.jboss.org
Author: thomas.diesler(a)jboss.com
Date: 2009-11-16 20:52:03 -0500 (Mon, 16 Nov 2009)
New Revision: 96452
Modified:
projects/jboss-osgi/trunk/testsuite/functional/src/test/java/org/jboss/test/osgi/framework/FrameworkTestCase.java
projects/jboss-osgi/trunk/testsuite/functional/src/test/java/org/jboss/test/osgi/jbosgi151/OSGI151TestCase.java
Log:
shutdown framework in @AfterClass
Modified: projects/jboss-osgi/trunk/testsuite/functional/src/test/java/org/jboss/test/osgi/framework/FrameworkTestCase.java
===================================================================
--- projects/jboss-osgi/trunk/testsuite/functional/src/test/java/org/jboss/test/osgi/framework/FrameworkTestCase.java 2009-11-17 01:41:20 UTC (rev 96451)
+++ projects/jboss-osgi/trunk/testsuite/functional/src/test/java/org/jboss/test/osgi/framework/FrameworkTestCase.java 2009-11-17 01:52:03 UTC (rev 96452)
@@ -29,6 +29,7 @@
import org.jboss.osgi.spi.framework.OSGiBootstrap;
import org.jboss.osgi.spi.framework.OSGiBootstrapProvider;
+import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Ignore;
import org.junit.Test;
@@ -53,6 +54,17 @@
framework.start();
}
+ @AfterClass
+ public static void afterClass() throws Exception
+ {
+ if (framework != null)
+ {
+ framework.stop();
+ framework.waitForStop(2000);
+ framework = null;
+ }
+ }
+
@Test
public void testGetBundleId()
{
Modified: projects/jboss-osgi/trunk/testsuite/functional/src/test/java/org/jboss/test/osgi/jbosgi151/OSGI151TestCase.java
===================================================================
--- projects/jboss-osgi/trunk/testsuite/functional/src/test/java/org/jboss/test/osgi/jbosgi151/OSGI151TestCase.java 2009-11-17 01:41:20 UTC (rev 96451)
+++ projects/jboss-osgi/trunk/testsuite/functional/src/test/java/org/jboss/test/osgi/jbosgi151/OSGI151TestCase.java 2009-11-17 01:52:03 UTC (rev 96452)
@@ -28,6 +28,7 @@
import org.jboss.osgi.testing.OSGiTestHelper;
import org.jboss.test.osgi.jbosgi151.bundleA.BeanA;
import org.jboss.test.osgi.jbosgi151.bundleB.BeanB;
+import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Ignore;
import org.junit.Test;
@@ -71,13 +72,14 @@
framework.start();
}
- @BeforeClass
+ @AfterClass
public static void afterClass() throws Exception
{
if (framework != null)
{
framework.stop();
framework.waitForStop(2000);
+ framework = null;
}
}
14 years, 7 months
JBoss-OSGI SVN: r96440 - in projects/jboss-osgi/trunk/reactor/framework/src: main/java/org/jboss/osgi/framework/resolver/internal and 3 other directories.
by jboss-osgi-commits@lists.jboss.org
Author: thomas.diesler(a)jboss.com
Date: 2009-11-16 09:07:55 -0500 (Mon, 16 Nov 2009)
New Revision: 96440
Added:
projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/NamedElement.java
projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/NamedElementImpl.java
Removed:
projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/NamedPackage.java
projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/NamedPackageImpl.java
Modified:
projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/ExportPackage.java
projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/ImportPackage.java
projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/RequiredBundle.java
projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/ExportPackageImpl.java
projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/ImportPackageImpl.java
projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/RequiredBundleImpl.java
projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/ResolvableImpl.java
projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/drools/RuleBasedResolverImpl.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/resources/META-INF/resolver-rules.drl
Log:
Add support for Require-Bundle in drools resolver
Modified: projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/ExportPackage.java
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/ExportPackage.java 2009-11-16 13:22:32 UTC (rev 96439)
+++ projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/ExportPackage.java 2009-11-16 14:07:55 UTC (rev 96440)
@@ -32,7 +32,7 @@
* @author thomas.diesler(a)jboss.com
* @since 09-Nov-2009
*/
-public interface ExportPackage extends NamedPackage
+public interface ExportPackage extends NamedElement
{
/**
* Get the version of this export.
Modified: projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/ImportPackage.java
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/ImportPackage.java 2009-11-16 13:22:32 UTC (rev 96439)
+++ projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/ImportPackage.java 2009-11-16 14:07:55 UTC (rev 96440)
@@ -29,13 +29,8 @@
* @author thomas.diesler(a)jboss.com
* @since 09-Nov-2009
*/
-public interface ImportPackage extends NamedPackage
+public interface ImportPackage extends NamedElement
{
- enum Resolution
- {
- OPTIONAL, MANDATORY
- };
-
/**
* Get the version range for this import package.
*
Copied: projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/NamedElement.java (from rev 96404, projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/NamedPackage.java)
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/NamedElement.java (rev 0)
+++ projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/NamedElement.java 2009-11-16 14:07:55 UTC (rev 96440)
@@ -0,0 +1,62 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.osgi.framework.resolver;
+
+import java.util.Set;
+
+
+/**
+ * A common named element
+ *
+ * @author thomas.diesler(a)jboss.com
+ * @since 09-Nov-2009
+ */
+public interface NamedElement
+{
+ /**
+ * Get the bundle that owns this element
+ *
+ * @return the owner
+ */
+ Resolvable getOwner();
+
+ /**
+ * Get the element name
+ *
+ * @return the name
+ */
+ String getName();
+
+ /**
+ * Get the associated set of arbitrary attributes.
+ * @return An empty list if their are no attributes.
+ */
+ Set<String> getAttributes();
+
+ /**
+ * Get the attribute value for the given key.
+ *
+ * @param key the key
+ * @return The attribute value or null.
+ */
+ Object getAttribute(String key);
+}
\ No newline at end of file
Deleted: projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/NamedPackage.java
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/NamedPackage.java 2009-11-16 13:22:32 UTC (rev 96439)
+++ projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/NamedPackage.java 2009-11-16 14:07:55 UTC (rev 96440)
@@ -1,62 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- * Copyright 2005, JBoss Inc., and individual contributors as indicated
- * by the @authors tag. See the copyright.txt in the distribution for a
- * full listing of individual contributors.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-package org.jboss.osgi.framework.resolver;
-
-import java.util.Set;
-
-
-/**
- * An abstraction of an osgi package declaration.
- *
- * @author thomas.diesler(a)jboss.com
- * @since 09-Nov-2009
- */
-public interface NamedPackage
-{
- /**
- * Get the bundle that owns this package decalaration
- *
- * @return the owner
- */
- Resolvable getOwner();
-
- /**
- * Get the package name
- *
- * @return the name
- */
- String getName();
-
- /**
- * Get the associated set of arbitrary attributes.
- * @return An empty list if their are no attributes.
- */
- Set<String> getAttributes();
-
- /**
- * Get the attribute value for the given key.
- *
- * @param key the key
- * @return The attribute value or null.
- */
- Object getAttribute(String key);
-}
\ No newline at end of file
Modified: projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/RequiredBundle.java
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/RequiredBundle.java 2009-11-16 13:22:32 UTC (rev 96439)
+++ projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/RequiredBundle.java 2009-11-16 14:07:55 UTC (rev 96440)
@@ -29,7 +29,7 @@
* @author thomas.diesler(a)jboss.com
* @since 09-Nov-2009
*/
-public interface RequiredBundle
+public interface RequiredBundle extends NamedElement
{
/**
* Get the bundle's symbolic name.
@@ -51,4 +51,16 @@
* @return null if this attribute is not set
*/
boolean isOptional();
+
+ /**
+ * Get the provider for this bundle requirement
+ *
+ * @return the owner
+ */
+ Resolvable getProvider();
+
+ /**
+ * Set the provider for this bundle requirement
+ */
+ void setProvider(Resolvable provider);
}
\ No newline at end of file
Modified: projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/ExportPackageImpl.java
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/ExportPackageImpl.java 2009-11-16 13:22:32 UTC (rev 96439)
+++ projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/ExportPackageImpl.java 2009-11-16 14:07:55 UTC (rev 96440)
@@ -28,8 +28,8 @@
import java.util.List;
import java.util.Set;
-import org.jboss.osgi.framework.metadata.PackageAttribute;
import org.jboss.osgi.framework.metadata.Parameter;
+import org.jboss.osgi.framework.metadata.ParameterizedAttribute;
import org.jboss.osgi.framework.resolver.ExportPackage;
import org.jboss.osgi.framework.resolver.ImportPackage;
import org.jboss.osgi.framework.resolver.Resolvable;
@@ -42,38 +42,18 @@
* @author thomas.diesler(a)jboss.com
* @since 09-Nov-2009
*/
-public class ExportPackageImpl extends NamedPackageImpl implements ExportPackage
+public class ExportPackageImpl extends NamedElementImpl implements ExportPackage
{
- private PackageAttribute packageMetaData;
private Set<ImportPackage> importers = new HashSet<ImportPackage>();
- public ExportPackageImpl(Resolvable owner, String packageName)
+ public ExportPackageImpl(Resolvable owner, ParameterizedAttribute attr)
{
- super(owner, packageName);
+ super(owner, attr);
}
- @Override
- protected PackageAttribute getPackageMetaData()
- {
- if (packageMetaData == null)
- {
- for (PackageAttribute aux : getMetaData().getExportPackages())
- {
- if (aux.getPackageInfo().getName().equals(getName()))
- {
- packageMetaData = aux;
- break;
- }
- }
- if (packageMetaData == null)
- throw new IllegalStateException("Cannot obtain packageMetaData for: " + getName());
- }
- return packageMetaData;
- }
-
public Version getVersion()
{
- Parameter version = getPackageMetaData().getAttribute(Constants.VERSION_ATTRIBUTE);
+ Parameter version = getParameterizedAttribute().getAttribute(Constants.VERSION_ATTRIBUTE);
return Version.parseVersion(version != null ? version.getValue().toString() : null);
}
@@ -103,7 +83,7 @@
private List<String> getDirectiveValueList(String key)
{
List<String> valueList = new ArrayList<String>();
- Parameter directive = getPackageMetaData().getDirective(key);
+ Parameter directive = getParameterizedAttribute().getDirective(key);
if (directive != null)
{
valueList.addAll((Collection<String>)directive.getValue());
Modified: projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/ImportPackageImpl.java
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/ImportPackageImpl.java 2009-11-16 13:22:32 UTC (rev 96439)
+++ projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/ImportPackageImpl.java 2009-11-16 14:07:55 UTC (rev 96440)
@@ -21,8 +21,8 @@
*/
package org.jboss.osgi.framework.resolver.internal;
-import org.jboss.osgi.framework.metadata.PackageAttribute;
import org.jboss.osgi.framework.metadata.Parameter;
+import org.jboss.osgi.framework.metadata.ParameterizedAttribute;
import org.jboss.osgi.framework.metadata.VersionRange;
import org.jboss.osgi.framework.metadata.internal.AbstractVersionRange;
import org.jboss.osgi.framework.resolver.ExportPackage;
@@ -36,39 +36,19 @@
* @author thomas.diesler(a)jboss.com
* @since 09-Nov-2009
*/
-public class ImportPackageImpl extends NamedPackageImpl implements ImportPackage
+public class ImportPackageImpl extends NamedElementImpl implements ImportPackage
{
- private PackageAttribute packageMetaData;
private ExportPackage exporter;
- public ImportPackageImpl(Resolvable owner, String packageName)
+ public ImportPackageImpl(Resolvable owner, ParameterizedAttribute attr)
{
- super(owner, packageName);
+ super(owner, attr);
}
- @Override
- protected PackageAttribute getPackageMetaData()
- {
- if (packageMetaData == null)
- {
- for (PackageAttribute aux : getMetaData().getImportPackages())
- {
- if (aux.getPackageInfo().getName().equals(getName()))
- {
- packageMetaData = aux;
- break;
- }
- }
- if (packageMetaData == null)
- throw new IllegalStateException("Cannot obtain packageMetaData for: " + getName());
- }
- return packageMetaData;
- }
-
public VersionRange getVersion()
{
VersionRange versionRange = AbstractVersionRange.valueOf("0.0.0");
- Parameter version = getPackageMetaData().getAttribute(Constants.VERSION_ATTRIBUTE);
+ Parameter version = getParameterizedAttribute().getAttribute(Constants.VERSION_ATTRIBUTE);
if (version != null)
versionRange = AbstractVersionRange.valueOf((String)version.getValue());
return versionRange;
@@ -81,14 +61,14 @@
public VersionRange getBundleVersion()
{
- Parameter version = getPackageMetaData().getAttribute(Constants.BUNDLE_VERSION_ATTRIBUTE);
+ Parameter version = getParameterizedAttribute().getAttribute(Constants.BUNDLE_VERSION_ATTRIBUTE);
return (version != null ? AbstractVersionRange.valueOf((String)version.getValue()) : null);
}
public boolean isOptional()
{
boolean optional = false;
- Parameter resolution = getPackageMetaData().getDirective(Constants.RESOLUTION_DIRECTIVE);
+ Parameter resolution = getParameterizedAttribute().getDirective(Constants.RESOLUTION_DIRECTIVE);
if (resolution != null)
optional = Constants.RESOLUTION_OPTIONAL.equals(resolution.getValue());
return optional;
Copied: projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/NamedElementImpl.java (from rev 96430, projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/NamedPackageImpl.java)
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/NamedElementImpl.java (rev 0)
+++ projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/NamedElementImpl.java 2009-11-16 14:07:55 UTC (rev 96440)
@@ -0,0 +1,108 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.osgi.framework.resolver.internal;
+
+import java.util.Map;
+import java.util.Set;
+
+import org.jboss.osgi.framework.bundle.OSGiBundleState;
+import org.jboss.osgi.framework.metadata.OSGiMetaData;
+import org.jboss.osgi.framework.metadata.Parameter;
+import org.jboss.osgi.framework.metadata.ParameterizedAttribute;
+import org.jboss.osgi.framework.resolver.NamedElement;
+import org.jboss.osgi.framework.resolver.Resolvable;
+
+/**
+ * A common named element
+ *
+ * @author thomas.diesler(a)jboss.com
+ * @since 09-Nov-2009
+ */
+abstract class NamedElementImpl implements NamedElement
+{
+ private Resolvable owner;
+ private OSGiMetaData metaData;
+ private ParameterizedAttribute paramattr;
+
+ public NamedElementImpl(Resolvable owner, ParameterizedAttribute attr)
+ {
+ if (owner == null)
+ throw new IllegalArgumentException("Null element owner");
+ if (attr == null)
+ throw new IllegalArgumentException("Null element attribute");
+
+ this.owner = owner;
+ this.paramattr = attr;
+
+ OSGiBundleState bundleState = OSGiBundleState.assertBundleState(owner.getBundle());
+ this.metaData = bundleState.getOSGiMetaData();
+ }
+
+ public Resolvable getOwner()
+ {
+ return owner;
+ }
+
+ public String getName()
+ {
+ return paramattr.getAttribute();
+ }
+
+ protected OSGiMetaData getMetaData()
+ {
+ return metaData;
+ }
+
+ protected ParameterizedAttribute getParameterizedAttribute()
+ {
+ return paramattr;
+ }
+
+ public Set<String> getAttributes()
+ {
+ return getParameterizedAttribute().getAttributes().keySet();
+ }
+
+ public Object getAttribute(String key)
+ {
+ Parameter attr = getParameterizedAttribute().getAttribute(key);
+ return (attr != null ? attr.getValue() : null);
+ }
+
+ private String shortString;
+ public String toShortString()
+ {
+ if (shortString == null)
+ {
+ Map<String, Parameter> attributes = getParameterizedAttribute().getAttributes();
+ Map<String, Parameter> directives = getParameterizedAttribute().getDirectives();
+ StringBuffer buffer = new StringBuffer("[" + getName());
+ for (Map.Entry<String, Parameter> entry : directives.entrySet())
+ buffer.append(";" + entry.getKey() + ":=" + entry.getValue().getValue());
+ for (Map.Entry<String, Parameter> entry : attributes.entrySet())
+ buffer.append(";" + entry.getKey() + "=" + entry.getValue().getValue());
+ buffer.append("]");
+ shortString = buffer.toString();
+ }
+ return shortString;
+ }
+}
\ No newline at end of file
Deleted: projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/NamedPackageImpl.java
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/NamedPackageImpl.java 2009-11-16 13:22:32 UTC (rev 96439)
+++ projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/NamedPackageImpl.java 2009-11-16 14:07:55 UTC (rev 96440)
@@ -1,105 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- * Copyright 2005, JBoss Inc., and individual contributors as indicated
- * by the @authors tag. See the copyright.txt in the distribution for a
- * full listing of individual contributors.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-package org.jboss.osgi.framework.resolver.internal;
-
-import java.util.Map;
-import java.util.Set;
-
-import org.jboss.osgi.framework.bundle.OSGiBundleState;
-import org.jboss.osgi.framework.metadata.OSGiMetaData;
-import org.jboss.osgi.framework.metadata.PackageAttribute;
-import org.jboss.osgi.framework.metadata.Parameter;
-import org.jboss.osgi.framework.resolver.NamedPackage;
-import org.jboss.osgi.framework.resolver.Resolvable;
-
-/**
- * An abstraction of an osgi package declaration.
- *
- * @author thomas.diesler(a)jboss.com
- * @since 09-Nov-2009
- */
-abstract class NamedPackageImpl implements NamedPackage
-{
- private Resolvable owner;
- private String packageName;
- private OSGiMetaData metaData;
-
- public NamedPackageImpl(Resolvable owner, String packageName)
- {
- if (owner == null)
- throw new IllegalArgumentException("Null package owner");
- if (packageName == null)
- throw new IllegalArgumentException("Null packageName");
-
- this.owner = owner;
- this.packageName = packageName;
-
- OSGiBundleState bundleState = OSGiBundleState.assertBundleState(owner.getBundle());
- this.metaData = bundleState.getOSGiMetaData();
- }
-
- public Resolvable getOwner()
- {
- return owner;
- }
-
- public String getName()
- {
- return packageName;
- }
-
- protected OSGiMetaData getMetaData()
- {
- return metaData;
- }
-
- protected abstract PackageAttribute getPackageMetaData();
-
- public Set<String> getAttributes()
- {
- return getPackageMetaData().getAttributes().keySet();
- }
-
- public Object getAttribute(String key)
- {
- Parameter attr = getPackageMetaData().getAttribute(key);
- return (attr != null ? attr.getValue() : null);
- }
-
- private String packageSpec;
- public String toShortString()
- {
- if (packageSpec == null)
- {
- Map<String, Parameter> attributes = getPackageMetaData().getAttributes();
- Map<String, Parameter> directives = getPackageMetaData().getDirectives();
- StringBuffer buffer = new StringBuffer("[" + getName());
- for (Map.Entry<String, Parameter> entry : directives.entrySet())
- buffer.append(";" + entry.getKey() + ":=" + entry.getValue().getValue());
- for (Map.Entry<String, Parameter> entry : attributes.entrySet())
- buffer.append(";" + entry.getKey() + "=" + entry.getValue().getValue());
- buffer.append("]");
- packageSpec = buffer.toString();
- }
- return packageSpec;
- }
-}
\ No newline at end of file
Modified: projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/RequiredBundleImpl.java
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/RequiredBundleImpl.java 2009-11-16 13:22:32 UTC (rev 96439)
+++ projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/RequiredBundleImpl.java 2009-11-16 14:07:55 UTC (rev 96440)
@@ -26,6 +26,7 @@
import org.jboss.osgi.framework.metadata.VersionRange;
import org.jboss.osgi.framework.metadata.internal.AbstractVersionRange;
import org.jboss.osgi.framework.resolver.RequiredBundle;
+import org.jboss.osgi.framework.resolver.Resolvable;
import org.osgi.framework.Constants;
/**
@@ -34,24 +35,25 @@
* @author thomas.diesler(a)jboss.com
* @since 09-Nov-2009
*/
-public class RequiredBundleImpl implements RequiredBundle
+public class RequiredBundleImpl extends NamedElementImpl implements RequiredBundle
{
- private String symbolicName;
- private ParameterizedAttribute attr;
-
- public RequiredBundleImpl(ParameterizedAttribute attr)
+ private Resolvable provider;
+
+ public RequiredBundleImpl(Resolvable owner, ParameterizedAttribute attr)
{
- this.symbolicName = attr.getAttribute();
- this.attr = attr;
+ super(owner, attr);
+ if (getSymbolicName().equals(owner.getSymbolicName()))
+ throw new IllegalArgumentException("Cannot require a bundle with the owner's symbolic name: " + getSymbolicName());
}
public String getSymbolicName()
{
- return symbolicName;
+ return getName();
}
public VersionRange getVersion()
{
+ ParameterizedAttribute attr = getParameterizedAttribute();
String rangeStr = attr.getAttributeValue(Constants.BUNDLE_VERSION_ATTRIBUTE, String.class);
if (rangeStr != null)
return AbstractVersionRange.parseRangeSpec(rangeStr);
@@ -61,9 +63,25 @@
public boolean isOptional()
{
boolean optional = false;
+ ParameterizedAttribute attr = getParameterizedAttribute();
Parameter param = attr.getDirective(Constants.RESOLUTION_DIRECTIVE);
if (param != null)
optional = Constants.RESOLUTION_OPTIONAL.equals(param.getValue());
return optional;
}
+
+ public Resolvable getProvider()
+ {
+ return provider;
+ }
+
+ public void setProvider(Resolvable provider)
+ {
+ this.provider = provider;
+ }
+
+ public String toString()
+ {
+ return "RequiredBundle" + toShortString();
+ }
}
\ No newline at end of file
Modified: projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/ResolvableImpl.java
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/ResolvableImpl.java 2009-11-16 13:22:32 UTC (rev 96439)
+++ projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/ResolvableImpl.java 2009-11-16 14:07:55 UTC (rev 96440)
@@ -65,8 +65,8 @@
{
for (PackageAttribute attr : exportPackages)
{
- String packageName = attr.getPackageInfo().getName();
- exportedPackages.put(packageName, new ExportPackageImpl(this, packageName));
+ String packageName = attr.getAttribute();
+ exportedPackages.put(packageName, new ExportPackageImpl(this, attr));
}
}
@@ -76,8 +76,8 @@
{
for (PackageAttribute attr : importPackages)
{
- String packageName = attr.getPackageInfo().getName();
- importedPackages.put(packageName, new ImportPackageImpl(this, packageName));
+ String packageName = attr.getAttribute();
+ importedPackages.put(packageName, new ImportPackageImpl(this, attr));
}
}
@@ -87,8 +87,9 @@
{
for (ParameterizedAttribute attr : requireBundles)
{
- RequiredBundleImpl req = new RequiredBundleImpl(attr);
- requiredBundles.put(req.getSymbolicName(), req);
+ String symbolicName = attr.getAttribute();
+ RequiredBundleImpl req = new RequiredBundleImpl(this, attr);
+ requiredBundles.put(symbolicName, req);
}
}
}
Modified: projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/drools/RuleBasedResolverImpl.java
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/drools/RuleBasedResolverImpl.java 2009-11-16 13:22:32 UTC (rev 96439)
+++ projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/drools/RuleBasedResolverImpl.java 2009-11-16 14:07:55 UTC (rev 96440)
@@ -118,9 +118,10 @@
{
FactHandle factHandle = ksession.getFactHandle(aux);
if (factHandle == null)
+ {
factHandle = ksession.insert(aux);
-
- facts.put(aux, factHandle);
+ facts.put(aux, factHandle);
+ }
}
// Fire all the rules
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-16 13:22:32 UTC (rev 96439)
+++ projects/jboss-osgi/trunk/reactor/framework/src/test/java/org/jboss/test/osgi/resolver/AbstractImportExportTest.java 2009-11-16 14:07:55 UTC (rev 96440)
@@ -669,7 +669,7 @@
}
}
- @Ignore
+ @Test
public void testRequireBundleFails() throws Exception
{
Resolver resolver = getTestResolver();
@@ -694,12 +694,12 @@
}
}
- @Test
+ @Ignore
public void testAttributeImportPackage() throws Exception
{
}
- @Test
+ @Ignore
public void testAttributeImportPackageFails() throws Exception
{
}
Modified: projects/jboss-osgi/trunk/reactor/framework/src/test/resources/META-INF/resolver-rules.drl
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/test/resources/META-INF/resolver-rules.drl 2009-11-16 13:22:32 UTC (rev 96439)
+++ projects/jboss-osgi/trunk/reactor/framework/src/test/resources/META-INF/resolver-rules.drl 2009-11-16 14:07:55 UTC (rev 96440)
@@ -53,12 +53,12 @@
* A rule that inserts the ImportPackage facts for newly inserted
* Resolvable objects.
*/
-rule "Add import packages for new resolvable"
+rule "Add ImportPackage for new Resolvable"
salience 10000
when
$owner : Resolvable( resolved == false, state == Bundle.INSTALLED )
- $import : ImportPackage( owner == $owner ) from $owner.importPackages
- not ImportPackage( owner == $owner, name == $import.name )
+ $import : ImportPackage( ) from $owner.importPackages
+ not ImportPackage( owner == $owner, this == $import )
then
log("Add " + $import);
insert( $import );
@@ -68,18 +68,33 @@
* A rule that inserts the ExportPackage facts for newly inserted
* Resolvable objects.
*/
-rule "Add export packages for new resolvable"
+rule "Add ExportPackage for new Resolvable"
salience 10000
when
$owner : Resolvable( resolved == false, state == Bundle.INSTALLED )
- $export : ExportPackage( owner == $owner ) from $owner.exportPackages
- not ExportPackage( owner == $owner, name == $export.name )
+ $export : ExportPackage( ) from $owner.exportPackages
+ not ExportPackage( owner == $owner, this == $export )
then
log("Add " + $export);
insert( $export );
end
/**************************************************************************************************
+* A rule that inserts the RequiredBundle facts for newly inserted
+* Resolvable objects.
+*/
+rule "Add RequiredBundle for new Resolvable"
+salience 10000
+when
+ $owner : Resolvable( resolved == false, state == Bundle.INSTALLED )
+ $reqbundle : RequiredBundle( ) from $owner.requiredBundles
+ not RequiredBundle( owner == $owner, this == $reqbundle )
+then
+ log("Add " + $reqbundle);
+ insert( $reqbundle );
+end
+
+/**************************************************************************************************
* A rule that inserts the WireCandidate facts for every combination
* of matching import/export package names.
*/
@@ -141,6 +156,19 @@
end
/**************************************************************************************************
+* A rule that sets the provider for a RequiredBundle if there is a match
+*/
+rule "Set RequiredBundle provider on match"
+salience 100
+when
+ $provider : Resolvable( )
+ $reqbundle : RequiredBundle( symbolicName == $provider.symbolicName, provider == null )
+then
+ log("RequiredBundle match " + $reqbundle + " --> " + $provider);
+ modify ( $reqbundle ) { setProvider( $provider ) };
+end
+
+/**************************************************************************************************
* A rule that applies the WireCandidate if there is only one
* possible WireCandidate left that refers to an ImportPackage.
*/
@@ -164,6 +192,7 @@
when
$owner : Resolvable( resolved == false )
not( ImportPackage( owner == $owner, optional == false, exporter == null ))
+ not( RequiredBundle( owner == $owner, optional == false, provider == null ))
then
log("Resolved " + $owner);
modify ( $owner ) { markResolved ( ) };
@@ -174,8 +203,7 @@
*/
rule "Retract uninstalled ImportPackage"
when
- $owner : Resolvable( )
- eval ( $owner.getState() == Bundle.UNINSTALLED )
+ $owner : Resolvable( state == Bundle.UNINSTALLED )
$import : ImportPackage( owner == $owner )
then
log("Uninstall " + $import);
@@ -187,8 +215,7 @@
*/
rule "Retract uninstalled ExportPackage"
when
- $owner : Resolvable( )
- eval ( $owner.getState() == Bundle.UNINSTALLED )
+ $owner : Resolvable( state == Bundle.UNINSTALLED )
$export : ExportPackage( owner == $owner )
then
log("Uninstall " + $export);
@@ -220,6 +247,18 @@
end
/**************************************************************************************************
+* A rule that retracts RequiredBundles facts for UNINSTALLED Resolvables
+*/
+rule "Retract uninstalled RequiredBundles"
+when
+ $owner : Resolvable( state == Bundle.UNINSTALLED )
+ $reqbundle : RequiredBundle( owner == $owner )
+then
+ log("Unistall " + $reqbundle);
+ retract ( $reqbundle );
+end
+
+/**************************************************************************************************
* A rule that reports unresolved ImportPackage objects
*/
rule "Report unresolved import"
14 years, 7 months
JBoss-OSGI SVN: r96430 - in projects/jboss-osgi/trunk/reactor/framework/src: main/java/org/jboss/osgi/framework/resolver and 4 other directories.
by jboss-osgi-commits@lists.jboss.org
Author: thomas.diesler(a)jboss.com
Date: 2009-11-16 06:21:29 -0500 (Mon, 16 Nov 2009)
New Revision: 96430
Added:
projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/drools/WireCandidate.java
Modified:
projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/bundle/OSGiBundleManager.java
projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/Resolvable.java
projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/ExportPackageImpl.java
projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/ImportPackageImpl.java
projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/NamedPackageImpl.java
projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/ResolvableImpl.java
projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/drools/RuleBasedResolverImpl.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/resources/META-INF/resolver-rules.drl
Log:
Explicit control over which bundles get resolved by the drools resolver
Modified: projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/bundle/OSGiBundleManager.java
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/bundle/OSGiBundleManager.java 2009-11-16 11:09:27 UTC (rev 96429)
+++ projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/bundle/OSGiBundleManager.java 2009-11-16 11:21:29 UTC (rev 96430)
@@ -687,6 +687,8 @@
bundleState.setBundleManager(this);
bundles.add(bundleState);
+ bundleState.changeState(Bundle.INSTALLED);
+
// Add the bundle to the resolver
// [TODO] remove this restriction
if (bundleState.getBundleId() != 0)
@@ -695,8 +697,6 @@
bundleResolver.addBundle(bundleState);
}
- bundleState.changeState(Bundle.INSTALLED);
-
log.debug("Added: " + bundleState);
}
Modified: projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/Resolvable.java
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/Resolvable.java 2009-11-16 11:09:27 UTC (rev 96429)
+++ projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/Resolvable.java 2009-11-16 11:21:29 UTC (rev 96430)
@@ -56,6 +56,13 @@
Version getVersion();
/**
+ * Get the bundle's state.
+ *
+ * @return the state
+ */
+ int getState();
+
+ /**
* Get the list of exported packages in the declared order.
* @return The list of exported packages or an empty list if the bundle does not export any packages.
*/
Modified: projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/ExportPackageImpl.java
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/ExportPackageImpl.java 2009-11-16 11:09:27 UTC (rev 96429)
+++ projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/ExportPackageImpl.java 2009-11-16 11:21:29 UTC (rev 96430)
@@ -26,7 +26,6 @@
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
-import java.util.Map;
import java.util.Set;
import org.jboss.osgi.framework.metadata.PackageAttribute;
@@ -127,20 +126,8 @@
importers.remove(importer);
}
- private String toString;
public String toString()
{
- if (toString == null)
- {
- Map<String, Parameter> attributes = getPackageMetaData().getAttributes();
- Map<String, Parameter> directives = getPackageMetaData().getDirectives();
- StringBuffer buffer = new StringBuffer("ExportPackage: " + getName());
- for (Map.Entry<String, Parameter> entry : directives.entrySet())
- buffer.append(";" + entry.getKey() + ":=" + entry.getValue().getValue());
- for (Map.Entry<String, Parameter> entry : attributes.entrySet())
- buffer.append(";" + entry.getKey() + "=" + entry.getValue().getValue());
- toString = buffer.toString();
- }
- return toString;
+ return "ExportPackage" + toShortString();
}
}
\ No newline at end of file
Modified: projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/ImportPackageImpl.java
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/ImportPackageImpl.java 2009-11-16 11:09:27 UTC (rev 96429)
+++ projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/ImportPackageImpl.java 2009-11-16 11:21:29 UTC (rev 96430)
@@ -21,8 +21,6 @@
*/
package org.jboss.osgi.framework.resolver.internal;
-import java.util.Map;
-
import org.jboss.osgi.framework.metadata.PackageAttribute;
import org.jboss.osgi.framework.metadata.Parameter;
import org.jboss.osgi.framework.metadata.VersionRange;
@@ -109,20 +107,8 @@
}
- private String toString;
public String toString()
{
- if (toString == null)
- {
- Map<String, Parameter> attributes = getPackageMetaData().getAttributes();
- Map<String, Parameter> directives = getPackageMetaData().getDirectives();
- StringBuffer buffer = new StringBuffer("ImportPackage: " + getName());
- for (Map.Entry<String, Parameter> entry : directives.entrySet())
- buffer.append(";" + entry.getKey() + ":=" + entry.getValue().getValue());
- for (Map.Entry<String, Parameter> entry : attributes.entrySet())
- buffer.append(";" + entry.getKey() + "=" + entry.getValue().getValue());
- toString = buffer.toString();
- }
- return toString;
+ return "ImportPackage" + toShortString();
}
}
\ No newline at end of file
Modified: projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/NamedPackageImpl.java
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/NamedPackageImpl.java 2009-11-16 11:09:27 UTC (rev 96429)
+++ projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/NamedPackageImpl.java 2009-11-16 11:21:29 UTC (rev 96430)
@@ -21,6 +21,7 @@
*/
package org.jboss.osgi.framework.resolver.internal;
+import java.util.Map;
import java.util.Set;
import org.jboss.osgi.framework.bundle.OSGiBundleState;
@@ -83,4 +84,22 @@
Parameter attr = getPackageMetaData().getAttribute(key);
return (attr != null ? attr.getValue() : null);
}
+
+ private String packageSpec;
+ public String toShortString()
+ {
+ if (packageSpec == null)
+ {
+ Map<String, Parameter> attributes = getPackageMetaData().getAttributes();
+ Map<String, Parameter> directives = getPackageMetaData().getDirectives();
+ StringBuffer buffer = new StringBuffer("[" + getName());
+ for (Map.Entry<String, Parameter> entry : directives.entrySet())
+ buffer.append(";" + entry.getKey() + ":=" + entry.getValue().getValue());
+ for (Map.Entry<String, Parameter> entry : attributes.entrySet())
+ buffer.append(";" + entry.getKey() + "=" + entry.getValue().getValue());
+ buffer.append("]");
+ packageSpec = buffer.toString();
+ }
+ return packageSpec;
+ }
}
\ No newline at end of file
Modified: projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/ResolvableImpl.java
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/ResolvableImpl.java 2009-11-16 11:09:27 UTC (rev 96429)
+++ projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/ResolvableImpl.java 2009-11-16 11:21:29 UTC (rev 96430)
@@ -108,6 +108,11 @@
return bundleState.getVersion();
}
+ public int getState()
+ {
+ return bundleState.getState();
+ }
+
public ExportPackage getExportPackage(String packageName)
{
return exportedPackages.get(packageName);
Modified: projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/drools/RuleBasedResolverImpl.java
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/drools/RuleBasedResolverImpl.java 2009-11-16 11:09:27 UTC (rev 96429)
+++ projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/drools/RuleBasedResolverImpl.java 2009-11-16 11:21:29 UTC (rev 96430)
@@ -51,7 +51,7 @@
public class RuleBasedResolverImpl extends AbstractResolver
{
private StatefulKnowledgeSession ksession;
- private Map<Object, FactHandle> facts = new ConcurrentHashMap<Object, FactHandle>();
+ private Map<Resolvable, FactHandle> facts = new ConcurrentHashMap<Resolvable, FactHandle>();
public RuleBasedResolverImpl(OSGiBundleManager bundleManager)
{
@@ -71,14 +71,6 @@
public Resolvable addBundle(Bundle bundle)
{
Resolvable resolvable = super.addBundle(bundle);
- facts.put(resolvable, ksession.insert(resolvable));
-
- for (ImportPackage aux : resolvable.getImportPackages())
- facts.put(aux, ksession.insert(aux));
-
- for (ExportPackage aux : resolvable.getExportPackages())
- facts.put(aux, ksession.insert(aux));
-
return resolvable;
}
@@ -86,30 +78,62 @@
public Resolvable removeBundle(Bundle bundle)
{
Resolvable resolvable = super.removeBundle(bundle);
- ksession.retract(facts.get(resolvable));
-
- for (ImportPackage aux : resolvable.getImportPackages())
- ksession.retract(facts.get(aux));
-
- for (ExportPackage aux : resolvable.getExportPackages())
- ksession.retract(facts.get(aux));
-
+ FactHandle factHandle = facts.get(resolvable);
+ if (factHandle != null)
+ {
+ ksession.update(factHandle, resolvable);
+ ksession.fireAllRules();
+ ksession.retract(factHandle);
+ }
return resolvable;
}
- public List<Resolvable> resolve(List<Bundle> notused)
+ public List<Resolvable> resolve(List<Bundle> bundles)
{
+ // Get the list of unresolved resolvables
+ List<Resolvable> unresolved = new ArrayList<Resolvable>();
+ if (bundles == null)
+ {
+ for (Resolvable aux : getBundles())
+ {
+ if (aux.isResolved() == false)
+ unresolved.add(aux);
+ }
+ }
+ else
+ {
+ for (Bundle bundle : bundles)
+ {
+ Resolvable aux = getBundle(bundle);
+ if (aux == null)
+ throw new IllegalStateException("Cannot obtain resolvable for: " + bundle);
+
+ if (aux.isResolved() == false)
+ unresolved.add(aux);
+ }
+ }
+
+ // Insert the missing resolvables into the knowledge base
+ for (Resolvable aux : unresolved)
+ {
+ FactHandle factHandle = ksession.getFactHandle(aux);
+ if (factHandle == null)
+ factHandle = ksession.insert(aux);
+
+ facts.put(aux, factHandle);
+ }
+
+ // Fire all the rules
ksession.fireAllRules();
-
- List<Resolvable> resolvedBundles = new ArrayList<Resolvable>();
+
+ // Return teh list of resolved bundles
+ List<Resolvable> resolved = new ArrayList<Resolvable>();
for (Resolvable aux : getBundles())
{
if (aux.isResolved())
- {
- resolvedBundles.add(aux);
- }
+ resolved.add(aux);
}
- return Collections.unmodifiableList(resolvedBundles);
+ return Collections.unmodifiableList(resolved);
}
public ExportPackage getExporter(Bundle bundle, String packageName)
@@ -117,7 +141,7 @@
Resolvable resolvable = getBundle(bundle);
if (resolvable == null)
throw new IllegalStateException("Cannot find resovable for: " + bundle);
-
+
ImportPackage importPackage = resolvable.getImportPackage(packageName);
if (importPackage == null)
throw new IllegalStateException("Cannot find import package: " + packageName);
Added: projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/drools/WireCandidate.java
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/drools/WireCandidate.java (rev 0)
+++ projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/drools/WireCandidate.java 2009-11-16 11:21:29 UTC (rev 96430)
@@ -0,0 +1,72 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.osgi.framework.resolver.internal.drools;
+
+import org.jboss.osgi.framework.resolver.ExportPackage;
+import org.jboss.osgi.framework.resolver.ImportPackage;
+import org.jboss.osgi.framework.resolver.Resolvable;
+import org.jboss.osgi.framework.resolver.internal.ExportPackageImpl;
+import org.jboss.osgi.framework.resolver.internal.ImportPackageImpl;
+
+/**
+ * A Resolver that is based on the Drools rule engine.
+ *
+ * @author thomas.diesler(a)jboss.com
+ * @since 16-Nov-2009
+ */
+public class WireCandidate
+{
+ private ImportPackageImpl importPackage;
+ private ExportPackageImpl exportPackage;
+
+ public ImportPackage getImportPackage()
+ {
+ return importPackage;
+ }
+
+ public void setImportPackage(ImportPackage importPackage)
+ {
+ this.importPackage = (ImportPackageImpl)importPackage;
+ }
+
+ public ExportPackage getExportPackage()
+ {
+ return exportPackage;
+ }
+
+ public void setExportPackage(ExportPackage exportPackage)
+ {
+ this.exportPackage = (ExportPackageImpl)exportPackage;
+ }
+
+ @Override
+ public String toString()
+ {
+ Resolvable impOwner = importPackage.getOwner();
+ String importer = impOwner.getSymbolicName() + "-" + impOwner.getVersion() + importPackage.toShortString();
+ Resolvable expOwner = exportPackage.getOwner();
+ String exporter = expOwner.getSymbolicName() + "-" + expOwner.getVersion() + exportPackage.toShortString();
+ return "WireCandidate[" + importer + "] --> [" + exporter + "]";
+ }
+
+
+}
\ No newline at end of file
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-16 11:09:27 UTC (rev 96429)
+++ projects/jboss-osgi/trunk/reactor/framework/src/test/java/org/jboss/test/osgi/resolver/AbstractImportExportTest.java 2009-11-16 11:21:29 UTC (rev 96430)
@@ -29,6 +29,9 @@
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
+import java.util.Arrays;
+import java.util.List;
+
import org.jboss.osgi.framework.resolver.ExportPackage;
import org.jboss.osgi.framework.resolver.ImportPackage;
import org.jboss.osgi.framework.resolver.Resolvable;
@@ -127,6 +130,50 @@
}
@Test
+ public void testExplicitBundleResolve() 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");
+ Bundle bundleA = framework.installBundle(fileA);
+ try
+ {
+ // Bundle-SymbolicName: simpleexport
+ // Export-Package: org.jboss.test.osgi.classloader.support.a
+ VirtualFile fileB = assembleBundle("bundleB", "/bundles/resolver/simpleexport", A.class);
+ Bundle bundleB = framework.installBundle(fileB);
+ try
+ {
+ // Only resolve BundleB
+ List<Resolvable> resolved = resolver.resolve(Arrays.asList(new Bundle[] { bundleB }));
+ assertEquals("BundleB resolved", 1, resolved.size());
+ assertEquals(bundleB.getSymbolicName(), resolved.get(0).getSymbolicName());
+
+ // Verify resolvable for bundleA
+ Resolvable resolvableA = resolver.getBundle(bundleA);
+ assertFalse("BundleA not resolved", resolvableA.isResolved());
+
+ // Resolve the installed bundles
+ resolver.resolve(null);
+
+ // Verify resolvable for bundleA
+ assertTrue("BundleA resolved", resolvableA.isResolved());
+ }
+ finally
+ {
+ bundleB.uninstall();
+ }
+ }
+ finally
+ {
+ bundleA.uninstall();
+ }
+ }
+
+ @Test
public void testSelfImportPackage() throws Exception
{
Resolver resolver = getTestResolver();
Modified: projects/jboss-osgi/trunk/reactor/framework/src/test/resources/META-INF/resolver-rules.drl
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/test/resources/META-INF/resolver-rules.drl 2009-11-16 11:09:27 UTC (rev 96429)
+++ projects/jboss-osgi/trunk/reactor/framework/src/test/resources/META-INF/resolver-rules.drl 2009-11-16 11:21:29 UTC (rev 96430)
@@ -1,23 +1,88 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
package org.jboss.osgi.framework.resolver
+import org.jboss.osgi.framework.resolver.internal.drools.WireCandidate
import org.jboss.osgi.framework.metadata.VersionRange
+import org.osgi.framework.Bundle
import org.osgi.framework.Version
+# Functions #######################################################################################
+
+/**
+* Returns TRUE is the version is in the given version range
+*/
function boolean inRange(VersionRange range, Version version)
{
return range.isInRange(version);
}
+/**
+* Logs a message to the logging system
+*/
function void log(String message)
{
- # System.out.println(message);
+ // System.out.println(message);
}
-declare WireCandidate
- importPackage : ImportPackage
- exportPackage : ExportPackage
+# Types ###########################################################################################
+
+
+# Rules ###########################################################################################
+
+/**************************************************************************************************
+* A rule that inserts the ImportPackage facts for newly inserted
+* Resolvable objects.
+*/
+rule "Add import packages for new resolvable"
+salience 10000
+when
+ $owner : Resolvable( resolved == false, state == Bundle.INSTALLED )
+ $import : ImportPackage( owner == $owner ) from $owner.importPackages
+ not ImportPackage( owner == $owner, name == $import.name )
+then
+ log("Add " + $import);
+ insert( $import );
end
+/**************************************************************************************************
+* A rule that inserts the ExportPackage facts for newly inserted
+* Resolvable objects.
+*/
+rule "Add export packages for new resolvable"
+salience 10000
+when
+ $owner : Resolvable( resolved == false, state == Bundle.INSTALLED )
+ $export : ExportPackage( owner == $owner ) from $owner.exportPackages
+ not ExportPackage( owner == $owner, name == $export.name )
+then
+ log("Add " + $export);
+ insert( $export );
+end
+
+/**************************************************************************************************
+* A rule that inserts the WireCandidate facts for every combination
+* of matching import/export package names.
+*/
rule "Add WireCandidate"
salience 1000
when
@@ -27,11 +92,14 @@
WireCandidate wc = new WireCandidate();
wc.setImportPackage( $import );
wc.setExportPackage( $export );
-
- log("Add WireCandidate " + wc.getImportPackage() + " --> " + wc.getExportPackage());
+ log("Add " + wc);
insert ( wc );
end
+/**************************************************************************************************
+* A rule that retracts the WireCandidate if there is a package
+* version miss-match.
+*/
rule "Retract package version miss-match"
salience 100
when
@@ -39,20 +107,28 @@
$wc : WireCandidate( importPackage == $import )
not( eval( inRange( $import.getVersion(), $wc.getExportPackage().getVersion())))
then
- log("Retract package version " + $wc.getExportPackage());
+ log("Package version missmatch - Retract " + $wc);
retract ( $wc );
end
+/**************************************************************************************************
+* A rule that retracts the WireCandidate if there is a miss-match
+* of the bundle-symbolic-name on the ImportPackage.
+*/
rule "Retract bundle symbolic name miss-match"
salience 100
when
$import : ImportPackage( exporter == null, bundleSymbolicName != null )
$wc : WireCandidate( importPackage == $import, exportPackage.owner.symbolicName != $import.bundleSymbolicName )
then
- log("Retract bundle symbolic name " + $wc.getExportPackage().getOwner());
+ log("Bundle-SymbolicName missmatch - Retract " + $wc);
retract ( $wc );
end
+/**************************************************************************************************
+* A rule that retracts the WireCandidate if there is a miss-match
+* of the bundle-version on the ImportPackage.
+*/
rule "Retract bundle version miss-match"
salience 100
when
@@ -60,41 +136,94 @@
$wc : WireCandidate( importPackage == $import )
not( eval( inRange( $import.getBundleVersion(), $wc.getExportPackage().getOwner().getVersion())))
then
- log("Retract bundle version " + $wc.getExportPackage().getOwner());
+ log("Bundle-Version missmatch - Retract " + $wc);
retract ( $wc );
end
-rule "Retract optional imports"
-salience 10
-when
- $import : ImportPackage( exporter == null, optional == true )
- not( WireCandidate( importPackage == $import ) )
-then
- log("Retract optional " + $import);
- retract ( $import );
-end
-
+/**************************************************************************************************
+* A rule that applies the WireCandidate if there is only one
+* possible WireCandidate left that refers to an ImportPackage.
+*/
rule "Use WireCandidate"
when
- $import : ImportPackage( exporter == null )
+ $owner : Resolvable( resolved == false )
+ $import : ImportPackage( owner == $owner, exporter == null )
$wc : WireCandidate( importPackage == $import )
not( WireCandidate( this != $wc, importPackage == $import ) )
then
- log("Use WireCandidate " + $wc.getImportPackage() + " --> " + $wc.getExportPackage());
+ log("Use " + $wc);
modify ( $wc.getImportPackage() ) { setExporter( $wc.getExportPackage() ) };
retract ( $wc );
end
+/**************************************************************************************************
+* A rule that marls the Resolvable as resolved if there
+* is no more ImportPackage that is not wired to an ExportPackage.
+*/
rule "Mark resolved"
when
$owner : Resolvable( resolved == false )
- not( ImportPackage( owner == $owner, exporter == null ))
+ not( ImportPackage( owner == $owner, optional == false, exporter == null ))
then
log("Resolved " + $owner);
modify ( $owner ) { markResolved ( ) };
end
+/**************************************************************************************************
+* A rule that retracts ImportPackage facts for UNINSTALLED bundles
+*/
+rule "Retract uninstalled ImportPackage"
+when
+ $owner : Resolvable( )
+ eval ( $owner.getState() == Bundle.UNINSTALLED )
+ $import : ImportPackage( owner == $owner )
+then
+ log("Uninstall " + $import);
+ retract ( $import );
+end
+
+/**************************************************************************************************
+* A rule that retracts ExportPackage facts for UNINSTALLED bundles
+*/
+rule "Retract uninstalled ExportPackage"
+when
+ $owner : Resolvable( )
+ eval ( $owner.getState() == Bundle.UNINSTALLED )
+ $export : ExportPackage( owner == $owner )
+then
+ log("Uninstall " + $export);
+ retract ( $export );
+end
+
+/**************************************************************************************************
+* A rule that retracts WireCandidate facts for UNINSTALLED ImportPackages
+*/
+rule "Retract uninstalled WireCandidate/ImportPackage"
+when
+ $wc : WireCandidate( )
+ not ( ImportPackage ( this == $wc.importPackage) )
+then
+ log("Uninstall " + $wc);
+ retract ( $wc );
+end
+
+/**************************************************************************************************
+* A rule that retracts WireCandidate facts for UNINSTALLED ExportPackages
+*/
+rule "Retract uninstalled WireCandidate/ExportPackage"
+when
+ $wc : WireCandidate( )
+ not ( ExportPackage ( this == $wc.exportPackage) )
+then
+ log("Unistall " + $wc);
+ retract ( $wc );
+end
+
+/**************************************************************************************************
+* A rule that reports unresolved ImportPackage objects
+*/
rule "Report unresolved import"
+salience -1000
when
$import : ImportPackage( exporter == null )
then
14 years, 7 months
JBoss-OSGI SVN: r96384 - in projects/jboss-osgi/trunk/reactor/framework/src: main/java/org/jboss/osgi/framework/resolver/internal and 8 other directories.
by jboss-osgi-commits@lists.jboss.org
Author: thomas.diesler(a)jboss.com
Date: 2009-11-15 07:09:35 -0500 (Sun, 15 Nov 2009)
New Revision: 96384
Added:
projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/RequiredBundle.java
projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/RequiredBundleImpl.java
projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/requirebundle/
projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/requirebundleoptional/
projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/requirebundleoptional/META-INF/
projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/requirebundleoptional/META-INF/MANIFEST.MF
projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/requirebundleversion/
projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/requirebundleversion/META-INF/
projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/requirebundleversion/META-INF/MANIFEST.MF
projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/requirebundleversionfails/
Removed:
projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/optionalrequirebundle/
projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/optionalrequirebundlefails/
projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/versionrequirebundle/
projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/versionrequirebundlefails/
Modified:
projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/ImportPackage.java
projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/Resolvable.java
projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/ResolvableImpl.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/ResolverMetadataTest.java
projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/requirebundle/META-INF/MANIFEST.MF
projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/requirebundleversionfails/META-INF/MANIFEST.MF
Log:
Add support for Require-Bundle in Resolver metadata
Modified: projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/ImportPackage.java
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/ImportPackage.java 2009-11-15 01:36:27 UTC (rev 96383)
+++ projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/ImportPackage.java 2009-11-15 12:09:35 UTC (rev 96384)
@@ -44,21 +44,21 @@
VersionRange getVersion();
/**
- * The bundle symbolic name of the exporting bundle.
+ * The symbolic name of the exporting bundle.
*
* @return null if this attribute is not set
*/
String getBundleSymbolicName();
/**
- * The bundle version of the exporting bundle.
+ * The version range of the exporting bundle.
*
* @return null if this attribute is not set
*/
VersionRange getBundleVersion();
/**
- * Return true if this package import is marked optional
+ * True if the resolution directive for this package import is 'optional'
*/
boolean isOptional();
Added: projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/RequiredBundle.java
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/RequiredBundle.java (rev 0)
+++ projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/RequiredBundle.java 2009-11-15 12:09:35 UTC (rev 96384)
@@ -0,0 +1,54 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.osgi.framework.resolver;
+
+import org.jboss.osgi.framework.metadata.VersionRange;
+
+/**
+ * An abstraction of a required bundle.
+ *
+ * @author thomas.diesler(a)jboss.com
+ * @since 09-Nov-2009
+ */
+public interface RequiredBundle
+{
+ /**
+ * Get the bundle's symbolic name.
+ *
+ * @return the symbolic name
+ */
+ String getSymbolicName();
+
+ /**
+ * The version range of the required bundle.
+ *
+ * @return null if this attribute is not set
+ */
+ VersionRange getVersion();
+
+ /**
+ * True if the resolution directive for the given required bundle is 'optional'
+ *
+ * @return null if this attribute is not set
+ */
+ boolean isOptional();
+}
\ No newline at end of file
Property changes on: projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/RequiredBundle.java
___________________________________________________________________
Name: svn:keywords
+ Id Revision
Name: svn:eol-style
+ LF
Modified: projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/Resolvable.java
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/Resolvable.java 2009-11-15 01:36:27 UTC (rev 96383)
+++ projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/Resolvable.java 2009-11-15 12:09:35 UTC (rev 96384)
@@ -84,6 +84,21 @@
ImportPackage getImportPackage(String packageName);
/**
+ * Get the list of required bundles.
+ *
+ * @return The list of required bundles or an empty list.
+ */
+ List<RequiredBundle> getRequiredBundles();
+
+ /**
+ * Get the required bundle by symbolic name.
+ *
+ * @param symbolicName the required bundle's symbolic name
+ * @return null if there is no required bundle by this name
+ */
+ RequiredBundle getRequiredBundle(String symbolicName);
+
+ /**
* Return true if this resolvable is a singleton.
*
* @return true when this is a singleton
Added: projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/RequiredBundleImpl.java
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/RequiredBundleImpl.java (rev 0)
+++ projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/RequiredBundleImpl.java 2009-11-15 12:09:35 UTC (rev 96384)
@@ -0,0 +1,69 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.osgi.framework.resolver.internal;
+
+import org.jboss.osgi.framework.metadata.Parameter;
+import org.jboss.osgi.framework.metadata.ParameterizedAttribute;
+import org.jboss.osgi.framework.metadata.VersionRange;
+import org.jboss.osgi.framework.metadata.internal.AbstractVersionRange;
+import org.jboss.osgi.framework.resolver.RequiredBundle;
+import org.osgi.framework.Constants;
+
+/**
+ * An abstraction of a required bundle.
+ *
+ * @author thomas.diesler(a)jboss.com
+ * @since 09-Nov-2009
+ */
+public class RequiredBundleImpl implements RequiredBundle
+{
+ private String symbolicName;
+ private ParameterizedAttribute attr;
+
+ public RequiredBundleImpl(ParameterizedAttribute attr)
+ {
+ this.symbolicName = attr.getAttribute();
+ this.attr = attr;
+ }
+
+ public String getSymbolicName()
+ {
+ return symbolicName;
+ }
+
+ public VersionRange getVersion()
+ {
+ String rangeStr = attr.getAttributeValue(Constants.BUNDLE_VERSION_ATTRIBUTE, String.class);
+ if (rangeStr != null)
+ return AbstractVersionRange.parseRangeSpec(rangeStr);
+ return null;
+ }
+
+ public boolean isOptional()
+ {
+ boolean optional = false;
+ Parameter param = attr.getDirective(Constants.RESOLUTION_DIRECTIVE);
+ if (param != null)
+ optional = Constants.RESOLUTION_OPTIONAL.equals(param.getValue());
+ return optional;
+ }
+}
\ No newline at end of file
Property changes on: projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/RequiredBundleImpl.java
___________________________________________________________________
Name: svn:keywords
+ Id Revision
Name: svn:eol-style
+ LF
Modified: projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/ResolvableImpl.java
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/ResolvableImpl.java 2009-11-15 01:36:27 UTC (rev 96383)
+++ projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/ResolvableImpl.java 2009-11-15 12:09:35 UTC (rev 96384)
@@ -30,8 +30,10 @@
import org.jboss.osgi.framework.bundle.OSGiBundleState;
import org.jboss.osgi.framework.metadata.OSGiMetaData;
import org.jboss.osgi.framework.metadata.PackageAttribute;
+import org.jboss.osgi.framework.metadata.ParameterizedAttribute;
import org.jboss.osgi.framework.resolver.ExportPackage;
import org.jboss.osgi.framework.resolver.ImportPackage;
+import org.jboss.osgi.framework.resolver.RequiredBundle;
import org.jboss.osgi.framework.resolver.Resolvable;
import org.osgi.framework.Bundle;
import org.osgi.framework.Version;
@@ -47,36 +49,48 @@
private OSGiBundleState bundleState;
private OSGiMetaData metaData;
private boolean resolved;
-
+
private Map<String, ExportPackage> exportedPackages = new LinkedHashMap<String, ExportPackage>();
private Map<String, ImportPackage> importedPackages = new LinkedHashMap<String, ImportPackage>();
-
+ private Map<String, RequiredBundle> requiredBundles = new LinkedHashMap<String, RequiredBundle>();
+
public ResolvableImpl(Bundle bundle)
{
this.bundleState = OSGiBundleState.assertBundleState(bundle);
this.metaData = bundleState.getOSGiMetaData();
-
+
// Initialize exported packages
List<PackageAttribute> exportPackages = metaData.getExportPackages();
if (exportPackages != null)
{
- for (PackageAttribute attr: exportPackages)
+ for (PackageAttribute attr : exportPackages)
{
String packageName = attr.getPackageInfo().getName();
exportedPackages.put(packageName, new ExportPackageImpl(this, packageName));
}
}
-
+
// Initialize imported packages
List<PackageAttribute> importPackages = metaData.getImportPackages();
if (importPackages != null)
{
- for (PackageAttribute attr: importPackages)
+ for (PackageAttribute attr : importPackages)
{
String packageName = attr.getPackageInfo().getName();
importedPackages.put(packageName, new ImportPackageImpl(this, packageName));
}
}
+
+ // Initialize required bundles
+ List<ParameterizedAttribute> requireBundles = metaData.getRequireBundles();
+ if (requireBundles != null)
+ {
+ for (ParameterizedAttribute attr : requireBundles)
+ {
+ RequiredBundleImpl req = new RequiredBundleImpl(attr);
+ requiredBundles.put(req.getSymbolicName(), req);
+ }
+ }
}
public Bundle getBundle()
@@ -116,6 +130,17 @@
return Collections.unmodifiableList(values);
}
+ public List<RequiredBundle> getRequiredBundles()
+ {
+ List<RequiredBundle> values = new ArrayList<RequiredBundle>(requiredBundles.values());
+ return Collections.unmodifiableList(values);
+ }
+
+ public RequiredBundle getRequiredBundle(String symbolicName)
+ {
+ return requiredBundles.get(symbolicName);
+ }
+
public boolean isResolved()
{
return resolved;
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-15 01:36:27 UTC (rev 96383)
+++ projects/jboss-osgi/trunk/reactor/framework/src/test/java/org/jboss/test/osgi/resolver/AbstractImportExportTest.java 2009-11-15 12:09:35 UTC (rev 96384)
@@ -35,6 +35,7 @@
import org.jboss.osgi.framework.resolver.Resolver;
import org.jboss.test.osgi.classloader.support.a.A;
import org.jboss.virtual.VirtualFile;
+import org.junit.Ignore;
import org.junit.Test;
import org.osgi.framework.Bundle;
@@ -51,7 +52,7 @@
{
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");
@@ -66,7 +67,7 @@
{
// Resolve the installed bundles
resolver.resolve(null);
-
+
// Verify resolvable for bundleA
Resolvable resolvableA = resolver.getBundle(bundleA);
assertTrue("BundleA resolved", resolvableA.isResolved());
@@ -108,7 +109,7 @@
{
// Resolve the installed bundles
resolver.resolve(null);
-
+
// Verify resolvable for bundleA
Resolvable resolvableA = resolver.getBundle(bundleA);
assertFalse("BundleA not resolved", resolvableA.isResolved());
@@ -140,7 +141,7 @@
{
// Resolve the installed bundles
resolver.resolve(null);
-
+
// Verify resolvable for bundleA
Resolvable resolvableA = resolver.getBundle(bundleA);
assertTrue("BundleA resolved", resolvableA.isResolved());
@@ -177,7 +178,7 @@
{
// Resolve the installed bundles
resolver.resolve(null);
-
+
// Verify resolvable for bundleA
Resolvable resolvableA = resolver.getBundle(bundleA);
assertTrue("BundleA resolved", resolvableA.isResolved());
@@ -225,7 +226,7 @@
{
// Resolve the installed bundles
resolver.resolve(null);
-
+
// Verify resolvable for bundleA
Resolvable resolvableA = resolver.getBundle(bundleA);
assertFalse("BundleA not resolved", resolvableA.isResolved());
@@ -267,7 +268,7 @@
{
// Resolve the installed bundles
resolver.resolve(null);
-
+
// Verify resolvable for bundleA
Resolvable resolvableA = resolver.getBundle(bundleA);
assertTrue("BundleA resolved", resolvableA.isResolved());
@@ -304,7 +305,7 @@
{
// Resolve the installed bundles
resolver.resolve(null);
-
+
// Verify resolvable for bundleA
Resolvable resolvableA = resolver.getBundle(bundleA);
assertTrue("BundleA resolved", resolvableA.isResolved());
@@ -314,7 +315,7 @@
// Verify that bundleA is wired to an exporter
ExportPackage exporter = resolver.getExporter(bundleA, A.class.getPackage().getName());
assertEquals(bundleB.getSymbolicName(), exporter.getOwner().getSymbolicName());
-
+
// Verify resolvable for bundleB
Resolvable resolvableB = resolver.getBundle(bundleB);
assertTrue("BundleB resolved", resolvableB.isResolved());
@@ -346,7 +347,7 @@
{
// Resolve the installed bundles
resolver.resolve(null);
-
+
// Bundle-SymbolicName: simpleexport
// Export-Package: org.jboss.test.osgi.classloader.support.a
VirtualFile fileB = assembleBundle("bundleB", "/bundles/resolver/simpleexport", A.class);
@@ -355,7 +356,7 @@
{
// Resolve the installed bundles
resolver.resolve(null);
-
+
// Verify resolvable for bundleA
Resolvable resolvableA = resolver.getBundle(bundleA);
assertTrue("BundleA resolved", resolvableA.isResolved());
@@ -365,7 +366,7 @@
// Verify that bundleA is not wired to an exporter
ExportPackage exporter = resolver.getExporter(bundleA, A.class.getPackage().getName());
assertNull("Exporter null", exporter);
-
+
// Verify resolvable for bundleB
Resolvable resolvableB = resolver.getBundle(bundleB);
assertTrue("BundleB resolved", resolvableB.isResolved());
@@ -388,7 +389,7 @@
{
Resolver resolver = getTestResolver();
assertEquals("No bundles in resolver", 0, resolver.getBundles().size());
-
+
//Bundle-SymbolicName: bundlenameimport
//Import-Package: org.jboss.test.osgi.classloader.support.a;bundle-symbolic-name=bundlenameexport
VirtualFile fileA = assembleBundle("bundleA", "/bundles/resolver/bundlenameimport");
@@ -403,7 +404,7 @@
{
// Resolve the installed bundles
resolver.resolve(null);
-
+
// Verify resolvable for bundleA
Resolvable resolvableA = resolver.getBundle(bundleA);
assertTrue("BundleA resolved", resolvableA.isResolved());
@@ -436,7 +437,7 @@
{
Resolver resolver = getTestResolver();
assertEquals("No bundles in resolver", 0, resolver.getBundles().size());
-
+
//Bundle-SymbolicName: bundlenameimport
//Import-Package: org.jboss.test.osgi.classloader.support.a;bundle-symbolic-name=bundlenameexport
VirtualFile fileA = assembleBundle("bundleA", "/bundles/resolver/bundlenameimport");
@@ -451,7 +452,7 @@
{
// Resolve the installed bundles
resolver.resolve(null);
-
+
// Verify resolvable for bundleA
Resolvable resolvableA = resolver.getBundle(bundleA);
assertFalse("BundleA not resolved", resolvableA.isResolved());
@@ -493,7 +494,7 @@
{
// Resolve the installed bundles
resolver.resolve(null);
-
+
// Bundle-SymbolicName: simpleexport
// Export-Package: org.jboss.test.osgi.classloader.support.a
VirtualFile fileB = assembleBundle("bundleB", "/bundles/resolver/simpleexport", A.class);
@@ -502,7 +503,7 @@
{
// Resolve the installed bundles
resolver.resolve(null);
-
+
// Verify resolvable for bundleA
Resolvable resolvableA = resolver.getBundle(bundleA);
assertTrue("BundleA resolved", resolvableA.isResolved());
@@ -512,7 +513,7 @@
// Verify that bundleA is wired to an exporter
ExportPackage exporter = resolver.getExporter(bundleA, A.class.getPackage().getName());
assertEquals(bundleB.getSymbolicName(), exporter.getOwner().getSymbolicName());
-
+
// Verify resolvable for bundleB
Resolvable resolvableB = resolver.getBundle(bundleB);
assertTrue("BundleB resolved", resolvableB.isResolved());
@@ -544,7 +545,7 @@
{
// Resolve the installed bundles
resolver.resolve(null);
-
+
// Bundle-SymbolicName: simpleexport
// Export-Package: org.jboss.test.osgi.classloader.support.a
VirtualFile fileB = assembleBundle("bundleB", "/bundles/resolver/simpleexport", A.class);
@@ -553,7 +554,7 @@
{
// Resolve the installed bundles
resolver.resolve(null);
-
+
// Verify resolvable for bundleA
Resolvable resolvableA = resolver.getBundle(bundleA);
assertFalse("BundleA not resolved", resolvableA.isResolved());
@@ -563,7 +564,7 @@
// Verify that bundleA is not wired
ExportPackage exporter = resolver.getExporter(bundleA, A.class.getPackage().getName());
assertNull("Exporter null", exporter);
-
+
// Verify resolvable for bundleB
Resolvable resolvableB = resolver.getBundle(bundleB);
assertTrue("BundleB resolved", resolvableB.isResolved());
@@ -582,6 +583,71 @@
}
@Test
+ public void testRequireBundle() throws Exception
+ {
+ Resolver resolver = getTestResolver();
+ assertEquals("No bundles in resolver", 0, resolver.getBundles().size());
+
+ //Bundle-SymbolicName: requirebundle
+ //Require-Bundle: simpleexport
+ VirtualFile fileA = assembleBundle("bundleA", "/bundles/resolver/requirebundle");
+ Bundle bundleA = framework.installBundle(fileA);
+ try
+ {
+ // Bundle-SymbolicName: simpleexport
+ // Export-Package: org.jboss.test.osgi.classloader.support.a
+ VirtualFile fileB = assembleBundle("bundleB", "/bundles/resolver/simpleexport", A.class);
+ Bundle bundleB = framework.installBundle(fileB);
+ try
+ {
+ // Resolve the installed bundles
+ resolver.resolve(null);
+
+ // Verify resolvable for bundleA
+ Resolvable resolvableA = resolver.getBundle(bundleA);
+ assertTrue("BundleA resolved", resolvableA.isResolved());
+
+ // Verify resolvable for bundleB
+ Resolvable resolvableB = resolver.getBundle(bundleB);
+ assertTrue("BundleB resolved", resolvableB.isResolved());
+ }
+ finally
+ {
+ bundleB.uninstall();
+ }
+ }
+ finally
+ {
+ bundleA.uninstall();
+ }
+ }
+
+ @Ignore
+ public void testRequireBundleFails() throws Exception
+ {
+ Resolver resolver = getTestResolver();
+ assertEquals("No bundles in resolver", 0, resolver.getBundles().size());
+
+ //Bundle-SymbolicName: requirebundle
+ //Require-Bundle: simpleexport
+ VirtualFile fileA = assembleBundle("bundleA", "/bundles/resolver/requirebundle");
+ Bundle bundleA = framework.installBundle(fileA);
+ try
+ {
+ // Resolve the installed bundles
+ resolver.resolve(null);
+
+ // Verify resolvable for bundleA
+ Resolvable resolvableA = resolver.getBundle(bundleA);
+ assertFalse("BundleA not resolved", resolvableA.isResolved());
+ }
+ finally
+ {
+ bundleA.uninstall();
+ }
+ }
+
+ @Test
public void testAttributeImportPackage() throws Exception
{
}
Modified: projects/jboss-osgi/trunk/reactor/framework/src/test/java/org/jboss/test/osgi/resolver/ResolverMetadataTest.java
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/test/java/org/jboss/test/osgi/resolver/ResolverMetadataTest.java 2009-11-15 01:36:27 UTC (rev 96383)
+++ projects/jboss-osgi/trunk/reactor/framework/src/test/java/org/jboss/test/osgi/resolver/ResolverMetadataTest.java 2009-11-15 12:09:35 UTC (rev 96384)
@@ -33,6 +33,7 @@
import org.jboss.osgi.framework.resolver.ExportPackage;
import org.jboss.osgi.framework.resolver.ImportPackage;
+import org.jboss.osgi.framework.resolver.RequiredBundle;
import org.jboss.osgi.framework.resolver.Resolvable;
import org.jboss.osgi.framework.resolver.Resolver;
import org.jboss.test.osgi.classloader.support.a.A;
@@ -147,4 +148,73 @@
bundleA.uninstall();
}
}
+
+ @Test
+ public void testRequireBundle() throws Exception
+ {
+ //Bundle-SymbolicName: requirebundle
+ //Require-Bundle: simpleexport
+ VirtualFile fileA = assembleBundle("bundleA", "/bundles/resolver/requirebundle");
+ Bundle bundleA = framework.installBundle(fileA);
+ try
+ {
+ Resolvable resolvableA = getTestResolver().getBundle(bundleA);
+ List<RequiredBundle> requiredBundles = resolvableA.getRequiredBundles();
+ assertEquals("RequiredBundles not null", 1, requiredBundles.size());
+ RequiredBundle reqBundle = requiredBundles.get(0);
+ assertEquals("simpleexport", reqBundle.getSymbolicName());
+ assertNull("Null version", reqBundle.getVersion());
+ assertFalse("Not optional", reqBundle.isOptional());
+ }
+ finally
+ {
+ bundleA.uninstall();
+ }
+ }
+
+ @Test
+ public void testRequireBundleOptional() throws Exception
+ {
+ //Bundle-SymbolicName: requirebundle
+ //Require-Bundle: simpleexport;resolution:=optional
+ VirtualFile fileA = assembleBundle("bundleA", "/bundles/resolver/requirebundleoptional");
+ Bundle bundleA = framework.installBundle(fileA);
+ try
+ {
+ Resolvable resolvableA = getTestResolver().getBundle(bundleA);
+ List<RequiredBundle> requiredBundles = resolvableA.getRequiredBundles();
+ assertEquals("RequiredBundles not null", 1, requiredBundles.size());
+ RequiredBundle reqBundle = requiredBundles.get(0);
+ assertEquals("simpleexport", reqBundle.getSymbolicName());
+ assertNull("Null version", reqBundle.getVersion());
+ assertTrue("Resolution optional", reqBundle.isOptional());
+ }
+ finally
+ {
+ bundleA.uninstall();
+ }
+ }
+
+ @Test
+ public void testRequireBundleVersion() throws Exception
+ {
+ //Bundle-SymbolicName: requirebundle
+ //Require-Bundle: simpleexport;bundle-version="[0.0.0,1.0.0]"
+ VirtualFile fileA = assembleBundle("bundleA", "/bundles/resolver/requirebundleversion");
+ Bundle bundleA = framework.installBundle(fileA);
+ try
+ {
+ Resolvable resolvableA = getTestResolver().getBundle(bundleA);
+ List<RequiredBundle> requiredBundles = resolvableA.getRequiredBundles();
+ assertEquals("RequiredBundles not null", 1, requiredBundles.size());
+ RequiredBundle reqBundle = requiredBundles.get(0);
+ assertEquals("simpleexport", reqBundle.getSymbolicName());
+ assertNotNull("Version not null", reqBundle.getVersion());
+ assertFalse("Not optional", reqBundle.isOptional());
+ }
+ finally
+ {
+ bundleA.uninstall();
+ }
+ }
}
\ No newline at end of file
Copied: projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/requirebundle (from rev 96383, projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/versionrequirebundle)
Modified: projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/requirebundle/META-INF/MANIFEST.MF
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/versionrequirebundle/META-INF/MANIFEST.MF 2009-11-15 01:36:27 UTC (rev 96383)
+++ projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/requirebundle/META-INF/MANIFEST.MF 2009-11-15 12:09:35 UTC (rev 96384)
@@ -1,3 +1,3 @@
Bundle-ManifestVersion: 2
-Bundle-SymbolicName: org.jboss.test.osgi.classloader.bundleB
-Require-Bundle: org.jboss.test.osgi.classloader.bundleA;bundle-version="[0.0.0,1.0.0]"
+Bundle-SymbolicName: requirebundle
+Require-Bundle: simpleexport
Added: projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/requirebundleoptional/META-INF/MANIFEST.MF
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/requirebundleoptional/META-INF/MANIFEST.MF (rev 0)
+++ projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/requirebundleoptional/META-INF/MANIFEST.MF 2009-11-15 12:09:35 UTC (rev 96384)
@@ -0,0 +1,3 @@
+Bundle-ManifestVersion: 2
+Bundle-SymbolicName: requirebundleoptional
+Require-Bundle: simpleexport;resolution:=optional
Added: projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/requirebundleversion/META-INF/MANIFEST.MF
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/requirebundleversion/META-INF/MANIFEST.MF (rev 0)
+++ projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/requirebundleversion/META-INF/MANIFEST.MF 2009-11-15 12:09:35 UTC (rev 96384)
@@ -0,0 +1,3 @@
+Bundle-ManifestVersion: 2
+Bundle-SymbolicName: requirebundleversion
+Require-Bundle: simpleexport;bundle-version="[0.0.0,1.0.0]"
Copied: projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/requirebundleversionfails (from rev 96383, projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/versionrequirebundlefails)
Modified: projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/requirebundleversionfails/META-INF/MANIFEST.MF
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/versionrequirebundlefails/META-INF/MANIFEST.MF 2009-11-15 01:36:27 UTC (rev 96383)
+++ projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/requirebundleversionfails/META-INF/MANIFEST.MF 2009-11-15 12:09:35 UTC (rev 96384)
@@ -1,3 +1,3 @@
Bundle-ManifestVersion: 2
-Bundle-SymbolicName: org.jboss.test.osgi.classloader.bundleB
-Require-Bundle: org.jboss.test.osgi.classloader.bundleA;bundle-version="[0.0.0,1.0.0)"
+Bundle-SymbolicName: versionrequirebundlefails
+Require-Bundle: simpleexport;bundle-version="[1.0.0,2.0.0)"
14 years, 7 months