JBoss-OSGI SVN: r96641 - in projects/jboss-osgi/trunk/reactor/framework/src: main/java/org/jboss/osgi/framework/classloading and 11 other directories.
by jboss-osgi-commits@lists.jboss.org
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>
14 years, 10 months
JBoss-OSGI SVN: r96638 - in projects/jboss-osgi/trunk/reactor/framework/src: main/java/org/jboss/osgi/framework/resolver/internal and 1 other directories.
by jboss-osgi-commits@lists.jboss.org
Author: thomas.diesler(a)jboss.com
Date: 2009-11-20 07:30:17 -0500 (Fri, 20 Nov 2009)
New Revision: 96638
Modified:
projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/ExportPackage.java
projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/ImportPackage.java
projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/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/test/java/org/jboss/test/osgi/resolver/ResolverMetadataTest.java
Log:
Resolver attribute matching
Modified: projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/ExportPackage.java
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/ExportPackage.java 2009-11-20 12:02:11 UTC (rev 96637)
+++ projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/ExportPackage.java 2009-11-20 12:30:17 UTC (rev 96638)
@@ -69,6 +69,21 @@
Set<String> getExcludes();
/**
+ * Match the attributes of the given export package
+ *
+ * In order for an import definition to be resolved to an export definition,
+ * the values of the attributes specified by the import definition must match the values
+ * of the attributes of the export definition. By default, a match is not prevented
+ * if the export definition contains attributes that do not occur in the import definition.
+ *
+ * The mandatory directive in the export definition can reverse this by listing all
+ * attributes that the Framework must match in the import definition.
+ *
+ * @return true if the attributes match
+ */
+ boolean matchAttributes(ImportPackage importPackage);
+
+ /**
* Get the current set of importers of this export package.
*
* @return An empty set if there is no importer
Modified: projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/ImportPackage.java
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/ImportPackage.java 2009-11-20 12:02:11 UTC (rev 96637)
+++ projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/ImportPackage.java 2009-11-20 12:30:17 UTC (rev 96638)
@@ -58,21 +58,6 @@
boolean isOptional();
/**
- * Match the attributes of the given export package
- *
- * In order for an import definition to be resolved to an export definition,
- * the values of the attributes specified by the import definition must match the values
- * of the attributes of the export definition. By default, a match is not prevented
- * if the export definition contains attributes that do not occur in the import definition.
- *
- * The mandatory directive in the export definition can reverse this by listing all
- * attributes that the Framework must match in the import definition.
- *
- * @return true if the attributes match
- */
- boolean matchAttributes(ExportPackage exportPackage);
-
- /**
* Get the exporter that this import package is wired to.
*
* @return Null if the import is not yet resolved.
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 12:02:11 UTC (rev 96637)
+++ projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/ExportPackageImpl.java 2009-11-20 12:30:17 UTC (rev 96638)
@@ -95,6 +95,51 @@
return Collections.unmodifiableSet(valueList);
}
+ public boolean matchAttributes(ImportPackage importPackage)
+ {
+ if (importPackage == null)
+ throw new IllegalArgumentException("Null importPackage");
+
+ boolean match = true;
+ Set<String> importAttributes = importPackage.getAttributes();
+ Set<String> mandatoryAttributes = getMandatory();
+
+ // 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)
+ {
+ match = false;
+ break;
+ }
+ }
+
+ // Check the mandatory export attributes
+ for(String attrKey : mandatoryAttributes)
+ {
+ String expValue = (String)getAttribute(attrKey);
+ if (expValue == null)
+ throw new IllegalStateException("Cannot get mandatory attribute value: " + attrKey);
+
+ String impValue = (String)importPackage.getAttribute(attrKey);
+ if (impValue == null)
+ {
+ match = false;
+ break;
+ }
+ }
+
+ return match;
+ }
+
public Set<ImportPackage> getImporters()
{
return Collections.unmodifiableSet(importers);
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 12:02:11 UTC (rev 96637)
+++ projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/ImportPackageImpl.java 2009-11-20 12:30:17 UTC (rev 96638)
@@ -76,19 +76,6 @@
return optional;
}
- public boolean matchAttributes(ExportPackage exportPackage)
- {
- if (exportPackage == null)
- throw new IllegalArgumentException("Null exportPackage");
-
- boolean match = false;
- Set<String> importAttributes = getAttributes();
- Set<String> exportAttributes = exportPackage.getAttributes();
- Set<String> mandatoryAttributes = exportPackage.getMandatory();
-
- return match;
- }
-
public ExportPackage getExporter()
{
return exporter;
Modified: projects/jboss-osgi/trunk/reactor/framework/src/test/java/org/jboss/test/osgi/resolver/ResolverMetadataTest.java
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/test/java/org/jboss/test/osgi/resolver/ResolverMetadataTest.java 2009-11-20 12:02:11 UTC (rev 96637)
+++ projects/jboss-osgi/trunk/reactor/framework/src/test/java/org/jboss/test/osgi/resolver/ResolverMetadataTest.java 2009-11-20 12:30:17 UTC (rev 96638)
@@ -63,24 +63,24 @@
{
Resolver resolver = getTestResolver();
assertEquals(1, resolver.getBundles().size());
-
+
ResolverBundle resBundleA = resolver.getBundle(bundleA.getSymbolicName(), null);
assertNotNull("Resolvable not null", resBundleA);
-
+
resBundleA = resolver.getBundle(bundleA.getSymbolicName(), bundleA.getVersion());
assertNotNull("Resolvable not null", resBundleA);
-
+
resBundleA = resolver.getBundle(bundleA);
assertNotNull("Resolvable not null", resBundleA);
-
+
assertNotNull(resBundleA.getBundle());
assertEquals("simpleexport", resBundleA.getSymbolicName());
assertEquals(Version.emptyVersion, resBundleA.getVersion());
-
+
List<ExportPackage> exportPackages = resBundleA.getExportPackages();
assertNotNull("ExportPackages not null", exportPackages);
assertEquals(1, exportPackages.size());
-
+
ExportPackage exportPackage = resBundleA.getExportPackage("org.jboss.test.osgi.classloader.support.a");
assertNotNull("ExportPackage not null", exportPackage);
assertEquals("org.jboss.test.osgi.classloader.support.a", exportPackage.getName());
@@ -90,11 +90,11 @@
assertEquals(0, exportPackage.getMandatory().size());
assertNull("Null includes", exportPackage.getIncludes());
assertNull("Null excludes", exportPackage.getExcludes());
-
+
List<ImportPackage> importPackages = resBundleA.getImportPackages();
assertNotNull("ImportPackages not null", importPackages);
assertEquals(0, importPackages.size());
-
+
assertFalse("No sigleton", resBundleA.isSingleton());
assertFalse("Not resolved", resBundleA.isResolved());
}
@@ -114,7 +114,7 @@
try
{
ResolverBundle resBundleA = getTestResolver().getBundle(bundleA);
-
+
List<ImportPackage> importPackages = resBundleA.getImportPackages();
assertNotNull("ImportPackages not null", importPackages);
assertEquals(1, importPackages.size());
@@ -220,7 +220,7 @@
}
}
- @Ignore
+ @Test
public void testPackageAttribute() throws Exception
{
//Bundle-SymbolicName: packageexportattribute
@@ -231,23 +231,42 @@
{
ResolverBundle resBundleA = getTestResolver().getBundle(bundleA);
ExportPackage exportPackage = resBundleA.getExportPackage("org.jboss.test.osgi.classloader.support.a");
- Set<String> attributes = exportPackage.getAttributes();
- assertTrue("Contains attr", attributes.contains("test"));
+ Set<String> exportAttributes = exportPackage.getAttributes();
+ assertTrue("Contains attr", exportAttributes.contains("test"));
assertEquals("x", exportPackage.getAttribute("test"));
-
+
//Bundle-SymbolicName: simpleimport
//Import-Package: org.jboss.test.osgi.classloader.support.a
- VirtualFile fileB = assembleBundle("bundleA", "/bundles/resolver/simpleimport");
+ VirtualFile fileB = assembleBundle("bundleB", "/bundles/resolver/simpleimport");
Bundle bundleB = framework.installBundle(fileB);
try
{
ResolverBundle resBundleB = getTestResolver().getBundle(bundleB);
ImportPackage importPackage = resBundleB.getImportPackage("org.jboss.test.osgi.classloader.support.a");
+ assertTrue("Attribute match", exportPackage.matchAttributes(importPackage));
}
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
+ {
+ ResolverBundle resBundleB = getTestResolver().getBundle(bundleB);
+ ImportPackage importPackage = resBundleB.getImportPackage("org.jboss.test.osgi.classloader.support.a");
+ Set<String> importAttributes = importPackage.getAttributes();
+ assertTrue("Contains attr", importAttributes.contains("test"));
+ assertEquals("x", importPackage.getAttribute("test"));
+ assertTrue("Attribute match", exportPackage.matchAttributes(importPackage));
+ }
+ finally
+ {
+ bundleB.uninstall();
+ }
}
finally
{
@@ -255,7 +274,46 @@
}
}
- @Ignore
+ @Test
+ public void testPackageAttributeFails() throws Exception
+ {
+ //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
+ {
+ ResolverBundle resBundleA = getTestResolver().getBundle(bundleA);
+ ExportPackage exportPackage = resBundleA.getExportPackage("org.jboss.test.osgi.classloader.support.a");
+ Set<String> attributes = exportPackage.getAttributes();
+ assertTrue("Contains attr", attributes.contains("test"));
+ assertEquals("x", exportPackage.getAttribute("test"));
+
+ //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
+ {
+ ResolverBundle resBundleB = getTestResolver().getBundle(bundleB);
+ ImportPackage importPackage = resBundleB.getImportPackage("org.jboss.test.osgi.classloader.support.a");
+ Set<String> importAttributes = importPackage.getAttributes();
+ assertTrue("Contains attr", importAttributes.contains("test"));
+ assertEquals("y", importPackage.getAttribute("test"));
+ assertFalse("Attribute no match", exportPackage.matchAttributes(importPackage));
+ }
+ finally
+ {
+ bundleB.uninstall();
+ }
+ }
+ finally
+ {
+ bundleA.uninstall();
+ }
+ }
+
+ @Test
public void testPackageAttributeMandatory() throws Exception
{
//Bundle-SymbolicName: packageexportattributemandatory
@@ -271,10 +329,84 @@
assertEquals("x", exportPackage.getAttribute("test"));
Set<String> mandatory = exportPackage.getMandatory();
assertTrue("Contains test", mandatory.contains("test"));
+
+ //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
+ {
+ ResolverBundle resBundleB = getTestResolver().getBundle(bundleB);
+ ImportPackage importPackage = resBundleB.getImportPackage("org.jboss.test.osgi.classloader.support.a");
+ Set<String> importAttributes = importPackage.getAttributes();
+ assertTrue("Contains attr", importAttributes.contains("test"));
+ assertEquals("x", importPackage.getAttribute("test"));
+ assertTrue("Attribute match", exportPackage.matchAttributes(importPackage));
+ }
+ finally
+ {
+ bundleB.uninstall();
+ }
}
finally
{
bundleA.uninstall();
}
}
+
+ @Test
+ public void testPackageAttributeMandatoryFails() throws Exception
+ {
+ //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
+ {
+ ResolverBundle resBundleA = getTestResolver().getBundle(bundleA);
+ ExportPackage exportPackage = resBundleA.getExportPackage("org.jboss.test.osgi.classloader.support.a");
+ Set<String> attributes = exportPackage.getAttributes();
+ assertTrue("Contains test", attributes.contains("test"));
+ assertEquals("x", exportPackage.getAttribute("test"));
+ Set<String> mandatory = exportPackage.getMandatory();
+ assertTrue("Contains test", mandatory.contains("test"));
+
+ //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
+ {
+ ResolverBundle resBundleB = getTestResolver().getBundle(bundleB);
+ ImportPackage importPackage = resBundleB.getImportPackage("org.jboss.test.osgi.classloader.support.a");
+ assertFalse("Attribute no match", exportPackage.matchAttributes(importPackage));
+ }
+ finally
+ {
+ bundleB.uninstall();
+ }
+
+ //Bundle-SymbolicName: packageimportattributefails
+ //Import-Package: org.jboss.test.osgi.classloader.support.a;test=y
+ fileB = assembleBundle("bundleB", "/bundles/resolver/packageimportattributefails");
+ bundleB = framework.installBundle(fileB);
+ try
+ {
+ ResolverBundle resBundleB = getTestResolver().getBundle(bundleB);
+ ImportPackage importPackage = resBundleB.getImportPackage("org.jboss.test.osgi.classloader.support.a");
+ Set<String> importAttributes = importPackage.getAttributes();
+ assertTrue("Contains attr", importAttributes.contains("test"));
+ assertEquals("y", importPackage.getAttribute("test"));
+ assertFalse("Attribute no match", exportPackage.matchAttributes(importPackage));
+ }
+ finally
+ {
+ bundleB.uninstall();
+ }
+ }
+ finally
+ {
+ bundleA.uninstall();
+ }
+ }
}
\ No newline at end of file
14 years, 10 months
JBoss-OSGI SVN: r96636 - projects/jboss-osgi/trunk/reactor/framework/src/test/resources.
by jboss-osgi-commits@lists.jboss.org
Author: thomas.diesler(a)jboss.com
Date: 2009-11-20 04:08:09 -0500 (Fri, 20 Nov 2009)
New Revision: 96636
Added:
projects/jboss-osgi/trunk/reactor/framework/src/test/resources/log4j-console.xml
Log:
Add log4j-console.xml to be used in eclipse
Added: projects/jboss-osgi/trunk/reactor/framework/src/test/resources/log4j-console.xml
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/test/resources/log4j-console.xml (rev 0)
+++ projects/jboss-osgi/trunk/reactor/framework/src/test/resources/log4j-console.xml 2009-11-20 09:08:09 UTC (rev 96636)
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
+
+<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="false">
+
+ <!-- ============================== -->
+ <!-- Append messages to the console -->
+ <!-- ============================== -->
+
+ <appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
+ <param name="Target" value="System.out" />
+ <param name="Threshold" value="INFO" />
+ <layout class="org.apache.log4j.PatternLayout">
+ <param name="ConversionPattern" value="%d{HH:mm:ss,SSS} %-5p [%c{1}] %m%n" />
+ </layout>
+ </appender>
+
+ <!-- ================ -->
+ <!-- Limit categories -->
+ <!-- ================ -->
+
+ <!-- Show jboss deployer traces
+ <category name="org.jboss.deployer">
+ <priority value="TRACE" />
+ </category>
+ -->
+
+ <!-- ======================= -->
+ <!-- Setup the Root category -->
+ <!-- ======================= -->
+
+ <root>
+ <appender-ref ref="CONSOLE"/>
+ </root>
+
+</log4j:configuration>
Property changes on: projects/jboss-osgi/trunk/reactor/framework/src/test/resources/log4j-console.xml
___________________________________________________________________
Name: svn:keywords
+ Id Revision
Name: svn:eol-style
+ LF
14 years, 10 months
JBoss-OSGI SVN: r96607 - projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/bundle.
by jboss-osgi-commits@lists.jboss.org
Author: alesj
Date: 2009-11-19 19:12:12 -0500 (Thu, 19 Nov 2009)
New Revision: 96607
Modified:
projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/bundle/OSGiScopeInfo.java
Log:
Check for null service.
Modified: projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/bundle/OSGiScopeInfo.java
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/bundle/OSGiScopeInfo.java 2009-11-20 00:10:15 UTC (rev 96606)
+++ projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/bundle/OSGiScopeInfo.java 2009-11-20 00:12:12 UTC (rev 96607)
@@ -77,8 +77,12 @@
if (qualifier instanceof Class)
return key;
- Class<?> clazz = serviceState.getService().getClass();
- key.addScope(new Scope(CommonLevels.CLASS, clazz));
+ Object service = serviceState.getService();
+ if (service != null)
+ {
+ Class<?> clazz = service.getClass();
+ key.addScope(new Scope(CommonLevels.CLASS, clazz));
+ }
return key;
}
}
\ No newline at end of file
14 years, 10 months
JBoss-OSGI SVN: r96606 - projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/bundle.
by jboss-osgi-commits@lists.jboss.org
Author: alesj
Date: 2009-11-19 19:10:15 -0500 (Thu, 19 Nov 2009)
New Revision: 96606
Modified:
projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/bundle/OSGiScopeInfo.java
projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/bundle/OSGiServiceState.java
Log:
Fix scope info usage #3.
Modified: projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/bundle/OSGiScopeInfo.java
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/bundle/OSGiScopeInfo.java 2009-11-19 23:56:49 UTC (rev 96605)
+++ projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/bundle/OSGiScopeInfo.java 2009-11-20 00:10:15 UTC (rev 96606)
@@ -34,9 +34,12 @@
*/
public class OSGiScopeInfo extends AbstractScopeInfo
{
- private OSGiScopeInfo(Object name, String className)
+ private OSGiServiceState serviceState;
+
+ private OSGiScopeInfo(Object name, String className, OSGiServiceState serviceState)
{
super(name, className);
+ this.serviceState = serviceState;
}
/**
@@ -45,30 +48,37 @@
* @param name the name
* @param className the class name
* @param clazz the class
+ * @param serviceState the service state
* @return new scope info
*/
- static ScopeInfo createScopeInfo(Object name, String className, Class<?> clazz)
+ static ScopeInfo createScopeInfo(Object name, String className, Class<?> clazz, OSGiServiceState serviceState)
{
if (className == null && clazz != null)
className = clazz.getName();
- OSGiScopeInfo result = new OSGiScopeInfo(name, className);
+ OSGiScopeInfo result = new OSGiScopeInfo(name, className, serviceState);
if (clazz != null)
- result.update(clazz);
+ {
+ ScopeKey key = result.getScope();
+ key.addScope(new Scope(CommonLevels.CLASS, clazz));
+ }
return result;
}
- /**
- * Add class scope.
- *
- * @param clazz the class
- */
- void update(Class<?> clazz)
+ @Override
+ public ScopeKey getScope()
{
- if (clazz == null)
- throw new IllegalArgumentException("Null class");
+ // THIS IS A HACK - the scope originally gets initialise with a class name, we fix it to have the class
+ ScopeKey key = super.getScope();
+ Scope scope = key.getScope(CommonLevels.CLASS);
+ if (scope == null)
+ return key;
+ Object qualifier = scope.getQualifier();
+ if (qualifier instanceof Class)
+ return key;
- ScopeKey key = getScope();
+ Class<?> clazz = serviceState.getService().getClass();
key.addScope(new Scope(CommonLevels.CLASS, clazz));
+ return key;
}
}
\ No newline at end of file
Modified: projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/bundle/OSGiServiceState.java
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/bundle/OSGiServiceState.java 2009-11-19 23:56:49 UTC (rev 96605)
+++ projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/bundle/OSGiServiceState.java 2009-11-20 00:10:15 UTC (rev 96606)
@@ -195,9 +195,19 @@
else if (clazzes.length == 1)
className = clazzes[0];
- setScopeInfo(OSGiScopeInfo.createScopeInfo(getName(), className, clazz));
+ setScopeInfo(OSGiScopeInfo.createScopeInfo(getName(), className, clazz, this));
}
+ /**
+ * Get service directly.
+ *
+ * @return the service
+ */
+ Object getService()
+ {
+ return getService(bundleState);
+ }
+
@Override
public Object getTarget()
{
@@ -207,12 +217,12 @@
public Object ungetTarget()
{
bundleState.ungetService(this);
- return getService(bundleState);
+ return getService();
}
public Object invoke(String name, Object[] parameters, String[] signature) throws Throwable
{
- Object service = getService(bundleState);
+ Object service = getService();
return getBeanInfo().invoke(service, name, signature, parameters);
}
@@ -232,13 +242,13 @@
public Object get(String name) throws Throwable
{
- Object service = getService(bundleState);
+ Object service = getService();
return getBeanInfo().getProperty(service, name);
}
public void set(String name, Object value) throws Throwable
{
- Object service = getService(bundleState);
+ Object service = getService();
getBeanInfo().setProperty(service, name, value);
}
@@ -250,7 +260,7 @@
{
Kernel kernel = bundleState.getBundleManager().getKernel();
KernelConfigurator configurator = kernel.getConfigurator();
- Object service = getService(bundleState);
+ Object service = getService();
if (service != null)
beanInfo = configurator.getBeanInfo(service.getClass());
}
@@ -262,12 +272,6 @@
return beanInfo;
}
- @Override
- public OSGiScopeInfo getScopeInfo()
- {
- return (OSGiScopeInfo)super.getScopeInfo();
- }
-
/**
* Get the service.
*
@@ -296,7 +300,6 @@
{
service = checkObjClass(serviceFactory.getService(bundleState.getBundle(), getRegistration()));
serviceCache.put(bundleState, service);
- getScopeInfo().update(service.getClass());
}
catch (Throwable t)
{
14 years, 10 months
JBoss-OSGI SVN: r96605 - projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/bundle.
by jboss-osgi-commits@lists.jboss.org
Author: alesj
Date: 2009-11-19 18:56:49 -0500 (Thu, 19 Nov 2009)
New Revision: 96605
Modified:
projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/bundle/OSGiScopeInfo.java
projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/bundle/OSGiServiceState.java
Log:
Fix scope info usage #2.
Modified: projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/bundle/OSGiScopeInfo.java
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/bundle/OSGiScopeInfo.java 2009-11-19 23:40:30 UTC (rev 96604)
+++ projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/bundle/OSGiScopeInfo.java 2009-11-19 23:56:49 UTC (rev 96605)
@@ -22,9 +22,10 @@
package org.jboss.osgi.framework.bundle;
import org.jboss.dependency.plugins.AbstractScopeInfo;
+import org.jboss.dependency.spi.ScopeInfo;
+import org.jboss.metadata.spi.scope.CommonLevels;
+import org.jboss.metadata.spi.scope.Scope;
import org.jboss.metadata.spi.scope.ScopeKey;
-import org.jboss.metadata.spi.scope.Scope;
-import org.jboss.metadata.spi.scope.CommonLevels;
/**
* OSGi ScopeInfo
@@ -33,18 +34,40 @@
*/
public class OSGiScopeInfo extends AbstractScopeInfo
{
- public OSGiScopeInfo(Object name, String className)
+ private OSGiScopeInfo(Object name, String className)
{
super(name, className);
}
/**
+ * Create scope info.
+ *
+ * @param name the name
+ * @param className the class name
+ * @param clazz the class
+ * @return new scope info
+ */
+ static ScopeInfo createScopeInfo(Object name, String className, Class<?> clazz)
+ {
+ if (className == null && clazz != null)
+ className = clazz.getName();
+
+ OSGiScopeInfo result = new OSGiScopeInfo(name, className);
+ if (clazz != null)
+ result.update(clazz);
+ return result;
+ }
+
+ /**
* Add class scope.
*
* @param clazz the class
*/
void update(Class<?> clazz)
{
+ if (clazz == null)
+ throw new IllegalArgumentException("Null class");
+
ScopeKey key = getScope();
key.addScope(new Scope(CommonLevels.CLASS, clazz));
}
Modified: projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/bundle/OSGiServiceState.java
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/bundle/OSGiServiceState.java 2009-11-19 23:40:30 UTC (rev 96604)
+++ projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/bundle/OSGiServiceState.java 2009-11-19 23:56:49 UTC (rev 96605)
@@ -187,14 +187,15 @@
protected void initOSGiScopeInfo()
{
String className = null;
+ Class<?> clazz = null;
Object target = serviceOrFactory;
if (target != null && target instanceof ServiceFactory == false)
- className = target.getClass().getName();
+ clazz = target.getClass();
else if (clazzes.length == 1)
className = clazzes[0];
- setScopeInfo(new OSGiScopeInfo(getName(), className));
+ setScopeInfo(OSGiScopeInfo.createScopeInfo(getName(), className, clazz));
}
@Override
14 years, 10 months
JBoss-OSGI SVN: r96604 - projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/bundle.
by jboss-osgi-commits@lists.jboss.org
Author: alesj
Date: 2009-11-19 18:40:30 -0500 (Thu, 19 Nov 2009)
New Revision: 96604
Added:
projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/bundle/OSGiScopeInfo.java
Modified:
projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/bundle/OSGiServiceState.java
Log:
Fix scope info usage.
Copied: projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/bundle/OSGiScopeInfo.java (from rev 96603, projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/bundle/OSGiServiceState.java)
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/bundle/OSGiScopeInfo.java (rev 0)
+++ projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/bundle/OSGiScopeInfo.java 2009-11-19 23:40:30 UTC (rev 96604)
@@ -0,0 +1,51 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2009, Red Hat Middleware LLC, and individual contributors
+* as indicated by the @author tags. See the copyright.txt file in the
+* distribution for a full listing of individual contributors.
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/
+package org.jboss.osgi.framework.bundle;
+
+import org.jboss.dependency.plugins.AbstractScopeInfo;
+import org.jboss.metadata.spi.scope.ScopeKey;
+import org.jboss.metadata.spi.scope.Scope;
+import org.jboss.metadata.spi.scope.CommonLevels;
+
+/**
+ * OSGi ScopeInfo
+ *
+ * @author <a href="ales.justin(a)jboss.org">Ales Justin</a>
+ */
+public class OSGiScopeInfo extends AbstractScopeInfo
+{
+ public OSGiScopeInfo(Object name, String className)
+ {
+ super(name, className);
+ }
+
+ /**
+ * Add class scope.
+ *
+ * @param clazz the class
+ */
+ void update(Class<?> clazz)
+ {
+ ScopeKey key = getScope();
+ key.addScope(new Scope(CommonLevels.CLASS, clazz));
+ }
+}
\ No newline at end of file
Modified: projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/bundle/OSGiServiceState.java
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/bundle/OSGiServiceState.java 2009-11-19 23:12:27 UTC (rev 96603)
+++ projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/bundle/OSGiServiceState.java 2009-11-19 23:40:30 UTC (rev 96604)
@@ -34,7 +34,6 @@
import org.jboss.beans.info.spi.BeanInfo;
import org.jboss.dependency.plugins.AbstractControllerContext;
-import org.jboss.dependency.plugins.AbstractScopeInfo;
import org.jboss.dependency.spi.dispatch.InvokeDispatchContext;
import org.jboss.kernel.Kernel;
import org.jboss.kernel.spi.config.KernelConfigurator;
@@ -188,10 +187,14 @@
protected void initOSGiScopeInfo()
{
String className = null;
+
Object target = serviceOrFactory;
- if (target != null)
+ if (target != null && target instanceof ServiceFactory == false)
className = target.getClass().getName();
- setScopeInfo(new AbstractScopeInfo(getName(), className));
+ else if (clazzes.length == 1)
+ className = clazzes[0];
+
+ setScopeInfo(new OSGiScopeInfo(getName(), className));
}
@Override
@@ -258,6 +261,12 @@
return beanInfo;
}
+ @Override
+ public OSGiScopeInfo getScopeInfo()
+ {
+ return (OSGiScopeInfo)super.getScopeInfo();
+ }
+
/**
* Get the service.
*
@@ -286,6 +295,7 @@
{
service = checkObjClass(serviceFactory.getService(bundleState.getBundle(), getRegistration()));
serviceCache.put(bundleState, service);
+ getScopeInfo().update(service.getClass());
}
catch (Throwable t)
{
14 years, 10 months
JBoss-OSGI SVN: r96603 - projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/bundle.
by jboss-osgi-commits@lists.jboss.org
Author: alesj
Date: 2009-11-19 18:12:27 -0500 (Thu, 19 Nov 2009)
New Revision: 96603
Modified:
projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/bundle/OSGiServiceState.java
Log:
Check permission for getCL.
Modified: projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/bundle/OSGiServiceState.java
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/bundle/OSGiServiceState.java 2009-11-19 23:08:37 UTC (rev 96602)
+++ projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/bundle/OSGiServiceState.java 2009-11-19 23:12:27 UTC (rev 96603)
@@ -67,6 +67,9 @@
/** The log */
private static final Logger log = Logger.getLogger(OSGiServiceState.class);
+ /** The get classloader permission */
+ private static final RuntimePermission GET_CLASSLOADER_PERMISSION = new RuntimePermission("getClassLoader");
+
/** Used to generate a unique id */
private static final AtomicLong serviceIDGenerator = new AtomicLong();
@@ -216,6 +219,10 @@
public ClassLoader getClassLoader() throws Throwable
{
+ SecurityManager sm = System.getSecurityManager();
+ if (sm != null)
+ sm.checkPermission(GET_CLASSLOADER_PERMISSION);
+
return BundleClassLoader.createClassLoader(getBundle());
}
14 years, 10 months
JBoss-OSGI SVN: r96602 - in projects/jboss-osgi/trunk/reactor/framework: src/main/java/org/jboss/osgi/framework/bundle and 1 other directory.
by jboss-osgi-commits@lists.jboss.org
Author: alesj
Date: 2009-11-19 18:08:37 -0500 (Thu, 19 Nov 2009)
New Revision: 96602
Modified:
projects/jboss-osgi/trunk/reactor/framework/pom.xml
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/bundle/OSGiServiceState.java
Log:
[JBOSGI-141]; initial ungetTarget impl.
Update Kernel to 2.2.x.
Modified: projects/jboss-osgi/trunk/reactor/framework/pom.xml
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/pom.xml 2009-11-19 23:08:35 UTC (rev 96601)
+++ projects/jboss-osgi/trunk/reactor/framework/pom.xml 2009-11-19 23:08:37 UTC (rev 96602)
@@ -41,7 +41,7 @@
<version.jboss.aop>2.1.0.CR3</version.jboss.aop>
<version.jboss.classloading>2.0.8-SNAPSHOT</version.jboss.classloading>
<version.jboss.deployers>2.0.9-SNAPSHOT</version.jboss.deployers>
- <version.jboss.microcontainer>2.0.9.GA</version.jboss.microcontainer>
+ <version.jboss.kernel>2.2.0-SNAPSHOT</version.jboss.kernel>
<version.jboss.test>1.1.4.GA</version.jboss.test>
<surefire.system.args>${surefire.memory.args} ${surefire.jpda.args} ${surefire.profiler.args}</surefire.system.args>
</properties>
@@ -87,9 +87,21 @@
</exclusion>
<exclusion>
<groupId>org.jboss.microcontainer</groupId>
+ <artifactId>jboss-kernel</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.jboss.microcontainer</groupId>
<artifactId>jboss-dependency</artifactId>
</exclusion>
<exclusion>
+ <groupId>org.jboss.kernel</groupId>
+ <artifactId>jboss-dependency</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.jboss.kernel</groupId>
+ <artifactId>jboss-kernel</artifactId>
+ </exclusion>
+ <exclusion>
<groupId>org.jboss</groupId>
<artifactId>jboss-reflect</artifactId>
</exclusion>
@@ -111,11 +123,47 @@
<groupId>org.jboss.cl</groupId>
<artifactId>jboss-classloader</artifactId>
<version>${version.jboss.classloading}</version>
+ <exclusions>
+ <exclusion>
+ <groupId>org.jboss.microcontainer</groupId>
+ <artifactId>jboss-dependency</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.jboss.microcontainer</groupId>
+ <artifactId>jboss-kernel</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.jboss.kernel</groupId>
+ <artifactId>jboss-dependency</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.jboss.kernel</groupId>
+ <artifactId>jboss-kernel</artifactId>
+ </exclusion>
+ </exclusions>
</dependency>
<dependency>
<groupId>org.jboss.cl</groupId>
<artifactId>jboss-classloading</artifactId>
<version>${version.jboss.classloading}</version>
+ <exclusions>
+ <exclusion>
+ <groupId>org.jboss.microcontainer</groupId>
+ <artifactId>jboss-dependency</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.jboss.microcontainer</groupId>
+ <artifactId>jboss-kernel</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.jboss.kernel</groupId>
+ <artifactId>jboss-dependency</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.jboss.kernel</groupId>
+ <artifactId>jboss-kernel</artifactId>
+ </exclusion>
+ </exclusions>
</dependency>
<dependency>
<groupId>org.jboss.cl</groupId>
@@ -126,12 +174,46 @@
<groupId>org.jboss</groupId>
<artifactId>jboss-vfs</artifactId>
</exclusion>
+ <exclusion>
+ <groupId>org.jboss.microcontainer</groupId>
+ <artifactId>jboss-dependency</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.jboss.microcontainer</groupId>
+ <artifactId>jboss-kernel</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.jboss.kernel</groupId>
+ <artifactId>jboss-dependency</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.jboss.kernel</groupId>
+ <artifactId>jboss-kernel</artifactId>
+ </exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.jboss.deployers</groupId>
<artifactId>jboss-deployers-impl</artifactId>
<version>${version.jboss.deployers}</version>
+ <exclusions>
+ <exclusion>
+ <groupId>org.jboss.microcontainer</groupId>
+ <artifactId>jboss-dependency</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.jboss.microcontainer</groupId>
+ <artifactId>jboss-kernel</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.jboss.kernel</groupId>
+ <artifactId>jboss-dependency</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.jboss.kernel</groupId>
+ <artifactId>jboss-kernel</artifactId>
+ </exclusion>
+ </exclusions>
</dependency>
<dependency>
<groupId>org.jboss.deployers</groupId>
@@ -142,6 +224,22 @@
<groupId>org.jboss</groupId>
<artifactId>jboss-vfs</artifactId>
</exclusion>
+ <exclusion>
+ <groupId>org.jboss.microcontainer</groupId>
+ <artifactId>jboss-dependency</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.jboss.microcontainer</groupId>
+ <artifactId>jboss-kernel</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.jboss.kernel</groupId>
+ <artifactId>jboss-dependency</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.jboss.kernel</groupId>
+ <artifactId>jboss-kernel</artifactId>
+ </exclusion>
</exclusions>
</dependency>
<dependency>
@@ -153,22 +251,83 @@
<groupId>org.jboss</groupId>
<artifactId>jboss-vfs</artifactId>
</exclusion>
+ <exclusion>
+ <groupId>org.jboss.microcontainer</groupId>
+ <artifactId>jboss-dependency</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.jboss.microcontainer</groupId>
+ <artifactId>jboss-kernel</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.jboss.kernel</groupId>
+ <artifactId>jboss-dependency</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.jboss.kernel</groupId>
+ <artifactId>jboss-kernel</artifactId>
+ </exclusion>
</exclusions>
</dependency>
<dependency>
- <groupId>org.jboss.microcontainer</groupId>
+ <groupId>org.jboss.kernel</groupId>
<artifactId>jboss-kernel</artifactId>
- <version>${version.jboss.microcontainer}</version>
+ <version>${version.jboss.kernel}</version>
<exclusions>
<exclusion>
<groupId>org.jboss</groupId>
<artifactId>jboss-vfs</artifactId>
</exclusion>
+ <exclusion>
+ <groupId>org.jboss.microcontainer</groupId>
+ <artifactId>jboss-dependency</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.jboss.microcontainer</groupId>
+ <artifactId>jboss-kernel</artifactId>
+ </exclusion>
</exclusions>
</dependency>
<dependency>
+ <groupId>org.jboss.kernel</groupId>
+ <artifactId>jboss-dependency</artifactId>
+ <version>${version.jboss.kernel}</version>
+ <exclusions>
+ <exclusion>
+ <groupId>org.jboss</groupId>
+ <artifactId>jboss-vfs</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.jboss.microcontainer</groupId>
+ <artifactId>jboss-dependency</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.jboss.microcontainer</groupId>
+ <artifactId>jboss-kernel</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
<groupId>org.jboss.osgi</groupId>
<artifactId>jboss-osgi-spi</artifactId>
+ <exclusions>
+ <exclusion>
+ <groupId>org.jboss.microcontainer</groupId>
+ <artifactId>jboss-dependency</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.jboss.microcontainer</groupId>
+ <artifactId>jboss-kernel</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.jboss.kernel</groupId>
+ <artifactId>jboss-dependency</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.jboss.kernel</groupId>
+ <artifactId>jboss-kernel</artifactId>
+ </exclusion>
+ </exclusions>
</dependency>
<dependency>
<groupId>org.jboss.osgi.runtime</groupId>
@@ -178,6 +337,22 @@
<groupId>org.jboss</groupId>
<artifactId>jboss-vfs</artifactId>
</exclusion>
+ <exclusion>
+ <groupId>org.jboss.microcontainer</groupId>
+ <artifactId>jboss-dependency</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.jboss.microcontainer</groupId>
+ <artifactId>jboss-kernel</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.jboss.kernel</groupId>
+ <artifactId>jboss-dependency</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.jboss.kernel</groupId>
+ <artifactId>jboss-kernel</artifactId>
+ </exclusion>
</exclusions>
</dependency>
<dependency>
@@ -188,6 +363,22 @@
<groupId>org.jboss</groupId>
<artifactId>jboss-vfs</artifactId>
</exclusion>
+ <exclusion>
+ <groupId>org.jboss.microcontainer</groupId>
+ <artifactId>jboss-dependency</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.jboss.microcontainer</groupId>
+ <artifactId>jboss-kernel</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.jboss.kernel</groupId>
+ <artifactId>jboss-dependency</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.jboss.kernel</groupId>
+ <artifactId>jboss-kernel</artifactId>
+ </exclusion>
</exclusions>
</dependency>
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-19 23:08:35 UTC (rev 96601)
+++ projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/bundle/AbstractBundleState.java 2009-11-19 23:08:37 UTC (rev 96602)
@@ -443,6 +443,11 @@
return getBundleManager().getService(this, reference);
}
+ Object getService(OSGiServiceState serviceState)
+ {
+ return getBundleManager().getService(this, serviceState);
+ }
+
public ServiceReference getServiceReference(String clazz)
{
checkValidBundleContext();
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-19 23:08:35 UTC (rev 96601)
+++ projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/bundle/OSGiBundleManager.java 2009-11-19 23:08:37 UTC (rev 96602)
@@ -21,8 +21,6 @@
*/
package org.jboss.osgi.framework.bundle;
-import static org.jboss.osgi.spi.OSGiConstants.PROPERTY_AUTO_START;
-
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
@@ -48,8 +46,8 @@
import java.util.concurrent.Executor;
import java.util.concurrent.Executors;
import java.util.jar.Attributes;
+import java.util.jar.Attributes.Name;
import java.util.jar.Manifest;
-import java.util.jar.Attributes.Name;
import org.jboss.dependency.spi.Controller;
import org.jboss.dependency.spi.ControllerContext;
@@ -77,6 +75,7 @@
import org.jboss.osgi.framework.plugins.ResolverPlugin;
import org.jboss.osgi.framework.plugins.ServicePlugin;
import org.jboss.osgi.framework.util.NoFilter;
+import static org.jboss.osgi.spi.OSGiConstants.PROPERTY_AUTO_START;
import org.jboss.util.collection.ConcurrentSet;
import org.jboss.virtual.VFS;
import org.jboss.virtual.VFSUtils;
@@ -1219,6 +1218,18 @@
{
OSGiServiceReferenceWrapper serviceReference = (OSGiServiceReferenceWrapper)reference;
OSGiServiceState serviceState = serviceReference.getServiceState();
+ return getService(bundleState, serviceState);
+ }
+
+ /**
+ * Get a service
+ *
+ * @param bundleState the bundle that requests the service
+ * @param serviceState the service state
+ * @return the service
+ */
+ Object getService(AbstractBundleState bundleState, OSGiServiceState serviceState)
+ {
Object result = serviceState.getService(bundleState);
if (result != null)
bundleState.addServiceInUse(serviceState);
Modified: projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/bundle/OSGiServiceState.java
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/bundle/OSGiServiceState.java 2009-11-19 23:08:35 UTC (rev 96601)
+++ projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/bundle/OSGiServiceState.java 2009-11-19 23:08:37 UTC (rev 96602)
@@ -32,10 +32,17 @@
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.atomic.AtomicLong;
+import org.jboss.beans.info.spi.BeanInfo;
import org.jboss.dependency.plugins.AbstractControllerContext;
+import org.jboss.dependency.plugins.AbstractScopeInfo;
+import org.jboss.dependency.spi.dispatch.InvokeDispatchContext;
+import org.jboss.kernel.Kernel;
+import org.jboss.kernel.spi.config.KernelConfigurator;
import org.jboss.logging.Logger;
import org.jboss.osgi.framework.plugins.FrameworkEventsPlugin;
import org.jboss.osgi.framework.util.CaseInsensitiveDictionary;
+import org.jboss.osgi.spi.util.BundleClassLoader;
+import org.jboss.reflect.spi.ClassInfo;
import org.jboss.util.collection.ConcurrentSet;
import org.jboss.util.id.GUID;
import org.osgi.framework.Bundle;
@@ -55,7 +62,7 @@
* @author <a href="ales.justin(a)jboss.org">Ales Justin</a>
* @version $Revision: 1.1 $
*/
-public class OSGiServiceState extends AbstractControllerContext implements ServiceReference, ServiceRegistration
+public class OSGiServiceState extends AbstractControllerContext implements ServiceReference, ServiceRegistration, InvokeDispatchContext
{
/** The log */
private static final Logger log = Logger.getLogger(OSGiServiceState.class);
@@ -90,6 +97,9 @@
/** The using bundles */
private Set<AbstractBundleState> usingBundles = new ConcurrentSet<AbstractBundleState>();
+ /** The bean info */
+ private BeanInfo beanInfo;
+
/**
* Create a new OSGiServiceState.
*
@@ -129,6 +139,8 @@
this.properties = new CaseInsensitiveDictionary(properties);
serviceRegistration = new OSGiServiceRegistrationWrapper(this);
+
+ initOSGiScopeInfo();
}
/**
@@ -165,12 +177,80 @@
}
@Override
+ protected void initScopeInfo()
+ {
+ // nothing
+ }
+
+ protected void initOSGiScopeInfo()
+ {
+ String className = null;
+ Object target = serviceOrFactory;
+ if (target != null)
+ className = target.getClass().getName();
+ setScopeInfo(new AbstractScopeInfo(getName(), className));
+ }
+
+ @Override
public Object getTarget()
{
- // do we cache this? or how to unget?
- return getService(getBundleState());
+ return bundleState.getService(this);
}
+ public Object ungetTarget()
+ {
+ bundleState.ungetService(this);
+ return getService(bundleState);
+ }
+
+ public Object invoke(String name, Object[] parameters, String[] signature) throws Throwable
+ {
+ Object service = getService(bundleState);
+ return getBeanInfo().invoke(service, name, signature, parameters);
+ }
+
+ public ClassInfo getClassInfo()
+ {
+ return getBeanInfo().getClassInfo();
+ }
+
+ public ClassLoader getClassLoader() throws Throwable
+ {
+ return BundleClassLoader.createClassLoader(getBundle());
+ }
+
+ public Object get(String name) throws Throwable
+ {
+ Object service = getService(bundleState);
+ return getBeanInfo().getProperty(service, name);
+ }
+
+ public void set(String name, Object value) throws Throwable
+ {
+ Object service = getService(bundleState);
+ getBeanInfo().setProperty(service, name, value);
+ }
+
+ public BeanInfo getBeanInfo()
+ {
+ if (beanInfo == null)
+ {
+ try
+ {
+ Kernel kernel = bundleState.getBundleManager().getKernel();
+ KernelConfigurator configurator = kernel.getConfigurator();
+ Object service = getService(bundleState);
+ if (service != null)
+ beanInfo = configurator.getBeanInfo(service.getClass());
+ }
+ catch (Throwable t)
+ {
+ throw new RuntimeException(t);
+ }
+ }
+ return beanInfo;
+ }
+
/**
* Get the service.
*
14 years, 10 months
JBoss-OSGI SVN: r96582 - in projects/jboss-osgi/trunk/reactor/framework/src: main/java/org/jboss/osgi/framework/resolver/internal and 8 other directories.
by jboss-osgi-commits@lists.jboss.org
Author: thomas.diesler(a)jboss.com
Date: 2009-11-19 10:59:11 -0500 (Thu, 19 Nov 2009)
New Revision: 96582
Added:
projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/packageexportattribute/
projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/packageexportattribute/META-INF/
projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/packageexportattribute/META-INF/MANIFEST.MF
projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/packageexportattributemandatory/
projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/packageexportattributemandatory/META-INF/
projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/packageexportattributemandatory/META-INF/MANIFEST.MF
projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/packageimportattribute/
projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/packageimportattributefails/
Modified:
projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/ExportPackage.java
projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/ImportPackage.java
projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/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/test/java/org/jboss/test/osgi/resolver/AbstractImportExportTest.java
projects/jboss-osgi/trunk/reactor/framework/src/test/java/org/jboss/test/osgi/resolver/ResolverMetadataTest.java
projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/packageimportattribute/META-INF/MANIFEST.MF
projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/packageimportattributefails/META-INF/MANIFEST.MF
Log:
Package attribute matching in resolver - WIP
Modified: projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/ExportPackage.java
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/ExportPackage.java 2009-11-19 15:27:17 UTC (rev 96581)
+++ projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/ExportPackage.java 2009-11-19 15:59:11 UTC (rev 96582)
@@ -21,7 +21,6 @@
*/
package org.jboss.osgi.framework.resolver;
-import java.util.List;
import java.util.Set;
import org.osgi.framework.Version;
@@ -42,32 +41,32 @@
Version getVersion();
/**
- * Get the list of packages that is used by this export.
+ * Get the set of packages that is used by this export.
*
* @return the list of uses
*/
- List<String> getUses();
+ Set<String> getUses();
/**
- * Get the list of mandadtory attributes declared by this export.
+ * Get the set of mandadtory attributes declared by this export.
*
* @return An empty list if there are no mandatory exports declared.
*/
- List<String> getMandatoryAttributes();
+ Set<String> getMandatory();
/**
- * Get the list of included classes in this package export.
+ * Get the set of included classes in this package export.
*
* @return Null if there are no includes defined.
*/
- List<String> getIncludes();
+ Set<String> getIncludes();
/**
- * Get the list of excluded classes in this package export.
+ * Get the set of excluded classes in this package export.
*
* @return Null if there are no excludes defined.
*/
- List<String> getExcludes();
+ Set<String> getExcludes();
/**
* Get the current set of importers of this export package.
Modified: projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/ImportPackage.java
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/ImportPackage.java 2009-11-19 15:27:17 UTC (rev 96581)
+++ projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/ImportPackage.java 2009-11-19 15:59:11 UTC (rev 96582)
@@ -58,6 +58,21 @@
boolean isOptional();
/**
+ * Match the attributes of the given export package
+ *
+ * In order for an import definition to be resolved to an export definition,
+ * the values of the attributes specified by the import definition must match the values
+ * of the attributes of the export definition. By default, a match is not prevented
+ * if the export definition contains attributes that do not occur in the import definition.
+ *
+ * The mandatory directive in the export definition can reverse this by listing all
+ * attributes that the Framework must match in the import definition.
+ *
+ * @return true if the attributes match
+ */
+ boolean matchAttributes(ExportPackage exportPackage);
+
+ /**
* Get the exporter that this import package is wired to.
*
* @return Null if the import is not yet resolved.
Modified: projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/ExportPackageImpl.java
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/ExportPackageImpl.java 2009-11-19 15:27:17 UTC (rev 96581)
+++ projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/ExportPackageImpl.java 2009-11-19 15:59:11 UTC (rev 96582)
@@ -21,11 +21,9 @@
*/
package org.jboss.osgi.framework.resolver.internal;
-import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
-import java.util.List;
import java.util.Set;
import org.jboss.osgi.framework.metadata.Parameter;
@@ -57,38 +55,44 @@
return Version.parseVersion(version != null ? version.getValue().toString() : null);
}
- public List<String> getUses()
+ public Set<String> getUses()
{
- return getDirectiveValueList(Constants.USES_DIRECTIVE);
+ return getDirectiveValues(Constants.USES_DIRECTIVE);
}
- public List<String> getExcludes()
+ public Set<String> getExcludes()
{
- List<String> valueList = getDirectiveValueList(Constants.EXCLUDE_DIRECTIVE);
+ Set<String> valueList = getDirectiveValues(Constants.EXCLUDE_DIRECTIVE);
return valueList.isEmpty() ? null : valueList;
}
- public List<String> getIncludes()
+ public Set<String> getIncludes()
{
- List<String> valueList = getDirectiveValueList(Constants.INCLUDE_DIRECTIVE);
+ Set<String> valueList = getDirectiveValues(Constants.INCLUDE_DIRECTIVE);
return valueList.isEmpty() ? null : valueList;
}
- public List<String> getMandatoryAttributes()
+ public Set<String> getMandatory()
{
- return getDirectiveValueList(Constants.MANDATORY_DIRECTIVE);
+ return getDirectiveValues(Constants.MANDATORY_DIRECTIVE);
}
@SuppressWarnings("unchecked")
- private List<String> getDirectiveValueList(String key)
+ private Set<String> getDirectiveValues(String key)
{
- List<String> valueList = new ArrayList<String>();
+ Set<String> valueList = new HashSet<String>();
Parameter directive = getParameterizedAttribute().getDirective(key);
if (directive != null)
{
- valueList.addAll((Collection<String>)directive.getValue());
+ Object value = directive.getValue();
+ if (value instanceof Collection<?>)
+ valueList.addAll((Collection<String>)value);
+ else if (value instanceof String)
+ valueList.add((String)value);
+ else
+ throw new IllegalStateException("Invalid directive value: " + value);
}
- return Collections.unmodifiableList(valueList);
+ return Collections.unmodifiableSet(valueList);
}
public Set<ImportPackage> getImporters()
Modified: projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/ImportPackageImpl.java
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/ImportPackageImpl.java 2009-11-19 15:27:17 UTC (rev 96581)
+++ projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/ImportPackageImpl.java 2009-11-19 15:59:11 UTC (rev 96582)
@@ -21,6 +21,8 @@
*/
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;
@@ -74,6 +76,19 @@
return optional;
}
+ public boolean matchAttributes(ExportPackage exportPackage)
+ {
+ if (exportPackage == null)
+ throw new IllegalArgumentException("Null exportPackage");
+
+ boolean match = false;
+ Set<String> importAttributes = getAttributes();
+ Set<String> exportAttributes = exportPackage.getAttributes();
+ Set<String> mandatoryAttributes = exportPackage.getMandatory();
+
+ return match;
+ }
+
public ExportPackage getExporter()
{
return exporter;
Modified: projects/jboss-osgi/trunk/reactor/framework/src/test/java/org/jboss/test/osgi/resolver/AbstractImportExportTest.java
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/test/java/org/jboss/test/osgi/resolver/AbstractImportExportTest.java 2009-11-19 15:27:17 UTC (rev 96581)
+++ projects/jboss-osgi/trunk/reactor/framework/src/test/java/org/jboss/test/osgi/resolver/AbstractImportExportTest.java 2009-11-19 15:59:11 UTC (rev 96582)
@@ -1231,12 +1231,12 @@
*/
@Test
- public void testAttributeImportPackage() throws Exception
+ public void testImportPackageAttribute() throws Exception
{
}
@Test
- public void testAttributeImportPackageFails() throws Exception
+ public void testImportPackageAttributeFails() throws Exception
{
}
}
\ No newline at end of file
Modified: projects/jboss-osgi/trunk/reactor/framework/src/test/java/org/jboss/test/osgi/resolver/ResolverMetadataTest.java
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/test/java/org/jboss/test/osgi/resolver/ResolverMetadataTest.java 2009-11-19 15:27:17 UTC (rev 96581)
+++ projects/jboss-osgi/trunk/reactor/framework/src/test/java/org/jboss/test/osgi/resolver/ResolverMetadataTest.java 2009-11-19 15:59:11 UTC (rev 96582)
@@ -30,14 +30,16 @@
import static org.junit.Assert.assertTrue;
import java.util.List;
+import java.util.Set;
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.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;
import org.junit.Test;
import org.osgi.framework.Bundle;
import org.osgi.framework.Version;
@@ -62,39 +64,39 @@
Resolver resolver = getTestResolver();
assertEquals(1, resolver.getBundles().size());
- ResolverBundle resolvableA = resolver.getBundle(bundleA.getSymbolicName(), null);
- assertNotNull("Resolvable not null", resolvableA);
+ ResolverBundle resBundleA = resolver.getBundle(bundleA.getSymbolicName(), null);
+ assertNotNull("Resolvable not null", resBundleA);
- resolvableA = resolver.getBundle(bundleA.getSymbolicName(), bundleA.getVersion());
- assertNotNull("Resolvable not null", resolvableA);
+ resBundleA = resolver.getBundle(bundleA.getSymbolicName(), bundleA.getVersion());
+ assertNotNull("Resolvable not null", resBundleA);
- resolvableA = resolver.getBundle(bundleA);
- assertNotNull("Resolvable not null", resolvableA);
+ resBundleA = resolver.getBundle(bundleA);
+ assertNotNull("Resolvable not null", resBundleA);
- assertNotNull(resolvableA.getBundle());
- assertEquals("simpleexport", resolvableA.getSymbolicName());
- assertEquals(Version.emptyVersion, resolvableA.getVersion());
+ assertNotNull(resBundleA.getBundle());
+ assertEquals("simpleexport", resBundleA.getSymbolicName());
+ assertEquals(Version.emptyVersion, resBundleA.getVersion());
- List<ExportPackage> exportPackages = resolvableA.getExportPackages();
+ List<ExportPackage> exportPackages = resBundleA.getExportPackages();
assertNotNull("ExportPackages not null", exportPackages);
assertEquals(1, exportPackages.size());
- ExportPackage exportPackage = resolvableA.getExportPackage("org.jboss.test.osgi.classloader.support.a");
+ ExportPackage exportPackage = resBundleA.getExportPackage("org.jboss.test.osgi.classloader.support.a");
assertNotNull("ExportPackage not null", exportPackage);
assertEquals("org.jboss.test.osgi.classloader.support.a", exportPackage.getName());
assertEquals(Version.emptyVersion, exportPackage.getVersion());
assertEquals(0, exportPackage.getUses().size());
- assertEquals(0, exportPackage.getMandatoryAttributes().size());
+ assertEquals(0, exportPackage.getMandatory().size());
assertNull("Null includes", exportPackage.getIncludes());
assertNull("Null excludes", exportPackage.getExcludes());
- List<ImportPackage> importPackages = resolvableA.getImportPackages();
+ List<ImportPackage> importPackages = resBundleA.getImportPackages();
assertNotNull("ImportPackages not null", importPackages);
assertEquals(0, importPackages.size());
- assertFalse("No sigleton", resolvableA.isSingleton());
- assertFalse("Not resolved", resolvableA.isResolved());
+ assertFalse("No sigleton", resBundleA.isSingleton());
+ assertFalse("Not resolved", resBundleA.isResolved());
}
finally
{
@@ -111,13 +113,13 @@
Bundle bundleA = framework.installBundle(fileA);
try
{
- ResolverBundle resolvableA = getTestResolver().getBundle(bundleA);
+ ResolverBundle resBundleA = getTestResolver().getBundle(bundleA);
- List<ImportPackage> importPackages = resolvableA.getImportPackages();
+ List<ImportPackage> importPackages = resBundleA.getImportPackages();
assertNotNull("ImportPackages not null", importPackages);
assertEquals(1, importPackages.size());
- ImportPackage importPackage = resolvableA.getImportPackage("org.jboss.test.osgi.classloader.support.a");
+ ImportPackage importPackage = resBundleA.getImportPackage("org.jboss.test.osgi.classloader.support.a");
assertNotNull("ImportPackage not null", importPackage);
assertEquals("org.jboss.test.osgi.classloader.support.a", importPackage.getName());
@@ -140,8 +142,8 @@
Bundle bundleA = framework.installBundle(fileA);
try
{
- ResolverBundle resolvableA = getTestResolver().getBundle(bundleA);
- assertTrue("Sigleton", resolvableA.isSingleton());
+ ResolverBundle resBundleA = getTestResolver().getBundle(bundleA);
+ assertTrue("Sigleton", resBundleA.isSingleton());
}
finally
{
@@ -158,8 +160,8 @@
Bundle bundleA = framework.installBundle(fileA);
try
{
- ResolverBundle resolvableA = getTestResolver().getBundle(bundleA);
- List<RequiredBundle> requiredBundles = resolvableA.getRequiredBundles();
+ ResolverBundle resBundleA = getTestResolver().getBundle(bundleA);
+ List<RequiredBundle> requiredBundles = resBundleA.getRequiredBundles();
assertEquals("RequiredBundles not null", 1, requiredBundles.size());
RequiredBundle reqBundle = requiredBundles.get(0);
assertEquals("simpleexport", reqBundle.getSymbolicName());
@@ -181,8 +183,8 @@
Bundle bundleA = framework.installBundle(fileA);
try
{
- ResolverBundle resolvableA = getTestResolver().getBundle(bundleA);
- List<RequiredBundle> requiredBundles = resolvableA.getRequiredBundles();
+ ResolverBundle resBundleA = getTestResolver().getBundle(bundleA);
+ List<RequiredBundle> requiredBundles = resBundleA.getRequiredBundles();
assertEquals("RequiredBundles not null", 1, requiredBundles.size());
RequiredBundle reqBundle = requiredBundles.get(0);
assertEquals("simpleexport", reqBundle.getSymbolicName());
@@ -204,8 +206,8 @@
Bundle bundleA = framework.installBundle(fileA);
try
{
- ResolverBundle resolvableA = getTestResolver().getBundle(bundleA);
- List<RequiredBundle> requiredBundles = resolvableA.getRequiredBundles();
+ ResolverBundle resBundleA = getTestResolver().getBundle(bundleA);
+ List<RequiredBundle> requiredBundles = resBundleA.getRequiredBundles();
assertEquals("RequiredBundles not null", 1, requiredBundles.size());
RequiredBundle reqBundle = requiredBundles.get(0);
assertEquals("simpleexport", reqBundle.getSymbolicName());
@@ -217,4 +219,62 @@
bundleA.uninstall();
}
}
+
+ @Ignore
+ public void testPackageAttribute() throws Exception
+ {
+ //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
+ {
+ ResolverBundle resBundleA = getTestResolver().getBundle(bundleA);
+ ExportPackage exportPackage = resBundleA.getExportPackage("org.jboss.test.osgi.classloader.support.a");
+ Set<String> attributes = exportPackage.getAttributes();
+ assertTrue("Contains attr", attributes.contains("test"));
+ assertEquals("x", exportPackage.getAttribute("test"));
+
+ //Bundle-SymbolicName: simpleimport
+ //Import-Package: org.jboss.test.osgi.classloader.support.a
+ VirtualFile fileB = assembleBundle("bundleA", "/bundles/resolver/simpleimport");
+ Bundle bundleB = framework.installBundle(fileB);
+ try
+ {
+ ResolverBundle resBundleB = getTestResolver().getBundle(bundleB);
+ ImportPackage importPackage = resBundleB.getImportPackage("org.jboss.test.osgi.classloader.support.a");
+ }
+ finally
+ {
+ bundleB.uninstall();
+ }
+ }
+ finally
+ {
+ bundleA.uninstall();
+ }
+ }
+
+ @Ignore
+ public void testPackageAttributeMandatory() throws Exception
+ {
+ //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
+ {
+ ResolverBundle resBundleA = getTestResolver().getBundle(bundleA);
+ ExportPackage exportPackage = resBundleA.getExportPackage("org.jboss.test.osgi.classloader.support.a");
+ Set<String> attributes = exportPackage.getAttributes();
+ assertTrue("Contains test", attributes.contains("test"));
+ assertEquals("x", exportPackage.getAttribute("test"));
+ Set<String> mandatory = exportPackage.getMandatory();
+ assertTrue("Contains test", mandatory.contains("test"));
+ }
+ finally
+ {
+ bundleA.uninstall();
+ }
+ }
}
\ No newline at end of file
Added: projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/packageexportattribute/META-INF/MANIFEST.MF
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/packageexportattribute/META-INF/MANIFEST.MF (rev 0)
+++ projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/packageexportattribute/META-INF/MANIFEST.MF 2009-11-19 15:59:11 UTC (rev 96582)
@@ -0,0 +1,3 @@
+Bundle-ManifestVersion: 2
+Bundle-SymbolicName: packageexportattribute
+Export-Package: org.jboss.test.osgi.classloader.support.a;test=x
Added: projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/packageexportattributemandatory/META-INF/MANIFEST.MF
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/packageexportattributemandatory/META-INF/MANIFEST.MF (rev 0)
+++ projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/packageexportattributemandatory/META-INF/MANIFEST.MF 2009-11-19 15:59:11 UTC (rev 96582)
@@ -0,0 +1,3 @@
+Bundle-ManifestVersion: 2
+Bundle-SymbolicName: packageexportattributemandatory
+Export-Package: org.jboss.test.osgi.classloader.support.a;test=x;mandatory:=test
Copied: projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/packageimportattribute (from rev 96553, projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/classloader/attributeimportpackageA)
Modified: projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/packageimportattribute/META-INF/MANIFEST.MF
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/classloader/attributeimportpackageA/META-INF/MANIFEST.MF 2009-11-19 07:09:26 UTC (rev 96553)
+++ projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/packageimportattribute/META-INF/MANIFEST.MF 2009-11-19 15:59:11 UTC (rev 96582)
@@ -1,7 +1,3 @@
-Manifest-Version: 1.0
-Implementation-Title: JBoss OSGi tests
-Implementation-Version: test
-Implementation-Vendor: jboss.org
-Bundle-Name: BundleB
-Bundle-SymbolicName: org.jboss.test.osgi.classloader.bundleB
+Bundle-ManifestVersion: 2
+Bundle-SymbolicName: packageimportattribute
Import-Package: org.jboss.test.osgi.classloader.support.a;test=x
Copied: projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/packageimportattributefails (from rev 96553, projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/classloader/attributeimportpackagefails)
Modified: projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/packageimportattributefails/META-INF/MANIFEST.MF
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/classloader/attributeimportpackagefails/META-INF/MANIFEST.MF 2009-11-19 07:09:26 UTC (rev 96553)
+++ projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/packageimportattributefails/META-INF/MANIFEST.MF 2009-11-19 15:59:11 UTC (rev 96582)
@@ -1,7 +1,3 @@
-Manifest-Version: 1.0
-Implementation-Title: JBoss OSGi tests
-Implementation-Version: test
-Implementation-Vendor: jboss.org
-Bundle-Name: BundleB
-Bundle-SymbolicName: org.jboss.test.osgi.classloader.bundleB
+Bundle-ManifestVersion: 2
+Bundle-SymbolicName: packageimportattributefails
Import-Package: org.jboss.test.osgi.classloader.support.a;test=y
14 years, 10 months