[jboss-cvs] JBossAS SVN: r96641 - in projects/jboss-osgi/trunk/reactor/framework/src: main/java/org/jboss/osgi/framework/classloading and 11 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Fri Nov 20 10:23:47 EST 2009


Author: thomas.diesler at 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 at 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 at 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 at 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>




More information about the jboss-cvs-commits mailing list