#!/bin/sh
#
# $Id: tomcat.sh,v 1.32 2002/01/31 03:58:13 larryi Exp $

# Shell script to start and stop the server

# There are other, simpler commands to startup the runner. The two
# commented commands good replacements. The first works well with
# Java Platform 1.1 based runtimes. The second works well with
# Java2 Platform based runtimes.
#jre -cp lib/tomcat.jar org.apache.tomcat.startup.Main $*
#java -cp lib/tomcat.jar org.apache.tomcat.startup.Main $*
#java -jar lib/tomcat.jar


# Read local properties 
if [ -f $HOME/.tomcatrc ] ; then 
  . $HOME/.tomcatrc
fi

TOMCAT_CFG="/etc/tomcat3/conf/tomcat3.conf"

[ -r "$TOMCAT_CFG" ] && . "${TOMCAT_CFG}"

### Set up defaults if they were omitted in TOMCAT_CFG

###  JVM lookup

if [ -z "$JAVA_HOME" ]; then
    # Search for java in PATH
    JAVA=`which java`
    if [ -z "$JAVA" ] ; then
    JAVA_BINDIR=`dirname ${JAVA}`
    JAVA_HOME="${JAVA_BINDIR}/.."
    fi
    # Default clean JAVA_HOME
    [ -z "$JAVA_HOME"  -a -d "/usr/lib/java" ] &&  JAVA_HOME="/usr/lib/java"
    # Default IBMs JAVA_HOME SDK 1.3 and 1.3.1
    [ -z "$JAVA_HOME"  -a -d "/opt/IBMJava2-13" ] &&  JAVA_HOME="/opt/IBMJava2-13" 
    [ -z "$JAVA_HOME"  -a -d "/opt/IBMJava2-131" ] && JAVA_HOME="/opt/IBMJava2-131"
    # Another solution
    [ -z "$JAVA_HOME"  -a -d "/usr/java/jdk" ] &&  JAVA_HOME="/usr/java/jdk"
    # madeinlinux JAVA_HOME
    [ -z "$JAVA_HOME" -a -d "/usr/local/jdk1.2.2" ] && JAVA_HOME="/usr/local/jdk1.2.2"
    # Kondara JAVA_HOME
    [ -z "$JAVA_HOME"  -a -d "/usr/lib/java/jdk1.2.2" ] && JAVA_HOME="/usr/lib/java/jdk1.2.2"
    # Other commonly found JAVA_HOMEs
    [ -z "$JAVA_HOME"  -a -d "/usr/jdk1.2" ] && JAVA_HOME="/usr/jdk1.2"
    # Default Caldera JAVA_HOME
    [ -z "$JAVA_HOME"  -a -d "/opt/java-1.3" ] && JAVA_HOME="/opt/java-1.3"
    # Add other locations here
    if [ -z "$JAVA_HOME" ]; then
        echo "No JAVA_HOME specified in ${TOMCAT_CFG} and no java found, exiting..."
        exit 1
    fi
fi

if [ -z "$JAVACMD" ]; then
    JAVACMD="$JAVA_HOME/bin/java"
else
    echo "Using custom JAVACMD: ${JAVACMD}"
fi

if [ -z "$TOMCAT_AJPID" ] ; then
    export TOMCAT_AJPID=/var/spool/tomcat3/ajp.id
fi

if [ -z "$TOMCAT_AJP12ID" ] ; then
    export TOMCAT_AJP12ID=/var/spool/tomcat3/ajp12.id
fi

if [ -z "$TOMCAT_AJP13ID" ] ; then
    export TOMCAT_AJP13ID=/var/spool/tomcat3/ajp13.id
fi

if [ -z "$TOMCAT_RUN" ] ; then
    export TOMCAT_RUN=/var/log/tomcat3/tomcat3.pid
fi

if [ -z "$TOMCAT_LOG" ] ; then
    export TOMCAT_LOG=/var/log/tomcat3/tomcat.log
fi

if [ -z "$TOMCAT_PID" ] ; then
    export TOMCAT_PID=/var/log/tomcat3/tomcat.pid
fi

if [ -z "$STDOUT_LOG" ] ; then
    export STDOUT_LOG=/var/log/tomcat3/tomcat.log
fi

