Repository: karaf
Updated Branches:
  refs/heads/karaf-4.0.x 58e08f070 -> 130caa858


KARAF-3997 - Provide a RegionDigraphPersistence service

Project: http://git-wip-us.apache.org/repos/asf/karaf/repo
Commit: http://git-wip-us.apache.org/repos/asf/karaf/commit/130caa85
Tree: http://git-wip-us.apache.org/repos/asf/karaf/tree/130caa85
Diff: http://git-wip-us.apache.org/repos/asf/karaf/diff/130caa85

Branch: refs/heads/karaf-4.0.x
Commit: 130caa8582bfe41acdc87e93471bbb2b37896ae7
Parents: 58e08f0
Author: Guillaume Nodet <[email protected]>
Authored: Thu Aug 25 12:20:23 2016 +0200
Committer: Guillaume Nodet <[email protected]>
Committed: Thu Aug 25 12:30:55 2016 +0200

----------------------------------------------------------------------
 .../features/RegionDigraphPersistence.java      | 24 ++++++++++++++++++++
 .../karaf/features/internal/osgi/Activator.java | 22 ++++++++++++++++--
 2 files changed, 44 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/karaf/blob/130caa85/features/core/src/main/java/org/apache/karaf/features/RegionDigraphPersistence.java
----------------------------------------------------------------------
diff --git 
a/features/core/src/main/java/org/apache/karaf/features/RegionDigraphPersistence.java
 
b/features/core/src/main/java/org/apache/karaf/features/RegionDigraphPersistence.java
new file mode 100644
index 0000000..7c890a1
--- /dev/null
+++ 
b/features/core/src/main/java/org/apache/karaf/features/RegionDigraphPersistence.java
@@ -0,0 +1,24 @@
+/*
+ * 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;
+
+import java.io.IOException;
+
+public interface RegionDigraphPersistence {
+
+    void persistRegionDigraph() throws IOException;
+}

http://git-wip-us.apache.org/repos/asf/karaf/blob/130caa85/features/core/src/main/java/org/apache/karaf/features/internal/osgi/Activator.java
----------------------------------------------------------------------
diff --git 
a/features/core/src/main/java/org/apache/karaf/features/internal/osgi/Activator.java
 
b/features/core/src/main/java/org/apache/karaf/features/internal/osgi/Activator.java
index e9bde40..a2b7776 100644
--- 
a/features/core/src/main/java/org/apache/karaf/features/internal/osgi/Activator.java
+++ 
b/features/core/src/main/java/org/apache/karaf/features/internal/osgi/Activator.java
@@ -34,6 +34,7 @@ import org.apache.felix.resolver.ResolverImpl;
 import org.apache.felix.utils.properties.Properties;
 import org.apache.karaf.features.FeaturesListener;
 import org.apache.karaf.features.FeaturesService;
+import org.apache.karaf.features.RegionDigraphPersistence;
 import org.apache.karaf.features.internal.management.FeaturesServiceMBeanImpl;
 import org.apache.karaf.features.internal.region.DigraphHelper;
 import org.apache.karaf.features.internal.repository.AggregateRepository;
@@ -71,7 +72,8 @@ import org.osgi.util.tracker.ServiceTrackerCustomizer;
     },
     provides = {
             @ProvideService(FeaturesService.class),
-            @ProvideService(RegionDigraph.class)
+            @ProvideService(RegionDigraph.class),
+            @ProvideService(RegionDigraphPersistence.class)
     }
 )
 public class Activator extends BaseActivator {
@@ -133,6 +135,7 @@ public class Activator extends BaseActivator {
         register(org.osgi.framework.hooks.service.FindHook.class, 
dg.getServiceFindHook());
         register(org.osgi.framework.hooks.service.EventHook.class, 
dg.getServiceEventHook());
         register(RegionDigraph.class, dg);
+        register(RegionDigraphPersistence.class, 
createRegionDigraphPersister());
         StandardManageableRegionDigraph dgmb = digraphMBean = new 
StandardManageableRegionDigraph(dg, "org.apache.karaf", bundleContext);
         dgmb.registerMBean();
 
@@ -280,13 +283,28 @@ public class Activator extends BaseActivator {
             featuresService = null;
         }
         if (digraph != null) {
+            doPersistRegionDigraph();
+            digraph = null;
+        }
+    }
+
+    private void doPersistRegionDigraph() {
+        if (digraph != null) {
             try {
                 DigraphHelper.saveDigraph(bundleContext, digraph);
             } catch (Exception e) {
                 // Ignore
             }
-            digraph = null;
         }
     }
 
+    private RegionDigraphPersistence createRegionDigraphPersister() {
+        return new RegionDigraphPersistence() {
+            @Override
+            public void persistRegionDigraph() throws IOException {
+                doPersistRegionDigraph();
+            }
+        };
+    }
+
 }

Reply via email to