Repository: karaf Updated Branches: refs/heads/master ca4d35e7c -> 7b00418f7
[KARAF-2889] Upgrade to Equinox 3.9.1-v20140110-1610 and fix the resolver to cope with equinox Project: http://git-wip-us.apache.org/repos/asf/karaf/repo Commit: http://git-wip-us.apache.org/repos/asf/karaf/commit/7b00418f Tree: http://git-wip-us.apache.org/repos/asf/karaf/tree/7b00418f Diff: http://git-wip-us.apache.org/repos/asf/karaf/diff/7b00418f Branch: refs/heads/master Commit: 7b00418f7d14831ceabf542ac7ab63f083317f1a Parents: ca4d35e Author: Guillaume Nodet <[email protected]> Authored: Tue Apr 29 09:11:32 2014 +0200 Committer: Guillaume Nodet <[email protected]> Committed: Tue Apr 29 09:11:55 2014 +0200 ---------------------------------------------------------------------- assemblies/features/framework/pom.xml | 6 +-- .../resources/etc/config.properties | 2 +- .../internal/region/SubsystemResolver.java | 35 ++++++++++++++- .../main/java/org/apache/karaf/main/Main.java | 46 ++++++++++++-------- pom.xml | 4 +- 5 files changed, 69 insertions(+), 24 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/karaf/blob/7b00418f/assemblies/features/framework/pom.xml ---------------------------------------------------------------------- diff --git a/assemblies/features/framework/pom.xml b/assemblies/features/framework/pom.xml index fd73a47..51dc83a 100644 --- a/assemblies/features/framework/pom.xml +++ b/assemblies/features/framework/pom.xml @@ -61,7 +61,7 @@ </dependency> <dependency> <groupId>org.eclipse</groupId> - <artifactId>org.eclipse.osgi</artifactId> + <artifactId>osgi</artifactId> <scope>runtime</scope> </dependency> <dependency> @@ -310,8 +310,8 @@ </artifactItem> <artifactItem> <groupId>org.eclipse</groupId> - <artifactId>org.eclipse.osgi</artifactId> - <outputDirectory>target/classes/resources/system/org/eclipse/org.eclipse.osgi/${equinox.version}</outputDirectory> + <artifactId>osgi</artifactId> + <outputDirectory>target/classes/resources/system/org/eclipse/osgi/${equinox.version}</outputDirectory> </artifactItem> <artifactItem> <groupId>org.apache.felix</groupId> http://git-wip-us.apache.org/repos/asf/karaf/blob/7b00418f/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 a568d30..3c038eb 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 @@ -50,7 +50,7 @@ karaf.framework=felix # # Location of the OSGi frameworks # -karaf.framework.equinox=mvn\:org.eclipse/org.eclipse.osgi/${equinox.version} +karaf.framework.equinox=mvn\:org.eclipse/osgi/${equinox.version} karaf.framework.felix=mvn\:org.apache.felix/org.apache.felix.framework/${felix.framework.version} # http://git-wip-us.apache.org/repos/asf/karaf/blob/7b00418f/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 fbacb9c..d3b826f 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 @@ -19,6 +19,7 @@ package org.apache.karaf.features.internal.region; import java.util.Collection; import java.util.Collections; import java.util.HashMap; +import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; @@ -32,6 +33,8 @@ import org.apache.karaf.features.internal.download.Downloader; import org.apache.karaf.features.internal.download.StreamProvider; import org.apache.karaf.features.internal.download.simple.SimpleDownloader; import org.apache.karaf.features.internal.resolver.CapabilitySet; +import org.apache.karaf.features.internal.resolver.ResourceBuilder; +import org.apache.karaf.features.internal.resolver.ResourceImpl; import org.apache.karaf.features.internal.resolver.SimpleFilter; import org.apache.karaf.features.internal.resolver.Slf4jResolverLog; import org.eclipse.equinox.internal.region.StandardRegionDigraph; @@ -40,6 +43,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.Version; import org.osgi.framework.wiring.BundleRevision; import org.osgi.resource.Capability; import org.osgi.resource.Requirement; @@ -52,6 +56,8 @@ import org.slf4j.LoggerFactory; import static org.apache.karaf.features.internal.resolver.ResourceUtils.TYPE_FEATURE; import static org.apache.karaf.features.internal.resolver.ResourceUtils.TYPE_SUBSYSTEM; import static org.apache.karaf.features.internal.util.MapUtils.invert; +import static org.osgi.framework.Constants.PROVIDE_CAPABILITY; +import static org.osgi.framework.namespace.ExecutionEnvironmentNamespace.EXECUTION_ENVIRONMENT_NAMESPACE; import static org.osgi.framework.namespace.IdentityNamespace.CAPABILITY_TYPE_ATTRIBUTE; import static org.osgi.framework.namespace.IdentityNamespace.IDENTITY_NAMESPACE; import static org.osgi.framework.namespace.IdentityNamespace.TYPE_BUNDLE; @@ -125,6 +131,9 @@ public class SubsystemResolver { root.preResolve(allFeatures, manager, overrides, featureResolutionRange); // Add system resources + ResourceImpl environmentResource = null; + BundleRevision sysBundleRev = null; + boolean hasEeCap = false; for (Map.Entry<String, Set<BundleRevision>> entry : system.entrySet()) { Subsystem ss = null; String[] parts = entry.getKey().split("/"); @@ -137,11 +146,24 @@ public class SubsystemResolver { ss = ss.getChild(path); } if (ss != null) { - for (Resource res : entry.getValue()) { + for (BundleRevision res : entry.getValue()) { ss.addSystemResource(res); + for (Capability cap : res.getCapabilities(null)) { + hasEeCap |= cap.getNamespace().equals(EXECUTION_ENVIRONMENT_NAMESPACE); + } + if (res.getBundle().getBundleId() == 0) { + sysBundleRev = res; + } } } } + // Under Equinox, the osgi.ee capabilities are not provided by the system bundle + if (!hasEeCap && sysBundleRev != null) { + String provideCaps = sysBundleRev.getBundle().getHeaders().get(PROVIDE_CAPABILITY); + environmentResource = new ResourceImpl("environment", "karaf.environment", Version.emptyVersion); + environmentResource.addCapabilities(ResourceBuilder.parseCapability(environmentResource, provideCaps)); + root.addSystemResource(environmentResource); + } // Populate digraph and resolve digraph = new StandardRegionDigraph(null, null); @@ -152,6 +174,17 @@ public class SubsystemResolver { wiring = resolver.resolve(new SubsystemResolveContext(root, digraph, globalRepository, downloader)); downloader.await(); + // Remove wiring to the fake environment resource + if (environmentResource != null) { + for (List<Wire> wires : wiring.values()) { + for (Iterator<Wire> iterator = wires.iterator(); iterator.hasNext();) { + Wire wire = iterator.next(); + if (wire.getProvider() == environmentResource) { + iterator.remove(); + } + } + } + } // Fragments are always wired to their host only, so create fake wiring to // the subsystem the host is wired to associateFragments(); http://git-wip-us.apache.org/repos/asf/karaf/blob/7b00418f/main/src/main/java/org/apache/karaf/main/Main.java ---------------------------------------------------------------------- diff --git a/main/src/main/java/org/apache/karaf/main/Main.java b/main/src/main/java/org/apache/karaf/main/Main.java index 855e1c1..0ebfb04 100644 --- a/main/src/main/java/org/apache/karaf/main/Main.java +++ b/main/src/main/java/org/apache/karaf/main/Main.java @@ -240,24 +240,36 @@ public class Main { // Hack to set felix logger try { - Field field = framework.getClass().getDeclaredField("m_logger"); - field.setAccessible(true); - Object logger = field.get(framework); - Method method = logger.getClass().getDeclaredMethod("setLogger", Object.class); - method.setAccessible(true); - method.invoke(logger, new Object() { - public void log(ServiceReference sr, int level, String message, Throwable exception) { - Level lvl; - switch (level) { - case 1: lvl = Level.SEVERE; break; - case 2: lvl = Level.WARNING; break; - case 3: lvl = Level.INFO; break; - case 4: lvl = Level.FINE; break; - default: lvl = Level.FINEST; break; + if (framework.getClass().getName().startsWith("org.apache.felix.")) { + Field field = framework.getClass().getDeclaredField("m_logger"); + field.setAccessible(true); + Object logger = field.get(framework); + Method method = logger.getClass().getDeclaredMethod("setLogger", Object.class); + method.setAccessible(true); + method.invoke(logger, new Object() { + public void log(ServiceReference sr, int level, String message, Throwable exception) { + Level lvl; + switch (level) { + case 1: + lvl = Level.SEVERE; + break; + case 2: + lvl = Level.WARNING; + break; + case 3: + lvl = Level.INFO; + break; + case 4: + lvl = Level.FINE; + break; + default: + lvl = Level.FINEST; + break; + } + Logger.getLogger("Felix").log(lvl, message, exception); } - Logger.getLogger("Felix").log(lvl, message, exception); - } - }); + }); + } } catch (Throwable t) { t.printStackTrace(); } http://git-wip-us.apache.org/repos/asf/karaf/blob/7b00418f/pom.xml ---------------------------------------------------------------------- diff --git a/pom.xml b/pom.xml index cd6ef8c..4449a7e 100644 --- a/pom.xml +++ b/pom.xml @@ -152,7 +152,7 @@ <geronimo.atinject-spec.version>1.0</geronimo.atinject-spec.version> <geronimo.jaspic-spec.version>1.1</geronimo.jaspic-spec.version> <easymock.version>3.2</easymock.version> - <equinox.version>3.8.2.v20130124-134944</equinox.version> + <equinox.version>3.9.1-v20140110-1610</equinox.version> <bndlib.version>2.2.0</bndlib.version> <equinox.region.version>1.1.0.v20120522-1841</equinox.region.version> <equinox.coordinator.version>1.1.0.v20120522-1841</equinox.coordinator.version> @@ -1457,7 +1457,7 @@ </dependency> <dependency> <groupId>org.eclipse</groupId> - <artifactId>org.eclipse.osgi</artifactId> + <artifactId>osgi</artifactId> <version>${equinox.version}</version> </dependency> <dependency>