if [ "$JAVACMD" = "" ] ; then 
   # it may be defined in env - including flags!!
   JAVACMD=$JAVA_HOME/bin/java
fi

## -------------------- Prepare CLASSPATH --------------------
MAIN=org.apache.tomcat.startup.Main
export MAIN

oldCP=$CLASSPATH
unset CLASSPATH
CLASSPATH=${TOMCAT_INSTALL}/lib/tomcat.jar

# Ignore previous CLASSPATH

# This is consistent with "java -jar tomcat.jar "
export CLASSPATH

## -------------------- Process options -------------------- 
# add tomcat.policy - even if we don't use sandbox, it doesn't hurt
TOMCAT_OPTS="$TOMCAT_OPTS -Djava.security.policy==${TOMCAT_HOME}/conf/tomcat.policy "


# We start the server up in the background for a couple of reasons:
#   1) It frees up your command window
#   2) You should use `stop` option instead of ^C to bring down the server
if [ "$1" = "start_msg" ]; then
  shift
  echo "Starting Tomcat Servlet Engine"

elif [ "$1" = "stop_msg" ]; then
  shift
  echo "Stopping Tomcat Servlet Engine"

elif [ "$1" = "start" ] ; then 
  shift 

  MAX_WAIT=360
  WAIT=0
  if [ "$1" = "-wait" ] ; then
    shift
    # wait at least 6 min 
    WAIT=${MAX_WAIT}
  fi
    
  if [ "$1" = "-noout" ] ; then
    shift
    $JAVACMD $TOMCAT_OPTS -Dtomcat.home=${TOMCAT_HOME}  $MAIN start $@ >${STDOUT_LOG} 2>&1 &

    if [ ! -z "$TOMCAT_PID" ]; then
      echo $! > $TOMCAT_PID
    fi
  else
    echo Using classpath: ${CLASSPATH}
    echo Using JAVA_HOME: ${JAVA_HOME}
    echo Using TOMCAT_HOME: ${TOMCAT_HOME}
    $JAVACMD $TOMCAT_OPTS -Dtomcat.home=${TOMCAT_HOME}  $MAIN start $@ &

    if [ ! -z "$TOMCAT_PID" ]; then
      echo $! > $TOMCAT_PID
    fi
  fi


  JAVA_PID=$!
  echo $JAVA_PID > ${TOMCAT_PID}

  # Wait for ajp12.id signaling end of startup
  if [ ! "$WAIT" = "0" ] ; then 
    while [ ! -f ${TOMCAT_AJP12ID} ] ; do 
        sleep 1

        WAIT=`expr $WAIT - 1`
        if [ "$WAIT" = "0" ] ; then
            echo "Tomcat was not ready after ${MAX_WAIT} seconds, giving up waiting "
            break;
        fi
    done
  fi

elif [ "$1" = "stop" ] ; then 
  shift 
  echo Using classpath: ${CLASSPATH}
  echo Using JAVA_HOME: ${JAVA_HOME}
  echo Using TOMCAT_HOME: ${TOMCAT_HOME}
  $JAVACMD $TOMCAT_OPTS -Dtomcat.home=${TOMCAT_HOME} $MAIN stop -ajpid ${TOMCAT_AJP12ID} -ajp12 $@

  if [ "$1" = "-force" ] ; then
    shift
    echo "Killing: `cat ${TOMCAT_PID}`"
    kill -9 `cat ${TOMCAT_PID}`
  fi

elif [ "$1" = "run" ] ; then 
  shift 
  # Backward compat
  if [ "$1" = "enableAdmin" ] ; then
    $JAVACMD $TOMCAT_OPTS -Dtomcat.home=${TOMCAT_HOME} $MAIN enableAdmin $@ 
  elif  [ "$1" = "-enableAdmin" ] ; then  
    $JAVACMD $TOMCAT_OPTS -Dtomcat.home=${TOMCAT_HOME} $MAIN enableAdmin $@ 
  else
    echo Using classpath: ${CLASSPATH}
    echo Using JAVA_HOME: ${JAVA_HOME}
    echo Using TOMCAT_HOME: ${TOMCAT_HOME}
    $JAVACMD $TOMCAT_OPTS -Dtomcat.home=${TOMCAT_HOME} $MAIN start $@ 
  fi
