You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@karaf.apache.org by ff...@apache.org on 2015/04/27 08:03:41 UTC

karaf git commit: [KARAF-3705]put all bundles before FeaturesService available as startup feature

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 <fr...@gmail.com>
Authored: Mon Apr 27 14:03:23 2015 +0800
Committer: Freeman Fang <fr...@gmail.com>
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());