[jboss-cvs] JBossAS SVN: r96230 - in projects/jboss-osgi/trunk/reactor/framework: src/main/java/org/jboss/osgi/framework/bundle and 18 other directories.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Tue Nov 10 14:32:58 EST 2009
Author: thomas.diesler at jboss.com
Date: 2009-11-10 14:32:57 -0500 (Tue, 10 Nov 2009)
New Revision: 96230
Added:
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/internal/drools/
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/resources/META-INF/resolver-rules.drl
projects/jboss-osgi/trunk/reactor/framework/src/test/java/org/jboss/test/osgi/classloader/support/c/
projects/jboss-osgi/trunk/reactor/framework/src/test/java/org/jboss/test/osgi/classloader/support/c/CA.java
projects/jboss-osgi/trunk/reactor/framework/src/test/java/org/jboss/test/osgi/resolver/AbstractResolverTest.java
projects/jboss-osgi/trunk/reactor/framework/src/test/java/org/jboss/test/osgi/resolver/RuleBasedResolverTest.java
projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/
projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/simpleexport/
projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/simpleexport/META-INF/
projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/simpleexport/META-INF/MANIFEST.MF
projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/simpleimport/
projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/simpleimport/META-INF/
projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/simpleimport/META-INF/MANIFEST.MF
projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/singleton/
projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/singleton/META-INF/
projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/singleton/META-INF/MANIFEST.MF
Modified:
projects/jboss-osgi/trunk/reactor/framework/pom.xml
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/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/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/ResolvableImpl.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/test/java/org/jboss/test/osgi/FrameworkTestCase.java
projects/jboss-osgi/trunk/reactor/framework/src/test/java/org/jboss/test/osgi/FrameworkTestDelegate.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/META-INF/jboss-osgi-bootstrap.xml
Log:
Add initial rule based resolver
Modified: projects/jboss-osgi/trunk/reactor/framework/pom.xml
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/pom.xml 2009-11-10 19:00:18 UTC (rev 96229)
+++ projects/jboss-osgi/trunk/reactor/framework/pom.xml 2009-11-10 19:32:57 UTC (rev 96230)
@@ -36,12 +36,14 @@
<!-- Properties -->
<properties>
+ <version.drools>5.0.1</version.drools>
<version.jboss.aop>2.1.0.CR3</version.jboss.aop>
<version.jboss.vfs>2.2.0-SNAPSHOT</version.jboss.vfs>
<version.jboss.classloading>2.0.8-SNAPSHOT</version.jboss.classloading>
<version.jboss.deployers>2.0.9-SNAPSHOT</version.jboss.deployers>
<version.jboss.microcontainer>2.0.9.GA</version.jboss.microcontainer>
<version.jboss.test>1.1.4.GA</version.jboss.test>
+ <surefire.system.args>${surefire.memory.args} ${surefire.jpda.args} ${surefire.profiler.args}</surefire.system.args>
</properties>
<dependencies>
@@ -50,6 +52,11 @@
<artifactId>bnd</artifactId>
</dependency>
<dependency>
+ <groupId>org.drools</groupId>
+ <artifactId>drools-compiler</artifactId>
+ <version>${version.drools}</version>
+ </dependency>
+ <dependency>
<groupId>org.jboss.aop</groupId>
<artifactId>jboss-aop</artifactId>
<version>${version.jboss.aop}</version>
@@ -410,6 +417,7 @@
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
+ <argLine>${surefire.system.args}</argLine>
<systemProperties>
<property>
<name>log4j.output.dir</name>
@@ -429,23 +437,4 @@
</plugins>
</build>
- <!-- Repositories -->
- <repositories>
- <repository>
- <id>repository.jboss.org</id>
- <name>JBoss Repository</name>
- <url>http://repository.jboss.org/maven2/</url>
- <snapshots>
- <enabled>false</enabled>
- </snapshots>
- </repository>
- </repositories>
-
- <!-- Subversion -->
- <scm>
- <connection>scm:svn:http://anonsvn.jboss.org/repos/jbossas/projects/jboss-osgi/trunk/reactor/framework</connection>
- <developerConnection>scm:svn:https://svn.jboss.org/repos/jbossas/projects/jboss-osgi/trunk/reactor/framework</developerConnection>
- <url>http://fisheye.jboss.com/qsearch/JBossOSGi/projects/jboss-osgi/trunk/reactor/framework</url>
- </scm>
-
</project>
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-10 19:00:18 UTC (rev 96229)
+++ projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/bundle/OSGiBundleManager.java 2009-11-10 19:32:57 UTC (rev 96230)
@@ -325,15 +325,28 @@
*/
public void addPlugin(Plugin plugin)
{
- Class<? extends Plugin> clazz = plugin.getClass();
+ Class<?> clazz = plugin.getClass();
+ if (addPlugin(plugin, clazz) == false)
+ {
+ Class<?> superclass = clazz.getSuperclass();
+ if (Plugin.class.isAssignableFrom(superclass))
+ addPlugin(plugin, superclass);
+ }
+ }
+
+ private boolean addPlugin(Plugin plugin, Class<?> clazz)
+ {
+ boolean pluginAdded = false;
for (Class<?> interf : clazz.getInterfaces())
{
if (Plugin.class.isAssignableFrom(interf))
{
- log.debug("Add plugin: " + clazz.getName());
+ log.debug("Add plugin: " + plugin.getClass().getName());
plugins.put(interf, plugin);
+ pluginAdded = true;
}
}
+ return pluginAdded;
}
/**
Added: 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 (rev 0)
+++ projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/AbstractResolver.java 2009-11-10 19:32:57 UTC (rev 96230)
@@ -0,0 +1,101 @@
+/*
+ * 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.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+import org.jboss.osgi.framework.bundle.OSGiBundleManager;
+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.osgi.framework.Bundle;
+import org.osgi.framework.Version;
+
+/**
+ * An abstract resolver that maintains the {@link Resolvable} bundles.
+ *
+ * @author thomas.diesler at jboss.com
+ * @since 09-Nov-2009
+ */
+public abstract class AbstractResolver extends AbstractPlugin implements ResolverPlugin
+{
+ private Map<OSGiBundleState, Resolvable> resolverBundleMap = new ConcurrentHashMap<OSGiBundleState, Resolvable>();
+
+ public AbstractResolver(OSGiBundleManager bundleManager)
+ {
+ super(bundleManager);
+ }
+
+ public List<Resolvable> getBundles()
+ {
+ List<Resolvable> values = new ArrayList<Resolvable>(resolverBundleMap.values());
+ return Collections.unmodifiableList(values);
+ }
+
+ public Resolvable getBundle(Bundle bundle)
+ {
+ if (bundle == null)
+ throw new IllegalArgumentException("Null bundle");
+
+ OSGiBundleState bundleState = OSGiBundleState.assertBundleState(bundle);
+ return resolverBundleMap.get(bundleState);
+ }
+
+ public Resolvable getBundle(String symbolicName, Version version)
+ {
+ if (symbolicName == null)
+ throw new IllegalArgumentException("Null symbolicName");
+
+ if (version == null)
+ version = Version.emptyVersion;
+
+ Resolvable retBundle = null;
+ for (Resolvable aux : resolverBundleMap.values())
+ {
+ if (aux.getSymbolicName().equals(symbolicName) && aux.getVersion().equals(version))
+ {
+ retBundle = aux;
+ break;
+ }
+ }
+ return retBundle;
+ }
+
+ public Resolvable addBundle(Bundle bundle)
+ {
+ OSGiBundleState bundleState = OSGiBundleState.assertBundleState(bundle);
+ ResolvableImpl resolvable = new ResolvableImpl(bundle);
+ resolverBundleMap.put(bundleState, resolvable);
+ return resolvable;
+ }
+
+ public Resolvable removeBundle(Bundle bundle)
+ {
+ OSGiBundleState bundleState = OSGiBundleState.assertBundleState(bundle);
+ return resolverBundleMap.remove(bundleState);
+ }
+}
\ No newline at end of file
Property changes on: projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/AbstractResolver.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/ExportPackage.java
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/ExportPackage.java 2009-11-10 19:00:18 UTC (rev 96229)
+++ projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/ExportPackage.java 2009-11-10 19:32:57 UTC (rev 96230)
@@ -71,4 +71,14 @@
* @return An empty set if there is no importer
*/
Set<ImportPackage> getImporters();
+
+ /**
+ * Add an importer of this export package.
+ */
+ void addImporter(ImportPackage importer);
+
+ /**
+ * Remove an importer of this export package.
+ */
+ void removeImporter(ImportPackage importer);
}
\ No newline at end of file
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-10 19:00:18 UTC (rev 96229)
+++ projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/ImportPackage.java 2009-11-10 19:32:57 UTC (rev 96230)
@@ -22,7 +22,6 @@
package org.jboss.osgi.framework.resolver;
import org.jboss.osgi.framework.metadata.VersionRange;
-import org.osgi.framework.Version;
/**
* An abstraction of a package import.
@@ -61,11 +60,16 @@
* The bundle version of the exporting bundle.
* @return null if this attribute is not set
*/
- Version getBundleVersion();
+ VersionRange getBundleVersion();
/**
* Get the exporter that this import package is wired to.
* @return Null if the import is not yet resolved.
*/
ExportPackage getExporter();
+
+ /**
+ * Set the exporter that this import package is wired to.
+ */
+ void setExporter(ExportPackage exporter);
}
\ No newline at end of file
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-10 19:00:18 UTC (rev 96229)
+++ projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/Resolvable.java 2009-11-10 19:32:57 UTC (rev 96230)
@@ -84,12 +84,17 @@
ImportPackage getImportPackage(String packageName);
/**
- * @return True if this resovable is a singleton bundle.
+ * Return true if this resolvable is a singleton.
*/
boolean isSingleton();
/**
- * @return True if this resovable has been resolved.
+ * Return true if this resolvable has been 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/internal/ExportPackageImpl.java
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/ExportPackageImpl.java 2009-11-10 19:00:18 UTC (rev 96229)
+++ projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/ExportPackageImpl.java 2009-11-10 19:32:57 UTC (rev 96230)
@@ -24,6 +24,7 @@
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
+import java.util.HashSet;
import java.util.List;
import java.util.Set;
@@ -32,7 +33,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.spi.NotImplementedException;
import org.osgi.framework.Constants;
import org.osgi.framework.Version;
@@ -45,6 +45,7 @@
public class ExportPackageImpl extends NamedPackageImpl implements ExportPackage
{
private PackageAttribute packageMetaData;
+ private Set<ImportPackage> importers = new HashSet<ImportPackage>();
public ExportPackageImpl(Resolvable owner, String packageName)
{
@@ -112,6 +113,23 @@
public Set<ImportPackage> getImporters()
{
- throw new NotImplementedException();
+ return Collections.unmodifiableSet(importers);
}
+
+ public void addImporter(ImportPackage importer)
+ {
+ importers.add(importer);
+ }
+
+ public void removeImporter(ImportPackage importer)
+ {
+ importers.remove(importer);
+ }
+
+ @Override
+ public String toString()
+ {
+ String ownerStr = getOwner().getSymbolicName() + "-" + getOwner().getVersion();
+ return "ExportPackage[" + ownerStr + "[" + getName() + "-" + getVersion() + "]]";
+ }
}
\ 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-10 19:00:18 UTC (rev 96229)
+++ projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/ImportPackageImpl.java 2009-11-10 19:32:57 UTC (rev 96230)
@@ -24,12 +24,11 @@
import org.jboss.osgi.framework.metadata.PackageAttribute;
import org.jboss.osgi.framework.metadata.Parameter;
import org.jboss.osgi.framework.metadata.VersionRange;
+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.spi.NotImplementedException;
import org.osgi.framework.Constants;
-import org.osgi.framework.Version;
/**
* An abstraction of a package import.
@@ -40,6 +39,7 @@
public class ImportPackageImpl extends NamedPackageImpl implements ImportPackage
{
private PackageAttribute packageMetaData;
+ private ExportPackage exporter;
public ImportPackageImpl(Resolvable owner, String packageName)
{
@@ -67,7 +67,8 @@
public VersionRange getVersion()
{
- throw new NotImplementedException();
+ Parameter version = getPackageMetaData().getAttribute(Constants.VERSION_ATTRIBUTE);
+ return (VersionRange)(version != null ? version.getValue() : AbstractVersionRange.valueOf("0.0.0"));
}
public String getBundleSymbolicName()
@@ -75,9 +76,10 @@
return (String)getAttribute(Constants.BUNDLE_SYMBOLICNAME_ATTRIBUTE);
}
- public Version getBundleVersion()
+ public VersionRange getBundleVersion()
{
- return Version.parseVersion((String)getAttribute(Constants.BUNDLE_VERSION_ATTRIBUTE));
+ Parameter version = getPackageMetaData().getAttribute(Constants.BUNDLE_VERSION_ATTRIBUTE);
+ return (VersionRange)(version != null ? version.getValue() : AbstractVersionRange.valueOf("0.0.0"));
}
public Resolution getResolution()
@@ -88,6 +90,21 @@
public ExportPackage getExporter()
{
- throw new NotImplementedException();
+ return exporter;
}
+
+ public void setExporter(ExportPackage exporter)
+ {
+ this.exporter = exporter;
+ ExportPackageImpl exporterImpl = (ExportPackageImpl)exporter;
+ exporterImpl.addImporter(this);
+
+ }
+
+ @Override
+ public String toString()
+ {
+ String ownerStr = getOwner().getSymbolicName() + "-" + getOwner().getVersion();
+ return "ImportPackage[" + ownerStr + "[" + getName() + " " + getVersion() + "]]";
+ }
}
\ 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-10 19:00:18 UTC (rev 96229)
+++ projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/ResolvableImpl.java 2009-11-10 19:32:57 UTC (rev 96230)
@@ -121,13 +121,19 @@
return resolved;
}
- public void setResolved(boolean resolved)
+ public void markResolved()
{
- this.resolved = resolved;
+ this.resolved = true;
}
public boolean isSingleton()
{
return metaData.isSingleton();
}
+
+ @Override
+ public String toString()
+ {
+ return "Resolvable[" + getSymbolicName() + "-" + getVersion() + "]";
+ }
}
\ 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-10 19:00:18 UTC (rev 96229)
+++ projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/basic/BasicResolverImpl.java 2009-11-10 19:32:57 UTC (rev 96230)
@@ -41,14 +41,11 @@
import org.jboss.osgi.framework.classloading.OSGiPackageRequirement;
import org.jboss.osgi.framework.metadata.OSGiMetaData;
import org.jboss.osgi.framework.metadata.ParameterizedAttribute;
-import org.jboss.osgi.framework.plugins.ResolverPlugin;
-import org.jboss.osgi.framework.plugins.internal.AbstractPlugin;
+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.internal.ResolvableImpl;
import org.osgi.framework.Bundle;
import org.osgi.framework.Constants;
-import org.osgi.framework.Version;
/**
* The BundleResolver wires BundleRequirements to their corresponding BundleCapability.
@@ -56,12 +53,11 @@
* @author thomas.diesler at jboss.com
* @since 10-Sep-2009
*/
-public class BasicResolverImpl extends AbstractPlugin implements ResolverPlugin
+public class BasicResolverImpl extends AbstractResolver
{
/** The log */
private static final Logger log = Logger.getLogger(BasicResolverImpl.class);
- private Map<OSGiBundleState, Resolvable> resolverBundleMap = new ConcurrentHashMap<OSGiBundleState, Resolvable>();
private Map<OSGiBundleState, List<BundleCapability>> bundleCapabilitiesMap = new ConcurrentHashMap<OSGiBundleState, List<BundleCapability>>();
private Map<OSGiBundleState, List<BundleRequirement>> bundleRequirementsMap = new ConcurrentHashMap<OSGiBundleState, List<BundleRequirement>>();
@@ -70,53 +66,30 @@
super(bundleManager);
}
- public List<Resolvable> getBundles()
+ public Resolvable removeBundle(Bundle bundle)
{
- List<Resolvable> values = new ArrayList<Resolvable>(resolverBundleMap.values());
- return Collections.unmodifiableList(values);
- }
-
- public Resolvable getBundle(Bundle bundle)
- {
- if (bundle == null)
- throw new IllegalArgumentException("Null bundle");
+ Resolvable removedBundle = super.removeBundle(bundle);
OSGiBundleState bundleState = OSGiBundleState.assertBundleState(bundle);
- return resolverBundleMap.get(bundleState);
- }
+ bundleCapabilitiesMap.remove(bundleState);
- public Resolvable getBundle(String symbolicName, Version version)
- {
- if (symbolicName == null)
- throw new IllegalArgumentException("Null symbolicName");
-
- if (version == null)
- version = Version.emptyVersion;
-
- Resolvable retBundle = null;
- for (Resolvable aux : resolverBundleMap.values())
+ List<BundleRequirement> bundleRequirements = bundleRequirementsMap.remove(bundleState);
+ if (bundleRequirements != null)
{
- if (aux.getSymbolicName().equals(symbolicName) && aux.getVersion().equals(version))
+ for (BundleRequirement requirement : bundleRequirements)
{
- retBundle = aux;
- break;
+ requirement.unwireCapability();
}
}
- return retBundle;
+ return removedBundle;
}
- public Resolvable addBundle(Bundle bundle)
- {
- OSGiBundleState bundleState = OSGiBundleState.assertBundleState(bundle);
- return resolverBundleMap.put(bundleState, new ResolvableImpl(bundle));
- }
-
public List<Resolvable> resolve(List<Bundle> bundles)
{
List<Resolvable> resolvedBundles = new ArrayList<Resolvable>();
for (OSGiBundleState aux : resolveBundles(bundles))
{
- Resolvable resBundle = resolverBundleMap.get(aux);
+ Resolvable resBundle = getBundle(aux);
if (resBundle == null)
throw new IllegalStateException("Cannot obtain bundle for: " + aux);
resolvedBundles.add(resBundle);
@@ -201,24 +174,6 @@
return resolvedBundles;
}
- public Resolvable removeBundle(Bundle bundle)
- {
- OSGiBundleState bundleState = OSGiBundleState.assertBundleState(bundle);
-
- bundleCapabilitiesMap.remove(bundleState);
-
- List<BundleRequirement> bundleRequirements = bundleRequirementsMap.remove(bundleState);
- if (bundleRequirements != null)
- {
- for (BundleRequirement requirement : bundleRequirements)
- {
- requirement.unwireCapability();
- }
- }
-
- return null;
- }
-
public ExportPackage getExporter(Bundle bundle, String importPackage)
{
OSGiBundleState bundleState = OSGiBundleState.assertBundleState(bundle);
@@ -227,7 +182,7 @@
return null;
OSGiBundleState exportingBundle = match.getExportingBundle();
- Resolvable resolverBundle = resolverBundleMap.get(exportingBundle);
+ Resolvable resolverBundle = getBundle(exportingBundle);
return resolverBundle.getExportPackage(importPackage);
}
Added: 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 (rev 0)
+++ projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/drools/RuleBasedResolverImpl.java 2009-11-10 19:32:57 UTC (rev 96230)
@@ -0,0 +1,117 @@
+/*
+ * 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 java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+import org.drools.KnowledgeBase;
+import org.drools.KnowledgeBaseFactory;
+import org.drools.builder.KnowledgeBuilder;
+import org.drools.builder.KnowledgeBuilderFactory;
+import org.drools.builder.ResourceType;
+import org.drools.io.ResourceFactory;
+import org.drools.runtime.StatefulKnowledgeSession;
+import org.drools.runtime.rule.FactHandle;
+import org.jboss.logging.Logger;
+import org.jboss.osgi.framework.bundle.OSGiBundleManager;
+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.osgi.framework.Bundle;
+
+/**
+ * The BundleResolver wires BundleRequirements to their corresponding BundleCapability.
+ *
+ * @author thomas.diesler at jboss.com
+ * @since 09-Nov-2009
+ */
+public class RuleBasedResolverImpl extends AbstractResolver
+{
+ // Provide Logging
+ private static final Logger log = Logger.getLogger(RuleBasedResolverImpl.class);
+
+ private StatefulKnowledgeSession ksession;
+ private Map<Object, FactHandle> facts = new ConcurrentHashMap<Object, FactHandle>();
+
+ public RuleBasedResolverImpl(OSGiBundleManager bundleManager)
+ {
+ super(bundleManager);
+
+ KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+ kbuilder.add(ResourceFactory.newClassPathResource("META-INF/resolver-rules.drl", getClass()), ResourceType.DRL);
+ if (kbuilder.hasErrors())
+ throw new IllegalStateException("Cannot create knowledge base" + kbuilder.getErrors());
+
+ KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+ kbase.addKnowledgePackages(kbuilder.getKnowledgePackages());
+ ksession = kbase.newStatefulKnowledgeSession();
+ }
+
+ @Override
+ 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));
+
+ ksession.fireAllRules();
+
+ return resolvable;
+ }
+
+ @Override
+ 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));
+
+ ksession.fireAllRules();
+ return resolvable;
+ }
+
+ public List<Resolvable> resolve(List<Bundle> bundles)
+ {
+ List<Resolvable> resolvedBundles = new ArrayList<Resolvable>();
+ return Collections.unmodifiableList(resolvedBundles);
+ }
+
+ public ExportPackage getExporter(Bundle bundle, String importPackage)
+ {
+ return null;
+ }
+}
\ No newline at end of file
Property changes on: projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/drools/RuleBasedResolverImpl.java
___________________________________________________________________
Name: svn:keywords
+ Id Revision
Name: svn:eol-style
+ LF
Added: projects/jboss-osgi/trunk/reactor/framework/src/main/resources/META-INF/resolver-rules.drl
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/main/resources/META-INF/resolver-rules.drl (rev 0)
+++ projects/jboss-osgi/trunk/reactor/framework/src/main/resources/META-INF/resolver-rules.drl 2009-11-10 19:32:57 UTC (rev 96230)
@@ -0,0 +1,65 @@
+package org.jboss.osgi.framework.resolver
+
+declare WireCandidate
+ name : String
+ importPackage : ImportPackage
+ exportPackage : ExportPackage
+end
+
+rule "Add ImportPackages"
+when
+ $owner : Resolvable( importPackages.size > 0, resolved == false )
+ not ImportPackage( owner == $owner )
+then
+ System.out.println("Add ImportPackages " + $owner);
+end
+
+rule "Add ExportPackages"
+when
+ $owner : Resolvable( exportPackages.size > 0, resolved == false )
+ not ExportPackage( owner == $owner )
+then
+ System.out.println("Add ExportPackages " + $owner);
+end
+
+rule "Add WireCandidate"
+when
+ $export : ExportPackage( )
+ $import : ImportPackage( name == $export.name, exporter == null )
+then
+ WireCandidate wc = new WireCandidate();
+ wc.setName( $import.getName() + "-" + $export.getVersion());
+ wc.setImportPackage( $import );
+ wc.setExportPackage( $export );
+
+ System.out.println("Add WireCandidate " + wc.getImportPackage() + " --> " + wc.getExportPackage());
+ insert ( wc );
+end
+
+rule "Use WireCandidate"
+when
+ $import : ImportPackage( exporter == null )
+ $wc : WireCandidate( importPackage == $import )
+ not( WireCandidate( this != $wc, importPackage == $import ) )
+then
+ System.out.println("Use WireCandidate " + $wc.getImportPackage() + " --> " + $wc.getExportPackage());
+ modify ( $wc.getImportPackage() ) { setExporter( $wc.getExportPackage() ) };
+ retract ( $wc );
+end
+
+rule "Mark resolved"
+when
+ $owner : Resolvable( resolved == false )
+ not ImportPackage( owner == $owner, exporter == null )
+then
+ System.out.println("Resolved " + $owner);
+ modify ( $owner ) { markResolved ( ) };
+end
+
+rule "Report unresolved import"
+when
+ $import : ImportPackage( exporter == null )
+then
+ System.out.println("Unresolved " + $import );
+end
+
Modified: projects/jboss-osgi/trunk/reactor/framework/src/test/java/org/jboss/test/osgi/FrameworkTestCase.java
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/test/java/org/jboss/test/osgi/FrameworkTestCase.java 2009-11-10 19:00:18 UTC (rev 96229)
+++ projects/jboss-osgi/trunk/reactor/framework/src/test/java/org/jboss/test/osgi/FrameworkTestCase.java 2009-11-10 19:32:57 UTC (rev 96230)
@@ -35,7 +35,6 @@
import org.jboss.osgi.framework.bundle.AbstractBundleState;
import org.jboss.osgi.framework.bundle.OSGiBundleManager;
import org.jboss.osgi.spi.util.ConstantsHelper;
-import org.jboss.test.AbstractTestDelegate;
import org.jboss.test.kernel.junit.MicrocontainerTest;
import org.jboss.virtual.AssembledDirectory;
import org.jboss.virtual.VirtualFile;
@@ -73,17 +72,9 @@
super(name);
}
- /**
- * Get the AbstractTestDelegate
- *
- * @param clazz the test class
- * @return The AbstractTestDelegate
- * @throws Exception for any error
- */
- public static AbstractTestDelegate getDelegate(Class<?> clazz) throws Exception
+ public static FrameworkTestDelegate getDelegate(Class<?> clazz) throws Exception
{
FrameworkTestDelegate delegate = new FrameworkTestDelegate(clazz);
- //delegate.enableSecurity = true;
return delegate;
}
Modified: projects/jboss-osgi/trunk/reactor/framework/src/test/java/org/jboss/test/osgi/FrameworkTestDelegate.java
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/test/java/org/jboss/test/osgi/FrameworkTestDelegate.java 2009-11-10 19:00:18 UTC (rev 96229)
+++ projects/jboss-osgi/trunk/reactor/framework/src/test/java/org/jboss/test/osgi/FrameworkTestDelegate.java 2009-11-10 19:32:57 UTC (rev 96230)
@@ -23,17 +23,18 @@
// $Id: $
+import java.lang.reflect.Method;
import java.net.URL;
+import java.util.Collection;
import java.util.Enumeration;
import junit.framework.AssertionFailedError;
import org.jboss.classloader.plugins.ClassLoaderUtils;
+import org.jboss.dependency.spi.ControllerState;
import org.jboss.deployers.structure.spi.DeploymentUnit;
import org.jboss.osgi.framework.bundle.AbstractBundleState;
import org.jboss.osgi.framework.bundle.OSGiBundleManager;
-import org.jboss.osgi.framework.launch.OSGiFramework;
-import org.jboss.osgi.spi.util.ServiceLoader;
import org.jboss.test.kernel.junit.MicrocontainerTestDelegate;
import org.jboss.virtual.AssembledDirectory;
import org.jboss.virtual.VFS;
@@ -42,7 +43,6 @@
import org.jboss.virtual.plugins.vfs.helpers.SuffixesExcludeFilter;
import org.osgi.framework.Bundle;
import org.osgi.framework.BundleException;
-import org.osgi.framework.launch.FrameworkFactory;
/**
* A OSGiTestDelegate
@@ -50,7 +50,7 @@
* @author <a href="baileyje at gmail.com">John Bailey</a>
* @author Thomas.Diesler at jboss.com
*/
-class FrameworkTestDelegate extends MicrocontainerTestDelegate
+public class FrameworkTestDelegate extends MicrocontainerTestDelegate
{
private OSGiBundleManager bundleManager;
@@ -62,21 +62,84 @@
super(clazz);
}
- OSGiBundleManager getBundleManager()
+ /**
+ * Deploys the jboss-osgi-bootstrap.xml bean descriptor to setup OSGi deployers
+ */
+ protected void deploy() throws Exception
{
+ String common = "/META-INF/jboss-osgi-bootstrap.xml";
+ URL url = getClass().getResource(common);
+ if (url == null)
+ throw new IllegalStateException(common + " not found");
+ deploy(url);
+ try
+ {
+ super.deploy();
+ deployBundles();
+ }
+ catch (Throwable t)
+ {
+ undeploy();
+ if (t instanceof Exception)
+ throw (Exception) t;
+ if (t instanceof Error)
+ throw (Error) t;
+ throw new RuntimeException("Error during deploy", t);
+ }
+ }
+
+ protected void undeploy()
+ {
+ undeployBundles();
+ super.undeploy();
+ }
+
+ protected void deployBundles() throws Exception
+ {
+ try
+ {
+ Method method = clazz.getMethod("deployBundles", new Class[] { FrameworkTestDelegate.class });
+ log.debug("Deploying Bundles...");
+ method.invoke(null, this);
+ }
+ catch (NoSuchMethodException e)
+ {
+ log.debug("No deployBundles() in " + clazz.getName());
+ }
+ }
+
+ protected void undeployBundles()
+ {
+ OSGiBundleManager bundleManager = getBundleManager();
+ Collection<AbstractBundleState> bundles = bundleManager.getBundles();
+ for (AbstractBundleState bundleState : bundles)
+ {
+ try
+ {
+ if (bundleState.getBundleId() != 0)
+ bundleManager.uninstall(bundleState);
+ }
+ catch (Throwable t)
+ {
+ getLog().warn("Error undeploying bundle: " + bundleState, t);
+ }
+ }
+ }
+
+ public OSGiBundleManager getBundleManager()
+ {
if (bundleManager == null)
{
- FrameworkFactory factory = ServiceLoader.loadService(FrameworkFactory.class);
- OSGiFramework framework = (OSGiFramework)factory.newFramework(null);
+ bundleManager = getBean("OSGiBundleManager", ControllerState.INSTALLED, OSGiBundleManager.class);
try
{
- framework.start();
+ if (bundleManager.isActive() == false)
+ bundleManager.startFramework();
}
catch (BundleException ex)
{
- throw new IllegalStateException("Cannot start framework", ex);
+ throw new IllegalStateException("Cannot start bundle manager", ex);
}
- bundleManager = framework.getBundleManager();
}
return bundleManager;
}
@@ -89,7 +152,7 @@
* @return Bundle for the deployment
* @throws Exception for any error
*/
- Bundle addBundle(String root, String child) throws Exception
+ public Bundle addBundle(String root, String child) throws Exception
{
URL resourceRoot = getClass().getResource(root);
if (resourceRoot == null)
@@ -106,7 +169,7 @@
* @return Bundle for the deployment
* @throws Exception for any error
*/
- Bundle addBundle(VirtualFile file) throws Exception
+ public Bundle addBundle(VirtualFile file) throws Exception
{
AbstractBundleState bundleState = getBundleManager().install(file);
return bundleState.getBundleInternal();
@@ -118,13 +181,13 @@
* @param bundle the bundle to remove
* @throws Exception for any error
*/
- void uninstall(Bundle bundle) throws Exception
+ public void uninstall(Bundle bundle) throws Exception
{
if (bundle.getState() != Bundle.UNINSTALLED)
getBundleManager().uninstall(bundle);
}
- DeploymentUnit getDeploymentUnit(Bundle bundle)
+ public DeploymentUnit getDeploymentUnit(Bundle bundle)
{
DeploymentUnit deploymentUnit = getBundleManager().getDeployment(bundle.getBundleId());
if (deploymentUnit == null)
@@ -132,12 +195,12 @@
return deploymentUnit;
}
- Bundle assembleBundle(String name, String resources, Class<?>... packages) throws Exception
+ public Bundle assembleBundle(String name, String resources, Class<?>... packages) throws Exception
{
return assembleBundle(name, new String[] { resources }, packages);
}
- Bundle assembleBundle(String name, String[] resourcePaths, Class<?>... packages) throws Exception
+ public Bundle assembleBundle(String name, String[] resourcePaths, Class<?>... packages) throws Exception
{
AssembledDirectory assembledDirectory = createAssembledDirectory(name, "");
for (String path : resourcePaths)
@@ -147,23 +210,23 @@
return addBundle(assembledDirectory);
}
- AssembledDirectory createAssembledDirectory(String name) throws Exception
+ public AssembledDirectory createAssembledDirectory(String name) throws Exception
{
return createAssembledDirectory(name, "");
}
- AssembledDirectory createAssembledDirectory(String name, String rootName) throws Exception
+ public AssembledDirectory createAssembledDirectory(String name, String rootName) throws Exception
{
return AssembledDirectory.createAssembledDirectory(name, rootName);
}
- void addPackage(AssembledDirectory dir, Class<?> reference) throws Exception
+ public void addPackage(AssembledDirectory dir, Class<?> reference) throws Exception
{
String packagePath = ClassLoaderUtils.packageNameToPath(reference.getName());
dir.addResources(reference, new String[] { packagePath + "/*.class" } , new String[0]);
}
- void addPath(final AssembledDirectory dir, String path, String name) throws Exception
+ public void addPath(final AssembledDirectory dir, String path, String name) throws Exception
{
URL url = getClass().getResource(path);
if (url == null)
@@ -175,12 +238,12 @@
dir.addPath(file, noJars);
}
- URL getBundleResource(Bundle bundle, String path)
+ public URL getBundleResource(Bundle bundle, String path)
{
return getDeploymentUnit(bundle).getResourceLoader().getResource(path);
}
- Enumeration<URL> getBundleResources(Bundle bundle, String path) throws Exception
+ public Enumeration<URL> getBundleResources(Bundle bundle, String path) throws Exception
{
return getDeploymentUnit(bundle).getResourceLoader().getResources(path);
}
Added: projects/jboss-osgi/trunk/reactor/framework/src/test/java/org/jboss/test/osgi/classloader/support/c/CA.java
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/test/java/org/jboss/test/osgi/classloader/support/c/CA.java (rev 0)
+++ projects/jboss-osgi/trunk/reactor/framework/src/test/java/org/jboss/test/osgi/classloader/support/c/CA.java 2009-11-10 19:32:57 UTC (rev 96230)
@@ -0,0 +1,37 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2009, Red Hat Middleware LLC, and individual contributors
+* as indicated by the @author tags. See the copyright.txt file 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.test.osgi.classloader.support.c;
+
+import org.jboss.test.osgi.classloader.support.a.A;
+
+/**
+ * CA.
+ *
+ * @authorThomas.Diesler at jboss.com
+ * @version $Revision$
+ */
+public class CA
+{
+ public CA(A a)
+ {
+ }
+}
Property changes on: projects/jboss-osgi/trunk/reactor/framework/src/test/java/org/jboss/test/osgi/classloader/support/c/CA.java
___________________________________________________________________
Name: svn:keywords
+ Id Revision
Name: svn:eol-style
+ LF
Added: projects/jboss-osgi/trunk/reactor/framework/src/test/java/org/jboss/test/osgi/resolver/AbstractResolverTest.java
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/test/java/org/jboss/test/osgi/resolver/AbstractResolverTest.java (rev 0)
+++ projects/jboss-osgi/trunk/reactor/framework/src/test/java/org/jboss/test/osgi/resolver/AbstractResolverTest.java 2009-11-10 19:32:57 UTC (rev 96230)
@@ -0,0 +1,48 @@
+/*
+ * 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.test.osgi.resolver;
+
+// $Id$
+
+import org.jboss.osgi.framework.plugins.ResolverPlugin;
+import org.jboss.osgi.framework.resolver.Resolver;
+import org.jboss.test.osgi.FrameworkTestCase;
+
+/**
+ * An abstract {@link Resolver} test.
+ *
+ * @author thomas.diesler at jboss.com
+ * @since 09-Nov-2009
+ */
+abstract class AbstractResolverTest extends FrameworkTestCase
+{
+ public AbstractResolverTest(String name)
+ {
+ super(name);
+ }
+
+ protected Resolver getResolver()
+ {
+ Resolver resolver = getBundleManager().getPlugin(ResolverPlugin.class);
+ return resolver;
+ }
+}
\ No newline at end of file
Property changes on: projects/jboss-osgi/trunk/reactor/framework/src/test/java/org/jboss/test/osgi/resolver/AbstractResolverTest.java
___________________________________________________________________
Name: svn:keywords
+ Id Revision
Name: svn:eol-style
+ LF
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-10 19:00:18 UTC (rev 96229)
+++ projects/jboss-osgi/trunk/reactor/framework/src/test/java/org/jboss/test/osgi/resolver/ResolverMetadataTest.java 2009-11-10 19:32:57 UTC (rev 96230)
@@ -25,12 +25,10 @@
import java.util.List;
-import org.jboss.osgi.framework.plugins.ResolverPlugin;
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.Resolver;
-import org.jboss.test.osgi.FrameworkTestCase;
import org.jboss.test.osgi.classloader.support.a.A;
import org.junit.Test;
import org.osgi.framework.Bundle;
@@ -40,9 +38,9 @@
* Test {@link Resolver} metadata.
*
* @author thomas.diesler at jboss.com
- * @since 27-Jul-2009
+ * @since 09-Nov-2009
*/
-public class ResolverMetadataTest extends FrameworkTestCase
+public class ResolverMetadataTest extends AbstractResolverTest
{
public ResolverMetadataTest(String name)
{
@@ -50,19 +48,17 @@
}
@Test
- public void testBasicExport() throws Exception
+ public void testSimpleExport() throws Exception
{
- //Bundle-Name: BundleA
- //Bundle-Version: 1.0.0
- //Bundle-SymbolicName: org.jboss.test.osgi.classloader.bundleA;test=x
- //Export-Package: org.jboss.test.osgi.classloader.support.a;version=1.0.0;test=x
- Bundle bundleA = assembleBundle("bundleA", "/bundles/classloader/bundleA", A.class);
+ // Bundle-SymbolicName: resolver-simpleexport
+ // Export-Package: org.jboss.test.osgi.classloader.support.a
+ Bundle bundleA = assembleBundle("bundleA", "/bundles/resolver/simpleexport", A.class);
- Resolver resolver = getBundleManager().getPlugin(ResolverPlugin.class);
+ Resolver resolver = getResolver();
assertEquals(1, resolver.getBundles().size());
Resolvable resolvableA = resolver.getBundle(bundleA.getSymbolicName(), null);
- assertNull("Resolvable null", resolvableA);
+ assertNotNull("Resolvable not null", resolvableA);
resolvableA = resolver.getBundle(bundleA.getSymbolicName(), bundleA.getVersion());
assertNotNull("Resolvable not null", resolvableA);
@@ -71,8 +67,8 @@
assertNotNull("Resolvable not null", resolvableA);
assertNotNull(resolvableA.getBundle());
- assertEquals(bundleA.getSymbolicName(), resolvableA.getSymbolicName());
- assertEquals(bundleA.getVersion(), resolvableA.getVersion());
+ assertEquals("resolver-simpleexport", resolvableA.getSymbolicName());
+ assertEquals(Version.emptyVersion, resolvableA.getVersion());
List<ExportPackage> exportPackages = resolvableA.getExportPackages();
assertNotNull("ExportPackages not null", exportPackages);
@@ -82,10 +78,9 @@
assertNotNull("ExportPackage not null", exportPackage);
assertEquals("org.jboss.test.osgi.classloader.support.a", exportPackage.getName());
- assertEquals(Version.parseVersion("1.0.0"), exportPackage.getVersion());
+ assertEquals(Version.emptyVersion, exportPackage.getVersion());
assertEquals(0, exportPackage.getUses().size());
assertEquals(0, exportPackage.getMandatoryAttributes().size());
- assertEquals("x", exportPackage.getAttribute("test"));
assertNull("Null includes", exportPackage.getIncludes());
assertNull("Null excludes", exportPackage.getExcludes());
@@ -96,4 +91,37 @@
assertFalse("No sigleton", resolvableA.isSingleton());
assertFalse("Not resolved", resolvableA.isResolved());
}
+
+ @Test
+ public void testSimpleImport() throws Exception
+ {
+ // Bundle-SymbolicName: resolver-simpleimport
+ // Import-Package: org.jboss.test.osgi.classloader.support.a
+ Bundle bundleA = assembleBundle("bundleA", "/bundles/resolver/simpleimport");
+
+ Resolvable resolvableA = getResolver().getBundle(bundleA);
+
+ List<ImportPackage> importPackages = resolvableA.getImportPackages();
+ assertNotNull("ImportPackages not null", importPackages);
+ assertEquals(1, importPackages.size());
+
+ ImportPackage importPackage = resolvableA.getImportPackage("org.jboss.test.osgi.classloader.support.a");
+ assertNotNull("ImportPackage not null", importPackage);
+ assertEquals("org.jboss.test.osgi.classloader.support.a", importPackage.getName());
+
+ assertEquals("[0.0.0,?)", importPackage.getVersion().toString());
+ assertNull("Null bundle-symbolic-name", importPackage.getBundleSymbolicName());
+ assertEquals("[0.0.0,?)", importPackage.getBundleVersion().toString());
+ }
+
+ @Test
+ public void testSingleton() throws Exception
+ {
+ // Bundle-SymbolicName: resolver-singleton;singleton:=true
+ // Export-Package: org.jboss.test.osgi.classloader.support.a
+ Bundle bundleA = assembleBundle("bundleA", "/bundles/resolver/singleton", A.class);
+
+ Resolvable resolvableA = getResolver().getBundle(bundleA);
+ assertTrue("Sigleton", resolvableA.isSingleton());
+ }
}
\ No newline at end of file
Added: projects/jboss-osgi/trunk/reactor/framework/src/test/java/org/jboss/test/osgi/resolver/RuleBasedResolverTest.java
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/test/java/org/jboss/test/osgi/resolver/RuleBasedResolverTest.java (rev 0)
+++ projects/jboss-osgi/trunk/reactor/framework/src/test/java/org/jboss/test/osgi/resolver/RuleBasedResolverTest.java 2009-11-10 19:32:57 UTC (rev 96230)
@@ -0,0 +1,84 @@
+/*
+ * 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.test.osgi.resolver;
+
+// $Id$
+
+import org.jboss.osgi.framework.bundle.OSGiBundleManager;
+import org.jboss.osgi.framework.plugins.ResolverPlugin;
+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.Resolver;
+import org.jboss.osgi.framework.resolver.internal.drools.RuleBasedResolverImpl;
+import org.jboss.test.osgi.classloader.support.a.A;
+import org.osgi.framework.Bundle;
+
+/**
+ * Test the rule based {@link Resolver}
+ *
+ * @author thomas.diesler at jboss.com
+ * @since 27-Jul-2009
+ */
+public class RuleBasedResolverTest extends AbstractResolverTest
+{
+ public RuleBasedResolverTest(String name)
+ {
+ super(name);
+ }
+
+ @Override
+ protected void setUp() throws Exception
+ {
+ super.setUp();
+
+ OSGiBundleManager bundleManager = getBundleManager();
+ ResolverPlugin resolver = bundleManager.getPlugin(ResolverPlugin.class);
+ if ((resolver instanceof RuleBasedResolverImpl) == false)
+ {
+ bundleManager.removePlugin(resolver);
+ bundleManager.addPlugin(new RuleBasedResolverImpl(bundleManager));
+ }
+ }
+
+ public void testSimpleImport() throws Exception
+ {
+ // Bundle-SymbolicName: resolver-simpleimport
+ // Import-Package: org.jboss.test.osgi.classloader.support.a
+ Bundle bundleA = assembleBundle("bundleA", "/bundles/resolver/simpleimport");
+
+ // Bundle-SymbolicName: resolver-simpleexport
+ // Import-Package: org.jboss.test.osgi.classloader.support.a
+ Bundle bundleB = assembleBundle("bundleB", "/bundles/resolver/simpleexport", A.class);
+
+ Resolver resolver = getResolver();
+ Resolvable resolvableA = resolver.getBundle(bundleA);
+ assertTrue("BundleA resolved", resolvableA.isResolved());
+ ImportPackage importPackage = resolvableA.getImportPackage(A.class.getPackage().getName());
+ assertNotNull("Exporter not null", importPackage.getExporter());
+
+ Resolvable resolvableB = resolver.getBundle(bundleB);
+ assertTrue("BundleB resolved", resolvableB.isResolved());
+ ExportPackage exportPackage = resolvableB.getExportPackage(A.class.getPackage().getName());
+ assertEquals("Importers not null", 1, exportPackage.getImporters().size());
+ }
+}
\ No newline at end of file
Property changes on: projects/jboss-osgi/trunk/reactor/framework/src/test/java/org/jboss/test/osgi/resolver/RuleBasedResolverTest.java
___________________________________________________________________
Name: svn:keywords
+ Id Revision
Name: svn:eol-style
+ LF
Modified: projects/jboss-osgi/trunk/reactor/framework/src/test/resources/META-INF/jboss-osgi-bootstrap.xml
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/test/resources/META-INF/jboss-osgi-bootstrap.xml 2009-11-10 19:00:18 UTC (rev 96229)
+++ projects/jboss-osgi/trunk/reactor/framework/src/test/resources/META-INF/jboss-osgi-bootstrap.xml 2009-11-10 19:32:57 UTC (rev 96230)
@@ -46,6 +46,9 @@
********************************
-->
+ <bean name="OSGiBundleResolver" class="org.jboss.osgi.framework.resolver.internal.basic.BasicResolverImpl">
+ <constructor><parameter><inject bean="OSGiBundleManager" /></parameter></constructor>
+ </bean>
<bean name="OSGiFrameworkEventsPlugin" class="org.jboss.osgi.framework.plugins.internal.FrameworkEventsPluginImpl">
<constructor><parameter><inject bean="OSGiBundleManager" /></parameter></constructor>
</bean>
@@ -55,9 +58,6 @@
<bean name="OSGiSystemPackages" class="org.jboss.osgi.framework.plugins.internal.SystemPackagesPluginImpl">
<constructor><parameter><inject bean="OSGiBundleManager" /></parameter></constructor>
</bean>
- <bean name="OSGiBundleResolver" class="org.jboss.osgi.framework.resolver.internal.basic.BasicResolverImpl">
- <constructor><parameter><inject bean="OSGiBundleManager" /></parameter></constructor>
- </bean>
<!--
********************************
Added: projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/simpleexport/META-INF/MANIFEST.MF
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/simpleexport/META-INF/MANIFEST.MF (rev 0)
+++ projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/simpleexport/META-INF/MANIFEST.MF 2009-11-10 19:32:57 UTC (rev 96230)
@@ -0,0 +1,4 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-SymbolicName: resolver-simpleexport
+Export-Package: org.jboss.test.osgi.classloader.support.a
Added: projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/simpleimport/META-INF/MANIFEST.MF
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/simpleimport/META-INF/MANIFEST.MF (rev 0)
+++ projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/simpleimport/META-INF/MANIFEST.MF 2009-11-10 19:32:57 UTC (rev 96230)
@@ -0,0 +1,4 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-SymbolicName: resolver-simpleimport
+Import-Package: org.jboss.test.osgi.classloader.support.a
Added: projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/singleton/META-INF/MANIFEST.MF
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/singleton/META-INF/MANIFEST.MF (rev 0)
+++ projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/singleton/META-INF/MANIFEST.MF 2009-11-10 19:32:57 UTC (rev 96230)
@@ -0,0 +1,4 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-SymbolicName: resolver-sigleton;singleton:=true
+Export-Package: org.jboss.test.osgi.classloader.support.a
More information about the jboss-cvs-commits
mailing list