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/07 10:52:55 UTC
[04/13] [KARAF-2888] New FeaturesService based on the real OSGi
resolver
http://git-wip-us.apache.org/repos/asf/karaf/blob/38502e41/features/obr/src/test/java/org/apache/karaf/features/obr/internal/ObrResolverTest.java
----------------------------------------------------------------------
diff --git a/features/obr/src/test/java/org/apache/karaf/features/obr/internal/ObrResolverTest.java b/features/obr/src/test/java/org/apache/karaf/features/obr/internal/ObrResolverTest.java
deleted file mode 100644
index 0c2676b..0000000
--- a/features/obr/src/test/java/org/apache/karaf/features/obr/internal/ObrResolverTest.java
+++ /dev/null
@@ -1,174 +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.obr.internal;
-
-import static org.easymock.EasyMock.createMock;
-import static org.easymock.EasyMock.expect;
-import static org.easymock.EasyMock.replay;
-import static org.easymock.EasyMock.verify;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-
-import java.io.IOException;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.util.List;
-
-import org.apache.felix.bundlerepository.Reason;
-import org.apache.felix.bundlerepository.RepositoryAdmin;
-import org.apache.felix.bundlerepository.Requirement;
-import org.apache.felix.bundlerepository.Resolver;
-import org.apache.felix.bundlerepository.Resource;
-import org.apache.felix.bundlerepository.impl.DataModelHelperImpl;
-import org.apache.felix.bundlerepository.impl.ReasonImpl;
-import org.apache.karaf.features.BundleInfo;
-import org.apache.karaf.features.internal.model.Bundle;
-import org.easymock.Capture;
-import org.easymock.EasyMock;
-import org.easymock.IAnswer;
-import org.junit.Test;
-
-public class ObrResolverTest {
-
- @Test
- public void testResolver() throws Exception {
- final String requirement = "bundle:(&(symbolicname=org.apache.camel.camel-blueprint)(version>=2.4.0)(version<2.4.1))";
-
- final org.apache.karaf.features.internal.model.Feature f = new org.apache.karaf.features.internal.model.Feature("f1", "1.0");
- f.setResolver("obr");
- f.getBundle().add(new Bundle(requirement));
- final RepositoryAdmin admin = createMock(RepositoryAdmin.class);
- final Resolver resolver = createMock(Resolver.class);
- final Resource resource = createMock(Resource.class);
- final ObrResolver obrResolver = new ObrResolver();
- obrResolver.setRepositoryAdmin(admin);
-
- final Capture<Requirement> captureReq = new Capture<Requirement>();
-
- expect(admin.getHelper()).andReturn(new DataModelHelperImpl()).anyTimes();
- expect(admin.getSystemRepository()).andReturn(createMock(org.apache.felix.bundlerepository.Repository.class));
- expect(admin.getLocalRepository()).andReturn(createMock(org.apache.felix.bundlerepository.Repository.class));
- expect(admin.listRepositories()).andReturn(new org.apache.felix.bundlerepository.Repository[0]);
- expect(admin.resolver(EasyMock.<org.apache.felix.bundlerepository.Repository[]>anyObject())).andReturn(resolver);
- resolver.add(EasyMock.capture(captureReq));
- expect(resolver.resolve(Resolver.NO_OPTIONAL_RESOURCES)).andReturn(true);
- expect(resolver.getAddedResources()).andReturn(new Resource[] { });
- expect(resolver.getRequiredResources()).andReturn(new Resource[] { resource });
- expect(resolver.getReason(resource)).andAnswer(new IAnswer<Reason[]>() {
- public Reason[] answer() throws Throwable {
- return new Reason[] { new ReasonImpl( resource, captureReq.getValue()) };
- }
- });
- expect(resource.getURI()).andReturn("foo:bar");
- replay(admin, resolver, resource);
-
- List<BundleInfo> bundles = obrResolver.resolve(f);
- assertNotNull(bundles);
- assertEquals(1, bundles.size());
- assertEquals("foo:bar", bundles.get(0).getLocation());
- assertEquals(obrResolver.parseRequirement(requirement).toString(), captureReq.getValue().toString());
- verify(admin, resolver, resource);
- }
-
- @Test
- public void testResolverWithOptionalImports() throws Exception {
- final String requirement = "bundle:(&(symbolicname=org.apache.camel.camel-blueprint)(version>=2.4.0)(version<2.4.1))";
-
- final org.apache.karaf.features.internal.model.Feature f = new org.apache.karaf.features.internal.model.Feature("f1", "1.0");
- f.setResolver("obr");
- f.getBundle().add(new Bundle(requirement));
- final RepositoryAdmin admin = createMock(RepositoryAdmin.class);
- final Resolver resolver = createMock(Resolver.class);
- final Resource resource = createMock(Resource.class);
- final Resource optionalResource = createMock(Resource.class);
- final ObrResolver obrResolver = new ObrResolver();
- obrResolver.setRepositoryAdmin(admin);
- obrResolver.setResolveOptionalImports(true);
-
- final Capture<Requirement> captureReq = new Capture<Requirement>();
-
- expect(admin.getHelper()).andReturn(new DataModelHelperImpl()).anyTimes();
- expect(admin.getSystemRepository()).andReturn(createMock(org.apache.felix.bundlerepository.Repository.class));
- expect(admin.getLocalRepository()).andReturn(createMock(org.apache.felix.bundlerepository.Repository.class));
- expect(admin.listRepositories()).andReturn(new org.apache.felix.bundlerepository.Repository[0]);
- expect(admin.resolver(EasyMock.<org.apache.felix.bundlerepository.Repository[]>anyObject())).andReturn(resolver);
- resolver.add(EasyMock.capture(captureReq));
- expect(resolver.resolve()).andReturn(true);
- expect(resolver.getAddedResources()).andReturn(new Resource[] { });
- expect(resolver.getRequiredResources()).andReturn(new Resource[] { resource });
- expect(resolver.getOptionalResources()).andReturn(new Resource[] { optionalResource});
- expect(resolver.getReason(resource)).andAnswer(new IAnswer<Reason[]>() {
- public Reason[] answer() throws Throwable {
- return new Reason[] { new ReasonImpl( resource, captureReq.getValue()) };
- }
- });
- expect(resolver.getReason(optionalResource)).andAnswer(new IAnswer<Reason[]>() {
- public Reason[] answer() throws Throwable {
- return new Reason[] { new ReasonImpl( optionalResource, captureReq.getValue()) };
- }
- });
- expect(resource.getURI()).andReturn("foo:bar");
- expect(optionalResource.getURI()).andReturn("foo:optional:baz");
- replay(admin, resolver, resource, optionalResource);
-
- List<BundleInfo> bundles = obrResolver.resolve(f);
- assertNotNull(bundles);
- assertEquals(2, bundles.size());
- assertEquals("foo:bar", bundles.get(0).getLocation());
- assertEquals("foo:optional:baz", bundles.get(1).getLocation());
- assertEquals(obrResolver.parseRequirement(requirement).toString(), captureReq.getValue().toString());
- verify(admin, resolver, resource);
- }
-
- /**
- * Test resolving a mvn url when pax url is configured with a repo that contains no protocol like: "test"
- * We expect to get a MalFormedUrlException not a IllegalArgumentException as in the issue
- * @throws Exception
- */
- @Test(expected=MalformedURLException.class)
- public void testResolverWithInvalidMvnRepoIssueKaraf667() throws Exception {
- final org.apache.karaf.features.internal.model.Feature f = new org.apache.karaf.features.internal.model.Feature("f1", "1.0");
- f.setResolver("obr");
- // Using file instead of mvn: as we do not want to mess with URL handlers
- f.getBundle().add(new Bundle("file:org.foo/foo/1.0"));
-
- final RepositoryAdmin admin = createMock(RepositoryAdmin.class);
- final Resolver resolver = createMock(Resolver.class);
- final Resource resource = createMock(Resource.class);
- final ObrResolver obrResolver = new ObrResolver();
- obrResolver.setRepositoryAdmin(admin);
-
- expect(admin.getHelper()).andReturn(new DummyDataModelHelper()).anyTimes();
- replay(admin, resolver, resource);
-
- obrResolver.resolve(f);
- }
-
- /**
- * Recreates behaviour of DataModelHelper when an invalid maven url is set for pax url repos
- * TODO Remove as soon as DataModelHelper does not throw this exception any more
- */
- class DummyDataModelHelper extends DataModelHelperImpl {
-
- @Override
- public Resource createResource(URL bundleUrl) throws IOException {
- throw new MalformedURLException("Missing protocol");
- }
-
-
- }
-}
http://git-wip-us.apache.org/repos/asf/karaf/blob/38502e41/features/pom.xml
----------------------------------------------------------------------
diff --git a/features/pom.xml b/features/pom.xml
index 7597051..8cfede1 100644
--- a/features/pom.xml
+++ b/features/pom.xml
@@ -36,7 +36,6 @@
<modules>
<module>core</module>
<module>command</module>
- <module>obr</module>
</modules>
</project>
http://git-wip-us.apache.org/repos/asf/karaf/blob/38502e41/instance/core/pom.xml
----------------------------------------------------------------------
diff --git a/instance/core/pom.xml b/instance/core/pom.xml
index 4c745ec..0180bd3 100644
--- a/instance/core/pom.xml
+++ b/instance/core/pom.xml
@@ -148,6 +148,9 @@
<Export-Package>
org.apache.karaf.instance.core,
</Export-Package>
+ <Provide-Capability>
+ service-reference;effective:=active;objectClass=org.apache.karaf.instance.core.InstanceService
+ </Provide-Capability>
<Private-Package>
org.apache.karaf.jpm,
org.apache.karaf.jpm.impl,
http://git-wip-us.apache.org/repos/asf/karaf/blob/38502e41/itests/src/test/java/org/apache/karaf/itests/ConditionalFeaturesTest.java
----------------------------------------------------------------------
diff --git a/itests/src/test/java/org/apache/karaf/itests/ConditionalFeaturesTest.java b/itests/src/test/java/org/apache/karaf/itests/ConditionalFeaturesTest.java
index 46908d1..9045b82 100644
--- a/itests/src/test/java/org/apache/karaf/itests/ConditionalFeaturesTest.java
+++ b/itests/src/test/java/org/apache/karaf/itests/ConditionalFeaturesTest.java
@@ -70,7 +70,7 @@ public class ConditionalFeaturesTest extends KarafTestSupport {
@Test
public void testWebconsole() throws Exception {
try {
- featureService.uninstallFeature("eventadmin");
+ featureService.uninstallFeature("scr");
} catch (Exception e) {
}
featureService.installFeature("webconsole");
http://git-wip-us.apache.org/repos/asf/karaf/blob/38502e41/itests/src/test/java/org/apache/karaf/itests/FeatureSshCommandSecurityTest.java
----------------------------------------------------------------------
diff --git a/itests/src/test/java/org/apache/karaf/itests/FeatureSshCommandSecurityTest.java b/itests/src/test/java/org/apache/karaf/itests/FeatureSshCommandSecurityTest.java
index 76350c0..223c9a2 100644
--- a/itests/src/test/java/org/apache/karaf/itests/FeatureSshCommandSecurityTest.java
+++ b/itests/src/test/java/org/apache/karaf/itests/FeatureSshCommandSecurityTest.java
@@ -24,31 +24,32 @@ public class FeatureSshCommandSecurityTest extends SshCommandTestBase {
@Test
public void testFeatureCommandSecurityViaSsh() throws Exception {
String vieweruser = "viewer" + System.nanoTime() + "_features";
+ String feature = "wrapper";
addViewer(vieweruser);
String r = assertCommand(vieweruser, "feature:list -i --no-format", Result.OK);
- Assert.assertFalse("Precondition failed, this test uses the eventadmin subsystem to test features with...",
- r.contains("eventadmin"));
+ Assert.assertFalse("Precondition failed, this test uses the " + feature + " subsystem to test features with...",
+ r.contains(feature));
- assertCommand(vieweruser, "feature:install eventadmin", Result.NOT_FOUND);
+ assertCommand(vieweruser, "feature:install " + feature, Result.NOT_FOUND);
String r2 = assertCommand("karaf", "feature:list -i --no-format", Result.OK);
- Assert.assertFalse("eventadmin features should not have been installed, as viewer doesn't have credentials",
- r2.contains("eventadmin"));
+ Assert.assertFalse(feature + " features should not have been installed, as viewer doesn't have credentials",
+ r2.contains(feature));
- assertCommand("karaf", "feature:install eventadmin", Result.OK);
+ assertCommand("karaf", "feature:install " + feature, Result.OK);
String r3 = assertCommand(vieweruser, "feature:list -i --no-format", Result.OK);
- Assert.assertTrue("eventadmin feature should have been installed by 'karaf' user",
- r3.contains("eventadmin"));
+ Assert.assertTrue(feature + " feature should have been installed by 'karaf' user",
+ r3.contains(feature));
- assertCommand(vieweruser, "feature:uninstall eventadmin", Result.NOT_FOUND);
+ assertCommand(vieweruser, "feature:uninstall " + feature, Result.NOT_FOUND);
String r4 = assertCommand("karaf", "feature:list -i --no-format", Result.OK);
- Assert.assertTrue("eventadmin feature should still be there, as viewer doesn't have credentials",
- r4.contains("eventadmin"));
+ Assert.assertTrue(feature + " feature should still be there, as viewer doesn't have credentials",
+ r4.contains(feature));
- assertCommand("karaf", "feature:uninstall eventadmin", Result.OK);
+ assertCommand("karaf", "feature:uninstall " + feature, Result.OK);
String r5 = assertCommand(vieweruser, "feature:list -i --no-format", Result.OK);
- Assert.assertFalse("The eventadmin subsystem should have been uninstalled",
- r5.contains("eventadmin"));
+ Assert.assertFalse(feature + " feature should have been uninstalled",
+ r5.contains(feature));
}
}
http://git-wip-us.apache.org/repos/asf/karaf/blob/38502e41/itests/src/test/java/org/apache/karaf/itests/FeatureTest.java
----------------------------------------------------------------------
diff --git a/itests/src/test/java/org/apache/karaf/itests/FeatureTest.java b/itests/src/test/java/org/apache/karaf/itests/FeatureTest.java
index 2098683..c9d9c77 100644
--- a/itests/src/test/java/org/apache/karaf/itests/FeatureTest.java
+++ b/itests/src/test/java/org/apache/karaf/itests/FeatureTest.java
@@ -64,14 +64,14 @@ public class FeatureTest extends KarafTestSupport {
@Test
public void installUninstallCommand() throws Exception {
- String featureInstallOutput = executeCommand("feature:install -v eventadmin", new RolePrincipal("admin"));
+ String featureInstallOutput = executeCommand("feature:install -v wrapper", new RolePrincipal("admin"));
System.out.println(featureInstallOutput);
assertFalse(featureInstallOutput.isEmpty());
- String featureListOutput = executeCommand("feature:list -i | grep eventadmin");
+ String featureListOutput = executeCommand("feature:list -i | grep wrapper");
System.out.println(featureListOutput);
assertFalse(featureListOutput.isEmpty());
- System.out.println(executeCommand("feature:uninstall eventadmin", new RolePrincipal("admin")));
- featureListOutput = executeCommand("feature:list -i | grep eventadmin");
+ System.out.println(executeCommand("feature:uninstall wrapper", new RolePrincipal("admin")));
+ featureListOutput = executeCommand("feature:list -i | grep wrapper");
System.out.println(featureListOutput);
assertTrue(featureListOutput.isEmpty());
}
@@ -83,8 +83,8 @@ public class FeatureTest extends KarafTestSupport {
connector = this.getJMXConnector();
MBeanServerConnection connection = connector.getMBeanServerConnection();
ObjectName name = new ObjectName("org.apache.karaf:type=feature,name=root");
- connection.invoke(name, "installFeature", new Object[] { "eventadmin" }, new String[]{ "java.lang.String" });
- connection.invoke(name, "uninstallFeature", new Object[] { "eventadmin" }, new String[]{ "java.lang.String" });
+ connection.invoke(name, "installFeature", new Object[] { "wrapper" }, new String[]{ "java.lang.String" });
+ connection.invoke(name, "uninstallFeature", new Object[] { "wrapper" }, new String[]{ "java.lang.String" });
} finally {
close(connector);
}
http://git-wip-us.apache.org/repos/asf/karaf/blob/38502e41/itests/src/test/java/org/apache/karaf/itests/HttpTest.java
----------------------------------------------------------------------
diff --git a/itests/src/test/java/org/apache/karaf/itests/HttpTest.java b/itests/src/test/java/org/apache/karaf/itests/HttpTest.java
index 459301b..66ea463 100644
--- a/itests/src/test/java/org/apache/karaf/itests/HttpTest.java
+++ b/itests/src/test/java/org/apache/karaf/itests/HttpTest.java
@@ -26,6 +26,7 @@ import org.junit.runner.RunWith;
import org.ops4j.pax.exam.junit.PaxExam;
import org.ops4j.pax.exam.spi.reactors.ExamReactorStrategy;
import org.ops4j.pax.exam.spi.reactors.PerClass;
+import org.osgi.framework.Constants;
@RunWith(PaxExam.class)
@ExamReactorStrategy(PerClass.class)
@@ -38,6 +39,7 @@ public class HttpTest extends KarafTestSupport {
@Test
public void list() throws Exception {
+ waitForService("(objectClass=javax.servlet.ServletContext)", 5000);
assertContains("/system/console", executeCommand("http:list"));
}
http://git-wip-us.apache.org/repos/asf/karaf/blob/38502e41/itests/src/test/java/org/apache/karaf/itests/KarafTestSupport.java
----------------------------------------------------------------------
diff --git a/itests/src/test/java/org/apache/karaf/itests/KarafTestSupport.java b/itests/src/test/java/org/apache/karaf/itests/KarafTestSupport.java
index 5062c64..207d75a 100644
--- a/itests/src/test/java/org/apache/karaf/itests/KarafTestSupport.java
+++ b/itests/src/test/java/org/apache/karaf/itests/KarafTestSupport.java
@@ -302,7 +302,7 @@ public class KarafTestSupport {
}
}
- private void waitForService(String filter, long timeout) throws InvalidSyntaxException, InterruptedException {
+ protected void waitForService(String filter, long timeout) throws InvalidSyntaxException, InterruptedException {
ServiceTracker<Object, Object> st = new ServiceTracker<Object, Object>(bundleContext, bundleContext.createFilter(filter), null);
try {
st.open();
@@ -351,23 +351,27 @@ public class KarafTestSupport {
}
public void assertFeatureInstalled(String featureName) throws Exception {
- Feature[] features = featureService.listInstalledFeatures();
- for (Feature feature : features) {
- if (featureName.equals(feature.getName())) {
- return;
- }
+ String name;
+ String version;
+ if (featureName.contains("/")) {
+ name = featureName.substring(0, featureName.indexOf("/"));
+ version = featureName.substring(featureName.indexOf("/") + 1);
+ } else {
+ name = featureName;
+ version = null;
}
- Assert.fail("Feature " + featureName + " should be installed but is not");
+ assertFeatureInstalled(name, version);
}
public void assertFeatureInstalled(String featureName, String featureVersion) throws Exception {
+ Feature featureToAssert = featureService.getFeature(featureName, featureVersion);
Feature[] features = featureService.listInstalledFeatures();
for (Feature feature : features) {
- if (featureName.equals(feature.getName()) && featureVersion.equals(feature.getVersion())) {
+ if (featureToAssert.equals(feature)) {
return;
}
}
- Assert.fail("Feature " + featureName + "/" + featureVersion + " should be installed but is not");
+ Assert.fail("Feature " + featureName + (featureVersion != null ? "/" + featureVersion : "") + " should be installed but is not");
}
public void assertFeaturesInstalled(String ... expectedFeatures) throws Exception {
@@ -412,24 +416,28 @@ public class KarafTestSupport {
}
protected void installAssertAndUninstallFeature(String feature, String version) throws Exception {
- Set<Feature> featuresBefore = new HashSet<Feature>(Arrays.asList(featureService.listInstalledFeatures()));
- try {
- featureService.installFeature(feature, version);
- assertFeatureInstalled(feature, version);
- } finally {
- uninstallNewFeatures(featuresBefore);
- }
+ installAssertAndUninstallFeatures(feature + "/" + version);
}
protected void installAssertAndUninstallFeatures(String... feature) throws Exception {
- Set<Feature> featuresBefore = new HashSet<Feature>(Arrays.asList(featureService.listInstalledFeatures()));
+ boolean success = false;
try {
for (String curFeature : feature) {
featureService.installFeature(curFeature);
assertFeatureInstalled(curFeature);
}
+ success = true;
} finally {
- uninstallNewFeatures(featuresBefore);
+ for (String curFeature : feature) {
+ System.out.println("Uninstalling " + curFeature);
+ try {
+ featureService.uninstallFeature(curFeature);
+ } catch (Exception e) {
+ if (success) {
+ throw e;
+ }
+ }
+ }
}
}
http://git-wip-us.apache.org/repos/asf/karaf/blob/38502e41/itests/src/test/java/org/apache/karaf/itests/features/Spring3FeaturesTest.java
----------------------------------------------------------------------
diff --git a/itests/src/test/java/org/apache/karaf/itests/features/Spring3FeaturesTest.java b/itests/src/test/java/org/apache/karaf/itests/features/Spring3FeaturesTest.java
index 22e1113..19b6f43 100644
--- a/itests/src/test/java/org/apache/karaf/itests/features/Spring3FeaturesTest.java
+++ b/itests/src/test/java/org/apache/karaf/itests/features/Spring3FeaturesTest.java
@@ -14,6 +14,7 @@
package org.apache.karaf.itests.features;
import org.apache.karaf.itests.KarafTestSupport;
+import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.ops4j.pax.exam.junit.PaxExam;
@@ -70,6 +71,7 @@ public class Spring3FeaturesTest extends KarafTestSupport {
}
@Test
+ @Ignore
public void installSpringOrmFeature() throws Exception {
installAssertAndUninstallFeature("spring-orm", System.getProperty("spring32.version"));
}
@@ -85,11 +87,13 @@ public class Spring3FeaturesTest extends KarafTestSupport {
}
@Test
+ @Ignore
public void installSpringWebFeature() throws Exception {
installAssertAndUninstallFeature("spring-web", System.getProperty("spring32.version"));
}
@Test
+ @Ignore
public void installSpringWebPortletFeature() throws Exception {
installAssertAndUninstallFeature("spring-web-portlet", System.getProperty("spring32.version"));
}
http://git-wip-us.apache.org/repos/asf/karaf/blob/38502e41/management/server/pom.xml
----------------------------------------------------------------------
diff --git a/management/server/pom.xml b/management/server/pom.xml
index 4c92be9..c522874 100644
--- a/management/server/pom.xml
+++ b/management/server/pom.xml
@@ -117,6 +117,9 @@
org.apache.karaf.service.guard.tools,
org.apache.karaf.util.tracker
</Private-Package>
+ <Provide-Capability>
+ service-reference;effective:=active;objectClass=javax.management.MBeanServer
+ </Provide-Capability>
<Bundle-Activator>
org.apache.karaf.management.internal.Activator
</Bundle-Activator>
http://git-wip-us.apache.org/repos/asf/karaf/blob/38502e41/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 4f78489..3d90475 100644
--- a/pom.xml
+++ b/pom.xml
@@ -172,6 +172,7 @@
<felix.scr.version>1.8.2</felix.scr.version>
<felix.scr.webconsole.plugin.version>1.0.0</felix.scr.webconsole.plugin.version>
<felix.scr.annotation.version>1.6.0</felix.scr.annotation.version>
+ <felix.resolver.version>1.0.0</felix.resolver.version>
<aries.application.version>1.0.0</aries.application.version>
<aries.application.api.version>1.0.0</aries.application.api.version>
@@ -998,6 +999,11 @@
<artifactId>org.apache.felix.scr</artifactId>
<version>${felix.scr.version}</version>
</dependency>
+ <dependency>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>org.apache.felix.resolver</artifactId>
+ <version>${felix.resolver.version}</version>
+ </dependency>
<dependency>
<groupId>org.ow2.asm</groupId>
http://git-wip-us.apache.org/repos/asf/karaf/blob/38502e41/shell/console/pom.xml
----------------------------------------------------------------------
diff --git a/shell/console/pom.xml b/shell/console/pom.xml
index 69f1dbb..90cdeb5 100644
--- a/shell/console/pom.xml
+++ b/shell/console/pom.xml
@@ -148,27 +148,27 @@
*
</Import-Package>
<Export-Package>
- org.apache.karaf.shell.commands;version=${project.version},
- org.apache.karaf.shell.commands;version=2.3.0,
- org.apache.karaf.shell.commands.basic;version=${project.version},
- org.apache.karaf.shell.commands.basic;version=2.3.0,
- org.apache.karaf.shell.commands.converter;version=${project.version},
- org.apache.karaf.shell.commands.converter;version=2.3.0,
- org.apache.karaf.shell.commands.meta;version=${project.version},
- org.apache.karaf.shell.commands.meta;version=2.3.0,
- org.apache.karaf.shell.console;version=${project.version},
- org.apache.karaf.shell.console;version=2.3.0,
- org.apache.karaf.shell.console.commands;version=${project.version},
- org.apache.karaf.shell.console.commands;version=2.3.0,
- org.apache.karaf.shell.console.completer;version=${project.version},
- org.apache.karaf.shell.console.completer;version=2.3.0,
- org.apache.karaf.shell.console.factory;version=${project.version},
- org.apache.karaf.shell.inject;version=${project.version},
- org.apache.karaf.shell.util;version=${project.version},
- org.apache.karaf.shell.util;version=2.3.0,
- org.apache.felix.gogo*;version=${felix.gogo.version},
- org.apache.felix.service.command;version=${felix.gogo.version};status=provisional;mandatory:=status,
- org.apache.felix.service.threadio;version=${felix.gogo.version};status=provisional;mandatory:=status,
+ org.apache.karaf.shell.commands;version=${project.version};-noimport:=true,
+ org.apache.karaf.shell.commands;version=2.3.0;-noimport:=true,
+ org.apache.karaf.shell.commands.basic;version=${project.version};-noimport:=true,
+ org.apache.karaf.shell.commands.basic;version=2.3.0;-noimport:=true,
+ org.apache.karaf.shell.commands.converter;version=${project.version};-noimport:=true,
+ org.apache.karaf.shell.commands.converter;version=2.3.0;-noimport:=true,
+ org.apache.karaf.shell.commands.meta;version=${project.version};-noimport:=true,
+ org.apache.karaf.shell.commands.meta;version=2.3.0;-noimport:=true,
+ org.apache.karaf.shell.console;version=${project.version};-noimport:=true,
+ org.apache.karaf.shell.console;version=2.3.0;-noimport:=true,
+ org.apache.karaf.shell.console.commands;version=${project.version};-noimport:=true,
+ org.apache.karaf.shell.console.commands;version=2.3.0;-noimport:=true,
+ org.apache.karaf.shell.console.completer;version=${project.version};-noimport:=true,
+ org.apache.karaf.shell.console.completer;version=2.3.0;-noimport:=true,
+ org.apache.karaf.shell.console.factory;version=${project.version};-noimport:=true,
+ org.apache.karaf.shell.inject;version=${project.version};-noimport:=true,
+ org.apache.karaf.shell.util;version=${project.version};-noimport:=true,
+ org.apache.karaf.shell.util;version=2.3.0;-noimport:=true,
+ org.apache.felix.gogo*;version=${felix.gogo.version};-noimport:=true,
+ org.apache.felix.service.command;version=${felix.gogo.version};status=provisional;mandatory:=status;-noimport:=true,
+ org.apache.felix.service.threadio;version=${felix.gogo.version};status=provisional;mandatory:=status;-noimport:=true,
</Export-Package>
<Private-Package>
org.apache.karaf.shell.commands.ansi,
http://git-wip-us.apache.org/repos/asf/karaf/blob/38502e41/shell/core/pom.xml
----------------------------------------------------------------------
diff --git a/shell/core/pom.xml b/shell/core/pom.xml
index c5a0bac..92c7555 100644
--- a/shell/core/pom.xml
+++ b/shell/core/pom.xml
@@ -165,6 +165,9 @@
org.apache.felix.service.command,
org.apache.felix.service.threadio,
</Private-Package>
+ <Provide-Capability>
+ service-reference;effective:=active;objectClass=org.apache.karaf.shell.api.console.SessionFactory
+ </Provide-Capability>
<Bundle-Activator>
org.apache.karaf.shell.impl.console.osgi.Activator
</Bundle-Activator>
http://git-wip-us.apache.org/repos/asf/karaf/blob/38502e41/tooling/karaf-maven-plugin/src/it/test-aggregate-features/control.xml
----------------------------------------------------------------------
diff --git a/tooling/karaf-maven-plugin/src/it/test-aggregate-features/control.xml b/tooling/karaf-maven-plugin/src/it/test-aggregate-features/control.xml
index 7c50b96..01a6721 100644
--- a/tooling/karaf-maven-plugin/src/it/test-aggregate-features/control.xml
+++ b/tooling/karaf-maven-plugin/src/it/test-aggregate-features/control.xml
@@ -18,7 +18,7 @@
~ under the License.
-->
-<features xmlns="http://karaf.apache.org/xmlns/features/v1.2.0" name="aggregate-features">
+<features xmlns="http://karaf.apache.org/xmlns/features/v1.3.0" name="aggregate-features">
<feature description="aggregate-recursive-module-c" version="1.0-SNAPSHOT" name="aggregate-recursive-module-c">
<details>Test Description</details>
<bundle>mvn:test/aggregate-recursive-module-b/1.0-SNAPSHOT</bundle>
http://git-wip-us.apache.org/repos/asf/karaf/blob/38502e41/tooling/karaf-maven-plugin/src/it/test-basic-generation/control.xml
----------------------------------------------------------------------
diff --git a/tooling/karaf-maven-plugin/src/it/test-basic-generation/control.xml b/tooling/karaf-maven-plugin/src/it/test-basic-generation/control.xml
index 06139fe..2318b17 100644
--- a/tooling/karaf-maven-plugin/src/it/test-basic-generation/control.xml
+++ b/tooling/karaf-maven-plugin/src/it/test-basic-generation/control.xml
@@ -18,4 +18,4 @@
~ under the License.
-->
-<features xmlns="http://karaf.apache.org/xmlns/features/v1.2.0" name="test-basic-generation"/>
+<features xmlns="http://karaf.apache.org/xmlns/features/v1.3.0" name="test-basic-generation"/>
http://git-wip-us.apache.org/repos/asf/karaf/blob/38502e41/tooling/karaf-maven-plugin/src/it/test-check-dependencies-failure/control.xml
----------------------------------------------------------------------
diff --git a/tooling/karaf-maven-plugin/src/it/test-check-dependencies-failure/control.xml b/tooling/karaf-maven-plugin/src/it/test-check-dependencies-failure/control.xml
index a1a81c4..223d090 100644
--- a/tooling/karaf-maven-plugin/src/it/test-check-dependencies-failure/control.xml
+++ b/tooling/karaf-maven-plugin/src/it/test-check-dependencies-failure/control.xml
@@ -18,7 +18,7 @@
~ under the License.
-->
-<features xmlns="http://karaf.apache.org/xmlns/features/v1.2.0" name="check-dependencies-features">
+<features xmlns="http://karaf.apache.org/xmlns/features/v1.3.0" name="check-dependencies-features">
<feature description="dependency-module-c" version="1.0-SNAPSHOT" name="dependency-module-c">
<bundle>mvn:test/dependency-module-a/1.0-SNAPSHOT</bundle>
<bundle>mvn:test/dependency-module-b/1.0-SNAPSHOT</bundle>
http://git-wip-us.apache.org/repos/asf/karaf/blob/38502e41/tooling/karaf-maven-plugin/src/it/test-check-dependencies/control.xml
----------------------------------------------------------------------
diff --git a/tooling/karaf-maven-plugin/src/it/test-check-dependencies/control.xml b/tooling/karaf-maven-plugin/src/it/test-check-dependencies/control.xml
index a1a81c4..223d090 100644
--- a/tooling/karaf-maven-plugin/src/it/test-check-dependencies/control.xml
+++ b/tooling/karaf-maven-plugin/src/it/test-check-dependencies/control.xml
@@ -18,7 +18,7 @@
~ under the License.
-->
-<features xmlns="http://karaf.apache.org/xmlns/features/v1.2.0" name="check-dependencies-features">
+<features xmlns="http://karaf.apache.org/xmlns/features/v1.3.0" name="check-dependencies-features">
<feature description="dependency-module-c" version="1.0-SNAPSHOT" name="dependency-module-c">
<bundle>mvn:test/dependency-module-a/1.0-SNAPSHOT</bundle>
<bundle>mvn:test/dependency-module-b/1.0-SNAPSHOT</bundle>
http://git-wip-us.apache.org/repos/asf/karaf/blob/38502e41/tooling/karaf-maven-plugin/src/it/test-input-file/control.xml
----------------------------------------------------------------------
diff --git a/tooling/karaf-maven-plugin/src/it/test-input-file/control.xml b/tooling/karaf-maven-plugin/src/it/test-input-file/control.xml
index 25a2acb..08e8f0e 100644
--- a/tooling/karaf-maven-plugin/src/it/test-input-file/control.xml
+++ b/tooling/karaf-maven-plugin/src/it/test-input-file/control.xml
@@ -18,7 +18,7 @@
~ under the License.
-->
-<features xmlns="http://karaf.apache.org/xmlns/features/v1.2.0" name="test-input-file">
+<features xmlns="http://karaf.apache.org/xmlns/features/v1.3.0" name="test-input-file">
<feature description="Test Description" version="1.0-SNAPSHOT" name="test-input-file">
<details>Test Description</details>
<bundle>mvn:test/test-input-file/1.0-SNAPSHOT</bundle>
http://git-wip-us.apache.org/repos/asf/karaf/blob/38502e41/tooling/karaf-maven-plugin/src/it/test-type-classifier/control.xml
----------------------------------------------------------------------
diff --git a/tooling/karaf-maven-plugin/src/it/test-type-classifier/control.xml b/tooling/karaf-maven-plugin/src/it/test-type-classifier/control.xml
index 9b84d85..a378636 100644
--- a/tooling/karaf-maven-plugin/src/it/test-type-classifier/control.xml
+++ b/tooling/karaf-maven-plugin/src/it/test-type-classifier/control.xml
@@ -18,4 +18,4 @@
~ under the License.
-->
-<features xmlns="http://karaf.apache.org/xmlns/features/v1.2.0" name="test-type-classifier"/>
+<features xmlns="http://karaf.apache.org/xmlns/features/v1.3.0" name="test-type-classifier"/>
http://git-wip-us.apache.org/repos/asf/karaf/blob/38502e41/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/features/ValidateDescriptorMojo.java
----------------------------------------------------------------------
diff --git a/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/features/ValidateDescriptorMojo.java b/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/features/ValidateDescriptorMojo.java
index bcf608a..f5cb55f 100644
--- a/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/features/ValidateDescriptorMojo.java
+++ b/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/features/ValidateDescriptorMojo.java
@@ -22,8 +22,8 @@ import org.apache.karaf.features.BundleInfo;
import org.apache.karaf.features.Dependency;
import org.apache.karaf.features.Feature;
import org.apache.karaf.features.Repository;
-import org.apache.karaf.features.internal.FeatureValidationUtil;
-import org.apache.karaf.features.internal.RepositoryImpl;
+import org.apache.karaf.features.internal.service.FeatureValidationUtil;
+import org.apache.karaf.features.internal.service.RepositoryImpl;
import org.apache.karaf.tooling.url.CustomBundleURLStreamHandlerFactory;
import org.apache.karaf.tooling.utils.MojoSupport;
import org.apache.maven.artifact.Artifact;
http://git-wip-us.apache.org/repos/asf/karaf/blob/38502e41/util/src/main/java/org/apache/karaf/util/tracker/BaseActivator.java
----------------------------------------------------------------------
diff --git a/util/src/main/java/org/apache/karaf/util/tracker/BaseActivator.java b/util/src/main/java/org/apache/karaf/util/tracker/BaseActivator.java
index 65a1bdd..4f34b06 100644
--- a/util/src/main/java/org/apache/karaf/util/tracker/BaseActivator.java
+++ b/util/src/main/java/org/apache/karaf/util/tracker/BaseActivator.java
@@ -45,11 +45,21 @@ public class BaseActivator implements BundleActivator, SingleServiceTracker.Sing
new LinkedBlockingQueue<Runnable>());
private AtomicBoolean scheduled = new AtomicBoolean();
+ private long schedulerStopTimeout = TimeUnit.MILLISECONDS.convert(30, TimeUnit.SECONDS);
+
private List<ServiceRegistration> registrations;
private Map<String, SingleServiceTracker> trackers = new HashMap<String, SingleServiceTracker>();
private ServiceRegistration managedServiceRegistration;
private Dictionary<String, ?> configuration;
+ public long getSchedulerStopTimeout() {
+ return schedulerStopTimeout;
+ }
+
+ public void setSchedulerStopTimeout(long schedulerStopTimeout) {
+ this.schedulerStopTimeout = schedulerStopTimeout;
+ }
+
@Override
public void start(BundleContext context) throws Exception {
bundleContext = context;
@@ -72,7 +82,7 @@ public class BaseActivator implements BundleActivator, SingleServiceTracker.Sing
scheduled.set(true);
doClose();
executor.shutdown();
- executor.awaitTermination(30, TimeUnit.SECONDS);
+ executor.awaitTermination(schedulerStopTimeout, TimeUnit.MILLISECONDS);
doStop();
}
http://git-wip-us.apache.org/repos/asf/karaf/blob/38502e41/webconsole/branding/pom.xml
----------------------------------------------------------------------
diff --git a/webconsole/branding/pom.xml b/webconsole/branding/pom.xml
index 30359c6..5ec04c6 100644
--- a/webconsole/branding/pom.xml
+++ b/webconsole/branding/pom.xml
@@ -79,7 +79,7 @@
<configuration>
<instructions>
<Bundle-DocURL>http://felix.apache.org/site/apache-karaf.html</Bundle-DocURL>
- <Fragment-Host>org.apache.karaf.webconsole.console;bundle-version="[3,4)"</Fragment-Host>
+ <Fragment-Host>org.apache.karaf.webconsole.console;bundle-version="[4,5)"</Fragment-Host>
<Export-Package>!*</Export-Package>
<Import-Package>
javax.servlet;version=2.4,
http://git-wip-us.apache.org/repos/asf/karaf/blob/38502e41/webconsole/features/src/main/java/org/apache/karaf/webconsole/features/ExtendedFeature.java
----------------------------------------------------------------------
diff --git a/webconsole/features/src/main/java/org/apache/karaf/webconsole/features/ExtendedFeature.java b/webconsole/features/src/main/java/org/apache/karaf/webconsole/features/ExtendedFeature.java
index 401cf29..47052ab 100644
--- a/webconsole/features/src/main/java/org/apache/karaf/webconsole/features/ExtendedFeature.java
+++ b/webconsole/features/src/main/java/org/apache/karaf/webconsole/features/ExtendedFeature.java
@@ -20,10 +20,12 @@ import java.util.List;
import java.util.Map;
import org.apache.karaf.features.BundleInfo;
+import org.apache.karaf.features.Capability;
import org.apache.karaf.features.Conditional;
import org.apache.karaf.features.ConfigFileInfo;
import org.apache.karaf.features.Dependency;
import org.apache.karaf.features.Feature;
+import org.apache.karaf.features.Requirement;
public class ExtendedFeature implements Feature {
@@ -69,6 +71,16 @@ public class ExtendedFeature implements Feature {
}
@Override
+ public List<? extends Capability> getCapabilities() {
+ return feature.getCapabilities();
+ }
+
+ @Override
+ public List<? extends Requirement> getRequirements() {
+ return feature.getRequirements();
+ }
+
+ @Override
public List<Dependency> getDependencies() {
return this.feature.getDependencies();
}
http://git-wip-us.apache.org/repos/asf/karaf/blob/38502e41/webconsole/features/src/main/java/org/apache/karaf/webconsole/features/FeaturesPlugin.java
----------------------------------------------------------------------
diff --git a/webconsole/features/src/main/java/org/apache/karaf/webconsole/features/FeaturesPlugin.java b/webconsole/features/src/main/java/org/apache/karaf/webconsole/features/FeaturesPlugin.java
index 41cb7b3..8e0af3a 100644
--- a/webconsole/features/src/main/java/org/apache/karaf/webconsole/features/FeaturesPlugin.java
+++ b/webconsole/features/src/main/java/org/apache/karaf/webconsole/features/FeaturesPlugin.java
@@ -272,8 +272,6 @@ public class FeaturesPlugin extends AbstractWebConsolePlugin {
jw.array();
for (Repository r : repositories) {
jw.object();
- jw.key("name");
- jw.value(r.getName());
jw.key("url");
String uri = r.getURI().toString();
jw.value(uri);