FELIX-1970: the stop script should always work even if the default user / password / host has been changed

git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@900408 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/karaf/assembly/src/main/distribution/unix-shell/bin/karaf b/karaf/assembly/src/main/distribution/unix-shell/bin/karaf
index 86137e6..d0af57b 100755
--- a/karaf/assembly/src/main/distribution/unix-shell/bin/karaf
+++ b/karaf/assembly/src/main/distribution/unix-shell/bin/karaf
@@ -266,7 +266,12 @@
 
 run() {
     OPTS="-Dkaraf.startLocalConsole=true -Dkaraf.startRemoteShell=true"
+    MAIN=org.apache.felix.karaf.main.Bootstrap
     case "$1" in
+        'stop')
+            MAIN=org.apache.felix.karaf.main.Stop
+            shift
+            ;;
         'console')
             shift
             ;;
@@ -286,7 +291,7 @@
         CLASSPATH=`cygpath --path --windows "$CLASSPATH"`
     fi
     cd $KARAF_BASE
-    exec $JAVA $JAVA_OPTS -Dstorage.location="${KARAF_HOME}/instances" -Dkaraf.home="$KARAF_HOME" -Dkaraf.base="$KARAF_BASE" -Djava.util.logging.config.file=$KARAF_BASE/etc/java.util.logging.properties $OPTS -classpath "$CLASSPATH" org.apache.felix.karaf.main.Bootstrap "$@"
+    exec $JAVA $JAVA_OPTS -Dstorage.location="${KARAF_HOME}/instances" -Dkaraf.home="$KARAF_HOME" -Dkaraf.base="$KARAF_BASE" -Djava.util.logging.config.file=$KARAF_BASE/etc/java.util.logging.properties $OPTS -classpath "$CLASSPATH" $MAIN "$@"
 }
 
 main() {
diff --git a/karaf/assembly/src/main/distribution/unix-shell/bin/stop b/karaf/assembly/src/main/distribution/unix-shell/bin/stop
index 017e41d..dd6dfc2 100755
--- a/karaf/assembly/src/main/distribution/unix-shell/bin/stop
+++ b/karaf/assembly/src/main/distribution/unix-shell/bin/stop
@@ -21,20 +21,6 @@
 DIRNAME=`dirname $0`
 PROGNAME=`basename $0`
 
-#
-# Check/Set up some easily accessible MIN/MAX params for JVM mem usage
-#
-
-if [ "x$JAVA_MIN_MEM" = "x" ]; then
-    JAVA_MIN_MEM=128M
-    export JAVA_MIN_MEM
-fi
-
-if [ "x$JAVA_MAX_MEM" = "x" ]; then
-    JAVA_MAX_MEM=512M
-    export JAVA_MAX_MEM
-fi
-
 warn() {
     echo "${PROGNAME}: $*"
 }
@@ -44,13 +30,6 @@
     exit 1
 }
 
-maybeSource() {
-    file="$1"
-    if [ -f "$file" ] ; then
-        . $file
-    fi
-}
-
 detectOS() {
     # OS specific support (must be 'true' or 'false').
     cygwin=false;
@@ -79,34 +58,6 @@
     fi
 }
 
-unlimitFD() {
-    # Use the maximum available, or set MAX_FD != -1 to use that
-    if [ "x$MAX_FD" = "x" ]; then
-        MAX_FD="maximum"
-    fi
-
-    # Increase the maximum file descriptors if we can
-    if [ "$os400" = "false" ] && [ "$cygwin" = "false" ]; then
-        MAX_FD_LIMIT=`ulimit -H -n`
-        if [ "$MAX_FD_LIMIT" != 'unlimited' ]; then
-            if [ $? -eq 0 ]; then
-                if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ]; then
-                    # use the system max
-                    MAX_FD="$MAX_FD_LIMIT"
-                fi
-
-                ulimit -n $MAX_FD > /dev/null
-                # echo "ulimit -n" `ulimit -n`
-                if [ $? -ne 0 ]; then
-                    warn "Could not set maximum file descriptor limit: $MAX_FD"
-                fi
-            else
-                warn "Could not query system maximum file descriptor limit: $MAX_FD_LIMIT"
-            fi
-        fi
-    fi
-}
-
 locateHome() {
     if [ "x$KARAF_HOME" != "x" ]; then
         warn "Ignoring predefined value for KARAF_HOME"
@@ -131,137 +82,15 @@
     fi
 }
 
