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 2014/04/22 14:32:19 UTC
[1/6] git commit: [KARAF-2888] Respect start attribute on feature
bundle informations
Repository: karaf
Updated Branches:
refs/heads/master 0cb8c9133 -> 93ed3f5f1
[KARAF-2888] Respect start attribute on feature bundle informations
Project: http://git-wip-us.apache.org/repos/asf/karaf/repo
Commit: http://git-wip-us.apache.org/repos/asf/karaf/commit/93ed3f5f
Tree: http://git-wip-us.apache.org/repos/asf/karaf/tree/93ed3f5f
Diff: http://git-wip-us.apache.org/repos/asf/karaf/diff/93ed3f5f
Branch: refs/heads/master
Commit: 93ed3f5f1bf1cdd5adc0907adb177144102865cd
Parents: 1b1b676
Author: Guillaume Nodet <gn...@gmail.com>
Authored: Tue Apr 22 14:30:57 2014 +0200
Committer: Guillaume Nodet <gn...@gmail.com>
Committed: Tue Apr 22 14:31:49 2014 +0200
----------------------------------------------------------------------
.../internal/service/FeaturesServiceImpl.java | 21 ++++++++++++--------
1 file changed, 13 insertions(+), 8 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/karaf/blob/93ed3f5f/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 d228632..a8ccd0a 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
@@ -895,8 +895,6 @@ public class FeaturesServiceImpl implements FeaturesService {
}
}
- // TODO: handle bundleInfo.isStart()
-
// Get all resources that will be used to satisfy the old features set
Set<Resource> resourceLinkedToOldFeatures = new HashSet<Resource>();
if (noStart) {
@@ -1188,9 +1186,6 @@ public class FeaturesServiceImpl implements FeaturesService {
bundle = region.installBundle(uri, is);
}
addToMapSet(managed, name, bundle.getBundleId());
- if (!noStart || resourceLinkedToOldFeatures.contains(resource)) {
- toStart.add(bundle);
- }
deployment.resToBnd.put(resource, bundle);
// save a checksum of installed snapshot bundle
if (UPDATE_SNAPSHOTS_CRC.equals(updateSnaphots)
@@ -1201,6 +1196,13 @@ public class FeaturesServiceImpl implements FeaturesService {
if (bi != null && bi.getStartLevel() > 0) {
bundle.adapt(BundleStartLevel.class).setStartLevel(bi.getStartLevel());
}
+ if (resourceLinkedToOldFeatures.contains(resource)) {
+ toStart.add(bundle);
+ } else if (!noStart) {
+ if (bi == null || bi.isStart()) {
+ toStart.add(bundle);
+ }
+ }
}
}
}
@@ -1306,9 +1308,12 @@ public class FeaturesServiceImpl implements FeaturesService {
}
}
- protected BundleInfo mergeBundleInfo(BundleInfo bi, BundleInfo oldBi) {
- // TODO: we need a proper merge strategy when a bundle
- // TODO: comes from different features
+ protected BundleInfo mergeBundleInfo(BundleInfo bi1, BundleInfo bi2) {
+ org.apache.karaf.features.internal.model.Bundle bi = new org.apache.karaf.features.internal.model.Bundle();
+ bi.setLocation(bi1.getLocation());
+ bi.setDependency(bi1.isDependency() && bi2.isDependency());
+ bi.setStart(bi1.isStart() || bi2.isStart());
+ bi.setStartLevel(Math.min(bi1.getStartLevel(), bi2.getStartLevel()));
return bi;
}
[4/6] git commit: [KARAF-2789] Upgrade to SSHD 0.11.0
Posted by gn...@apache.org.
[KARAF-2789] Upgrade to SSHD 0.11.0
Project: http://git-wip-us.apache.org/repos/asf/karaf/repo
Commit: http://git-wip-us.apache.org/repos/asf/karaf/commit/6057a370
Tree: http://git-wip-us.apache.org/repos/asf/karaf/tree/6057a370
Diff: http://git-wip-us.apache.org/repos/asf/karaf/diff/6057a370
Branch: refs/heads/master
Commit: 6057a370184abe9fddb4ca2001883de1d1cfdc60
Parents: 9944918
Author: Guillaume Nodet <gn...@gmail.com>
Authored: Tue Apr 22 09:35:49 2014 +0200
Committer: Guillaume Nodet <gn...@gmail.com>
Committed: Tue Apr 22 14:31:49 2014 +0200
----------------------------------------------------------------------
pom.xml | 2 +-
.../karaf/shell/ssh/KarafFileSystemFactory.java | 10 ++-
.../karaf/shell/ssh/KarafFileSystemView.java | 66 --------------------
3 files changed, 10 insertions(+), 68 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/karaf/blob/6057a370/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 0cc1447..69ef8aa 100644
--- a/pom.xml
+++ b/pom.xml
@@ -247,7 +247,7 @@
<spring40.version>4.0.2.RELEASE_1</spring40.version>
<spring.security31.version>3.1.4.RELEASE</spring.security31.version>
- <sshd.version>0.10.1</sshd.version>
+ <sshd.version>0.11.0</sshd.version>
<struts.bundle.version>1.3.10_1</struts.bundle.version>
<xbean.version>3.16</xbean.version>
<xerces.version>2.11.0</xerces.version>
http://git-wip-us.apache.org/repos/asf/karaf/blob/6057a370/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/KarafFileSystemFactory.java
----------------------------------------------------------------------
diff --git a/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/KarafFileSystemFactory.java b/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/KarafFileSystemFactory.java
index ba3b741..8d69af3 100644
--- a/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/KarafFileSystemFactory.java
+++ b/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/KarafFileSystemFactory.java
@@ -18,9 +18,14 @@
*/
package org.apache.karaf.shell.ssh;
+import java.io.File;
+import java.util.HashMap;
+import java.util.Map;
+
import org.apache.sshd.common.Session;
import org.apache.sshd.common.file.FileSystemFactory;
import org.apache.sshd.common.file.FileSystemView;
+import org.apache.sshd.common.file.nativefs.NativeFileSystemView;
/**
* SSHd file system factory to reduce the visibility to the KARAF_BASE.
@@ -28,7 +33,10 @@ import org.apache.sshd.common.file.FileSystemView;
public class KarafFileSystemFactory implements FileSystemFactory {
public FileSystemView createFileSystemView(Session session) {
- return new KarafFileSystemView(session.getUsername());
+ Map<String, String> roots = new HashMap<String, String>();
+ String dir = new File(System.getProperty("karaf.base")).getAbsolutePath();
+ roots.put("/", dir);
+ return new NativeFileSystemView(session.getUsername(), roots, "/");
}
}
http://git-wip-us.apache.org/repos/asf/karaf/blob/6057a370/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/KarafFileSystemView.java
----------------------------------------------------------------------
diff --git a/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/KarafFileSystemView.java b/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/KarafFileSystemView.java
deleted file mode 100644
index 6724e4f..0000000
--- a/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/KarafFileSystemView.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.karaf.shell.ssh;
-
-import java.io.File;
-
-import org.apache.sshd.common.file.SshFile;
-import org.apache.sshd.common.file.nativefs.NativeFileSystemView;
-import org.apache.sshd.common.file.nativefs.NativeSshFile;
-
-/**
- * Karaf file system view reduced to the KARAF_BASE location
- */
-public class KarafFileSystemView extends NativeFileSystemView {
-
- private String username;
- private String location;
-
- public KarafFileSystemView(String username) {
- super(username);
- this.username = username;
- }
-
- @Override
- public String getVirtualUserDir() {
- return "/";
- }
-
- @Override
- public String getPhysicalUserDir() {
- if (location == null) {
- location = new File(System.getProperty("karaf.base")).getAbsolutePath();
- }
- return location;
- }
-
- protected SshFile getFile(String dir, String file) {
- // get actual file object
- String location = getPhysicalUserDir();
- String physicalName = NativeSshFile.getPhysicalName(location, dir, file, false);
- if (!physicalName.startsWith(location)) {
- throw new IllegalArgumentException("The path is not relative to KARAF_BASE. For security reason, it's not allowed");
- }
- File fileObj = new File(physicalName);
- // strip the root directory and return
- String karafFileName = physicalName.substring(location.length());
- return createNativeSshFile(karafFileName, fileObj, username);
- }
-
-}
[5/6] git commit: [KARAF-2923] Support for user installed bundles in
any region
Posted by gn...@apache.org.
[KARAF-2923] Support for user installed bundles in any region
Project: http://git-wip-us.apache.org/repos/asf/karaf/repo
Commit: http://git-wip-us.apache.org/repos/asf/karaf/commit/1b1b6760
Tree: http://git-wip-us.apache.org/repos/asf/karaf/tree/1b1b6760
Diff: http://git-wip-us.apache.org/repos/asf/karaf/diff/1b1b6760
Branch: refs/heads/master
Commit: 1b1b6760bd73f42bd77cb58fb56f05fc6aa1cc77
Parents: fabd10e
Author: Guillaume Nodet <gn...@gmail.com>
Authored: Tue Apr 22 14:30:20 2014 +0200
Committer: Guillaume Nodet <gn...@gmail.com>
Committed: Tue Apr 22 14:31:49 2014 +0200
----------------------------------------------------------------------
.../internal/region/SubsystemResolver.java | 56 ++++++-
.../internal/service/FeaturesServiceImpl.java | 155 ++++++++++++-------
2 files changed, 152 insertions(+), 59 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/karaf/blob/1b1b6760/features/core/src/main/java/org/apache/karaf/features/internal/region/SubsystemResolver.java
----------------------------------------------------------------------
diff --git a/features/core/src/main/java/org/apache/karaf/features/internal/region/SubsystemResolver.java b/features/core/src/main/java/org/apache/karaf/features/internal/region/SubsystemResolver.java
index 6387023..190a67d 100644
--- a/features/core/src/main/java/org/apache/karaf/features/internal/region/SubsystemResolver.java
+++ b/features/core/src/main/java/org/apache/karaf/features/internal/region/SubsystemResolver.java
@@ -41,6 +41,7 @@ import org.eclipse.equinox.region.RegionDigraph;
import org.eclipse.equinox.region.RegionFilterBuilder;
import org.osgi.framework.BundleException;
import org.osgi.framework.InvalidSyntaxException;
+import org.osgi.framework.wiring.BundleRevision;
import org.osgi.resource.Capability;
import org.osgi.resource.Requirement;
import org.osgi.resource.Resource;
@@ -77,7 +78,7 @@ public class SubsystemResolver {
public Map<Resource, List<Wire>> resolve(
List<Repository> repositories,
Map<String, Set<String>> features,
- Collection<? extends Resource> system,
+ Map<String, Set<BundleRevision>> system,
Set<String> overrides,
String featureResolutionRange
) throws Exception {
@@ -117,8 +118,22 @@ public class SubsystemResolver {
root.preResolve(allFeatures, manager, overrides, featureResolutionRange);
// Add system resources
- for (Resource res : system) {
- root.addSystemResource(res);
+ for (Map.Entry<String, Set<BundleRevision>> entry : system.entrySet()) {
+ Subsystem ss = null;
+ String[] parts = entry.getKey().split("/");
+ String path = parts[0];
+ if (path.equals(root.getName())) {
+ ss = root;
+ }
+ for (int i = 1; ss != null && i < parts.length; i++) {
+ path += "/" + parts[i];
+ ss = ss.getChild(path);
+ }
+ if (ss != null) {
+ for (Resource res : entry.getValue()) {
+ ss.addSystemResource(res);
+ }
+ }
}
// Populate digraph and resolve
@@ -147,6 +162,41 @@ public class SubsystemResolver {
return wiring;
}
+ public RegionDigraph getFlatDigraph() throws BundleException, InvalidSyntaxException {
+ RegionDigraph clone = this.digraph.copy();
+ RegionDigraph computedDigraph = digraph;
+ for (Region r : clone.getRegions()) {
+ clone.removeRegion(r);
+ }
+ Map<String, String> flats = getFlatSubsystemsMap();
+ for (Region r : computedDigraph.getRegions()) {
+ if (r.getName().equals(flats.get(r.getName()))) {
+ clone.createRegion(r.getName());
+ }
+ }
+ for (Region r : computedDigraph.getRegions()) {
+ for (RegionDigraph.FilteredRegion fr : computedDigraph.getEdges(r)) {
+ String rt = flats.get(r.getName());
+ String rh = flats.get(fr.getRegion().getName());
+ if (!rh.equals(rt)) {
+ Region tail = clone.getRegion(rt);
+ Region head = clone.getRegion(rh);
+ RegionFilterBuilder rfb = clone.createRegionFilterBuilder();
+ for (Map.Entry<String, Collection<String>> entry : fr.getFilter().getSharingPolicy().entrySet()) {
+ // Discard osgi.identity namespace
+ if (!IDENTITY_NAMESPACE.equals(entry.getKey())) {
+ for (String f : entry.getValue()) {
+ rfb.allow(entry.getKey(), f);
+ }
+ }
+ }
+ clone.connect(tail, rfb.build(), head);
+ }
+ }
+ }
+ return clone;
+ }
+
public Map<String, String> getFlatSubsystemsMap() {
Map<String, String> toFlatten = new HashMap<String, String>();
findSubsystemsToFlatten(root, toFlatten);
http://git-wip-us.apache.org/repos/asf/karaf/blob/1b1b6760/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 b7b3d13..d228632 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
@@ -811,27 +811,49 @@ public class FeaturesServiceImpl implements FeaturesService {
boolean simulate = options.contains(Option.Simulate);
Map<String, Set<String>> installed = state.installedFeatures;
- Map<String, Set<Long>> managed = state.managedBundles;
+ Map<String, Set<Long>> managed = copyMapSet(state.managedBundles);
- // Get a list of resolved and unmanaged bundles to use as capabilities during resolution
- List<BundleRevision> systemBundles = new ArrayList<BundleRevision>();
Bundle[] bundles = systemBundleContext.getBundles();
- for (Bundle bundle : bundles) {
- if (bundle.getState() >= Bundle.RESOLVED) {
- boolean bm = false;
- for (Set<Long> m : managed.values()) {
- bm |= m.contains(bundle.getBundleId());
+
+ // Get a map of unmanaged bundles to use as capabilities during resolution
+ Map<String, Set<BundleRevision>> unmanagedBundles = new HashMap<String, Set<BundleRevision>>();
+ Map<String, Map<String, Map<String, Set<String>>>> policies = new HashMap<String, Map<String, Map<String, Set<String>>>>();
+ {
+ RegionDigraph clone = digraph.copy();
+ for (Region region : clone.getRegions()) {
+ // Get bundles
+ Set<Long> ids = new HashSet<Long>(region.getBundleIds());
+ if (managed.containsKey(region.getName())) {
+ ids.removeAll(managed.get(region.getName()));
}
- if (!bm) {
- BundleRevision res = bundle.adapt(BundleRevision.class);
- systemBundles.add(res);
+ if (!ids.isEmpty()) {
+ Set<BundleRevision> revs = new HashSet<BundleRevision>();
+ for (Bundle bundle : bundles) {
+ if (ids.contains(bundle.getBundleId())) {
+ revs.add(bundle.adapt(BundleRevision.class));
+ }
+ }
+ unmanagedBundles.put(region.getName(), revs);
+ }
+ // Get policies
+ Map<String, Map<String, Set<String>>> edges = new HashMap<String, Map<String, Set<String>>>();
+ for (RegionDigraph.FilteredRegion fr : clone.getEdges(region)) {
+ Map<String, Set<String>> policy = new HashMap<String, Set<String>>();
+ Map<String, Collection<String>> current = fr.getFilter().getSharingPolicy();
+ for (String ns : current.keySet()) {
+ for (String f : current.get(ns)) {
+ addToMapSet(policy, ns, f);
+ }
+ }
+ edges.put(fr.getRegion().getName(), policy);
}
+ policies.put(region.getName(), edges);
}
}
+
// Resolve
// TODO: requirements
// TODO: bundles
- Set<String> overrides = Overrides.loadOverrides(this.overrides);
Repository[] repositories = listRepositories();
if (!installed.containsKey(ROOT_REGION)) {
@@ -842,8 +864,8 @@ public class FeaturesServiceImpl implements FeaturesService {
Map<Resource, List<Wire>> resolution = resolver.resolve(
Arrays.asList(repositories),
features,
- systemBundles,
- overrides,
+ unmanagedBundles,
+ Overrides.loadOverrides(this.overrides),
featureResolutionRange);
Collection<Resource> allResources = resolution.keySet();
Map<String, StreamProvider> providers = resolver.getProviders();
@@ -1043,54 +1065,75 @@ public class FeaturesServiceImpl implements FeaturesService {
//
// Update regions
//
- // TODO: this replace the whole digraph with the computed one
- // TODO: we need to be smarter and allow user modifications or
- // TODO: externally managed regions such as the one managed
- // TODO: by aries subsystems
- RegionDigraph clone = this.digraph.copy();
- RegionDigraph computedDigraph = resolver.getDigraph();
- for (Region r : clone.getRegions()) {
- clone.removeRegion(r);
- }
- Map<String, String> flats = resolver.getFlatSubsystemsMap();
- for (Region r : computedDigraph.getRegions()) {
- if (r.getName().equals(flats.get(r.getName()))) {
- clone.createRegion(r.getName());
- }
- }
- for (Region r : computedDigraph.getRegions()) {
- for (RegionDigraph.FilteredRegion fr : computedDigraph.getEdges(r)) {
- String rt = flats.get(r.getName());
- String rh = flats.get(fr.getRegion().getName());
- if (!rh.equals(rt)) {
- Region tail = clone.getRegion(rt);
- Region head = clone.getRegion(rh);
- RegionFilterBuilder rfb = clone.createRegionFilterBuilder();
- for (Map.Entry<String, Collection<String>> entry : fr.getFilter().getSharingPolicy().entrySet()) {
- // Discard osgi.identity namespace
- if (!IdentityNamespace.IDENTITY_NAMESPACE.equals(entry.getKey())) {
- for (String f : entry.getValue()) {
- rfb.allow(entry.getKey(), f);
- }
+ {
+ RegionDigraph clone = digraph.copy();
+ RegionDigraph computedDigraph = resolver.getFlatDigraph();
+ // Iterate through previously managed regions and
+ // delete those that do not contain any bundles anymore
+ for (String name : state.managedBundles.keySet()) {
+ if (!managed.containsKey(name) && !unmanagedBundles.containsKey(name)) {
+ policies.remove(name);
+ }
+ }
+ // Fix broken filters
+ for (String name : policies.keySet()) {
+ policies.get(name).keySet().retainAll(policies.keySet());
+ }
+ // Update managed regions
+ for (Region computedRegion : computedDigraph.getRegions()) {
+ String name = computedRegion.getName();
+ Map<String, Map<String, Set<String>>> policy = policies.get(name);
+ if (policy == null) {
+ policy = new HashMap<String, Map<String, Set<String>>>();
+ policies.put(name, policy);
+ }
+ for (RegionDigraph.FilteredRegion fr : computedDigraph.getEdges(computedRegion)) {
+ String r2 = fr.getRegion().getName();
+ Map<String, Set<String>> filters = new HashMap<String, Set<String>>();
+ Map<String, Collection<String>> current = fr.getFilter().getSharingPolicy();
+ for (String ns : current.keySet()) {
+ for (String f : current.get(ns)) {
+ addToMapSet(filters, ns, f);
}
}
- clone.connect(tail, rfb.build(), head);
+ policy.put(r2, filters);
}
}
- }
- // Spread bundles across regions
- Region root = clone.getRegion(ROOT_REGION);
- for (BundleRevision revision : systemBundles) {
- root.addBundle(revision.getBundle());
- }
- for (Resource resource : resources.keySet()) {
- Bundle bundle = deployment.resToBnd.get(resource);
- if (bundle != null) {
- String region = resources.get(resource);
- clone.getRegion(region).addBundle(bundle);
+ // Apply all changes
+ for (Region region : clone.getRegions()) {
+ clone.removeRegion(region);
}
+ for (String name : policies.keySet()) {
+ clone.createRegion(name);
+ }
+ for (String r1Name : policies.keySet()) {
+ Region r1 = clone.getRegion(r1Name);
+ Map<String, Map<String, Set<String>>> policy = policies.get(r1Name);
+ for (String r2Name : policy.keySet()) {
+ Region r2 = clone.getRegion(r2Name);
+ RegionFilterBuilder rfb = clone.createRegionFilterBuilder();
+ for (String ns : policy.get(r2Name).keySet()) {
+ for (String f : policy.get(r2Name).get(ns)) {
+ rfb.allow(ns, f);
+ }
+ }
+ clone.connect(r1, rfb.build(), r2);
+ }
+ // Dispatch bundles
+ if (unmanagedBundles.containsKey(r1Name)) {
+ for (BundleRevision rev : unmanagedBundles.get(r1Name)) {
+ r1.addBundle(rev.getBundle());
+ }
+ }
+ if (managed.containsKey(r1Name)) {
+ for (long id : managed.get(r1Name)) {
+ r1.addBundle(id);
+ }
+ }
+ }
+ this.digraph.replace(clone);
}
- this.digraph.replace(clone);
+
//
// Update bundles
[3/6] git commit: [KARAF-2923] Use standard service namespace,
remote IdentityCapability
Posted by gn...@apache.org.
[KARAF-2923] Use standard service namespace, remote IdentityCapability
Project: http://git-wip-us.apache.org/repos/asf/karaf/repo
Commit: http://git-wip-us.apache.org/repos/asf/karaf/commit/99449184
Tree: http://git-wip-us.apache.org/repos/asf/karaf/tree/99449184
Diff: http://git-wip-us.apache.org/repos/asf/karaf/diff/99449184
Branch: refs/heads/master
Commit: 99449184b6f8462bc6e2d334a95ed6ccc6ab70c5
Parents: 0cb8c91
Author: Guillaume Nodet <gn...@gmail.com>
Authored: Tue Apr 22 09:29:25 2014 +0200
Committer: Guillaume Nodet <gn...@gmail.com>
Committed: Tue Apr 22 14:31:49 2014 +0200
----------------------------------------------------------------------
.../resources/etc/config.properties | 8 +--
.../standard/src/main/feature/feature.xml | 2 +-
features/core/pom.xml | 2 +-
.../internal/resolver/IdentityCapability.java | 63 --------------------
.../internal/resolver/ResourceBuilder.java | 1 +
.../internal/resolver/ResourceImpl.java | 10 +++-
.../internal/resolver/ServiceNamespace.java | 30 ----------
.../karaf/features/internal/service/f07.xml | 2 +-
instance/pom.xml | 2 +-
management/server/pom.xml | 2 +-
shell/core/pom.xml | 2 +-
11 files changed, 18 insertions(+), 106 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/karaf/blob/99449184/assemblies/features/framework/src/main/filtered-resources/resources/etc/config.properties
----------------------------------------------------------------------
diff --git a/assemblies/features/framework/src/main/filtered-resources/resources/etc/config.properties b/assemblies/features/framework/src/main/filtered-resources/resources/etc/config.properties
index 3aeac29..d9f3114 100644
--- a/assemblies/features/framework/src/main/filtered-resources/resources/etc/config.properties
+++ b/assemblies/features/framework/src/main/filtered-resources/resources/etc/config.properties
@@ -122,14 +122,10 @@ org.osgi.framework.system.packages.extra= \
org.osgi.framework.system.capabilities= \
${eecap-${java.specification.version}}, \
- service-reference;effective:=active;objectClass=org.osgi.service.packageadmin.PackageAdmin, \
- service-reference;effective:=active;objectClass=org.osgi.service.startlevel.StartLevel, \
- service-reference;effective:=active;objectClass=org.osgi.service.url.URLHandlers, \
+ osgi.service;effective:=active;objectClass=org.osgi.service.packageadmin.PackageAdmin, \
+ osgi.service;effective:=active;objectClass=org.osgi.service.startlevel.StartLevel, \
${services-${karaf.framework}}
-services-felix= \
- service-reference;effective:=active;objectClass=org.apache.felix.framework.monitor.MonitoringService
-
eecap-1.7= osgi.ee; osgi.ee="OSGi/Minimum"; version:List<Version>="1.0,1.1,1.2", \
osgi.ee; osgi.ee="JavaSE"; version:List<Version>="1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7"
eecap-1.6= osgi.ee; osgi.ee="OSGi/Minimum"; version:List<Version>="1.0,1.1,1.2", \
http://git-wip-us.apache.org/repos/asf/karaf/blob/99449184/assemblies/features/standard/src/main/feature/feature.xml
----------------------------------------------------------------------
diff --git a/assemblies/features/standard/src/main/feature/feature.xml b/assemblies/features/standard/src/main/feature/feature.xml
index e7d77c5..eb11953 100644
--- a/assemblies/features/standard/src/main/feature/feature.xml
+++ b/assemblies/features/standard/src/main/feature/feature.xml
@@ -36,7 +36,7 @@
<bundle start-level="20">mvn:org.apache.aries.proxy/org.apache.aries.proxy.api/${aries.proxy.api.version}</bundle>
<bundle start-level="20">mvn:org.apache.aries.proxy/org.apache.aries.proxy.impl/${aries.proxy.version}</bundle>
<capability>
- service-reference;effective:=active;objectClass=org.apache.aries.proxy.ProxyManager
+ osgi.service;effective:=active;objectClass=org.apache.aries.proxy.ProxyManager
</capability>
</feature>
http://git-wip-us.apache.org/repos/asf/karaf/blob/99449184/features/core/pom.xml
----------------------------------------------------------------------
diff --git a/features/core/pom.xml b/features/core/pom.xml
index 8998ba9..52500d8 100644
--- a/features/core/pom.xml
+++ b/features/core/pom.xml
@@ -126,7 +126,7 @@
*
</Import-Package>
<Provide-Capability>
- service-reference;effective:=active;objectClass=org.apache.karaf.features.FeaturesService
+ osgi.service;effective:=active;objectClass=org.apache.karaf.features.FeaturesService
</Provide-Capability>
<Private-Package>
org.apache.karaf.features.internal.*,
http://git-wip-us.apache.org/repos/asf/karaf/blob/99449184/features/core/src/main/java/org/apache/karaf/features/internal/resolver/IdentityCapability.java
----------------------------------------------------------------------
diff --git a/features/core/src/main/java/org/apache/karaf/features/internal/resolver/IdentityCapability.java b/features/core/src/main/java/org/apache/karaf/features/internal/resolver/IdentityCapability.java
deleted file mode 100644
index 20e94fa..0000000
--- a/features/core/src/main/java/org/apache/karaf/features/internal/resolver/IdentityCapability.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.karaf.features.internal.resolver;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.osgi.framework.Version;
-import org.osgi.framework.namespace.IdentityNamespace;
-import org.osgi.resource.Capability;
-import org.osgi.resource.Resource;
-
-public class IdentityCapability extends BaseClause implements Capability
-{
- private final Resource m_resource;
- private final Map<String, String> m_dirs;
- private final Map<String, Object> m_attrs;
-
- public IdentityCapability(Resource resource, String name, String type, Version version)
- {
- m_resource = resource;
- m_dirs = new HashMap<String, String>();
- m_attrs = new HashMap<String, Object>();
- m_attrs.put(IdentityNamespace.IDENTITY_NAMESPACE, name);
- m_attrs.put(IdentityNamespace.CAPABILITY_TYPE_ATTRIBUTE, type);
- m_attrs.put(IdentityNamespace.CAPABILITY_VERSION_ATTRIBUTE, version);
- }
-
- public String getNamespace()
- {
- return IdentityNamespace.IDENTITY_NAMESPACE;
- }
-
- public Map<String, String> getDirectives()
- {
- return m_dirs;
- }
-
- public Map<String, Object> getAttributes()
- {
- return m_attrs;
- }
-
- public Resource getResource()
- {
- return m_resource;
- }
-
-}
http://git-wip-us.apache.org/repos/asf/karaf/blob/99449184/features/core/src/main/java/org/apache/karaf/features/internal/resolver/ResourceBuilder.java
----------------------------------------------------------------------
diff --git a/features/core/src/main/java/org/apache/karaf/features/internal/resolver/ResourceBuilder.java b/features/core/src/main/java/org/apache/karaf/features/internal/resolver/ResourceBuilder.java
index 941ed8c..68f8af6 100644
--- a/features/core/src/main/java/org/apache/karaf/features/internal/resolver/ResourceBuilder.java
+++ b/features/core/src/main/java/org/apache/karaf/features/internal/resolver/ResourceBuilder.java
@@ -32,6 +32,7 @@ import org.osgi.framework.Version;
import org.osgi.framework.namespace.IdentityNamespace;
import org.osgi.framework.wiring.BundleCapability;
import org.osgi.framework.wiring.BundleRevision;
+import org.osgi.namespace.service.ServiceNamespace;
import org.osgi.resource.Capability;
import org.osgi.resource.Requirement;
import org.osgi.resource.Resource;
http://git-wip-us.apache.org/repos/asf/karaf/blob/99449184/features/core/src/main/java/org/apache/karaf/features/internal/resolver/ResourceImpl.java
----------------------------------------------------------------------
diff --git a/features/core/src/main/java/org/apache/karaf/features/internal/resolver/ResourceImpl.java b/features/core/src/main/java/org/apache/karaf/features/internal/resolver/ResourceImpl.java
index 18e0dc3..873720e 100644
--- a/features/core/src/main/java/org/apache/karaf/features/internal/resolver/ResourceImpl.java
+++ b/features/core/src/main/java/org/apache/karaf/features/internal/resolver/ResourceImpl.java
@@ -17,7 +17,9 @@
package org.apache.karaf.features.internal.resolver;
import java.util.ArrayList;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
import org.osgi.framework.Version;
import org.osgi.framework.namespace.IdentityNamespace;
@@ -39,7 +41,13 @@ public class ResourceImpl implements Resource {
public ResourceImpl(String name, String type, Version version)
{
m_caps = new ArrayList<Capability>();
- m_caps.add(0, new IdentityCapability(this, name, type, version));
+ Map<String, String> dirs = new HashMap<String, String>();
+ Map<String, Object> attrs = new HashMap<String, Object>();
+ attrs.put(IdentityNamespace.IDENTITY_NAMESPACE, name);
+ attrs.put(IdentityNamespace.CAPABILITY_TYPE_ATTRIBUTE, type);
+ attrs.put(IdentityNamespace.CAPABILITY_VERSION_ATTRIBUTE, version);
+ CapabilityImpl identity = new CapabilityImpl(this, IdentityNamespace.IDENTITY_NAMESPACE, dirs, attrs);
+ m_caps.add(identity);
m_reqs = new ArrayList<Requirement>();
}
http://git-wip-us.apache.org/repos/asf/karaf/blob/99449184/features/core/src/main/java/org/apache/karaf/features/internal/resolver/ServiceNamespace.java
----------------------------------------------------------------------
diff --git a/features/core/src/main/java/org/apache/karaf/features/internal/resolver/ServiceNamespace.java b/features/core/src/main/java/org/apache/karaf/features/internal/resolver/ServiceNamespace.java
deleted file mode 100644
index 4fe3bf8..0000000
--- a/features/core/src/main/java/org/apache/karaf/features/internal/resolver/ServiceNamespace.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.karaf.features.internal.resolver;
-
-import org.osgi.resource.Namespace;
-
-/**
- */
-public final class ServiceNamespace extends Namespace {
-
- public static final String SERVICE_NAMESPACE = "service-reference";
-
- private ServiceNamespace() {
- }
-
-}
http://git-wip-us.apache.org/repos/asf/karaf/blob/99449184/features/core/src/test/resources/org/apache/karaf/features/internal/service/f07.xml
----------------------------------------------------------------------
diff --git a/features/core/src/test/resources/org/apache/karaf/features/internal/service/f07.xml b/features/core/src/test/resources/org/apache/karaf/features/internal/service/f07.xml
index 8165d14..354ba86 100644
--- a/features/core/src/test/resources/org/apache/karaf/features/internal/service/f07.xml
+++ b/features/core/src/test/resources/org/apache/karaf/features/internal/service/f07.xml
@@ -28,7 +28,7 @@
<bundle>mvn:org.springframework/spring-web/2.5.6.SEC02</bundle>
</conditional>
<capability>
- service-reference;effective:=active;objectClass=org.apache.aries.proxy.ProxyManager
+ osgi.service;effective:=active;objectClass=org.apache.aries.proxy.ProxyManager
</capability>
<scoping>
<export namespace="osgi.service">
http://git-wip-us.apache.org/repos/asf/karaf/blob/99449184/instance/pom.xml
----------------------------------------------------------------------
diff --git a/instance/pom.xml b/instance/pom.xml
index 8d6ba13..4d1962b 100644
--- a/instance/pom.xml
+++ b/instance/pom.xml
@@ -164,7 +164,7 @@
*
</Import-Package>
<Provide-Capability>
- service-reference;effective:=active;objectClass=org.apache.karaf.instance.core.InstanceService
+ osgi.service;effective:=active;objectClass=org.apache.karaf.instance.core.InstanceService
</Provide-Capability>
<Private-Package>
org.apache.karaf.jpm,
http://git-wip-us.apache.org/repos/asf/karaf/blob/99449184/management/server/pom.xml
----------------------------------------------------------------------
diff --git a/management/server/pom.xml b/management/server/pom.xml
index c522874..f5ad253 100644
--- a/management/server/pom.xml
+++ b/management/server/pom.xml
@@ -118,7 +118,7 @@
org.apache.karaf.util.tracker
</Private-Package>
<Provide-Capability>
- service-reference;effective:=active;objectClass=javax.management.MBeanServer
+ osgi.service;effective:=active;objectClass=javax.management.MBeanServer
</Provide-Capability>
<Bundle-Activator>
org.apache.karaf.management.internal.Activator
http://git-wip-us.apache.org/repos/asf/karaf/blob/99449184/shell/core/pom.xml
----------------------------------------------------------------------
diff --git a/shell/core/pom.xml b/shell/core/pom.xml
index 572430c..d6af05d 100644
--- a/shell/core/pom.xml
+++ b/shell/core/pom.xml
@@ -156,7 +156,7 @@
org.apache.felix.service.threadio,
</Private-Package>
<Provide-Capability>
- service-reference;effective:=active;objectClass=org.apache.karaf.shell.api.console.SessionFactory
+ osgi.service;effective:=active;objectClass=org.apache.karaf.shell.api.console.SessionFactory
</Provide-Capability>
<Bundle-Activator>
org.apache.karaf.shell.impl.console.osgi.Activator
[2/6] git commit: [KARAF-2923] Add back overrides support
Posted by gn...@apache.org.
[KARAF-2923] Add back overrides support
Project: http://git-wip-us.apache.org/repos/asf/karaf/repo
Commit: http://git-wip-us.apache.org/repos/asf/karaf/commit/fabd10e2
Tree: http://git-wip-us.apache.org/repos/asf/karaf/tree/fabd10e2
Diff: http://git-wip-us.apache.org/repos/asf/karaf/diff/fabd10e2
Branch: refs/heads/master
Commit: fabd10e2b33aa656ae30b35566e1642bb120875c
Parents: e8023c6
Author: Guillaume Nodet <gn...@gmail.com>
Authored: Tue Apr 22 10:36:45 2014 +0200
Committer: Guillaume Nodet <gn...@gmail.com>
Committed: Tue Apr 22 14:31:49 2014 +0200
----------------------------------------------------------------------
.../features/internal/region/Subsystem.java | 36 +++++++++++++++-----
.../internal/region/SubsystemResolver.java | 4 +--
.../internal/resolver/FeatureResource.java | 4 +--
.../internal/service/FeaturesServiceImpl.java | 2 +-
.../features/internal/service/Overrides.java | 4 +--
.../features/internal/region/SubsystemTest.java | 22 ++++++++++++
.../karaf/features/internal/region/data3/a.mf | 5 +++
.../karaf/features/internal/region/data3/b.mf | 5 +++
.../features/internal/region/data3/features.xml | 25 ++++++++++++++
9 files changed, 91 insertions(+), 16 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/karaf/blob/fabd10e2/features/core/src/main/java/org/apache/karaf/features/internal/region/Subsystem.java
----------------------------------------------------------------------
diff --git a/features/core/src/main/java/org/apache/karaf/features/internal/region/Subsystem.java b/features/core/src/main/java/org/apache/karaf/features/internal/region/Subsystem.java
index 8d55317..98d5f60 100644
--- a/features/core/src/main/java/org/apache/karaf/features/internal/region/Subsystem.java
+++ b/features/core/src/main/java/org/apache/karaf/features/internal/region/Subsystem.java
@@ -42,6 +42,7 @@ import org.apache.karaf.features.internal.resolver.RequirementImpl;
import org.apache.karaf.features.internal.resolver.ResourceBuilder;
import org.apache.karaf.features.internal.resolver.ResourceImpl;
import org.apache.karaf.features.internal.resolver.ResourceUtils;
+import org.apache.karaf.features.internal.service.Overrides;
import org.eclipse.equinox.region.RegionFilter;
import org.osgi.framework.BundleException;
import org.osgi.framework.Version;
@@ -205,9 +206,10 @@ public class Subsystem extends ResourceImpl {
@SuppressWarnings("InfiniteLoopStatement")
public void preResolve(Collection<Feature> features,
DownloadManager manager,
+ Set<String> overrides,
String featureResolutionRange) throws Exception {
for (Subsystem child : children) {
- child.preResolve(features, manager, featureResolutionRange);
+ child.preResolve(features, manager, overrides, featureResolutionRange);
}
List<Requirement> processed = new ArrayList<Requirement>();
while (true) {
@@ -229,7 +231,7 @@ public class Subsystem extends ResourceImpl {
Subsystem fs = getChild(ssName);
if (fs == null) {
fs = new Subsystem(ssName, feature, this);
- fs.preResolve(features, manager, featureResolutionRange);
+ fs.preResolve(features, manager, overrides, featureResolutionRange);
installable.add(fs);
children.add(fs);
}
@@ -241,7 +243,7 @@ public class Subsystem extends ResourceImpl {
}
}
if (feature != null) {
- final Map<String, Resource> bundles = new ConcurrentHashMap<String, Resource>();
+ final Map<String, ResourceImpl> bundles = new ConcurrentHashMap<String, ResourceImpl>();
final Downloader downloader = manager.createDownloader();
final Map<BundleInfo, Boolean> infos = new HashMap<BundleInfo, Boolean>();
for (Conditional cond : feature.getConditional()) {
@@ -255,21 +257,37 @@ public class Subsystem extends ResourceImpl {
for (Map.Entry<BundleInfo, Boolean> entry : infos.entrySet()) {
final BundleInfo bi = entry.getKey();
final String loc = bi.getLocation();
- final boolean mandatory = entry.getValue();
downloader.download(loc, new DownloadCallback() {
@Override
public void downloaded(StreamProvider provider) throws Exception {
ResourceImpl res = createResource(loc, provider.getMetadata());
bundles.put(loc, res);
- if (bi.isDependency()) {
- addDependency(res, false);
- } else {
- doAddDependency(res, mandatory);
- }
+ }
+ });
+ }
+ for (String override : overrides) {
+ final String loc = Overrides.extractUrl(override);
+ downloader.download(loc, new DownloadCallback() {
+ @Override
+ public void downloaded(StreamProvider provider) throws Exception {
+ ResourceImpl res = createResource(loc, provider.getMetadata());
+ bundles.put(loc, res);
}
});
}
downloader.await();
+ Overrides.override(bundles, overrides);
+ for (Map.Entry<BundleInfo, Boolean> entry : infos.entrySet()) {
+ final BundleInfo bi = entry.getKey();
+ final String loc = bi.getLocation();
+ final boolean mandatory = entry.getValue();
+ ResourceImpl res = bundles.get(loc);
+ if (bi.isDependency()) {
+ addDependency(res, false);
+ } else {
+ doAddDependency(res, mandatory);
+ }
+ }
for (Dependency dep : feature.getDependencies()) {
Subsystem ss = this;
while (!ss.isAcceptDependencies()) {
http://git-wip-us.apache.org/repos/asf/karaf/blob/fabd10e2/features/core/src/main/java/org/apache/karaf/features/internal/region/SubsystemResolver.java
----------------------------------------------------------------------
diff --git a/features/core/src/main/java/org/apache/karaf/features/internal/region/SubsystemResolver.java b/features/core/src/main/java/org/apache/karaf/features/internal/region/SubsystemResolver.java
index 8a98328..6387023 100644
--- a/features/core/src/main/java/org/apache/karaf/features/internal/region/SubsystemResolver.java
+++ b/features/core/src/main/java/org/apache/karaf/features/internal/region/SubsystemResolver.java
@@ -24,7 +24,6 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
-import java.util.TreeMap;
import org.apache.felix.resolver.ResolverImpl;
import org.apache.felix.resolver.Util;
@@ -79,6 +78,7 @@ public class SubsystemResolver {
List<Repository> repositories,
Map<String, Set<String>> features,
Collection<? extends Resource> system,
+ Set<String> overrides,
String featureResolutionRange
) throws Exception {
// Build subsystems on the fly
@@ -114,7 +114,7 @@ public class SubsystemResolver {
for (Repository repo : repositories) {
allFeatures.addAll(Arrays.asList(repo.getFeatures()));
}
- root.preResolve(allFeatures, manager, featureResolutionRange);
+ root.preResolve(allFeatures, manager, overrides, featureResolutionRange);
// Add system resources
for (Resource res : system) {
http://git-wip-us.apache.org/repos/asf/karaf/blob/fabd10e2/features/core/src/main/java/org/apache/karaf/features/internal/resolver/FeatureResource.java
----------------------------------------------------------------------
diff --git a/features/core/src/main/java/org/apache/karaf/features/internal/resolver/FeatureResource.java b/features/core/src/main/java/org/apache/karaf/features/internal/resolver/FeatureResource.java
index 99e1253..707a213 100644
--- a/features/core/src/main/java/org/apache/karaf/features/internal/resolver/FeatureResource.java
+++ b/features/core/src/main/java/org/apache/karaf/features/internal/resolver/FeatureResource.java
@@ -38,7 +38,7 @@ public class FeatureResource extends ResourceImpl {
private final Feature feature;
- public static FeatureResource build(Feature feature, Conditional conditional, String featureRange, Map<String, Resource> locToRes) throws BundleException {
+ public static FeatureResource build(Feature feature, Conditional conditional, String featureRange, Map<String, ? extends Resource> locToRes) throws BundleException {
Feature fcond = conditional.asFeature(feature.getName(), feature.getVersion());
FeatureResource resource = build(fcond, featureRange, locToRes);
for (String cond : conditional.getCondition()) {
@@ -63,7 +63,7 @@ public class FeatureResource extends ResourceImpl {
return resource;
}
- public static FeatureResource build(Feature feature, String featureRange, Map<String, Resource> locToRes) throws BundleException {
+ public static FeatureResource build(Feature feature, String featureRange, Map<String, ? extends Resource> locToRes) throws BundleException {
FeatureResource resource = new FeatureResource(feature);
for (BundleInfo info : feature.getBundles()) {
if (!info.isDependency()) {
http://git-wip-us.apache.org/repos/asf/karaf/blob/fabd10e2/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 ec5b55d..b7b3d13 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
@@ -831,7 +831,6 @@ public class FeaturesServiceImpl implements FeaturesService {
// Resolve
// TODO: requirements
// TODO: bundles
- // TODO: overrides
Set<String> overrides = Overrides.loadOverrides(this.overrides);
Repository[] repositories = listRepositories();
@@ -844,6 +843,7 @@ public class FeaturesServiceImpl implements FeaturesService {
Arrays.asList(repositories),
features,
systemBundles,
+ overrides,
featureResolutionRange);
Collection<Resource> allResources = resolution.keySet();
Map<String, StreamProvider> providers = resolver.getProviders();
http://git-wip-us.apache.org/repos/asf/karaf/blob/fabd10e2/features/core/src/main/java/org/apache/karaf/features/internal/service/Overrides.java
----------------------------------------------------------------------
diff --git a/features/core/src/main/java/org/apache/karaf/features/internal/service/Overrides.java b/features/core/src/main/java/org/apache/karaf/features/internal/service/Overrides.java
index 233a8a2..238b007 100644
--- a/features/core/src/main/java/org/apache/karaf/features/internal/service/Overrides.java
+++ b/features/core/src/main/java/org/apache/karaf/features/internal/service/Overrides.java
@@ -65,12 +65,12 @@ public class Overrides {
* @param resources the list of resources to resolve
* @param overrides list of bundle overrides
*/
- public static void override(Map<String, Resource> resources, Collection<String> overrides) {
+ public static <T extends Resource> void override(Map<String, T> resources, Collection<String> overrides) {
// Do override replacement
for (Clause override : Parser.parseClauses(overrides.toArray(new String[overrides.size()]))) {
String url = override.getName();
String vr = override.getAttribute(OVERRIDE_RANGE);
- Resource over = resources.get(url);
+ T over = resources.get(url);
if (over == null) {
// Ignore invalid overrides
continue;
http://git-wip-us.apache.org/repos/asf/karaf/blob/fabd10e2/features/core/src/test/java/org/apache/karaf/features/internal/region/SubsystemTest.java
----------------------------------------------------------------------
diff --git a/features/core/src/test/java/org/apache/karaf/features/internal/region/SubsystemTest.java b/features/core/src/test/java/org/apache/karaf/features/internal/region/SubsystemTest.java
index 0ef26cb..c16de51 100644
--- a/features/core/src/test/java/org/apache/karaf/features/internal/region/SubsystemTest.java
+++ b/features/core/src/test/java/org/apache/karaf/features/internal/region/SubsystemTest.java
@@ -64,6 +64,7 @@ public class SubsystemTest {
resolver.resolve(Collections.<Repository>singletonList(repo),
features,
Collections.<Resource>emptyList(),
+ Collections.<String>emptySet(),
FeaturesServiceImpl.DEFAULT_FEATURE_RESOLUTION_RANGE);
verify(resolver, expected);
@@ -93,11 +94,32 @@ public class SubsystemTest {
resolver.resolve(Collections.<Repository>singletonList(repo),
features,
Collections.<Resource>emptyList(),
+ Collections.<String>emptySet(),
FeaturesServiceImpl.DEFAULT_FEATURE_RESOLUTION_RANGE);
verify(resolver, expected);
}
+ @Test
+ public void testOverrides() throws Exception {
+ RepositoryImpl repo = new RepositoryImpl(getClass().getResource("data3/features.xml").toURI());
+
+ Map<String, Set<String>> features = new HashMap<String, Set<String>>();
+ addToMapSet(features, "root/apps1", "f1");
+
+ Map<String, Set<String>> expected = new HashMap<String, Set<String>>();
+ addToMapSet(expected, "root/apps1", "a/1.0.1");
+
+ SubsystemResolver resolver = new SubsystemResolver(new TestDownloadManager("data3"));
+ resolver.resolve(Collections.<Repository>singletonList(repo),
+ features,
+ Collections.<Resource>emptyList(),
+ Collections.singleton("b"),
+ FeaturesServiceImpl.DEFAULT_FEATURE_RESOLUTION_RANGE);
+
+ verify(resolver, expected);
+ }
+
private void verify(SubsystemResolver resolver, Map<String, Set<String>> expected) {
Map<String, Set<String>> mapping = getBundleNamesPerRegions(resolver);
if (!expected.equals(mapping)) {
http://git-wip-us.apache.org/repos/asf/karaf/blob/fabd10e2/features/core/src/test/resources/org/apache/karaf/features/internal/region/data3/a.mf
----------------------------------------------------------------------
diff --git a/features/core/src/test/resources/org/apache/karaf/features/internal/region/data3/a.mf b/features/core/src/test/resources/org/apache/karaf/features/internal/region/data3/a.mf
new file mode 100644
index 0000000..20a7811
--- /dev/null
+++ b/features/core/src/test/resources/org/apache/karaf/features/internal/region/data3/a.mf
@@ -0,0 +1,5 @@
+Manifest-Version: 1
+Bundle-ManifestVersion: 2
+Bundle-SymbolicName: a
+Bundle-Version: 1.0.0
+
http://git-wip-us.apache.org/repos/asf/karaf/blob/fabd10e2/features/core/src/test/resources/org/apache/karaf/features/internal/region/data3/b.mf
----------------------------------------------------------------------
diff --git a/features/core/src/test/resources/org/apache/karaf/features/internal/region/data3/b.mf b/features/core/src/test/resources/org/apache/karaf/features/internal/region/data3/b.mf
new file mode 100644
index 0000000..a5439b0
--- /dev/null
+++ b/features/core/src/test/resources/org/apache/karaf/features/internal/region/data3/b.mf
@@ -0,0 +1,5 @@
+Manifest-Version: 1
+Bundle-ManifestVersion: 2
+Bundle-SymbolicName: a
+Bundle-Version: 1.0.1
+
http://git-wip-us.apache.org/repos/asf/karaf/blob/fabd10e2/features/core/src/test/resources/org/apache/karaf/features/internal/region/data3/features.xml
----------------------------------------------------------------------
diff --git a/features/core/src/test/resources/org/apache/karaf/features/internal/region/data3/features.xml b/features/core/src/test/resources/org/apache/karaf/features/internal/region/data3/features.xml
new file mode 100644
index 0000000..575f957
--- /dev/null
+++ b/features/core/src/test/resources/org/apache/karaf/features/internal/region/data3/features.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+-->
+<features name="test" xmlns="http://karaf.apache.org/xmlns/features/v1.3.0">
+
+ <feature name="f1">
+ <bundle>a</bundle>
+ </feature>
+
+</features>
\ No newline at end of file
[6/6] git commit: [KARAF-2888] Respect start level when starting and
stopping bundles
Posted by gn...@apache.org.
[KARAF-2888] Respect start level when starting and stopping bundles
Project: http://git-wip-us.apache.org/repos/asf/karaf/repo
Commit: http://git-wip-us.apache.org/repos/asf/karaf/commit/e8023c6f
Tree: http://git-wip-us.apache.org/repos/asf/karaf/tree/e8023c6f
Diff: http://git-wip-us.apache.org/repos/asf/karaf/diff/e8023c6f
Branch: refs/heads/master
Commit: e8023c6ff4434b349483f2790a62370d3d1f2940
Parents: 6057a37
Author: Guillaume Nodet <gn...@gmail.com>
Authored: Tue Apr 22 10:13:30 2014 +0200
Committer: Guillaume Nodet <gn...@gmail.com>
Committed: Tue Apr 22 14:31:49 2014 +0200
----------------------------------------------------------------------
.../karaf/features/internal/osgi/Activator.java | 3 --
.../internal/service/FeaturesServiceImpl.java | 29 ++++++++++++--------
2 files changed, 18 insertions(+), 14 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/karaf/blob/e8023c6f/features/core/src/main/java/org/apache/karaf/features/internal/osgi/Activator.java
----------------------------------------------------------------------
diff --git a/features/core/src/main/java/org/apache/karaf/features/internal/osgi/Activator.java b/features/core/src/main/java/org/apache/karaf/features/internal/osgi/Activator.java
index 0551d21..b2cdd6e 100644
--- a/features/core/src/main/java/org/apache/karaf/features/internal/osgi/Activator.java
+++ b/features/core/src/main/java/org/apache/karaf/features/internal/osgi/Activator.java
@@ -121,9 +121,6 @@ public class Activator extends BaseActivator {
register(ManagedService.class, featureFinder, props);
FeatureConfigInstaller configInstaller = new FeatureConfigInstaller(configurationAdmin);
- // TODO: honor respectStartLvlDuringFeatureStartup and respectStartLvlDuringFeatureUninstall
-// boolean respectStartLvlDuringFeatureStartup = getBoolean("respectStartLvlDuringFeatureStartup", true);
-// boolean respectStartLvlDuringFeatureUninstall = getBoolean("respectStartLvlDuringFeatureUninstall", true);
String overrides = getString("overrides", new File(System.getProperty("karaf.etc"), "overrides.properties").toURI().toString());
String featureResolutionRange = getString("featureResolutionRange", FeaturesServiceImpl.DEFAULT_FEATURE_RESOLUTION_RANGE);
String bundleUpdateRange = getString("bundleUpdateRange", FeaturesServiceImpl.DEFAULT_BUNDLE_UPDATE_RANGE);
http://git-wip-us.apache.org/repos/asf/karaf/blob/e8023c6f/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 84b9529..ec5b55d 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
@@ -31,6 +31,7 @@ import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
+import java.util.SortedMap;
import java.util.TreeMap;
import java.util.TreeSet;
import java.util.concurrent.Callable;
@@ -888,7 +889,6 @@ public class FeaturesServiceImpl implements FeaturesService {
//
// Compute deployment
//
- // TODO: compute bundles/region mapping to support multiple bundles and bunde moving into a different region
Deployment deployment = computeDeployment(resolver, state);
if (deployment.regions.isEmpty()) {
@@ -1469,19 +1469,22 @@ public class FeaturesServiceImpl implements FeaturesService {
}
protected List<Bundle> getBundlesToStart(Collection<Bundle> bundles) {
- // TODO: make this pluggable ?
- // TODO: honor respectStartLvlDuringFeatureStartup
+ // Restart the features service last, regardless of any other consideration
+ // so that we don't end up with the service trying to do stuff before we're done
+ boolean restart = bundles.remove(bundle);
+
+ SortedMap<Integer, Set<Bundle>> bundlesPerStartLevel = new TreeMap<Integer, Set<Bundle>>();
+ for (Bundle bundle : bundles) {
+ int sl = bundle.adapt(BundleStartLevel.class).getStartLevel();
+ addToMapSet(bundlesPerStartLevel, sl, bundle);
+ }
+ bundles = bundlesPerStartLevel.remove(bundlesPerStartLevel.firstKey());
// We hit FELIX-2949 if we don't use the correct order as Felix resolver isn't greedy.
// In order to minimize that, we make sure we resolve the bundles in the order they
// are given back by the resolution, meaning that all root bundles (i.e. those that were
// not flagged as dependencies in features) are started before the others. This should
// make sure those important bundles are started first and minimize the problem.
-
- // Restart the features service last, regardless of any other consideration
- // so that we don't end up with the service trying to do stuff before we're done
- boolean restart = bundles.remove(bundle);
-
List<BundleRevision> revs = new ArrayList<BundleRevision>();
for (Bundle bundle : bundles) {
revs.add(bundle.adapt(BundleRevision.class));
@@ -1490,15 +1493,19 @@ public class FeaturesServiceImpl implements FeaturesService {
for (BundleRevision rev : RequirementSort.sort(revs)) {
sorted.add(rev.getBundle());
}
- if (restart) {
+ if (sorted.isEmpty() && restart) {
sorted.add(bundle);
}
return sorted;
}
protected List<Bundle> getBundlesToStop(Collection<Bundle> bundles) {
- // TODO: make this pluggable ?
- // TODO: honor respectStartLvlDuringFeatureUninstall
+ SortedMap<Integer, Set<Bundle>> bundlesPerStartLevel = new TreeMap<Integer, Set<Bundle>>();
+ for (Bundle bundle : bundles) {
+ int sl = bundle.adapt(BundleStartLevel.class).getStartLevel();
+ addToMapSet(bundlesPerStartLevel, sl, bundle);
+ }
+ bundles = bundlesPerStartLevel.get(bundlesPerStartLevel.lastKey());
List<Bundle> bundlesToDestroy = new ArrayList<Bundle>();
for (Bundle bundle : bundles) {