Author: thomas.diesler(a)jboss.com
Date: 2009-11-20 10:23:46 -0500 (Fri, 20 Nov 2009)
New Revision: 96641
Added:
projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/AbstractResolverBundle.java
projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/ResolverSystemBundleImpl.java
projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/systempackageimport/
projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/systempackageimport/META-INF/
projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/systempackageimport/META-INF/MANIFEST.MF
Modified:
projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/bundle/AbstractBundleState.java
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/classloading/OSGiClassLoaderDomain.java
projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/plugins/SystemPackagesPlugin.java
projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/plugins/internal/SystemPackagesPluginImpl.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/ResolverBundleImpl.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/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/log4j-console.xml
Log:
Resolving to system packages - WIP
Modified:
projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/bundle/AbstractBundleState.java
===================================================================
---
projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/bundle/AbstractBundleState.java 2009-11-20
15:20:13 UTC (rev 96640)
+++
projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/bundle/AbstractBundleState.java 2009-11-20
15:23:46 UTC (rev 96641)
@@ -764,4 +764,18 @@
return true;
}
}
+
+ public static AbstractBundleState assertBundleState(Bundle bundle)
+ {
+ if (bundle == null)
+ throw new IllegalArgumentException("Null bundle");
+
+ if (bundle instanceof OSGiBundleWrapper)
+ bundle = ((OSGiBundleWrapper)bundle).getBundleState();
+
+ if (bundle instanceof AbstractBundleState == false)
+ throw new IllegalArgumentException("Not an AbstractBundleState: " +
bundle);
+
+ return (AbstractBundleState)bundle;
+ }
}
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-20
15:20:13 UTC (rev 96640)
+++
projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/bundle/OSGiBundleManager.java 2009-11-20
15:23:46 UTC (rev 96641)
@@ -689,8 +689,8 @@
bundleState.changeState(Bundle.INSTALLED);
// Add the bundle to the resolver
- // [TODO] remove this restriction
- if (bundleState.getBundleId() != 0)
+ // Note, plugins are not (yet) registered when the system bundle is added
+ if (bundleState != systemBundle)
{
ResolverPlugin bundleResolver = getPlugin(ResolverPlugin.class);
bundleResolver.addBundle(bundleState);
@@ -1336,6 +1336,10 @@
autoInstall.startBundles();
}
+ // Add the system bundle to the resolver
+ ResolverPlugin bundleResolver = getPlugin(ResolverPlugin.class);
+ bundleResolver.addBundle(systemBundle);
+
// This Framework's state is set to ACTIVE
systemBundle.changeState(Bundle.ACTIVE);
Modified:
projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/classloading/OSGiClassLoaderDomain.java
===================================================================
---
projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/classloading/OSGiClassLoaderDomain.java 2009-11-20
15:20:13 UTC (rev 96640)
+++
projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/classloading/OSGiClassLoaderDomain.java 2009-11-20
15:23:46 UTC (rev 96641)
@@ -117,16 +117,11 @@
private String getSystemPackagesAsString()
{
SystemPackagesPlugin syspackPlugin =
bundleManager.getPlugin(SystemPackagesPlugin.class);
- List<String> sysPackages = syspackPlugin.getSystemPackages();
+ List<String> sysPackages = syspackPlugin.getSystemPackages(false);
StringBuffer sysPackageString = new StringBuffer();
for (String name : sysPackages)
- {
- int semiIndex = name.indexOf(';');
- if (semiIndex > 0)
- name = name.substring(0, semiIndex);
-
sysPackageString.append(name + ",");
- }
+
return sysPackageString.toString();
}
}
\ No newline at end of file
Modified:
projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/plugins/SystemPackagesPlugin.java
===================================================================
---
projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/plugins/SystemPackagesPlugin.java 2009-11-20
15:20:13 UTC (rev 96640)
+++
projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/plugins/SystemPackagesPlugin.java 2009-11-20
15:23:46 UTC (rev 96641)
@@ -21,10 +21,10 @@
*/
package org.jboss.osgi.framework.plugins;
+//$Id$
+
import java.util.List;
-//$Id$
-
/**
* A plugin that provides the configured list of system packages.
*
@@ -33,7 +33,19 @@
*/
public interface SystemPackagesPlugin extends Plugin
{
- List<String> getSystemPackages();
-
+ /**
+ * Get the list of defined system packages
+ *
+ * @param version If true includes potential version qualifiers
+ * @return The list of defined system packages
+ */
+ List<String> getSystemPackages(boolean version);
+
+ /**
+ * Return whether the given package name is system package.
+ *
+ * @param name The package name with optional version qualifier
+ * @return True if the given package name is system package.
+ */
boolean isSystemPackage(String name);
}
\ No newline at end of file
Modified:
projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/plugins/internal/SystemPackagesPluginImpl.java
===================================================================
---
projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/plugins/internal/SystemPackagesPluginImpl.java 2009-11-20
15:20:13 UTC (rev 96640)
+++
projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/plugins/internal/SystemPackagesPluginImpl.java 2009-11-20
15:23:46 UTC (rev 96641)
@@ -131,9 +131,9 @@
}
}
- public List<String> getSystemPackages()
+ public List<String> getSystemPackages(boolean version)
{
- return Collections.unmodifiableList(allPackages);
+ return Collections.unmodifiableList(version ? allPackages : allPackageNames);
}
public boolean isSystemPackage(String name)
Added:
projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/AbstractResolverBundle.java
===================================================================
---
projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/AbstractResolverBundle.java
(rev 0)
+++
projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/AbstractResolverBundle.java 2009-11-20
15:23:46 UTC (rev 96641)
@@ -0,0 +1,136 @@
+/*
+ * 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.AbstractBundleState;
+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 abstract ResolverBundle.
+ *
+ * @author thomas.diesler(a)jboss.com
+ * @since 20-Nov-2009
+ */
+public abstract class AbstractResolverBundle implements ResolverBundle
+{
+ protected AbstractBundleState bundleState;
+ private boolean resolved;
+
+ protected Map<String, ExportPackage> exportedPackages = new
LinkedHashMap<String, ExportPackage>();
+ protected Map<String, ImportPackage> importedPackages = new
LinkedHashMap<String, ImportPackage>();
+ protected Map<String, RequiredBundle> requiredBundles = new
LinkedHashMap<String, RequiredBundle>();
+
+ public AbstractResolverBundle(Bundle bundle)
+ {
+ this.bundleState = AbstractBundleState.assertBundleState(bundle);
+ }
+
+ 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 String toShortString()
+ {
+ return getSymbolicName() + "-" + getVersion();
+ }
+
+ @Override
+ public String toString()
+ {
+ return "Bundle[" + toShortString() + "]";
+ }
+}
\ No newline at end of file
Property changes on:
projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/AbstractResolverBundle.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/ExportPackageImpl.java
===================================================================
---
projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/ExportPackageImpl.java 2009-11-20
15:20:13 UTC (rev 96640)
+++
projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/ExportPackageImpl.java 2009-11-20
15:23:46 UTC (rev 96641)
@@ -104,21 +104,29 @@
Set<String> importAttributes = importPackage.getAttributes();
Set<String> mandatoryAttributes = getMandatory();
+ Set<String> ignoredAttributes = new HashSet<String>();
+ ignoredAttributes.add(Constants.BUNDLE_SYMBOLICNAME_ATTRIBUTE);
+ ignoredAttributes.add(Constants.BUNDLE_VERSION_ATTRIBUTE);
+ ignoredAttributes.add(Constants.VERSION_ATTRIBUTE);
+
// Check the import attributes
for(String attrKey : importAttributes)
{
- String impValue = (String)importPackage.getAttribute(attrKey);
- if (impValue != null)
- impValue = impValue.trim();
-
- String expValue = (String)getAttribute(attrKey);
- if (expValue != null)
- expValue = expValue.trim();
-
- if (impValue.equals(expValue) == false)
+ if (ignoredAttributes.contains(attrKey) == false)
{
- match = false;
- break;
+ String impValue = (String)importPackage.getAttribute(attrKey);
+ if (impValue != null)
+ impValue = impValue.trim();
+
+ String expValue = (String)getAttribute(attrKey);
+ if (expValue != null)
+ expValue = expValue.trim();
+
+ if (impValue.equals(expValue) == false)
+ {
+ match = false;
+ break;
+ }
}
}
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-20
15:20:13 UTC (rev 96640)
+++
projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/ImportPackageImpl.java 2009-11-20
15:23:46 UTC (rev 96641)
@@ -21,8 +21,6 @@
*/
package org.jboss.osgi.framework.resolver.internal;
-import java.util.Set;
-
import org.jboss.osgi.framework.metadata.Parameter;
import org.jboss.osgi.framework.metadata.ParameterizedAttribute;
import org.jboss.osgi.framework.metadata.VersionRange;
Modified:
projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/ResolverBundleImpl.java
===================================================================
---
projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/ResolverBundleImpl.java 2009-11-20
15:20:13 UTC (rev 96640)
+++
projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/ResolverBundleImpl.java 2009-11-20
15:23:46 UTC (rev 96641)
@@ -21,22 +21,13 @@
*/
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.
@@ -44,20 +35,15 @@
* @author thomas.diesler(a)jboss.com
* @since 09-Nov-2009
*/
-public class ResolverBundleImpl implements ResolverBundle
+public class ResolverBundleImpl extends AbstractResolverBundle
{
- 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();
+ super(bundle);
+
+ this.metaData = OSGiBundleState.assertBundleState(bundle).getOSGiMetaData();
// Initialize exported packages
List<PackageAttribute> exportPackages = metaData.getExportPackages();
@@ -94,87 +80,8 @@
}
}
- 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
Added:
projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/ResolverSystemBundleImpl.java
===================================================================
---
projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/ResolverSystemBundleImpl.java
(rev 0)
+++
projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/ResolverSystemBundleImpl.java 2009-11-20
15:23:46 UTC (rev 96641)
@@ -0,0 +1,64 @@
+/*
+ * 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.List;
+
+import org.jboss.osgi.framework.bundle.OSGiBundleManager;
+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.plugins.SystemPackagesPlugin;
+import org.osgi.framework.Bundle;
+
+import aQute.lib.osgi.Constants;
+
+/**
+ * An abstraction of a resBundle bundle.
+ *
+ * @author thomas.diesler(a)jboss.com
+ * @since 09-Nov-2009
+ */
+public class ResolverSystemBundleImpl extends AbstractResolverBundle
+{
+ public ResolverSystemBundleImpl(Bundle bundle)
+ {
+ super(bundle);
+
+ OSGiBundleManager bundleManager = bundleState.getBundleManager();
+ SystemPackagesPlugin plugin = bundleManager.getPlugin(SystemPackagesPlugin.class);
+
+ // Initialize exported packages
+ for (String packageName : plugin.getSystemPackages(true))
+ {
+ //int versionIndex = packageName.indexOf(";" +
Constants.VERSION_ATTRIBUTE + "=");
+ //if (versionIndex > 0)
+ //exportedPackages.put(packageName, new ExportPackageImpl(this, attr));
+ }
+ }
+
+ public boolean isSingleton()
+ {
+ return true;
+ }
+}
\ No newline at end of file
Property changes on:
projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/ResolverSystemBundleImpl.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/basic/BasicResolverImpl.java
===================================================================
---
projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/basic/BasicResolverImpl.java 2009-11-20
15:20:13 UTC (rev 96640)
+++
projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/basic/BasicResolverImpl.java 2009-11-20
15:23:46 UTC (rev 96641)
@@ -66,6 +66,16 @@
super(bundleManager);
}
+ @Override
+ public ResolverBundle addBundle(Bundle bundle)
+ {
+ // Ignore the system bundle
+ if (bundle.getBundleId() == 0)
+ return null;
+
+ return super.addBundle(bundle);
+ }
+
public ResolverBundle removeBundle(Bundle bundle)
{
ResolverBundle removedBundle = super.removeBundle(bundle);
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-20
15:20:13 UTC (rev 96640)
+++
projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/drools/RuleBasedResolverImpl.java 2009-11-20
15:23:46 UTC (rev 96641)
@@ -35,6 +35,7 @@
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;
@@ -50,6 +51,9 @@
*/
public class RuleBasedResolverImpl extends AbstractResolver
{
+ // Provide logging
+ public final Logger log = Logger.getLogger(RuleBasedResolverImpl.class);
+
private StatefulKnowledgeSession ksession;
private Map<ResolverBundle, FactHandle> facts = new
ConcurrentHashMap<ResolverBundle, FactHandle>();
@@ -65,12 +69,22 @@
KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
kbase.addKnowledgePackages(kbuilder.getKnowledgePackages());
ksession = kbase.newStatefulKnowledgeSession();
+ ksession.setGlobal("log", log);
+
}
@Override
public ResolverBundle addBundle(Bundle bundle)
{
- ResolverBundle resBundle = super.addBundle(bundle);
+ ResolverBundle resBundle;
+ if (bundle.getBundleId() == 0)
+ {
+ resBundle = null;
+ }
+ else
+ {
+ resBundle = super.addBundle(bundle);
+ }
return resBundle;
}
@@ -107,12 +121,12 @@
ResolverBundle aux = getBundle(bundle);
if (aux == null)
throw new IllegalStateException("Cannot obtain resBundle for: "
+ bundle);
-
+
if (aux.isResolved() == false)
unresolved.add(aux);
}
}
-
+
// Insert the missing resBundles into the knowledge base
for (ResolverBundle aux : unresolved)
{
Modified:
projects/jboss-osgi/trunk/reactor/framework/src/test/java/org/jboss/test/osgi/resolver/AbstractImportExportTest.java
===================================================================
---
projects/jboss-osgi/trunk/reactor/framework/src/test/java/org/jboss/test/osgi/resolver/AbstractImportExportTest.java 2009-11-20
15:20:13 UTC (rev 96640)
+++
projects/jboss-osgi/trunk/reactor/framework/src/test/java/org/jboss/test/osgi/resolver/AbstractImportExportTest.java 2009-11-20
15:23:46 UTC (rev 96641)
@@ -34,8 +34,8 @@
import org.jboss.osgi.framework.resolver.ExportPackage;
import org.jboss.osgi.framework.resolver.ImportPackage;
+import org.jboss.osgi.framework.resolver.Resolver;
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;
import org.junit.Ignore;
@@ -158,7 +158,7 @@
// Resolve the installed bundles
resolver.resolve(null);
-
+
// Verify resBundle for bundleA
assertTrue("BundleA resolved", resBundleA.isResolved());
}
@@ -808,15 +808,15 @@
// 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
{
@@ -826,7 +826,7 @@
// Verify resBundle for bundleA
ResolverBundle resBundleA = resolver.getBundle(bundleA);
assertTrue("BundleA resolved", resBundleA.isResolved());
-
+
Bundle bundleB = framework.installBundle(fileB);
try
{
@@ -843,7 +843,7 @@
// 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);
@@ -864,7 +864,7 @@
bundleA.uninstall();
}
}
-
+
@Test
public void testPreferredExporterResolvedReverse() throws Exception
{
@@ -874,15 +874,15 @@
// 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 bundleB = framework.installBundle(fileB);
try
{
@@ -892,7 +892,7 @@
// Verify resBundle for bundleA
ResolverBundle resBundleB = resolver.getBundle(bundleB);
assertTrue("BundleB resolved", resBundleB.isResolved());
-
+
Bundle bundleA = framework.installBundle(fileA);
try
{
@@ -909,7 +909,7 @@
// 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);
@@ -930,7 +930,7 @@
bundleB.uninstall();
}
}
-
+
@Test
public void testPreferredExporterHigherVersion() throws Exception
{
@@ -940,15 +940,15 @@
//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
{
@@ -964,7 +964,7 @@
// 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());
@@ -972,7 +972,7 @@
// 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);
@@ -993,7 +993,7 @@
bundleA.uninstall();
}
}
-
+
@Test
public void testPreferredExporterHigherVersionReverse() throws Exception
{
@@ -1003,15 +1003,15 @@
//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
{
@@ -1027,7 +1027,7 @@
// 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());
@@ -1035,7 +1035,7 @@
// 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);
@@ -1056,7 +1056,7 @@
bundleA.uninstall();
}
}
-
+
@Test
public void testPreferredExporterLowerId() throws Exception
{
@@ -1066,15 +1066,15 @@
// 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
{
@@ -1087,7 +1087,7 @@
// 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());
@@ -1101,7 +1101,7 @@
// 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);
@@ -1122,7 +1122,7 @@
bundleA.uninstall();
}
}
-
+
@Test
public void testPreferredExporterLowerIdReverse() throws Exception
{
@@ -1132,15 +1132,15 @@
// 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
{
@@ -1153,7 +1153,7 @@
// 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());
@@ -1167,7 +1167,7 @@
// 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);
@@ -1188,55 +1188,229 @@
bundleA.uninstall();
}
}
-
- /*
- public void testLogger() throws Exception
+
+ @Test
+ public void testPackageAttribute() 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);
+ //Bundle-SymbolicName: packageexportattribute
+ //Export-Package: org.jboss.test.osgi.classloader.support.a;test=x
+ VirtualFile fileA = assembleBundle("bundleA",
"/bundles/resolver/packageexportattribute");
+ Bundle bundleA = framework.installBundle(fileA);
try
{
- // Resolve the compendium
- resolver.resolve(null);
-
- String pathB =
getTestArchivePath("bundles/org.apache.felix.log.jar");
- Bundle bundleB = framework.getBundleContext().installBundle(pathB);
+ //Bundle-SymbolicName: simpleimport
+ //Import-Package: org.jboss.test.osgi.classloader.support.a
+ VirtualFile fileB = assembleBundle("bundleB",
"/bundles/resolver/simpleimport");
+ Bundle bundleB = framework.installBundle(fileB);
try
{
- // Resolve the logging bundle
+ // Resolve the installed bundles
resolver.resolve(null);
// Verify resBundle for bundleA
- resBundle resBundleA = resolver.getBundle(bundleA);
+ ResolverBundle resBundleA = resolver.getBundle(bundleA);
assertTrue("BundleA resolved", resBundleA.isResolved());
// Verify resBundle for bundleB
- resBundle resBundleB = resolver.getBundle(bundleB);
+ ResolverBundle resBundleB = resolver.getBundle(bundleB);
assertTrue("BundleB resolved", resBundleB.isResolved());
+ // Verify that bundleB is wired to bundleA
+ ExportPackage exporter = resolver.getExporter(bundleB,
A.class.getPackage().getName());
+ assertNotNull("Exporter not null", exporter);
+ assertEquals("Wired to bundleA", bundleA.getSymbolicName(),
exporter.getOwner().getSymbolicName());
}
finally
{
bundleB.uninstall();
}
+
+ //Bundle-SymbolicName: packageimportattribute
+ //Import-Package: org.jboss.test.osgi.classloader.support.a;test=x
+ fileB = assembleBundle("bundleB",
"/bundles/resolver/packageimportattribute");
+ 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());
+
+ // Verify that bundleB is wired to bundleA
+ ExportPackage exporter = resolver.getExporter(bundleB,
A.class.getPackage().getName());
+ assertNotNull("Exporter not null", exporter);
+ assertEquals("Wired to bundleA", bundleA.getSymbolicName(),
exporter.getOwner().getSymbolicName());
+ }
+ finally
+ {
+ bundleB.uninstall();
+ }
}
finally
{
bundleA.uninstall();
}
}
- */
-
+
@Test
- public void testImportPackageAttribute() throws Exception
+ public void testPackageAttributeFails() throws Exception
{
+ Resolver resolver = getTestResolver();
+ assertEquals("No bundles in resolver", 0, resolver.getBundles().size());
+
+ //Bundle-SymbolicName: packageexportattribute
+ //Export-Package: org.jboss.test.osgi.classloader.support.a;test=x
+ VirtualFile fileA = assembleBundle("bundleA",
"/bundles/resolver/packageexportattribute");
+ Bundle bundleA = framework.installBundle(fileA);
+ try
+ {
+ //Bundle-SymbolicName: packageimportattributefails
+ //Import-Package: org.jboss.test.osgi.classloader.support.a;test=y
+ VirtualFile fileB = assembleBundle("bundleB",
"/bundles/resolver/packageimportattributefails");
+ 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);
+ assertFalse("BundleB not resolved", resBundleB.isResolved());
+ }
+ finally
+ {
+ bundleB.uninstall();
+ }
+ }
+ finally
+ {
+ bundleA.uninstall();
+ }
}
@Test
- public void testImportPackageAttributeFails() throws Exception
+ public void testPackageAttributeMandatory() throws Exception
{
+ Resolver resolver = getTestResolver();
+ assertEquals("No bundles in resolver", 0, resolver.getBundles().size());
+
+ //Bundle-SymbolicName: packageexportattributemandatory
+ //Export-Package: org.jboss.test.osgi.classloader.support.a;test=x;mandatory:=test
+ VirtualFile fileA = assembleBundle("bundleA",
"/bundles/resolver/packageexportattributemandatory");
+ Bundle bundleA = framework.installBundle(fileA);
+ try
+ {
+ //Bundle-SymbolicName: packageimportattribute
+ //Import-Package: org.jboss.test.osgi.classloader.support.a;test=x
+ VirtualFile fileB = assembleBundle("bundleB",
"/bundles/resolver/packageimportattribute");
+ 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());
+
+ // Verify that bundleB is wired to bundleA
+ ExportPackage exporter = resolver.getExporter(bundleB,
A.class.getPackage().getName());
+ assertNotNull("Exporter not null", exporter);
+ assertEquals("Wired to bundleA", bundleA.getSymbolicName(),
exporter.getOwner().getSymbolicName());
+ }
+ finally
+ {
+ bundleB.uninstall();
+ }
+ }
+ finally
+ {
+ bundleA.uninstall();
+ }
}
+
+ @Test
+ public void testPackageAttributeMandatoryFails() throws Exception
+ {
+ Resolver resolver = getTestResolver();
+ assertEquals("No bundles in resolver", 0, resolver.getBundles().size());
+
+ //Bundle-SymbolicName: packageexportattributemandatory
+ //Export-Package: org.jboss.test.osgi.classloader.support.a;test=x;mandatory:=test
+ VirtualFile fileA = assembleBundle("bundleA",
"/bundles/resolver/packageexportattributemandatory");
+ Bundle bundleA = framework.installBundle(fileA);
+ try
+ {
+ //Bundle-SymbolicName: simpleimport
+ //Import-Package: org.jboss.test.osgi.classloader.support.a
+ VirtualFile fileB = assembleBundle("bundleB",
"/bundles/resolver/simpleimport");
+ 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);
+ assertFalse("BundleB not resolved", resBundleB.isResolved());
+ }
+ finally
+ {
+ bundleB.uninstall();
+ }
+ }
+ finally
+ {
+ bundleA.uninstall();
+ }
+ }
+
+ @Ignore
+ public void testSystemPackageImport() throws Exception
+ {
+ Resolver resolver = getTestResolver();
+ assertEquals("No bundles in resolver", 0, resolver.getBundles().size());
+
+ //Bundle-SymbolicName: systempackageimport
+ //Import-Package: org.osgi.framework;version=1.4
+ VirtualFile fileA = assembleBundle("bundleA",
"/bundles/resolver/systempackageimport");
+ Bundle bundleA = framework.installBundle(fileA);
+ try
+ {
+ // Resolve the compendium
+ resolver.resolve(null);
+
+ // Resolve the logging bundle
+ resolver.resolve(null);
+
+ // Verify resBundle for bundleA
+ ResolverBundle resBundleA = resolver.getBundle(bundleA);
+ assertTrue("BundleA resolved", resBundleA.isResolved());
+ }
+ finally
+ {
+ bundleA.uninstall();
+ }
+ }
}
\ No newline at end of file
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-20
15:20:13 UTC (rev 96640)
+++
projects/jboss-osgi/trunk/reactor/framework/src/test/resources/META-INF/resolver-rules.drl 2009-11-20
15:23:46 UTC (rev 96641)
@@ -26,6 +26,8 @@
import org.osgi.framework.Bundle
import org.osgi.framework.Version
+global org.jboss.logging.Logger log;
+
# Functions
#######################################################################################
/**
@@ -36,14 +38,6 @@
return range.isInRange(version);
}
-/**
-* Logs a message to the logging system
-*/
-function void log(String message)
-{
- //System.out.println(message);
-}
-
# Types
###########################################################################################
@@ -60,7 +54,7 @@
$import : ImportPackage( ) from $importer.importPackages
not ImportPackage( owner == $importer, this == $import )
then
- log("Add " + $import);
+ log.debug("Add " + $import);
insert( $import );
end
@@ -75,7 +69,7 @@
$export : ExportPackage( ) from $exporter.exportPackages
not ExportPackage( owner == $exporter, this == $export )
then
- log("Add " + $export);
+ log.debug("Add " + $export);
insert( $export );
end
@@ -90,7 +84,7 @@
$reqbnd : RequiredBundle( ) from $importer.requiredBundles
not RequiredBundle( owner == $importer, this == $reqbnd )
then
- log("Add " + $reqbnd);
+ log.debug("Add " + $reqbnd);
insert( $reqbnd );
end
@@ -108,7 +102,7 @@
WireCandidate wc = new WireCandidate();
wc.setImportPackage( $import );
wc.setExportPackage( $export );
- log("Add " + wc);
+ log.debug("Add " + wc);
insert ( wc );
end
@@ -123,7 +117,7 @@
$wc : WireCandidate( importPackage == $import )
not( eval( inRange( $import.getVersion(), $wc.getExportPackage().getVersion())))
then
- log("Package version missmatch - Retract " + $wc);
+ log.debug("Package version missmatch - Retract " + $wc);
retract ( $wc );
end
@@ -137,7 +131,7 @@
$import : ImportPackage( exporter == null, bundleSymbolicName != null )
$wc : WireCandidate( importPackage == $import, exportPackage.owner.symbolicName !=
$import.bundleSymbolicName )
then
- log("Bundle-SymbolicName missmatch - Retract " + $wc);
+ log.debug("Bundle-SymbolicName missmatch - Retract " + $wc);
retract ( $wc );
end
@@ -152,11 +146,27 @@
$wc : WireCandidate( importPackage == $import )
not( eval( inRange( $import.getBundleVersion(),
$wc.getExportPackage().getOwner().getVersion())))
then
- log("Bundle-Version missmatch - Retract " + $wc);
+ log.debug("Bundle-Version missmatch - Retract " + $wc);
retract ( $wc );
end
/**************************************************************************************************
+* A rule that retracts the WireCandidate if there is a miss-match
+* of package attributes.
+*/
+rule "Retract package attributre miss-match"
+salience 1000
+when
+ $export : ExportPackage( )
+ $import : ImportPackage( exporter == null )
+ $wc : WireCandidate( importPackage == $import, exportPackage == $export )
+ not( eval( $export.matchAttributes( $import ) ) )
+then
+ log.debug("Attribute missmatch - Retract " + $wc);
+ retract ( $wc );
+end
+
+/**************************************************************************************************
* A rule that retracts a WireCandidate if there is another
* associated with a higher version on the ExportPackage.
*/
@@ -172,7 +182,7 @@
eval( $expkeep.getVersion().compareTo($expdel.getVersion()) > 0 )
eval( $bnddel.isResolved() == false || ( $bnddel.isResolved() == true &&
$bndkeep.isResolved() == true ) )
then
- log("Retract lower version " + $wcdel);
+ log.debug("Retract lower version " + $wcdel);
retract ( $wcdel );
end
@@ -192,7 +202,7 @@
eval ( $bnddel.getBundleId() > $bndkeep.getBundleId() )
eval( $bnddel.isResolved() == false || ( $bnddel.isResolved() == true &&
$bndkeep.isResolved() == true ) )
then
- log("Retract higher bundle id " + $wcdel);
+ log.debug("Retract higher bundle id " + $wcdel);
retract ( $wcdel );
end
@@ -210,7 +220,7 @@
$expdel : ExportPackage( this != $expkeep, owner == $bnddel )
$wcdel : WireCandidate( importPackage == $wckeep.importPackage, exportPackage ==
$expdel )
then
- log("Retract unresolved exporter " + $wcdel);
+ log.debug("Retract unresolved exporter " + $wcdel);
retract ( $wcdel );
end
@@ -223,7 +233,7 @@
$provider : ResolverBundle( )
$reqbnd : RequiredBundle( symbolicName == $provider.symbolicName, version == null,
provider == null )
then
- log("RequiredBundle match " + $reqbnd + " --> " + $provider);
+ log.debug("RequiredBundle match " + $reqbnd + " --> " +
$provider);
modify ( $reqbnd ) { setProvider( $provider ) };
end
@@ -238,7 +248,7 @@
$reqbnd : RequiredBundle( symbolicName == $provider.symbolicName, version != null,
provider == null )
eval( inRange( $reqbnd.getVersion(), $provider.getVersion()))
then
- log("RequiredBundle match " + $reqbnd + " --> " + $provider);
+ log.debug("RequiredBundle match " + $reqbnd + " --> " +
$provider);
modify ( $reqbnd ) { setProvider( $provider ) };
end
@@ -257,7 +267,7 @@
$wc : WireCandidate( importPackage == $import, exportPackage == $export )
not( WireCandidate( this != $wc, importPackage == $import ) )
then
- log("Wire to resolved exporter " + $wc);
+ log.debug("Wire to resolved exporter " + $wc);
modify ( $import ) { setExporter( $wc.getExportPackage() ) };
retract ( $wc );
end
@@ -275,7 +285,7 @@
$wc : WireCandidate( importPackage == $import, exportPackage == $export )
not( WireCandidate( this != $wc, importPackage == $import ) )
then
- log("Wire self import " + $wc);
+ log.debug("Wire self import " + $wc);
modify ( $import ) { setExporter( $wc.getExportPackage() ) };
retract ( $wc );
end
@@ -293,7 +303,7 @@
not( ImportPackage( owner == $importer ))
not( RequiredBundle( owner == $importer, optional == false, provider == null ))
then
- log("Resolved " + $importer);
+ log.debug("Resolved " + $importer);
modify ( $importer ) { markResolved ( ) };
end
@@ -309,7 +319,7 @@
not( ImportPackage( owner == $importer, optional == false, exporter == null ))
not( RequiredBundle( owner == $importer, optional == false, provider == null ))
then
- log("Resolved " + $importer);
+ log.debug("Resolved " + $importer);
modify ( $importer ) { markResolved ( ) };
end
@@ -321,7 +331,7 @@
$importer : ResolverBundle( state == Bundle.UNINSTALLED )
$import : ImportPackage( owner == $importer )
then
- log("Uninstall " + $import);
+ log.debug("Uninstall " + $import);
retract ( $import );
end
@@ -333,7 +343,7 @@
$exporter : ResolverBundle( state == Bundle.UNINSTALLED )
$export : ExportPackage( owner == $exporter )
then
- log("Uninstall " + $export);
+ log.debug("Uninstall " + $export);
retract ( $export );
end
@@ -345,7 +355,7 @@
$wc : WireCandidate( )
not ( ImportPackage ( this == $wc.importPackage) )
then
- log("Uninstall " + $wc);
+ log.debug("Uninstall " + $wc);
retract ( $wc );
end
@@ -357,7 +367,7 @@
$wc : WireCandidate( )
not ( ExportPackage ( this == $wc.exportPackage) )
then
- log("Unistall " + $wc);
+ log.debug("Unistall " + $wc);
retract ( $wc );
end
@@ -369,7 +379,7 @@
$importer : ResolverBundle( state == Bundle.UNINSTALLED )
$reqbnd : RequiredBundle( owner == $importer )
then
- log("Uninstall " + $reqbnd);
+ log.debug("Uninstall " + $reqbnd);
retract ( $reqbnd );
end
@@ -381,6 +391,6 @@
when
$import : ImportPackage( exporter == null, optional == false )
then
- log("Unresolved " + $import );
+ log.debug("Unresolved " + $import );
end
Added:
projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/systempackageimport/META-INF/MANIFEST.MF
===================================================================
---
projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/systempackageimport/META-INF/MANIFEST.MF
(rev 0)
+++
projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/systempackageimport/META-INF/MANIFEST.MF 2009-11-20
15:23:46 UTC (rev 96641)
@@ -0,0 +1,3 @@
+Bundle-ManifestVersion: 2
+Bundle-SymbolicName: systempackageimport
+Import-Package: org.osgi.framework;version=1.4
Modified:
projects/jboss-osgi/trunk/reactor/framework/src/test/resources/log4j-console.xml
===================================================================
---
projects/jboss-osgi/trunk/reactor/framework/src/test/resources/log4j-console.xml 2009-11-20
15:20:13 UTC (rev 96640)
+++
projects/jboss-osgi/trunk/reactor/framework/src/test/resources/log4j-console.xml 2009-11-20
15:23:46 UTC (rev 96641)
@@ -9,7 +9,7 @@
<appender name="CONSOLE"
class="org.apache.log4j.ConsoleAppender">
<param name="Target" value="System.out" />
- <param name="Threshold" value="INFO" />
+ <param name="Threshold" value="DEBUG" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{HH:mm:ss,SSS} %-5p
[%c{1}] %m%n" />
</layout>