Repository: karaf Updated Branches: refs/heads/karaf-2.x ef3e11136 -> 756b5e0e1
[KARAF-3705]put all bundles before FeaturesService available as startup feature Project: http://git-wip-us.apache.org/repos/asf/karaf/repo Commit: http://git-wip-us.apache.org/repos/asf/karaf/commit/756b5e0e Tree: http://git-wip-us.apache.org/repos/asf/karaf/tree/756b5e0e Diff: http://git-wip-us.apache.org/repos/asf/karaf/diff/756b5e0e Branch: refs/heads/karaf-2.x Commit: 756b5e0e189974ce45602dc6b406f074a0069d06 Parents: ef3e111 Author: Freeman Fang <[email protected]> Authored: Mon Apr 27 14:03:23 2015 +0800 Committer: Freeman Fang <[email protected]> Committed: Mon Apr 27 14:03:23 2015 +0800 ---------------------------------------------------------------------- .../karaf/features/internal/FeaturesServiceImpl.java | 12 ++++++++++++ .../org/apache/karaf/features/FeaturesServiceTest.java | 10 +++++++--- .../features/internal/FeaturesServiceImplTest.java | 1 + 3 files changed, 20 insertions(+), 3 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/karaf/blob/756b5e0e/features/core/src/main/java/org/apache/karaf/features/internal/FeaturesServiceImpl.java ---------------------------------------------------------------------- diff --git a/features/core/src/main/java/org/apache/karaf/features/internal/FeaturesServiceImpl.java b/features/core/src/main/java/org/apache/karaf/features/internal/FeaturesServiceImpl.java index 45f3e4c..d9eb45e 100644 --- a/features/core/src/main/java/org/apache/karaf/features/internal/FeaturesServiceImpl.java +++ b/features/core/src/main/java/org/apache/karaf/features/internal/FeaturesServiceImpl.java @@ -138,6 +138,18 @@ public class FeaturesServiceImpl implements FeaturesService { public void setBundleContext(BundleContext bundleContext) { this.bundleContext = bundleContext; + //put all bundles before FeaturesService available as startup feature + //so those bundles are hold by this feature and won't be uninstalled by + //any other feature easily + Set<Long> startupBundleSet = new HashSet<Long>(); + if (bundleContext != null && bundleContext.getBundles() != null + && installed.size() == 0) { + for(Bundle startupBundle : bundleContext.getBundles()) { + startupBundleSet.add(startupBundle.getBundleId()); + } + installed.put(new FeatureImpl("startup"), startupBundleSet); + } + } public ConfigurationAdmin getConfigAdmin() { http://git-wip-us.apache.org/repos/asf/karaf/blob/756b5e0e/features/core/src/test/java/org/apache/karaf/features/FeaturesServiceTest.java ---------------------------------------------------------------------- diff --git a/features/core/src/test/java/org/apache/karaf/features/FeaturesServiceTest.java b/features/core/src/test/java/org/apache/karaf/features/FeaturesServiceTest.java index 9ccc4db..5f6775c 100644 --- a/features/core/src/test/java/org/apache/karaf/features/FeaturesServiceTest.java +++ b/features/core/src/test/java/org/apache/karaf/features/FeaturesServiceTest.java @@ -87,7 +87,7 @@ public class FeaturesServiceTest extends TestCase { BundleContext bundleContext = EasyMock.createMock(BundleContext.class); Bundle installedBundle = EasyMock.createMock(Bundle.class); - + expect(bundleContext.getBundles()).andReturn(null); // required since the sorted set uses it expect(installedBundle.compareTo(EasyMock.<Bundle>anyObject())).andReturn(0).anyTimes(); @@ -165,7 +165,7 @@ public class FeaturesServiceTest extends TestCase { final Bundle sysBundle = EasyMock.createMock(Bundle.class); FrameworkWiring frameworkWiring = EasyMock.createMock(FrameworkWiring.class); Bundle installedBundle = EasyMock.createMock(Bundle.class); - + expect(bundleContext.getBundles()).andReturn(null); expect(bundleContext.getDataFile(EasyMock.<String>anyObject())).andReturn(dataFile).anyTimes(); replay(bundleContext, installedBundle); @@ -266,7 +266,7 @@ public class FeaturesServiceTest extends TestCase { // loads the state BundleContext bundleContext = EasyMock.createMock(BundleContext.class); - + expect(bundleContext.getBundles()).andReturn(null); expect(bundleContext.getDataFile(EasyMock.<String>anyObject())).andReturn(dataFile).anyTimes(); replay(bundleContext); @@ -780,6 +780,7 @@ public class FeaturesServiceTest extends TestCase { URI uri = tmp.toURI(); BundleContext bundleContext = EasyMock.createMock(BundleContext.class); + expect(bundleContext.getBundles()).andReturn(null); Bundle installedBundle1 = EasyMock.createMock(Bundle.class); Bundle installedBundle2 = EasyMock.createMock(Bundle.class); @@ -841,6 +842,7 @@ public class FeaturesServiceTest extends TestCase { URI uri = tmp.toURI(); BundleContext bundleContext = EasyMock.createMock(BundleContext.class); + expect(bundleContext.getBundles()).andReturn(null); Bundle installedBundle1 = EasyMock.createMock(Bundle.class); Bundle installedBundle2 = EasyMock.createMock(Bundle.class); @@ -907,6 +909,7 @@ public class FeaturesServiceTest extends TestCase { // loads the state BundleContext bundleContext = EasyMock.createMock(BundleContext.class); + expect(bundleContext.getBundles()).andReturn(null); final Bundle sysBundle = EasyMock.createMock(Bundle.class); FrameworkWiring frameworkWiring = EasyMock.createMock(FrameworkWiring.class); Bundle installedBundle1 = EasyMock.createMock(Bundle.class); @@ -1017,6 +1020,7 @@ public class FeaturesServiceTest extends TestCase { URI uri = tmp.toURI(); BundleContext bundleContext = EasyMock.createMock(BundleContext.class); + expect(bundleContext.getBundles()).andReturn(null); expect(bundleContext.getDataFile(EasyMock.<String>anyObject())).andReturn(dataFile).anyTimes(); replay(bundleContext); http://git-wip-us.apache.org/repos/asf/karaf/blob/756b5e0e/features/core/src/test/java/org/apache/karaf/features/internal/FeaturesServiceImplTest.java ---------------------------------------------------------------------- diff --git a/features/core/src/test/java/org/apache/karaf/features/internal/FeaturesServiceImplTest.java b/features/core/src/test/java/org/apache/karaf/features/internal/FeaturesServiceImplTest.java index b6e5304..1bc780b 100644 --- a/features/core/src/test/java/org/apache/karaf/features/internal/FeaturesServiceImplTest.java +++ b/features/core/src/test/java/org/apache/karaf/features/internal/FeaturesServiceImplTest.java @@ -114,6 +114,7 @@ public class FeaturesServiceImplTest extends TestCase { public void testStartDoesNotFailWithOneInvalidUri() { BundleContext bundleContext = EasyMock.createMock(BundleContext.class); + expect(bundleContext.getBundles()).andReturn(null); expect(bundleContext.getDataFile(EasyMock.<String>anyObject())).andReturn(dataFile).anyTimes(); bundleContext.addFrameworkListener(EasyMock.<FrameworkListener>anyObject()); bundleContext.removeFrameworkListener(EasyMock.<FrameworkListener>anyObject());
