= Gerrit Code Review - J2EE Installation

== Description

Gerrit binary distributions include a standalone Jetty servlet
container, but are packaged as a standard WAR file to permit easy
deployment to other existing container installations if using the
standalone daemon is not desired.

Gerrit Code Review can be installed into any J2EE servlet container,
including popular open source containers such as Jetty or Tomcat, or
any commercial server which supports the J2EE servlet specification.


== Installation

* Complete the link:install.html#createdb[database setup] and
  link:install.html#init[site initialization] tasks described
  in the standard installation documentation.

* Stop the embedded daemon that was automatically started by 'init':
+
----
  review_site/bin/gerrit.sh stop
----

* Configure JNDI DataSource 'jdbc/ReviewDb'.
+
This DataSource must point to the database you created above.
Don't forget to ensure your JNDI configuration can load the
necessary JDBC drivers.  You may wish to ensure connection pooling
is configured and enabled within the DataSource.

* Deploy the 'gerrit.war' file to your application server.
+
The deployment process differs between servers, but typically this
can be accomplished by copying 'gerrit.war' into the 'webapps/'
subdirectory of the container's installation.

* ('Optional') Install Bouncy Castle Crypto API
+
If you enabled Bouncy Castle Crypto during 'init', copy the JAR
from `'$site_path'/lib` into your servlet container's extensions
directory so it's available to Gerrit Code Review.

* ('Optional') link:config-auto-site-initialization.html[
Configure Automatic Site Initialization on Startup]


== Jetty 7.x
These directions will configure Gerrit as the default web
application, allowing URLs like `http://example.com/4543` to jump
directly to change 4543.

Download and unzip a release version of Jetty.  From here on we
call the unpacked directory `$JETTY_HOME`.

* link:http://www.eclipse.org/jetty/downloads.php[Jetty Downloads]

If this is a fresh installation of Jetty, move into the installation
directory and do some cleanup to remove the sample webapps:
----
  cd $JETTY_HOME
  rm -rf contexts/* webapps/*
----

Copy Gerrit Code Review into the deployment:
----
  cp ~/gerrit.war webapps/gerrit.war
  java -jar webapps/gerrit.war cat extra/jetty7/gerrit.xml >contexts/gerrit.xml
----

Install the required additional libraries by copying them into the
`'$JETTY_HOME'/lib/ext` directory:

----
  cp ../review_db/lib/* lib/ext/
  java -jar webapps/gerrit.war cat lib/commons-dbcp-1.2.2.jar >lib/ext/commons-dbcp-1.2.2.jar
  java -jar webapps/gerrit.war cat lib/commons-pool-1.5.4.jar >lib/ext/commons-pool-1.5.4.jar
  java -jar webapps/gerrit.war cat lib/h2-1.2.128.jar >lib/ext/h2-1.2.128.jar
  java -jar webapps/gerrit.war cat lib/postgresql-8.4-701.jdbc4.jar >lib/ext/postgresql-8.4-701.jdbc4.jar
----

Edit `'$JETTY_HOME'/contexts/gerrit.xml` to correctly configure
the database and outgoing SMTP connections, especially the user
and password fields.

If OpenID authentication (or certain enterprise single-sign-on
solutions) is being used, you may need to increase the
header buffer size parameter, due to very long header lines
being used by the OpenID authentication handshake process.
Add the following to `'$JETTY_HOME'/etc/jetty.xml` under
`org.eclipse.jetty.server.nio.SelectChannelConnector`:

----
  <Set name="headerBufferSize">16384</Set>
----

To start automatically when the system boots, create a start
script and modify it for your configuration:

----
  java -jar webapps/gerrit.war --cat extra/jetty7/gerrit-jetty.sh >/etc/init.d/gerrit-jetty
  vi /etc/init.d/gerrit-jetty
----

[TIP]
Under Jetty, restarting the web application (e.g. after modifying
`system_config`) is as simple as touching the context config file:
`'$JETTY_HOME'/contexts/gerrit.xml`

[[tomcat]]
== Tomcat 7.x

If a reverse proxy is used in front of Tomcat then see the
link:config-reverseproxy.html[configuration instructions for encoding
slashes]. Otherwise Tomcat must be configured to encode slashes, by adding
`-Dorg.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH=true` to the
`CATALINA_OPTS` environment variable.

Excerpt from the
link:https://tomcat.apache.org/tomcat-7.0-doc/config/systemprops.html[
documentation]:

----
Property org.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH:
If this is true '%2F' and '%5C' will be permitted as path delimiters.
If not specified, the default value of false will be used.
----

GERRIT
------
Part of link:index.html[Gerrit Code Review]

SEARCHBOX
---------