elif [ "$1" = "enableAdmin" ] ; then 

  $JAVACMD $TOMCAT_OPTS -Dtomcat.home=${TOMCAT_HOME} $MAIN enableAdmin $@

elif [ "$1" = "estart" ] ; then 

  $JAVACMD $TOMCAT_OPTS -Dtomcat.home=${TOMCAT_HOME} $MAIN estart $@

elif [ "$1" = "jspc" ] ; then 
    shift 
    $JAVACMD $TOMCAT_OPTS -Dtomcat.home=${TOMCAT_HOME} $MAIN jspc $@

elif [ "$1" = "jspcOrig" ] ; then 
    shift 
    CLASSPATH=.
    for i in ${TOMCAT_HOME}/lib/container/* ${TOMCAT_HOME}/lib/common/* ; do
        CLASSPATH=${CLASSPATH}:$i
    done
    CLASSPATH=${CLASSPATH}:${JAVA_HOME}/lib/tools.jar
    # Backdoor classpath setting for development purposes when all classes
    # are compiled into a /classes dir and are not yet jarred.
    if [ -d ${TOMCAT_HOME}/classes ]; then
        CLASSPATH=${TOMCAT_HOME}/classes:${CLASSPATH}
    fi
    
    if [ "$oldCP" != "" ]; then
        CLASSPATH=${CLASSPATH}:${oldCP}
    fi
    (cd $TOMCAT_HOME; $JAVACMD $JSPC_OPTS -Dtomcat.home=${TOMCAT_HOME} org.apache.jasper.JspC $@ )

elif [ "$1" = "env" ] ; then 
  ## Call it with source tomcat.sh to set the env for tomcat
  shift 
  echo Setting classpath to: ${CLASSPATH}
  # -------------------- Add all classes in common, container, apps - 
  # Used if you want to do command-line javac, etc
  ## Temp - old script 
  for i in ${TOMCAT_HOME}/lib/* ${TOMCAT_HOME}/lib/common/* ${TOMCAT_HOME}/lib/container/* ${TOMCAT_HOME}/lib/apps/* ; do
    if [ "$CLASSPATH" != "" ]; then
      CLASSPATH=${CLASSPATH}:$i
    else
      CLASSPATH=$i
    fi
  done

  if [ -f ${JAVA_HOME}/lib/tools.jar ] ; then
     # We are probably in a JDK1.2 environment
     CLASSPATH=${CLASSPATH}:${JAVA_HOME}/lib/tools.jar
  fi

  # Backdoor classpath setting for development purposes when all classes
  # are compiled into a /classes dir and are not yet jarred.
  if [ -d ${TOMCAT_HOME}/classes ]; then
     CLASSPATH=${TOMCAT_HOME}/classes:${CLASSPATH}
  fi
  oldCP=$CLASSPATH

else
  echo "Usage:"
  echo "$0 (start|run|stop|enableAdmin|estart|env|jspc)"
  echo "  start            - start tomcat in the background"
  echo "  start -security  -   use a SecurityManager when starting"
  echo "  start -noout     -   redirect stdout/stderr to \$STDOUT_LOG"
  echo "  start -wait      -   wait until tomcat is initialized before returning"
  echo "  start -help      -   more options"
  echo "                         (config, debug, estart, home, install, jkconf, sandbox)"
  echo "  run              - start tomcat in the foreground"
  echo "  run -security    -   use a SecurityManager when starting"
  echo "  stop             - stop tomcat"
  echo "  stop -force      -   stop tomcat with the 'kill' command if necessary"
  echo "  stop -help       -   more options"
  echo "                         (ajpid, host, home, pass, port)"
  echo "  enableAdmin      - Trust the admin web application,"
  echo "                     i.e. rewrites conf/apps-admin.xml with trusted=\"true\""
  echo "  estart           - Start Tomcat using the/your EmbededTomcat class which"
  echo "                     uses a hardcoded set of modules"
  echo "  env              - set CLASSPATH and TOMCAT_HOME env. variables"
  echo "  jspc             - run jsp pre compiler"
  exit 0
fi


if [ "$oldCP" != "" ]; then
    CLASSPATH=${oldCP}
    export CLASSPATH
else
    unset CLASSPATH
fi
