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 2015/11/16 14:56:15 UTC

karaf git commit: [KARAF-4091] Support restarting the Karaf JVM and updating it's lib directory

Repository: karaf
Updated Branches:
  refs/heads/master e31533648 -> a47c36b7f


[KARAF-4091] Support restarting the Karaf JVM and updating it's lib directory


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

Branch: refs/heads/master
Commit: a47c36b7f00c6b593b7a9b5a018deda4aeca1cc0
Parents: e315336
Author: Guillaume Nodet <gn...@apache.org>
Authored: Mon Nov 2 09:42:40 2015 +0100
Committer: Guillaume Nodet <gn...@apache.org>
Committed: Mon Nov 16 14:56:09 2015 +0100

----------------------------------------------------------------------
 .../base/src/main/resources/resources/bin/karaf | 37 +++++++++++++++++++-
 .../src/main/resources/resources/bin/karaf.bat  | 28 ++++++++++++++-
 .../main/java/org/apache/karaf/main/Main.java   |  8 ++++-
 3 files changed, 70 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/karaf/blob/a47c36b7/assemblies/features/base/src/main/resources/resources/bin/karaf
----------------------------------------------------------------------
diff --git a/assemblies/features/base/src/main/resources/resources/bin/karaf b/assemblies/features/base/src/main/resources/resources/bin/karaf
index da5fc28..66e5a50 100755
--- a/assemblies/features/base/src/main/resources/resources/bin/karaf
+++ b/assemblies/features/base/src/main/resources/resources/bin/karaf
@@ -417,7 +417,42 @@ run() {
     fi
     cd "$KARAF_BASE"
 
-    exec "$JAVA" $JAVA_OPTS -Djava.endorsed.dirs="${JAVA_ENDORSED_DIRS}" -Djava.ext.dirs="${JAVA_EXT_DIRS}" -Dkaraf.instances="${KARAF_HOME}/instances" -Dkaraf.home="$KARAF_HOME" -Dkaraf.base="$KARAF_BASE" -Dkaraf.data="$KARAF_DATA" -Dkaraf.etc="$KARAF_ETC" -Djava.io.tmpdir="$KARAF_DATA/tmp" -Djava.util.logging.config.file="$KARAF_BASE/etc/java.util.logging.properties" $KARAF_OPTS $OPTS -classpath "$CLASSPATH" $MAIN "$@"
+    if [ -z "$KARAF_EXEC" ]; then
+        KARAF_EXEC=""
+    fi
+
+    while true; do
+
+        # When users want to update the lib version of, they just need to create
+        # a lib.next directory and on the new restart, it will replace the current lib directory.
+        if [ -d ${KARAF_HOME}/lib.next ] ; then
+            echo "Updating libs..."
+            rm -rf "${KARAF_HOME}/lib"
+            mv -f "${KARAF_HOME}/lib.next" "${KARAF_HOME}/lib"
+        fi
+
+        $KARAF_EXEC "$JAVA" $JAVA_OPTS \
+            -Djava.endorsed.dirs="${JAVA_ENDORSED_DIRS}" \
+            -Djava.ext.dirs="${JAVA_EXT_DIRS}" \
+            -Dkaraf.instances="${KARAF_HOME}/instances" \
+            -Dkaraf.home="$KARAF_HOME" \
+            -Dkaraf.base="$KARAF_BASE" \
+            -Dkaraf.data="$KARAF_DATA" \
+            -Dkaraf.etc="$KARAF_ETC" \
+            -Dkaraf.restart.jvm.supported=true \
+            -Djava.io.tmpdir="$KARAF_DATA/tmp" \
+            -Djava.util.logging.config.file="$KARAF_BASE/etc/java.util.logging.properties" \
+            $KARAF_OPTS $OPTS \
+            -classpath "$CLASSPATH" \
+            $MAIN "$@"
+
+        KARAF_RC=$?
+        if [ "$KARAF_RC" -eq 10 ]; then
+           echo "Restarting JVM..."
+        else
+           exit $KARAF_RC
+        fi
+    done
 }
 
 main() {

http://git-wip-us.apache.org/repos/asf/karaf/blob/a47c36b7/assemblies/features/base/src/main/resources/resources/bin/karaf.bat
----------------------------------------------------------------------
diff --git a/assemblies/features/base/src/main/resources/resources/bin/karaf.bat b/assemblies/features/base/src/main/resources/resources/bin/karaf.bat
index 3645594..fde33c6 100644
--- a/assemblies/features/base/src/main/resources/resources/bin/karaf.bat
+++ b/assemblies/features/base/src/main/resources/resources/bin/karaf.bat
@@ -327,7 +327,33 @@ if "%KARAF_PROFILER%" == "" goto :RUN
     SET ARGS=%1 %2 %3 %4 %5 %6 %7 %8
     rem Execute the Java Virtual Machine
     cd "%KARAF_BASE%"
-    "%JAVA%" %JAVA_OPTS% %OPTS% -classpath "%CLASSPATH%" -Djava.endorsed.dirs="%JAVA_HOME%\jre\lib\endorsed;%JAVA_HOME%\lib\endorsed;%KARAF_HOME%\lib\endorsed" -Djava.ext.dirs="%JAVA_HOME%\jre\lib\ext;%JAVA_HOME%\lib\ext;%KARAF_HOME%\lib\ext" -Dkaraf.instances="%KARAF_HOME%\instances" -Dkaraf.home="%KARAF_HOME%" -Dkaraf.base="%KARAF_BASE%" -Dkaraf.etc="%KARAF_ETC%" -Djava.io.tmpdir="%KARAF_DATA%\tmp" -Dkaraf.data="%KARAF_DATA%" -Djava.util.logging.config.file="%KARAF_BASE%\etc\java.util.logging.properties" %KARAF_OPTS% %MAIN% %ARGS%
+
+    rem When users want to update the lib version of, they just need to create
+    rem a lib.next directory and on the new restart, it will replace the current lib directory.
+    if exist "%KARAF_HOME%\lib.next" (
+        echo Updating libs...
+        RD /S /Q "%KARAF_HOME%\lib"
+        MOVE /Y "%KARAF_HOME%\lib.next" "%KARAF_HOME%\lib"
+    )
+
+    "%JAVA%" %JAVA_OPTS% %OPTS% ^
+        -classpath "%CLASSPATH%" ^
+        -Djava.endorsed.dirs="%JAVA_HOME%\jre\lib\endorsed;%JAVA_HOME%\lib\endorsed;%KARAF_HOME%\lib\endorsed" ^
+        -Djava.ext.dirs="%JAVA_HOME%\jre\lib\ext;%JAVA_HOME%\lib\ext;%KARAF_HOME%\lib\ext" ^
+        -Dkaraf.instances="%KARAF_HOME%\instances" ^
+        -Dkaraf.home="%KARAF_HOME%" ^
+        -Dkaraf.base="%KARAF_BASE%" ^
+        -Dkaraf.etc="%KARAF_ETC%" ^
+        -Dkaraf.restart.jvm.supported=true ^
+        -Djava.io.tmpdir="%KARAF_DATA%\tmp" ^
+        -Dkaraf.data="%KARAF_DATA%" ^
+        -Djava.util.logging.config.file="%KARAF_BASE%\etc\java.util.logging.properties" ^
+        %KARAF_OPTS% %MAIN% %ARGS%
+
+    if ERRORLEVEL 10 (
+        echo Restarting JVM...
+        goto EXECUTE
+    )
 
 rem # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
 

http://git-wip-us.apache.org/repos/asf/karaf/blob/a47c36b7/main/src/main/java/org/apache/karaf/main/Main.java
----------------------------------------------------------------------
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 0eb1d89..d2c77df 100644
--- a/main/src/main/java/org/apache/karaf/main/Main.java
+++ b/main/src/main/java/org/apache/karaf/main/Main.java
@@ -169,6 +169,9 @@ public class Main {
     public static void main(String[] args) throws Exception {
         while (true) {
             boolean restart = false;
+            boolean restartJvm = false;
+            // karaf.restart.jvm take priority over karaf.restart
+            System.setProperty("karaf.restart.jvm", "false");
             System.setProperty("karaf.restart", "false");
             final Main main = new Main(args);
             try {
@@ -185,6 +188,7 @@ public class Main {
                 main.awaitShutdown();
                 boolean stopped = main.destroy();
                 restart = Boolean.getBoolean("karaf.restart");
+                restartJvm = Boolean.getBoolean("karaf.restart.jvm");
                 main.updateInstancePidAfterShutdown();
                 if (!stopped) {
                     if (restart) {
@@ -199,7 +203,9 @@ public class Main {
                 System.err.println("Error occurred shutting down framework: " + ex);
                 ex.printStackTrace();
             } finally {
-                if (!restart) {
+                if (restartJvm) {
+                    System.exit(10);
+                } else if (!restart) {
                     System.exit(main.getExitCode());
                 } else {
                     System.gc();