Since this is the second time I've had to setup a (Grails) app that uses Log4j with the version of Jetty 6 that comes with Fedora (specifically Fedora 14), I figured I'd document how I had to change the jetty configuration to get the app working right:
Add jsp 2.1 to jetty's lib
Download the latest Jetty 6 release (directly from the Codehaus), and copy itslib/jsp-2.1
directory into the /usr/share/jetty/lib
directory you get with Fedora (so that you have a new /usr/share/jetty/lib/jsp-2.1
directory to go along with the existing /usr/share/jetty/lib/jsp-2.0
directory). This should solve your SLF4J problems.
Remove commons-logging.jar from jetty's classpath
The Fedora jetty daemon ultimately runs the /usr/bin/djetty
script to start jetty. Edit it to remove the Commons Logging jar from the classpath, and to allow additional java options:
#!/bin/bash
if [ -z "$JAVA_OPTIONS" ]
then
export JAVA_OPTIONS="-Xmx1500m -XX:MaxPermSize=500m"
fi
if [ -z "$JETTY_CLASSPATH" ]
then
export JETTY_CLASSPATH=""
fi
if [ -z "$JETTY_PID" ]
then
export JETTY_PID=/dev/null
fi
if [ -z "$JETTY_PORT" ]
then
export JETTY_PORT=8088
fi
export JETTY_HOME=/usr/share/jetty
if [ -z "$JETTY_HOME" ]
then
JETTY_HOME_1=`dirname "$0"`
JETTY_HOME_1=`dirname "$JETTY_HOME_1"`
JETTY_HOME=${JETTY_HOME_1}
fi
cd $JETTY_HOME
#exec /usr/bin/java -Djetty.class.path=/usr/share/java/commons-logging.jar -Djetty.port=$JETTY_PORT -jar start.jar etc/jetty-logging.xml etc/jetty.xml 2>/dev/null &
exec /usr/bin/java -Djetty.class.path="$JETTY_CLASSPATH" -Djetty.port=$JETTY_PORT $JAVA_OPTIONS -jar start.jar etc/jetty-logging.xml etc/jetty.xml 2>/dev/null &
echo $! >$JETTY_PID
Now grails' Log4j configuration should take effect.
Remove jetty's javamail.jar
Since the grails apps I've deployed included javamail jars in their own war, I get rid of the /usr/share/jetty/lib/naming/[javamail].jar
(symlink) — otherwise sending mail via SMTP just fails silently.
Remove jetty's sample apps
Delete the sample apps in /usr/share/jetty/contexts
and /usr/share/jetty/webapps
. There's no reason to keep them, and I usually want my apps to use the root context path in their place anyway.