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();