-setupNativePath() {
-    # Support for loading native libraries
-    LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:$KARAF_BASE/lib:$KARAF_HOME/lib"
-
-    # For Cygwin, set PATH from LD_LIBRARY_PATH
-    if $cygwin; then
-        LD_LIBRARY_PATH=`cygpath --path --windows "$LD_LIBRARY_PATH"`
-        PATH="$PATH;$LD_LIBRARY_PATH"
-        export PATH
-    fi
-    export LD_LIBRARY_PATH
-}
-
-locateJava() {
-    # Setup the Java Virtual Machine
-    if $cygwin ; then
-        [ -n "$JAVA" ] && JAVA=`cygpath --unix "$JAVA"`
-        [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
-    fi
-
-    if [ "x$JAVA" = "x" ]; then
-        if [ "x$JAVA_HOME" = "x" ] && [ "$darwin" = "true" ]; then
-            JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Home
-        fi
-        if [ "x$JAVA_HOME" != "x" ]; then
-            if [ ! -d "$JAVA_HOME" ]; then
-                die "JAVA_HOME is not valid: $JAVA_HOME"
-            fi
-            JAVA="$JAVA_HOME/bin/java"
-        else
-            warn "JAVA_HOME not set; results may vary"
-            JAVA="java"
-        fi
-    fi
-}
-
-detectJVM() {
-   #echo "`$JAVA -version`"
-   # This service should call `java -version`,
-   # read stdout, and look for hints
-   if $JAVA -version 2>&1 | grep "^IBM" ; then
-       JVM_VENDOR="IBM"
-   # on OS/400, java -version does not contain IBM explicitly
-   elif $os400; then
-       JVM_VENDOR="IBM"
-   else
-       JVM_VENDOR="SUN"
-   fi
-   # echo "JVM vendor is $JVM_VENDOR"
-}
-
-setupDebugOptions() {
-    if [ "x$JAVA_OPTS" = "x" ]; then
-        JAVA_OPTS="$DEFAULT_JAVA_OPTS"
-    fi
-    export JAVA_OPTS
-
-    # Set Debug options if enabled
-    if [ "x$KARAF_DEBUG" != "x" ]; then
-        # Use the defaults if JAVA_DEBUG_OPTS was not set
-        if [ "x$JAVA_DEBUG_OPTS" = "x" ]; then
-            JAVA_DEBUG_OPTS="$DEFAULT_JAVA_DEBUG_OPTS"
-        fi
-
-        JAVA_OPTS="$JAVA_DEBUG_OPTS $JAVA_OPTS"
-        warn "Enabling Java debug options: $JAVA_DEBUG_OPTS"
-    fi
-}
-
-setupDefaults() {
-    DEFAULT_JAVA_OPTS="-Xms$JAVA_MIN_MEM -Xmx$JAVA_MAX_MEM "
-
-    #Set the JVM_VENDOR specific JVM flags
-    if [ "$JVM_VENDOR" = "SUN" ]; then
-        DEFAULT_JAVA_OPTS="-server $DEFAULT_JAVA_OPTS -Dcom.sun.management.jmxremote"
-    elif [ "$JVM_VENDOR" = "IBM" ]; then
-        if $os400; then
-            DEFAULT_JAVA_OPTS="$DEFAULT_JAVA_OPTS"
-        elif $aix; then
-            DEFAULT_JAVA_OPTS="-Xverify:none -Xlp $DEFAULT_JAVA_OPTS"
-        else
-            DEFAULT_JAVA_OPTS="-Xverify:none $DEFAULT_JAVA_OPTS"
-        fi
-    fi
-
-    # Add the jars in the lib dir
-    for file in $KARAF_HOME/lib/*.jar
-    do
-        if [ -z "$CLASSPATH" ]; then
-            CLASSPATH="$file"
-        else
-            CLASSPATH="$CLASSPATH:$file"
-        fi
-    done
-    DEFAULT_JAVA_DEBUG_OPTS="-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005"
-
-    ##
-    ## TODO: Move to conf/profiler/yourkit.{sh|cmd}
-    ##
-    # Uncomment to enable YourKit profiling
-    #DEFAULT_JAVA_DEBUG_OPTS="-Xrunyjpagent"
-}
-
 init() {
     # Determine if there is special OS handling we must perform
     detectOS
 
-    # Unlimit the number of file descriptors if possible
-    unlimitFD
-
     # Locate the Karaf home directory
     locateHome
 
     # Locate the Karaf base directory
     locateBase
-
-    # Setup the native library path
-    setupNativePath
-
-    # Locate the Java VM to execute
-    locateJava
-
-    # Determine the JVM vendor
-    detectJVM
-
-    # Setup default options
-    setupDefaults
-
-    # Install debug options
-    setupDebugOptions
-
 }
 
 run() {
@@ -270,7 +99,11 @@
         KARAF_BASE=`cygpath --path --windows "$KARAF_BASE"`
         CLASSPATH=`cygpath --path --windows "$CLASSPATH"`
     fi
-    exec $JAVA $JAVA_OPTS -Dkaraf.home="$KARAF_HOME" -Dkaraf.base="$KARAF_BASE" -Djava.util.logging.config.file=$KARAF_BASE/etc/java.util.logging.properties -jar "$KARAF_HOME/lib/karaf-client.jar" osgi:shutdown "$@"
+    # Ensure the log directory exists -- we need to have a place to redirect stdout/stderr
+    if [ ! -d "$KARAF_HOME/data/log" ]; then
+        mkdir -p "$KARAF_HOME/data/log"
+    fi
+    exec "$KARAF_HOME"/bin/karaf stop "$@"
 }
 
 main() {
@@ -279,3 +112,4 @@
 }
 
 main "$@"
+
diff --git a/karaf/assembly/src/main/distribution/windows-text/bin/karaf.bat b/karaf/assembly/src/main/distribution/windows-text/bin/karaf.bat
index 5eb74ea..c8c3e7a 100755
--- a/karaf/assembly/src/main/distribution/windows-text/bin/karaf.bat
+++ b/karaf/assembly/src/main/distribution/windows-text/bin/karaf.bat
@@ -128,12 +128,19 @@
 
 :RUN
     SET OPTS=-Dkaraf.startLocalConsole=true -Dkaraf.startRemoteShell=true
+    SET MAIN=org.apache.felix.karaf.main.Bootstrap
     SET SHIFT=false
+    if "%1" == "stop" goto :EXECUTE_STOP
     if "%1" == "console" goto :EXECUTE_CONSOLE
     if "%1" == "server" goto :EXECUTE_SERVER
     if "%1" == "client" goto :EXECUTE_CLIENT
     goto :EXECUTE
 
+:EXECUTE_STOP
+    SET MAIN=org.apache.felix.karaf.main.Stop
+    SET SHIFT=true
+    goto :EXECUTE
+
 :EXECUTE_CONSOLE
     SET SHIFT=true
     goto :EXECUTE    
diff --git a/karaf/assembly/src/main/distribution/windows-text/bin/stop.bat b/karaf/assembly/src/main/distribution/windows-text/bin/stop.bat
index 7db1ea6..3b875cd 100755
--- a/karaf/assembly/src/main/distribution/windows-text/bin/stop.bat
+++ b/karaf/assembly/src/main/distribution/windows-text/bin/stop.bat
@@ -16,9 +16,9 @@
 rem    See the License for the specific language governing permissions and

 rem    limitations under the License.

 rem

-rem 

+rem

 rem $Id: karaf.bat 979 2005-11-30 22:50:55Z bsnyder $

-rem 

+rem

 

 if not "%ECHO%" == "" echo %ECHO%

 

@@ -58,77 +58,8 @@
   set KARAF_BASE=%KARAF_HOME%

 )

 

-set LOCAL_CLASSPATH=%CLASSPATH%

-set DEFAULT_JAVA_OPTS=-server -Xmx512M -Dderby.system.home="%KARAF_BASE%\data\derby" -Dderby.storage.fileSyncTransactionLog=true -Dcom.sun.management.jmxremote

-set CLASSPATH=%LOCAL_CLASSPATH%;%KARAF_BASE%\conf

-set DEFAULT_JAVA_DEBUG_OPTS=-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005

-

-if "%LOCAL_CLASSPATH%" == "" goto :KARAF_CLASSPATH_EMPTY

-    set CLASSPATH=%LOCAL_CLASSPATH%;%KARAF_BASE%\conf

-    goto :KARAF_CLASSPATH_END

-:KARAF_CLASSPATH_EMPTY

-    set CLASSPATH=%KARAF_BASE%\conf

-:KARAF_CLASSPATH_END

-

-rem Setup Karaf Home

-if exist "%KARAF_HOME%\conf\karaf-rc.cmd" call %KARAF_HOME%\conf\karaf-rc.cmd

-if exist "%HOME%\karaf-rc.cmd" call %HOME%\karaf-rc.cmd

-

-rem Support for loading native libraries

-set PATH=%PATH%;%KARAF_BASE%\lib;%KARAF_HOME%\lib

-

-rem Setup the Java Virtual Machine

-if not "%JAVA%" == "" goto :Check_JAVA_END

-    set JAVA=java

-    if "%JAVA_HOME%" == "" call :warn JAVA_HOME not set; results may vary

-    if not "%JAVA_HOME%" == "" set JAVA=%JAVA_HOME%\bin\java

-    if not exist "%JAVA_HOME%" (

-        call :warn JAVA_HOME is not valid: "%JAVA_HOME%"

-        goto END

-    )

-:Check_JAVA_END

-

-if "%JAVA_OPTS%" == "" set JAVA_OPTS=%DEFAULT_JAVA_OPTS%

-

-if "%KARAF_DEBUG%" == "" goto :KARAF_DEBUG_END

-    rem Use the defaults if JAVA_DEBUG_OPTS was not set

-    if "%JAVA_DEBUG_OPTS%" == "" set JAVA_DEBUG_OPTS=%DEFAULT_JAVA_DEBUG_OPTS%

-    

-    set "JAVA_OPTS=%JAVA_DEBUG_OPTS% %JAVA_OPTS%"

-    call :warn Enabling Java debug options: %JAVA_DEBUG_OPTS%

-:KARAF_DEBUG_END

-

-if "%KARAF_PROFILER%" == "" goto :KARAF_PROFILER_END

-    set KARAF_PROFILER_SCRIPT=%KARAF_HOME%\conf\profiler\%KARAF_PROFILER%.cmd

-    

-    if exist "%KARAF_PROFILER_SCRIPT%" goto :KARAF_PROFILER_END

-    call :warn Missing configuration for profiler '%KARAF_PROFILER%': %KARAF_PROFILER_SCRIPT%

-    goto END

-:KARAF_PROFILER_END

-

-rem Setup the classpath

-pushd "%KARAF_HOME%\lib"

-for %%G in (*.*) do call:APPEND_TO_CLASSPATH %%G

-popd

-goto CLASSPATH_END

-

-: APPEND_TO_CLASSPATH

-set filename=%~1

-set suffix=%filename:~-4%

-if %suffix% equ .jar set CLASSPATH=%CLASSPATH%;%KARAF_HOME%\lib\%filename%

-goto :EOF

-

-:CLASSPATH_END

-

-rem Execute the JVM or the load the profiler

-if "%KARAF_PROFILER%" == "" goto :RUN

-    rem Execute the profiler if it has been configured

-    call :warn Loading profiler script: %KARAF_PROFILER_SCRIPT%

-    call %KARAF_PROFILER_SCRIPT%

-

-:RUN

-    rem Execute the Java Virtual Machine

-    "%JAVA%" %JAVA_OPTS% %OPTS% -classpath "%CLASSPATH%" -Dkaraf.home="%KARAF_HOME%" -Dkaraf.base="%KARAF_BASE%" -Djava.util.logging.config.file="%KARAF_BASE%\etc\java.util.logging.properties" -jar "%KARAF_HOME%\lib\karaf-client.jar" "osgi:shutdown" %ARGS%

+:EXECUTE

+    "%KARAF_HOME%\bin\karaf.bat" stop

 

 rem # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #

 

@@ -138,5 +69,4 @@
 

 if not "%PAUSE%" == "" pause

 

-:END_NO_PAUSE

-

+:END_NO_PAUSE
\ No newline at end of file
diff --git a/karaf/assembly/src/main/filtered-resources/etc/config.properties b/karaf/assembly/src/main/filtered-resources/etc/config.properties
index 5cc8009..12c599f 100644
--- a/karaf/assembly/src/main/filtered-resources/etc/config.properties
+++ b/karaf/assembly/src/main/filtered-resources/etc/config.properties
@@ -51,6 +51,8 @@
 org.osgi.framework.startlevel.beginning=100
 karaf.startlevel.bundle=60
 
+karaf.shutdown.port.file=${karaf.base}/data/port
+
 #
 # FileMonitor properties
 #