You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by pa...@apache.org on 2018/07/16 23:26:00 UTC
svn commit: r1836072 - in
/felix/trunk/framework/src/main/java/org/apache/felix/framework:
BundleRevisionImpl.java ExtensionManager.java
util/manifestparser/ManifestParser.java
Author: pauls
Date: Mon Jul 16 23:26:00 2018
New Revision: 1836072
URL: http://svn.apache.org/viewvc?rev=1836072&view=rev
Log:
FELIX-5889: make extension bundle capabilities be indexed by the resolver.
Modified:
felix/trunk/framework/src/main/java/org/apache/felix/framework/BundleRevisionImpl.java
felix/trunk/framework/src/main/java/org/apache/felix/framework/ExtensionManager.java
felix/trunk/framework/src/main/java/org/apache/felix/framework/util/manifestparser/ManifestParser.java
Modified: felix/trunk/framework/src/main/java/org/apache/felix/framework/BundleRevisionImpl.java
URL: http://svn.apache.org/viewvc/felix/trunk/framework/src/main/java/org/apache/felix/framework/BundleRevisionImpl.java?rev=1836072&r1=1836071&r2=1836072&view=diff
==============================================================================
--- felix/trunk/framework/src/main/java/org/apache/felix/framework/BundleRevisionImpl.java (original)
+++ felix/trunk/framework/src/main/java/org/apache/felix/framework/BundleRevisionImpl.java Mon Jul 16 23:26:00 2018
@@ -62,7 +62,6 @@ public class BundleRevisionImpl implemen
private final Version m_version;
private final List<BundleCapability> m_declaredCaps;
- private final List<BundleCapability> m_declaredExtensionCaps;
private final List<BundleRequirement> m_declaredReqs;
private final List<NativeLibrary> m_declaredNativeLibs;
private final int m_declaredActivationPolicy;
@@ -98,7 +97,6 @@ public class BundleRevisionImpl implemen
m_isFragment = false;
m_version = null;
m_declaredCaps = Collections.emptyList();
- m_declaredExtensionCaps = Collections.emptyList();
m_declaredReqs = Collections.emptyList();
m_declaredNativeLibs = null;
m_declaredActivationPolicy = EAGER_ACTIVATION;
@@ -129,8 +127,6 @@ public class BundleRevisionImpl implemen
m_manifestVersion = mp.getManifestVersion();
m_version = mp.getBundleVersion();
m_declaredCaps = mp.getCapabilities();
- m_declaredExtensionCaps = m_isExtension ? ManifestParser.aliasSymbolicName(mp.getExtensionCapabilites(),
- bundle.getFramework().adapt(BundleRevisionImpl.class)) : Collections.EMPTY_LIST;
m_declaredReqs = mp.getRequirements();
m_declaredNativeLibs = mp.getLibraries();
m_declaredActivationPolicy = mp.getActivationPolicy();
@@ -217,23 +213,6 @@ public class BundleRevisionImpl implemen
{
if (cap.getNamespace().equals(namespace))
{
- result.add(cap);
- }
- }
- }
- return result;
- }
-
- public List<BundleCapability> getDeclaredExtensionCapabilities(String namespace)
- {
- List<BundleCapability> result = m_declaredExtensionCaps;
- if (namespace != null)
- {
- result = new ArrayList<BundleCapability>();
- for (BundleCapability cap : m_declaredExtensionCaps)
- {
- if (cap.getNamespace().equals(namespace))
- {
result.add(cap);
}
}
Modified: felix/trunk/framework/src/main/java/org/apache/felix/framework/ExtensionManager.java
URL: http://svn.apache.org/viewvc/felix/trunk/framework/src/main/java/org/apache/felix/framework/ExtensionManager.java?rev=1836072&r1=1836071&r2=1836072&view=diff
==============================================================================
--- felix/trunk/framework/src/main/java/org/apache/felix/framework/ExtensionManager.java (original)
+++ felix/trunk/framework/src/main/java/org/apache/felix/framework/ExtensionManager.java Mon Jul 16 23:26:00 2018
@@ -41,7 +41,10 @@ import org.osgi.framework.BundleExceptio
import org.osgi.framework.Constants;
import org.osgi.framework.FrameworkEvent;
import org.osgi.framework.Version;
+import org.osgi.framework.namespace.BundleNamespace;
import org.osgi.framework.namespace.ExecutionEnvironmentNamespace;
+import org.osgi.framework.namespace.HostNamespace;
+import org.osgi.framework.namespace.IdentityNamespace;
import org.osgi.framework.namespace.NativeNamespace;
import org.osgi.framework.wiring.BundleCapability;
import org.osgi.framework.wiring.BundleRequirement;
@@ -91,6 +94,10 @@ class ExtensionManager implements Conten
{
static final ClassPathExtenderFactory.ClassPathExtender m_extenderFramework;
static final ClassPathExtenderFactory.ClassPathExtender m_extenderBoot;
+ private static final Set<String> IDENTITY = new HashSet<String>(Arrays.asList(
+ BundleNamespace.BUNDLE_NAMESPACE,
+ HostNamespace.HOST_NAMESPACE,
+ IdentityNamespace.IDENTITY_NAMESPACE));
static
{
@@ -527,7 +534,15 @@ class ExtensionManager implements Conten
felix.getDependencies().addDependent(wire);
- m_systemBundleRevision.appendCapabilities(entry.getKey().getDeclaredExtensionCapabilities(null));
+ List<BundleCapability> caps = new ArrayList<BundleCapability>();
+ for (BundleCapability cap : entry.getKey().getDeclaredCapabilities(null))
+ {
+ if (!IDENTITY.contains(cap.getNamespace()))
+ {
+ caps.add(cap);
+ }
+ }
+ m_systemBundleRevision.appendCapabilities(caps);
for (BundleWire w : entry.getValue())
{
if (!w.getRequirement().getNamespace().equals(BundleRevision.HOST_NAMESPACE) &&
@@ -573,11 +588,6 @@ class ExtensionManager implements Conten
m_failedExtensions.addAll(m_unresolvedExtensions);
m_unresolvedExtensions.clear();
- if (!wirings.isEmpty())
- {
- felix.getResolver().addRevision(getRevision());
- }
-
return result;
}
@@ -749,14 +759,16 @@ class ExtensionManager implements Conten
// now loop through the other extensions
for (BundleRevisionImpl extension : extensions)
{
- // check the caps that will be lifted to the system bundle
- for (BundleCapability cap : extension.getDeclaredExtensionCapabilities(req.getNamespace()))
+ for (BundleCapability cap : extension.getDeclaredCapabilities(req.getNamespace()))
{
if (req.matches(cap))
{
// we can use a yet unresolved extension (resolved one are implicitly checked by the
// system bundle loop above as they would be attached.
- wi.add(new BundleWireImpl(m_systemBundleRevision, req, m_systemBundleRevision, cap));
+ wi.add(new BundleWireImpl(m_systemBundleRevision, req,
+ // lift identity
+ IDENTITY.contains(cap.getNamespace()) ?
+ extension : m_systemBundleRevision, cap));
continue outer;
}
}
@@ -875,7 +887,6 @@ class ExtensionManager implements Conten
private volatile Map m_configMap;
private final Map m_headerMap = new StringMap();
private volatile List<BundleCapability> m_capabilities = Collections.EMPTY_LIST;
- private volatile Set<String> m_exportNames = Collections.EMPTY_SET;
private volatile Version m_version;
private volatile BundleWiring m_wiring;
@@ -912,6 +923,7 @@ class ExtensionManager implements Conten
List<BundleCapability> caps = ManifestParser.aliasSymbolicName(mp.getCapabilities(), this);
caps.add(buildNativeCapabilites(this, m_configMap));
appendCapabilities(caps);
+ m_headerMap.put(Constants.EXPORT_PACKAGE, convertCapabilitiesToHeaders(caps));
}
catch (Exception ex)
{
@@ -967,6 +979,7 @@ class ExtensionManager implements Conten
caps.add(buildNativeCapabilites(this, m_configMap));
m_capabilities = Collections.EMPTY_LIST;
appendCapabilities(caps);
+ m_headerMap.put(Constants.EXPORT_PACKAGE, convertCapabilitiesToHeaders(caps));
}
catch (Exception ex)
{
@@ -983,13 +996,11 @@ class ExtensionManager implements Conten
newCaps.addAll(m_capabilities);
newCaps.addAll(caps);
m_capabilities = Util.newImmutableList(newCaps);
- m_headerMap.put(Constants.EXPORT_PACKAGE, convertCapabilitiesToHeaders(newCaps));
}
private String convertCapabilitiesToHeaders(List<BundleCapability> caps)
{
StringBuffer exportSB = new StringBuffer("");
- Set<String> exportNames = new HashSet<String>();
for (BundleCapability cap : caps)
{
@@ -1024,15 +1035,9 @@ class ExtensionManager implements Conten
exportSB.append("\"");
}
}
-
- // Remember exported packages.
- exportNames.add(
- (String) cap.getAttributes().get(BundleRevision.PACKAGE_NAMESPACE));
}
}
- m_exportNames = exportNames;
-
return exportSB.toString();
}
@@ -1166,42 +1171,7 @@ class ExtensionManager implements Conten
@Override
public Class getClassByDelegation(String name) throws ClassNotFoundException
{
- Class clazz = null;
- String pkgName = Util.getClassPackage(name);
- if (shouldBootDelegate(pkgName))
- {
- try
- {
- // Get the appropriate class loader for delegation.
- ClassLoader bdcl = getBootDelegationClassLoader();
- clazz = bdcl.loadClass(name);
- // If this is a java.* package, then always terminate the
- // search; otherwise, continue to look locally if not found.
- if (pkgName.startsWith("java.") || (clazz != null))
- {
- return clazz;
- }
- }
- catch (ClassNotFoundException ex)
- {
- // If this is a java.* package, then always terminate the
- // search; otherwise, continue to look locally if not found.
- if (pkgName.startsWith("java."))
- {
- throw ex;
- }
- }
- }
- if (clazz == null)
- {
- if (!m_systemBundleRevision.m_exportNames.contains(Util.getClassPackage(name)))
- {
- throw new ClassNotFoundException(name);
- }
-
- clazz = getClass().getClassLoader().loadClass(name);
- }
- return clazz;
+ return getClass().getClassLoader().loadClass(name);
}
@Override
Modified: felix/trunk/framework/src/main/java/org/apache/felix/framework/util/manifestparser/ManifestParser.java
URL: http://svn.apache.org/viewvc/felix/trunk/framework/src/main/java/org/apache/felix/framework/util/manifestparser/ManifestParser.java?rev=1836072&r1=1836071&r2=1836072&view=diff
==============================================================================
--- felix/trunk/framework/src/main/java/org/apache/felix/framework/util/manifestparser/ManifestParser.java (original)
+++ felix/trunk/framework/src/main/java/org/apache/felix/framework/util/manifestparser/ManifestParser.java Mon Jul 16 23:26:00 2018
@@ -60,7 +60,6 @@ public class ManifestParser
private volatile String m_bundleSymbolicName;
private volatile Version m_bundleVersion;
private volatile List<BundleCapability> m_capabilities;
- private volatile List<BundleCapability> m_extensionCapabilities;
private volatile List<BundleRequirement> m_requirements;
private volatile List<NativeLibraryClause> m_libraryClauses;
private volatile boolean m_libraryHeadersOptional = false;
@@ -284,19 +283,8 @@ public class ManifestParser
m_capabilities = new ArrayList<BundleCapability>(
capList.size() + exportCaps.size() + provideCaps.size());
m_capabilities.addAll(capList);
-
- if (m_isExtension)
- {
- m_extensionCapabilities = new ArrayList<BundleCapability>();
- m_extensionCapabilities.addAll(exportCaps);
- m_extensionCapabilities.addAll(provideCaps);
- }
- else
- {
- m_extensionCapabilities = Collections.EMPTY_LIST;
- m_capabilities.addAll(exportCaps);
- m_capabilities.addAll(provideCaps);
- }
+ m_capabilities.addAll(exportCaps);
+ m_capabilities.addAll(provideCaps);
//
// Parse activation policy.
@@ -2201,9 +2189,4 @@ public class ManifestParser
return aliasCaps;
}
-
- public List<BundleCapability> getExtensionCapabilites()
- {
- return m_extensionCapabilities;
- }
}