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>

Reply via email to