diff --git a/admin/core/src/main/resources/org/apache/karaf/admin/etc/system.properties b/admin/core/src/main/resources/org/apache/karaf/admin/etc/system.properties index 735b4e0..63b975c 100644 --- a/admin/core/src/main/resources/org/apache/karaf/admin/etc/system.properties +++ b/admin/core/src/main/resources/org/apache/karaf/admin/etc/system.properties @@ -74,6 +74,16 @@ xml.catalog.files= # jline.nobell=true +# +# Deletes the entire karaf.data directory at every start +# +karaf.clean.all=false + +# +# Deletes the karaf.data/cache directory at every start +# +karaf.clean.cache=false + # Workaround for KARAF-1117: Jetty will use a JUL logger. org.eclipse.jetty.util.log.class=org.eclipse.jetty.util.log.JavaUtilLog diff --git a/assemblies/apache-karaf/src/main/distribution/text/etc/system.properties b/assemblies/apache-karaf/src/main/distribution/text/etc/system.properties index 7300715..b4fafc5 100644 --- a/assemblies/apache-karaf/src/main/distribution/text/etc/system.properties +++ b/assemblies/apache-karaf/src/main/distribution/text/etc/system.properties @@ -74,6 +74,15 @@ xml.catalog.files= # jline.nobell=true +# +# Deletes the entire karaf.data directory at every start +# +karaf.clean.all=false + +# +# Deletes the karaf.data/cache directory at every start +# +karaf.clean.cache=false # # ServiceMix specs options 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 07007b0..25a29e2 100644 --- a/main/src/main/java/org/apache/karaf/main/Main.java +++ b/main/src/main/java/org/apache/karaf/main/Main.java @@ -18,7 +18,27 @@ */ package org.apache.karaf.main; -import java.io.*; +import org.osgi.framework.Bundle; +import org.osgi.framework.BundleActivator; +import org.osgi.framework.BundleContext; +import org.osgi.framework.BundleException; +import org.osgi.framework.Constants; +import org.osgi.framework.FrameworkEvent; +import org.osgi.framework.ServiceReference; +import org.osgi.framework.launch.Framework; +import org.osgi.framework.launch.FrameworkFactory; +import org.osgi.service.startlevel.StartLevel; + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.OutputStreamWriter; +import java.io.Writer; import java.lang.management.ManagementFactory; import java.lang.management.RuntimeMXBean; import java.net.InetAddress; @@ -45,18 +65,6 @@ import java.util.logging.Logger; import java.util.regex.Matcher; import java.util.regex.Pattern; -import org.osgi.framework.Bundle; -import org.osgi.framework.BundleActivator; -import org.osgi.framework.BundleContext; -import org.osgi.framework.BundleException; -import org.osgi.framework.Constants; -import org.osgi.framework.FrameworkEvent; -import org.osgi.framework.FrameworkListener; -import org.osgi.framework.ServiceReference; -import org.osgi.framework.launch.Framework; -import org.osgi.framework.launch.FrameworkFactory; -import org.osgi.service.startlevel.StartLevel; - /** *
* This class is the default way to instantiate and execute the framework. It is not @@ -250,6 +258,29 @@ public class Main { // Copy framework properties from the system properties. Main.copySystemProperties(configProps); + File cleanAllIndicatorFile = new File(karafData, "clean_all"); + File cleanCacheIndicatorFile = new File(karafData, "clean_cache"); + if (Boolean.getBoolean("karaf.clean.all") || cleanAllIndicatorFile.exists()) { + if (cleanAllIndicatorFile.exists()) { + cleanAllIndicatorFile.delete(); + } + File karafHome = Utils.getKarafHome(); + File karafBase = Utils.getKarafDirectory(Main.PROP_KARAF_BASE, Main.ENV_KARAF_BASE, karafHome, false, true); + File karafData = Utils.getKarafDirectory(Main.PROP_KARAF_DATA, Main.ENV_KARAF_DATA, new File(karafBase, "data"), true, true); + Utils.deleteDirectory(karafData); + } else { + if (Boolean.getBoolean("karaf.clean.cache") || cleanCacheIndicatorFile.exists()) { + if (cleanCacheIndicatorFile.exists()) { + cleanCacheIndicatorFile.delete(); + } + File karafHome = Utils.getKarafHome(); + File karafBase = Utils.getKarafDirectory(Main.PROP_KARAF_BASE, Main.ENV_KARAF_BASE, karafHome, false, true); + File karafData = Utils.getKarafDirectory(Main.PROP_KARAF_DATA, Main.ENV_KARAF_DATA, new File(karafBase, "data"), true, true); + File karafCache = Utils.getKarafDirectory(Main.PROP_KARAF_DATA, Main.ENV_KARAF_DATA, new File(karafData, "cache"), true, true); + Utils.deleteDirectory(karafCache); + } + } + boolean delayConsoleStart = Boolean.parseBoolean(configProps.getProperty(KARAF_DELAY_CONSOLE, "false")); System.setProperty(KARAF_DELAY_CONSOLE, new Boolean(delayConsoleStart).toString()); @@ -492,12 +523,6 @@ public class Main { while (true) { boolean restart = false; System.setProperty("karaf.restart", "false"); - if (Boolean.getBoolean("karaf.restart.clean")) { - File karafHome = Utils.getKarafHome(); - File karafBase = Utils.getKarafDirectory(Main.PROP_KARAF_BASE, Main.ENV_KARAF_BASE, karafHome, false, true); - File karafData = Utils.getKarafDirectory(Main.PROP_KARAF_DATA, Main.ENV_KARAF_DATA, new File(karafBase, "data"), true, true); - Utils.deleteDirectory(karafData); - } final Main main = new Main(args); try { main.launch(); diff --git a/shell/dev/src/main/java/org/apache/karaf/shell/dev/Restart.java b/shell/dev/src/main/java/org/apache/karaf/shell/dev/Restart.java index 49b4d43..83f3f27 100644 --- a/shell/dev/src/main/java/org/apache/karaf/shell/dev/Restart.java +++ b/shell/dev/src/main/java/org/apache/karaf/shell/dev/Restart.java @@ -26,13 +26,18 @@ import org.apache.karaf.shell.console.OsgiCommandSupport; @Command(scope = "dev", name = "restart", description = "Restart Karaf.") public class Restart extends OsgiCommandSupport { - @Option(name = "-c", aliases = { "--clean" }, description = "Force a clean restart by deleting the working directory") - private boolean clean; + @Option(name = "-c", aliases = {"--clean", "--clean-all", "-ca"}, description = "Force a clean restart by deleting the data directory") + private boolean cleanAll; + + @Option(name = "-cc", aliases = {"--clean-cache", "-cc"}, description = "Force a clean restart by deleting the cache directory") + private boolean cleanCache; + @Override protected Object doExecute() throws Exception { System.setProperty("karaf.restart", "true"); - System.setProperty("karaf.restart.clean", Boolean.toString(clean)); + System.setProperty("karaf.clean.cache", Boolean.toString(cleanCache)); + System.setProperty("karaf.clean.all", Boolean.toString(cleanAll)); bundleContext.getBundle(0).stop(); return null; }