You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@karaf.apache.org by gn...@apache.org on 2015/02/26 11:35:23 UTC
[4/6] karaf git commit: [KARAF-3529] Fix some problems when applying
the computed resolution
[KARAF-3529] Fix some problems when applying the computed resolution
This problem is visible when installing spring-security feature where java.annotation is not resolved at all. Another problem is when resolving fragments, as we need to check resources wired to the host.
Project: http://git-wip-us.apache.org/repos/asf/karaf/repo
Commit: http://git-wip-us.apache.org/repos/asf/karaf/commit/da5a5771
Tree: http://git-wip-us.apache.org/repos/asf/karaf/tree/da5a5771
Diff: http://git-wip-us.apache.org/repos/asf/karaf/diff/da5a5771
Branch: refs/heads/master
Commit: da5a5771c3ffdf9111e37dd1dab9246e057dcb2f
Parents: 01fa005
Author: Guillaume Nodet <gn...@gmail.com>
Authored: Thu Feb 26 09:06:17 2015 +0100
Committer: Guillaume Nodet <gn...@gmail.com>
Committed: Thu Feb 26 10:53:26 2015 +0100
----------------------------------------------------------------------
.../internal/resolver/SimpleFilter.java | 2 +-
.../features/internal/service/Deployer.java | 11 ++++++-
.../internal/service/FeaturesServiceImpl.java | 33 ++++++++++----------
3 files changed, 28 insertions(+), 18 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/karaf/blob/da5a5771/features/core/src/main/java/org/apache/karaf/features/internal/resolver/SimpleFilter.java
----------------------------------------------------------------------
diff --git a/features/core/src/main/java/org/apache/karaf/features/internal/resolver/SimpleFilter.java b/features/core/src/main/java/org/apache/karaf/features/internal/resolver/SimpleFilter.java
index 2354519..431d023 100644
--- a/features/core/src/main/java/org/apache/karaf/features/internal/resolver/SimpleFilter.java
+++ b/features/core/src/main/java/org/apache/karaf/features/internal/resolver/SimpleFilter.java
@@ -485,7 +485,7 @@ public class SimpleFilter {
vr.getCeiling().toString(),
SimpleFilter.LTE)
);
- } else {
+ } else if (!vr.getCeiling().equals(VersionRange.INFINITE_VERSION)) {
SimpleFilter not =
new SimpleFilter(null, new ArrayList(), SimpleFilter.NOT);
((List<Object>) not.getValue()).add(
http://git-wip-us.apache.org/repos/asf/karaf/blob/da5a5771/features/core/src/main/java/org/apache/karaf/features/internal/service/Deployer.java
----------------------------------------------------------------------
diff --git a/features/core/src/main/java/org/apache/karaf/features/internal/service/Deployer.java b/features/core/src/main/java/org/apache/karaf/features/internal/service/Deployer.java
index 3b7d18d..9a0d6a3 100644
--- a/features/core/src/main/java/org/apache/karaf/features/internal/service/Deployer.java
+++ b/features/core/src/main/java/org/apache/karaf/features/internal/service/Deployer.java
@@ -761,7 +761,7 @@ public class Deployer {
// Resolve bundles
toResolve.addAll(toStart);
toResolve.addAll(toRefresh.keySet());
- removeFragmentsAndBundlesInState(toResolve, UNINSTALLED);
+ removeBundlesInState(toResolve, UNINSTALLED);
callback.resolveBundles(toResolve, resolver.getWiring(), deployment.resToBnd);
// Compute bundles to start
@@ -992,6 +992,15 @@ public class Deployer {
}
}
+ private void removeBundlesInState(Collection<Bundle> bundles, int state) {
+ for (Iterator<Bundle> iterator = bundles.iterator(); iterator.hasNext();) {
+ Bundle bundle = iterator.next();
+ if ((bundle.getState() & state) != 0) {
+ iterator.remove();
+ }
+ }
+ }
+
protected void logDeployment(Deployer.Deployment overallDeployment, boolean verbose) {
if (overallDeployment.regions.isEmpty()) {
print("No deployment change.", verbose);
http://git-wip-us.apache.org/repos/asf/karaf/blob/da5a5771/features/core/src/main/java/org/apache/karaf/features/internal/service/FeaturesServiceImpl.java
----------------------------------------------------------------------
diff --git a/features/core/src/main/java/org/apache/karaf/features/internal/service/FeaturesServiceImpl.java b/features/core/src/main/java/org/apache/karaf/features/internal/service/FeaturesServiceImpl.java
index 2573296..d98049f 100644
--- a/features/core/src/main/java/org/apache/karaf/features/internal/service/FeaturesServiceImpl.java
+++ b/features/core/src/main/java/org/apache/karaf/features/internal/service/FeaturesServiceImpl.java
@@ -77,13 +77,13 @@ import org.osgi.framework.ServiceRegistration;
import org.osgi.framework.Version;
import org.osgi.framework.hooks.resolver.ResolverHook;
import org.osgi.framework.hooks.resolver.ResolverHookFactory;
+import org.osgi.framework.namespace.HostNamespace;
import org.osgi.framework.startlevel.BundleStartLevel;
import org.osgi.framework.startlevel.FrameworkStartLevel;
import org.osgi.framework.wiring.BundleCapability;
import org.osgi.framework.wiring.BundleRequirement;
import org.osgi.framework.wiring.BundleRevision;
import org.osgi.framework.wiring.FrameworkWiring;
-import org.osgi.resource.Requirement;
import org.osgi.resource.Resource;
import org.osgi.resource.Wire;
import org.osgi.service.cm.Configuration;
@@ -1181,23 +1181,24 @@ public class FeaturesServiceImpl implements FeaturesService, Deployer.DeployCall
if (Thread.currentThread() == thread) {
Bundle sourceBundle = requirement.getRevision().getBundle();
Resource sourceResource = bndToRes.get(sourceBundle);
+ Set<Resource> wired = new HashSet<>();
+ // Get a list of allowed wired resources
+ wired.add(sourceResource);
for (Wire wire : wiring.get(sourceResource)) {
- Requirement req = wire.getRequirement();
- if (req.getNamespace().equals(requirement.getNamespace())
- && req.getAttributes().equals(requirement.getAttributes())
- && req.getDirectives().equals(requirement.getDirectives())) {
- for (Iterator<BundleCapability> capIter = candidates.iterator(); capIter.hasNext(); ) {
- BundleCapability cap = capIter.next();
- BundleRevision br = cap.getRevision();
- if (br == wire.getCapability().getResource()) {
- continue;
- }
- Resource res = bndToRes.get(br.getBundle());
- if (res != wire.getCapability().getResource()) {
- capIter.remove();
- }
+ wired.add(wire.getProvider());
+ if (HostNamespace.HOST_NAMESPACE.equals(wire.getRequirement().getNamespace())) {
+ for (Wire hostWire : wiring.get(wire.getProvider())) {
+ wired.add(hostWire.getProvider());
}
- break;
+ }
+ }
+ // Remove candidates that are not allowed
+ for (Iterator<BundleCapability> candIter = candidates.iterator(); candIter.hasNext(); ) {
+ BundleCapability cand = candIter.next();
+ BundleRevision br = cand.getRevision();
+ Resource res = bndToRes.get(br.getBundle());
+ if (!wired.contains(br) && !wired.contains(res)) {
+ candIter.remove();
}
}
}