<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
		"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
<chapter id="configuring">
    <title>Configuration</title>
    <titleabbrev>Configuration</titleabbrev>

	<para>You use configuration files in the <literal>$SERVER_HOME/configuration</literal> directory to configure @project.name@.  You can also configure the OSGi framework  using files the same <literal>$SERVER_HOME/configuration</literal> directory. This section divides the configuration of the server into the following high-level tasks:</para>

	<itemizedlist> 
		<listitem><para><link linkend="configuring-osgi-framework">Configuring the OSGi framework</link></para></listitem>
		<listitem><para><link linkend="configuring-framework-extensions">Configuring framework extensions and fragments on the system bundle</link></para></listitem>
		<listitem><para><link linkend="configuring-serviceability">Configuring serviceability</link></para></listitem>
		<listitem><para><link linkend="configuring-provisioning-repository">Configuring the local provisioning repository</link></para></listitem>
		<listitem><para><link linkend="configuring-hosted-repo">Configuring the hosted repository</link></para></listitem>
		<listitem><para><link linkend="configuring-kernel">Configuring the kernel and User Region</link></para></listitem>
		<listitem><para><link linkend="configuring-tomcat">Configuring the embedded Tomcat servlet container</link></para></listitem>
		<listitem><para><link linkend="configuring-web">Configuring the web integration layer</link></para></listitem>
		<listitem><para><link linkend="configuring-jetty">Configuring the embedded Jetty servlet container</link></para></listitem>
	</itemizedlist> 
	<note>
		<title>Why is there both a config and a configuration directory?</title>
		<para>The <emphasis>config</emphasis> directory has always contained @project.name@ configuration files. When @nano.product.name@ and its support for p2 provisioning was introduced in @project.name@ 3.5.0, a <emphasis>configuration</emphasis> directory replaced the old <emphasis>config</emphasis> one. Now all @project.name@ configurations are assembled in that directory providing a single point of configuration. The directory name <emphasis>configuration</emphasis> in the installation's root is used by default in p2 to configure the OSGi framework during provisioning.</para>
		<para>This chapter makes it clear which configuration goes in each directory.</para>
	</note>
	<note>Sections 4-6 and 8-9 does not apply for @nano.product.name@.</note>
	
	<section id="configuring-osgi-framework" >
	<title>Configuring the OSGi Framework</title>
	
		<para>
			This section provides information about configuring the OSGi framework by updating the following files in the <literal>$SERVER_HOME/configuration</literal> directory:
		</para>

		<table id="configuring-osgi-framework-table" colsep="1" frame="all" rowsep="1">
	    	<title>OSGi Framework Configuration Files </title>
			<tgroup cols="3">
		   		<thead>
					<row>
						<entry>Property File</entry>
						<entry>Description</entry>
						<entry>Location</entry>
					</row>
		  		</thead>
		  		<tbody>
					<row>
						<entry><literal>config.ini</literal></entry>
						<entry>Configures <link linkend="configuring-framework-properties">OSGi framework properties</link>.</entry>
						<entry>$SERVER_HOME/configuration</entry>
					</row>
					<row>
						<entry><literal>bundles.info</literal></entry>
						<entry>Configures <link linkend="configuring-framework-bundles">OSGi framework bundles</link>.</entry>
						<entry>$SERVER_HOME/configuration/org.eclipse.equinox.simpleconfigurator</entry>
					</row>
					<row>
						<entry><literal>java6-server.profile</literal></entry>
						<entry>Configures the <link linkend="configuring-framework-profile">OSGi framework profile</link>.</entry>
						<entry>$SERVER_HOME/configuration</entry>
					</row>
		  		</tbody>
			</tgroup>
	  	</table>
		
		<section id="configuring-framework-properties">
		<title>Configuring OSGi Framework Properties</title>
	    
			<para>
				You specify the framework properties in the <literal>$SERVER_HOME/configuration/config.ini</literal> file. The
				properties most relevant to users are described in the following table.
			</para>
			<para>
				<emphasis role="bold">WARNING:</emphasis> We strongly recommend that you update only the
				properties below; updating other properties could cause @project.name@
				to fail.
			</para>
		
			<table id="configuring-framework-properties-table" colsep="1" frame="all" rowsep="1">
		    <title>Framework Properties</title>
				<tgroup cols="2">
			   		<thead>
						<row>
							<entry>Property</entry>
							<entry>Description</entry>
						</row>
			  		</thead>
			  		<tbody>
						<row>
							<entry><literal>org.eclipse.virgo.kernel.startup.wait.limit</literal></entry>
							<entry>
								Specifies the amount of time, in seconds, after which various operations time out out while trying to start the kernel.
								The default value is 180.
							</entry>
						</row>
						<row>
							<entry><literal>org.eclipse.virgo.suppress.heap.dumps</literal></entry>
							<entry>
								Set to 'false' by default this property will prevent heap dumps being contributed to dumps taken during a
								First Failure Data Capture (FFDC) event. When the heap dumps are produced they will be located along with
								the other dump artifacts in the <literal>$SERVER_HOME/serviceability/dump/</literal> folder.
							</entry>
						</row>
						<row>
							<entry><literal>osgi.java.profile</literal></entry>
							<entry>
								Specifies the profile to use using a <literal>file:</literal> URI with default value
								<literal>file:configuration/java6-server.profile</literal>.
							</entry>
						</row>
			  		</tbody>
				</tgroup>
		  	</table>
		</section>
		
		<section id="configuring-framework-bundles">
		<title>Configuring OSGi Framework Bundles</title>
	    
			<para>
				You specify the framework bundles in the <literal>$SERVER_HOME/configuration/org.eclipse.equinox.simpleconfigurator/bundles.info</literal> file. The syntax
				that is accepted for listing bundles there is:
				<screen>&lt;bsn&gt;,&lt;version&gt;,&lt;jar-location&gt;,&lt;start-level&gt;,&lt;toStart?&gt;
bsn - the bundle's symbolic name string
version - the bundle's version string
jar-location - relative or absolute path to the jar file
start-level - a digit indicating the bundle's start level
toStart? - true or false value indicating whether a bundle should be started or not</screen>
			<para>Here's an example:</para>
			<screen>org.eclipse.virgo.util.osgi,3.1.0.BUILD-20111031165127,plugins/org.eclipse.virgo.util.osgi_3.1.0.BUILD-20111031165127.jar,4,true</screen>
			</para>
			<para>
				<emphasis role="bold">WARNING:</emphasis> We strongly recommend that you don't remove bundles already present in your bundles.info file as that may break your server. Add bundles here only if absolutely necessary.
			</para>
		</section>

		<section id="configuring-framework-profile">
		<title>Configuring OSGi Framework Profile</title>
	    
			<para>
				You specify the framework profile in the <literal>$SERVER_HOME/configuration/java6-server.profile</literal> file. The
				properties most relevant to users are described in the following table.
			</para>
			<para>
				<emphasis role="bold">WARNING:</emphasis> We advise you not to change the framework profile unless you are sure you know exactly what
				you are doing; updating the profile could cause @project.name@ to fail.
			</para>
		
			<table id="configuring-framework-profile-table" colsep="1" frame="all" rowsep="1">
		    <title>Framework Profile Properties</title>
				<tgroup cols="2">
			   		<thead>
						<row>
							<entry>Property</entry>
							<entry>Description</entry>
						</row>
			  		</thead>
			  		<tbody>
						<row>
							<entry><literal>org.osgi.framework.bootdelegation</literal></entry>
							<entry>
								<para>
									This property specifies the packages which are loaded by delegation to the application class loader.
									Bundles can load classes belonging to these packages without importing the packages.
									The <literal>.*</literal> wildcard matches any package suffix. <literal>java.*</literal> is always
									boot delegated and must not be specified in this property.
								</para>
								<para>
									A common reason for adding packages to this property is to run @project.name@ under a performance profiler.
								</para>
							</entry>
						</row>
						<row>
							<entry><literal>org.osgi.framework.system.packages</literal></entry>
							<entry>
								<para>
									This property specifies the packages which are exported by the system bundle.
								</para>
								<para>
									Although the system bundle is typically imported into the User Region, any additional packages will not be
									visible in the User Region unless you also import them using the <literal>packagedImports</literal> property.
									See <link linkend="configuring-user-region">Configuring the User Region</link> for instructions.
								</para>
								<para>
									It is very occasionally necessary to extend the set, for example when configuring email logging appenders since the
									implementation of <literal>javax.mail</literal>	is intimately related to the implementation of
									<literal>javax.activation</literal>.
								</para>
								<para>
									To make the corresponding classes available for loading, the relevant JAR file(s) should be placed in
									<literal>$SERVER_HOME/lib</literal> so that they will be added to the application class path.
								</para>
							</entry>
						</row>
			  		</tbody>
				</tgroup>
		  	</table>
		</section>
	</section>
	
	<section id="configuring-framework-extensions" >
	<title>Configuring Framework Extensions and Fragments on the System Bundle</title>
	
		<para>
			This section provides information about configuring framework extensions and fragments on the system bundle. Deployment of such bundles is not allowed in 		
			@project.name@. This is because by refreshing or uninstalling them the system.bundle is also refreshed, which causes @project.name@ to crash.
		</para>
		<para>
			<emphasis role="bold">NOTE:</emphasis> This only applies for fragments on the system bundle. All other fragment bundles have no deployment restrictions.
		</para>
		<para>
			Generally it's best to avoid usage of such fragment bundles as they are a common OSGi framework issue and often require restarting the framework.
			However sometimes there are no other options and one has to use framework extensions or fragments on the system bundle.
		</para>
		<para>
			You can configure framework extensions and system bundle fragments as follows:
		</para>
		<para>
			<emphasis role="bold">1.</emphasis> Place your fragment bundle in the <literal>/plugins</literal> directory of your @project.name@ installation.
			<para>
				Lets say we have bundle with
			</para>
			<programlisting>
symbolic name: <emphasis>testFragment</emphasis>, version: <emphasis>1.0.0</emphasis> and filename: <emphasis>testFragmentBinary_1.0.0.jar</emphasis>
			</programlisting>
		</para>
		<para>
			<emphasis role="bold">2.</emphasis> Configure the <literal>bundles.info</literal> file in <literal>/configuration/org.eclipse.equinox.simpleconfigurator</literal> to include the 
			just copied fragment or framework extension bundle.
			<para>
				Add a line at the end of the <literal>bundles.info</literal> file similar to this one:		
			</para>
			<programlisting>
<emphasis>testFragment,1.0.0,plugins/testFragmentBinary_1.0.0.jar,4,false</emphasis>
			</programlisting>
		</para>
		<para>
			<emphasis role="bold">3.</emphasis> Configure the <literal>org.eclipse.virgo.kernel.userregion.properties</literal> file in <literal>/configuration</literal> folder to import the fragment bundle or framework extension in the User Region.
			<para>
				Add to the <literal>bundleImports</literal> property a new line describing the fragment bundle using its symbolic name and version.
			</para>
			<programlisting>
bundleImports = org.eclipse.osgi;bundle-version="0",<emphasis role="bold">testFragment;bundle-version="0"</emphasis>
			</programlisting>
		</para>
	</section>
	
	<section id="configuring-serviceability">
      <title>Configuring Serviceability and Diagnostics</title>

	<para>The serviceability features of @project.name@ allow you to gather and view data and information that you can then use to diagnose problems and failures.  Serviceability data includes:</para>
	<itemizedlist>
		<listitem><para>
		Service dumps: Contain a snapshot of all the important state from the running @project.name@ instance when an internal failure or thread deadlock is detected.
		</para>
  	             <para>You configure service dumps for @project.name@ using the <link linkend="configuring-serviceability-medic">org.eclipse.virgo.medic.properties</link> file in the <literal>$SERVER_HOME/configuration</literal> directory.  This file also includes some additional logging configuration.</para>
		</listitem>
		<listitem><para>
		Event logs and server/application (trace) logging: Logging support in @project.name@ is based on <ulink url="http://logback.qos.ch/">Logback</ulink>.  This means that you have complete control over the format of log output and have the complete range of Logback's appenders available for your use.
		</para>
  	             <para>You configure logging for @project.name@ using the <link linkend="configuring-serviceability-logback">serviceability.xml</link> file in the <literal>$SERVER_HOME/configuration</literal> directory.  This file is essentially the Logback <literal>logback.xml</literal> (or <literal>logback-test.xml</literal>) configuration file but renamed for @project.name@. </para>
		</listitem>
	</itemizedlist>

	<para>For additional conceptual information about the serviceability subsystem, see <xref linkend="serviceability" />. </para>

	<section id="configuring-serviceability-medic">
	  <title>The org.eclipse.virgo.medic.properties File</title>

	  <para>The <literal>$SERVER_HOME/configuration/org.eclipse.virgo.medic.properties</literal> file configures @project.name@ service dumps and whether you want to capture <literal>System.out</literal> and <literal>System.err</literal> output to your application's trace file. </para>
  	  <para>The following table describes the properties you can include in the <literal>$SERVER_HOME/configuration/org.eclipse.virgo.medic.properties</literal> file. This file configures serviceability properties that @project.name@ includes in addition to those supplied by the Logback, configured in the <literal>serviceability.xml</literal> file.</para>

          <table id="medic-properties-table" colsep="1" frame="all" rowsep="1">
            <title>Serviceability Properties</title>
	    <tgroup cols="2">
	      <thead>
	        <row>
	  	<entry>Property</entry>
	  	<entry>Description</entry>
	        </row>
	      </thead>
	      <tbody>
  
  	        <row>
  	  	  <entry><literal>dump.root.directory</literal></entry>
  	  	  <entry>Specifies the directory to which @project.name@ writes the service dumps.  The directory name is relative to <literal>$SERVER_HOME</literal>.  </entry>
	        </row>

	        <row>
		  <entry><literal>log.wrapSysOut</literal></entry>
		  <entry>Specifies whether you want to capture <literal>System.out</literal> output from your applications to the application trace file.  The output is logged by @project.name@'s root logger, which captures <literal>INFO</literal> level and above. 
			<para>Valid values for this property are <literal>true</literal> to capture <literal>System.out</literal> output, or <literal>false</literal> to disable the capture.</para>
			<para>For more information, see <link linkend="sysout-and-syserr">System.out and System.err</link>.</para>
		  </entry>
	        </row>

	        <row>
		  <entry><literal>log.wrapSysErr</literal></entry>
		  <entry>Specifies whether you want to capture <literal>System.err</literal> output from your applications to the application trace file.  The output is logged by @project.name@'s root logger, which captures <literal>INFO</literal> level and above. 
			<para>Valid values for this property are <literal>true</literal> to capture <literal>System.err</literal> output, or <literal>false</literal> to disable the capture.</para>
			<para>For more information, see <link linkend="sysout-and-syserr">System.out and System.err</link>.</para>
		  </entry>
	        </row>

              <row>
                  <entry><literal>log.jul.consoleHandler</literal></entry>
                  <entry>Specifies whether you want to use the <literal>ConsoleHandler</literal> of Java Util Logging. The default JVM configuration uses the handler to write logs to <literal>System.err</literal>.
                      <para>Valid values for this property are <literal>true</literal> to enable <literal>ConsoleHandler</literal> output, or <literal>false</literal> to disable it. The default value is <literal>false</literal>.</para>
                      <para>For more information, see <ulink url="http://download.oracle.com/javase/6/docs/technotes/guides/logging/overview.html">Java Logging Overview</ulink>.</para>
                  </entry>
              </row>

          </tbody>
	    </tgroup>
	  </table>

	</section>
	<section id="configuring-serviceability-logback">
	  <title>The serviceability.xml File</title>
		<para>Logging support in @project.name@ is based on <ulink url="http://logback.qos.ch/">Logback</ulink>, which is a successor of the log4j project. The Logback logging framework is faster, more reliable, and easier to use than log4j and certain other logging systems.</para>
  	        <para>You configure logging for @project.name@ using the <literal>$SERVER_HOME/configuration/serviceability.xml</literal> file.  This file is the standard Logback <literal>logback.xml</literal> or <literal>logback-test.xml</literal> configuration file, but renamed for @project.name@. </para>
		<para>The following listing shows the default <literal>serviceability.xml</literal> file in a freshly-installed @project.name@; see the text after the listing for a brief overview of the file:</para>
		<programlisting language="xml"><![CDATA[<configuration>

	<contextListener class="ch.qos.logback.classic.jul.LevelChangePropagator"/>

	<appender name="SIFTED_LOG_FILE" class="ch.qos.logback.classic.sift.SiftingAppender">
		<discriminator>
			<Key>applicationName</Key>
			<DefaultValue>virgo-server</DefaultValue>
		</discriminator>
		<sift>
			<appender name="${applicationName}_LOG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
				<file>serviceability/logs/${applicationName}/log.log</file>
				<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
					<FileNamePattern>serviceability/logs/${applicationName}/log_%i.log</FileNamePattern>
					<MinIndex>1</MinIndex>
					<MaxIndex>4</MaxIndex>
				</rollingPolicy>
				<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
					<MaxFileSize>10MB</MaxFileSize>
				</triggeringPolicy>
				<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
					<Pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] %-5level %-28.28thread %-64.64logger{64} %X{medic.eventCode} %msg %ex%n</Pattern>
				</encoder>
			</appender>
		</sift>
	</appender>

	<appender name="LOG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
		<file>serviceability/logs/log.log</file>
		<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
			<FileNamePattern>serviceability/logs/log_%i.log</FileNamePattern>
			<MinIndex>1</MinIndex>
			<MaxIndex>4</MaxIndex>
		</rollingPolicy>
		<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
			<MaxFileSize>10MB</MaxFileSize>
		</triggeringPolicy>
		<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
			<Pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] %-5level %-28.28thread %-64.64logger{64} %X{medic.eventCode} %msg %ex%n</Pattern>
		</encoder>
	</appender>

	<appender name="EVENT_LOG_STDOUT" class="org.eclipse.virgo.medic.log.logback.ReroutingAwareConsoleAppender">
		<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
			<Pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] %-28.28thread &lt;%X{medic.eventCode}&gt; %msg %ex%n</Pattern>
		</encoder>
	</appender>

	<appender name="EVENT_LOG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
		<file>serviceability/eventlogs/eventlog.log</file>
		<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
			<FileNamePattern>serviceability/eventlogs/eventlog_%i.log</FileNamePattern>
			<MinIndex>1</MinIndex>
			<MaxIndex>4</MaxIndex>
		</rollingPolicy>
		<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
			<MaxFileSize>10MB</MaxFileSize>
		</triggeringPolicy>
		<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
			<Pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] %-28.28thread &lt;%X{medic.eventCode}&gt; %msg %ex%n</Pattern>
		</encoder>
	</appender>

	<logger level="INFO" additivity="false" name="org.eclipse.virgo.medic.eventlog.localized">
		<appender-ref ref="EVENT_LOG_STDOUT" />
		<appender-ref ref="EVENT_LOG_FILE" />
	</logger>

	<logger level="INFO" additivity="false" name="org.eclipse.virgo.medic.eventlog.default">
		<appender-ref ref="SIFTED_LOG_FILE" />
		<appender-ref ref="LOG_FILE" />
	</logger>

	<root level="INFO">
		<appender-ref ref="SIFTED_LOG_FILE" />
		<appender-ref ref="LOG_FILE" />
	</root>

</configuration>]]></programlisting>

	<para>Logback allows @project.name@ to use logger, appender, and encoder (layout) objects to log messages according to message type and level and to format these messages and define where they are written.  The default <literal>serviceability.xml</literal> file shown above includes four appenders and three loggers (two user and one root.)</para>

	<para>The main information to get from this file is that @project.name@ writes log messages to four different locations that map to the four appenders:</para>
	<itemizedlist>
		<listitem><para>The <literal>contextListener</literal> propagates the changes made to the levels of logback loggers to Java Util Logging (JUL). For more information see <ulink url="http://logback.qos.ch/manual/configuration.html#LevelChangePropagator">LevelChangePropagator</ulink> documentation.</para> </listitem>
		<listitem><para>The <literal>SIFTED_LOG_FILE</literal> appender logs both global and application-specific messages to the <literal>$SERVER_HOME/serviceability/logs/</literal><emphasis><literal>applicationName</literal></emphasis><literal>/log.log</literal> file, where <emphasis><literal>applicationName</literal></emphasis> refers to the name of the application.   The log messages for @project.name@ itself are logged to the <literal>$SERVER_HOME/serviceability/logs/virgo-server/log.log</literal> file. Because this appender creates different log files for each application, it is called a <emphasis>sifting appender</emphasis>.   </para>
		<para>
			The default behaviour of these trace files is that, once <literal>log.log</literal> reaches a 10Mb limit, it rolls into a series of files named
			<literal>log_</literal><emphasis>i</emphasis><literal>.log</literal> where <emphasis>i</emphasis> ranges from 1 to 4, and logging continues in
			a new <literal>log.log</literal> file. This is called its <emphasis>rolling policy</emphasis>.
		</para>
		<para>The <literal>&lt;Pattern&gt;</literal> element defines the format of each log message;  messages include the timestamp, the thread that generated the log message, the context-specific event code, and a stack trace of the exception, if any.  For example:</para>
		 <para><literal>[2008-05-15 09:09:46.940] server-dm-2 org.apache.coyote.http11.Http11Protocol I Initializing Coyote HTTP/1.1 on http-48080</literal></para>
		</listitem>
		<listitem><para>The <literal>LOG_FILE</literal> appender is very similar to the first one, but it logs <emphasis>all</emphasis> log messages to the <literal>$SERVER_HOME/serviceability/log/log.log</literal> file rather than sifting application-specific messages to their own log file.  The rolling policy and message format for this appender is similar to that of the <literal>SIFTED_LOG_FILE</literal> appender.</para></listitem>
		<listitem><para>The <literal>EVENT_LOG_STDOUT</literal> appender does not log messages to a file, but rather to the console window from which you started @project.name@. For example:</para>
		 <para><literal>[2010-10-25 16:20:49.367] Thread-3   &lt;WE0000I&gt; Starting web bundle 'org.eclipse.virgo.apps.admin.web' version '2.1.0.RELEASE' with context path '/admin'.</literal></para>
		</listitem>

		<listitem><para>The <literal>EVENT_LOG_FILE</literal> appender logs only important events to the <literal>$SERVER_HOME/serviceability/eventlogs/eventlog.log</literal> file, and thus the volume of information is much lower than with the first two appenders. The rolling policy for the event log is the same as with the first two appenders, but the format of the messages is similar to that of the <literal>EVENT_LOG_STDOUT</literal> appender. </para> </listitem>
	</itemizedlist>

	<para>The loggers and root logger specify the level of log that is written for each of the referenced appenders.</para>

	<para>Typically, the default logging configuration as specified by the <literal>serviceability.xml</literal> file is adequate for all @project.name@ environments.  However, if you want to customize logging further, you can edit this file as well as the <literal>org.eclipse.virgo.medic.properties</literal>.  See the <ulink url="http://logback.qos.ch/manual/index.html">logback documentation</ulink> for detailed information about the architecture and the configuration of Logback.</para>
	</section>

    </section>

	<section id="configuring-provisioning-repository">
		<title>Configuring the Local Provisioning Repository</title>
		<para>
		    You configure the locations that @project.name@ includes in its provisioning repository
		    by editing the <literal>org.eclipse.virgo.repository.properties</literal> file in the <literal>$SERVER_HOME/configuration</literal> directory.
		    </para>
		<para>When you specify a property in the file, use the format <literal>repository-name.property=value</literal>, where:
		<itemizedlist>
		 	<listitem><para><literal>repository-name</literal> refers to the name of the local repository.</para></listitem>
    		<listitem><para><literal>property</literal> refers to the name of a particular property.</para></listitem>
    		<listitem><para><literal>value</literal> refers to the value of the property.</para></listitem>
		</itemizedlist>
		</para>

		<para>For example, <literal>ext.type=external</literal> specifies that the <literal>type</literal> property of the repository
		with name <literal>ext</literal> is <literal>external</literal>.
        </para>
		<para>
			The <literal>chain</literal> property specifies the order in which @project.name@ searches the individual repositories
			when it looks for dependencies.
			The <literal>chain</literal> property uses the names of the individual repositories as specified in the individual repository properties;
			for example, in the property <literal>ext.type=external</literal>, the name of the repository is <literal>ext</literal>.
		</para>
		<para>
			The default repository configuration for a newly installed @project.name@ instance is as follows:
			<programlisting><![CDATA[ext.type=external
ext.searchPattern=repository/ext/{artifact}

usr.type=watched
usr.watchDirectory=repository/usr

chain=ext,usr]]></programlisting>
		</para>

        
        <para>
		The default configuration shown above has two searchpaths corresponding to the two default sub-directories of the <literal>$SERVER_HOME/repository</literal> directory created when you first install @project.name@: <literal>ext</literal> and <literal>usr</literal>. @project.name@ searches each of these individual repositories when locating entries for inclusion in the repository.  </para>
	 <para>
	        The <literal>chain</literal> property shows the order in which @project.name@ searches the individual repositories: first <literal>ext</literal> and then <literal>usr</literal>. 
	</para>
	<para>
		The following table lists all the available properties that you can use to configure an individual repository.
		Individual repositories as well as the repository search chain  are configured in the file
		<literal>$SERVER_HOME/configuration/org.eclipse.virgo.repository.properties</literal>.
		<table id="repository-options-table" colsep="1" frame="all" rowsep="1">
		<title>Repository Properties</title>
		  <tgroup cols="3">
 		  	<thead>
		      <row>
				<entry>
					Property
				</entry>
				<entry>
					Description
				</entry>
				<entry>
					Default Value
				</entry>
		      </row>
		    </thead>
		    <tbody>
		      <row>
				<entry>
					<emphasis><literal>repository-name</literal></emphasis><literal>.type</literal>
				</entry>
				<entry> 
                	<para>
                    	Specifies the type of path.  You can set this property to one of the following three valid values:
			    		<itemizedlist>
							<listitem>
								<para>
									<literal>external</literal>: Specifies that this path points to a number of directories that satisfy a given search pattern 
									and are local to the current @project.name@ instance. 
									Use the <literal>searchPattern</literal> property to specify the directory search pattern.
								</para>
							</listitem>
							<listitem>
								<para>
									<literal>watched</literal>: Specifies that this path points to a single directory, local to the current @project.name@ instance.  
									@project.name@ regularly scans watched repositories so it automatically picks up any changes to the artifacts in the directory at runtime.
									@project.name@ also scans its local watched repositories when deploying any artifact. 
									Use the <literal>watchDirectory</literal> property to specify the watched directory 
									and the <literal>watchInterval</literal> property to specify how often @project.name@ checks the directory.
								</para>
							</listitem>
							<listitem>
								<para>
									<literal>remote</literal>: Specifies that the path points to a remotely-hosted repository, 
									hosted by a remote instance of @tomcat.product.name@.  
									Use the <literal>uri</literal> property to specify the full URI of the remote repository.  
									You can also specify the optional <literal>indexRefreshInterval</literal> property. 
								</para>
							</listitem>
			    		</itemizedlist>
              		</para> 

			  		<para>
						See <link linkend="configuring-repository-watched-versus-external">Watched or External Repository?</link> 
			  			for additional information about when to configure watched or external repositories for your particular environment.
			  		</para>
				</entry>
				<entry>
					<emphasis>no default</emphasis>
				</entry>
		      </row>
		      <row>
				<entry>
					<emphasis><literal>repository-name</literal></emphasis><literal>.searchPattern</literal>
				</entry>
				<entry>
					<para>
						Specifies the pattern that an external repository uses when deciding which local directories it should search 
						when identifying artifacts.  Use this property together with <emphasis><literal>repository-name</literal></emphasis><literal>.type=external</literal>. 
						See <link linkend="configuring-provisioning-repository-search-paths" >Search Paths: Additional Information</link> 
						for detailed information about specifying a search pattern.  
					</para>
				</entry>
				<entry>
					<emphasis>no default</emphasis>
				</entry>
		      </row>
		      <row>
				<entry>
					<emphasis><literal>repository-name</literal></emphasis><literal>.watchDirectory</literal>
				</entry>
				<entry>
					<para>
						Specifies the single directory of a watched repository. 
						You can specify either an absolute or relative pathname for the directory.  
						If you specify a relative pathname, it is relative  to the root of the @project.name@ installation (<literal>$SERVER_HOME</literal>).  
						Use this property together with <emphasis><literal>repository-name</literal></emphasis><literal>.type=watched</literal>.
					</para>
				</entry>
				<entry>
					<emphasis>no default</emphasis>
				</entry>
		      </row>
		      <row>
				<entry>
					<emphasis><literal>repository-name</literal></emphasis><literal>.watchInterval</literal>
				</entry>
				<entry>
					<para>
						Specifies the interval in seconds between checks of a watched directory by a watched repository.  
						Use this property together with <emphasis><literal>repository-name</literal></emphasis><literal>.type=watched</literal>. 
					</para>
				</entry>
				<entry>
					<literal>5</literal>
				</entry>
		      </row>
		      <row>
				<entry>
					<emphasis><literal>repository-name</literal></emphasis><literal>.uri</literal>
				</entry>
				<entry>
					<para>
						Specifies the URI of the hosted repository to which a remote repository connects.  
						The value of this property takes the following format:
					</para>
					<para>						<literal>http://</literal><emphasis><literal>host</literal></emphasis><literal>:</literal><emphasis><literal>port</literal></emphasis><literal>/org.eclipse.virgo.apps.repository/</literal><emphasis><literal>remote-repository-name</literal></emphasis>
					</para>
                    <para>
						where:
						<itemizedlist>
							<listitem>
								<para>
									<emphasis><literal>host</literal></emphasis> refers to the computer on which the remote @tomcat.product.name.short@
									instance hosts the remote repository.
								</para>
							</listitem>
							<listitem>
								<para>
									<emphasis><literal>port</literal></emphasis> refers to a Tomcat listener port of the remote @tomcat.product.name.short@
									instance which hosts the remote repository.
								</para>
							</listitem>
							<listitem>
								<para>
									<emphasis><literal>remote-repository-name</literal></emphasis> refers to the name of the remote repository, 
									as specified in the <literal>org.eclipse.virgo.apps.repository.properties</literal> file of the remote @tomcat.product.name.short@ instance.
								</para>
							</listitem>
						</itemizedlist>
               		</para>
                    <para>
						Use this property together with <emphasis><literal>repository-name</literal></emphasis><literal>.type=remote</literal>.
                    </para>
				</entry>
				<entry>
					<emphasis>no default</emphasis>
				</entry>
		      </row>
		      <row>
				<entry>
					<emphasis><literal>repository-name</literal></emphasis><literal>.indexRefreshInterval</literal>
				</entry>
				<entry>
					<para>
						Specifies the interval in seconds between checks by a remote repository that 
						its local copy of the hosted repository index is up-to-date 
						(a remote repository acts as a proxy for a hosted repository and thus it holds a local copy of the hosted repository&rsquo;s index). 
					</para> 
					<para>
						Use this property together with <emphasis><literal>repository-name</literal></emphasis><literal>.type=remote</literal>.
					</para>
				</entry>
				<entry>
					<literal>5</literal>
				</entry>
		      </row>
		    </tbody>
		  </tgroup>
		</table>
	</para>
	<section id="configuring-repository-watched-versus-external">
		<title>Should I Configure a Watched or External Repository?</title>
		<para>The main difference between a watched and an external repository is that @project.name@ regularly scans watched directories 
		and automatically picks up any changed artifacts, 
		while @project.name@ scans external directories only at startup, and then only if there is no cached index available.  
		This means that @project.name@ always performs a scan of an external repository when you start the server 
		with the <literal>-clean</literal> (as this deletes the index) and only scans during a normal startup if the index isn&rsquo;t there because, 
		for example, this is the first time you start the server. 
		</para>
		<para>There is a performance cost associated with using a watched repository due to @project.name@ using resources 
		to scan the directory at the configured interval.  
		The cost is small if the watched repository contains just a few artifacts; however, 
		the performance cost increases as the number of artifacts increases.
		Note that @project.name@ re-scans its local watched repositories when deploying any artifact, so the scanning interval
		can be configured to be relatively long.
		</para>
		<para> For this reason, we recommend that you put most of your dependencies in external repositories, 
		even when in development mode. 
		If you make any changes to the artifacts in the external repositories, 
		remember to restart @project.name@ with the <literal>-clean</literal> option so that the server picks up any changes.  
		Use watched directories for artifacts that you are prototyping, actively updating, or when adding new dependencies 
		so that @project.name@ quickly and easily picks them up.  
		To increase performance even during development, however, you can use an external repository for most of your dependencies, 
		in particular the ones that are fairly static. 
		</para>

		<para>In production environments, where dependencies should not change, 
		we recommend that you use <emphasis>only</emphasis> external repositories.
		</para>
	</section>

        <section id="configuring-provisioning-repository-search-paths">
            <title>Search Paths: Additional Information</title>
            <para>
	            The <emphasis><literal>repository-name</literal></emphasis><literal>.searchPattern</literal> and 
	            <emphasis><literal>repository-name</literal></emphasis><literal>.watchDirectory</literal> properties specify search paths 
	            for external and watched repositories, respectively, 
	            that define a physical location that @project.name@ searches when looking for a library or bundle dependency. 
	            If a search path is relative, its location is relative to the root of the installation, 
	            in other words, the <literal>$SERVER_HOME</literal> directory.
   	        </para>
            <section id="configuring-provisioning-repository-search-paths-wildcards">
	            <title>Using Wildcards</title>
            	<para>
		            Search paths specified with the <emphasis><literal>repository-name</literal></emphasis><literal>.searchPattern</literal> property 
		            provide support for wildcards. 
		            In the entries above, the path segments surrounded by curly braces, 
		            for example <literal>{bundle}</literal> and <literal>{library}</literal>, 
		            are wildcards entries for a directory with any name. 
		            Allowing wildcards to be named in this way is intended to improve the readability of search path configuration.
		        </para>
		        <para>
			        In addition to supporting the above-described form of wildcards, @project.name@ also supports Ant-style paths, 
			        that is <literal>*</literal> and <literal>**</literal> can be used to represent any directory and 
			        any series of directories, respectively. 
			        For example, <literal>repository/usr/{bundle}</literal> and <literal>repository/usr/*</literal> 
			        are equivalent.
			    </para>
			    <para>
				    A common usage of the <literal>**</literal> wildcard is to allow dependencies stored in a directory structure of varying depth, 
				    such as a local Maven repository, to be provisioned by the @project.name@.
				</para>
			</section>
		</section>
        <section id="configuring-provisioning-repository-using-system-properties">
			<title>Using System Properties</title>
			<para>
				You can use system properties when specifying the values of the <emphasis><literal>repository-name</literal></emphasis><literal>.searchPattern</literal>, 
				<emphasis><literal>repository-name</literal></emphasis><literal>.watchDirectory</literal>,
				<emphasis><literal>repository-name</literal></emphasis><literal>.watchInterval</literal>,
				<emphasis><literal>repository-name</literal></emphasis><literal>.uri</literal>, 
				and <emphasis><literal>repository-name</literal></emphasis><literal>.indexRefreshInterval</literal>
				properties. 
				You reference system properties as <literal>${system.property.name}</literal>; 
				for example, a search path of <literal>${user.home}/repository/bundles</literal> references the
				<literal>repository/bundles</literal> directory in the user&rsquo;s home directory.
			</para>
		</section>		                 
        <section id="configuring-provisioning-repository-examples">
	        <title>Example Repository Configurations</title>
	        <para>
		        The following examples provide sample configuration that could be used for some common use cases.
		    </para>
		    <section id="configuring-provisioning-repository-examples-ivy">
		        <title>Add an Ivy cache repository</title>
			<para>The following example shows how to add an external repository whose location is actually an Ivy cache.</para>
			<para><emphasis>Note that Ivy repositories can contain bundles which will conflict with the normal operation of Virgo, so care should
				be exercised when adding such an external repository.</emphasis></para>
			<programlisting><![CDATA[ext.type=external
ext.searchPattern=repository/ext/{artifact}

usr.type=watched
usr.watchDirectory=repository/usr

ivy-repo.type=external
ivy-repo.searchPattern=${user.home}/.ivy2/cache/{org}/{name}/{version}/{bundle}.jar

chain=ext,usr,ivy-repo]]></programlisting>

            </section>
            <section id="configuring-provisioning-repository-examples-maven">		    
		        <title>Add a Maven local repository</title>
			<para>The following example shows how to add an external repository whose location is actually a Maven repository.</para>
			<para><emphasis>Note that Maven repositories can contain bundles which will conflict with the normal operation of Virgo, so care should
				be exercised when adding such an external repository.</emphasis></para>
			<programlisting><![CDATA[ext.type=external
ext.searchPattern=repository/ext/{artifact}

usr.type=watched
usr.watchDirectory=repository/usr

maven-repo.type=external
maven-repo.searchPattern=${user.home}/.m2/repository/**/{bundle}.jar

chain=ext,usr,maven-repo]]></programlisting>

            </section>
	    <section id="configuring-repository-examples-remote-watched">
	        <title>Add remote and watched repositories</title>
		<para>The following example shows the default <literal>org.eclipse.virgo.repository.properties</literal> file 
		from a freshly-installed @project.name@ instance, but then updated to include new remote and watched repositories.  
		Both of these repositories are part of the repository chain. 
		</para>
		<para>The remote repository is called <literal>remote-repo</literal>.  
		The URI of the hosted repository from which <literal>remote-repo</literal> gets its artifacts is 
		<literal>http://my-host:8080/org.eclipse.virgo.apps.repository/my-hosted-repo</literal>;
		this means that there is a @tomcat.product.name.short@ instance running on host <literal>my-host</literal> 
		whose Tomcat server listens at the default port, <literal>8080</literal>, 
		and this server instance hosts a repository called <literal>my-hosted-repo</literal>, 
		configured in the <literal>org.eclipse.virgo.apps.repository.properties</literal> file of the remote server instance.  
		The remote repository checks for changes in the hosted repository every 30 seconds.
		</para>
		<para>The watched repository is called <literal>watched-repo</literal> and the directory that holds the artifacts 
		is <literal>repository/watched</literal>, 
		relative to the installation directory of the @tomcat.product.name.short@ instance.  
		The server checks for changes in this watched repository every 5 seconds.
		</para>
		<programlisting><![CDATA[ext.type=external
ext.searchPattern=repository/ext/{artifact}

usr.type=watched
usr.watchDirectory=repository/usr

remote-repo.type=remote
remote-repo.uri=http://my-host:8080/org.eclipse.virgo.apps.repository/my-hosted-repo
remote-repo.indexRefreshInterval=30

watched-repo.type=watched
watched-repo.watchedDirectory=repository/watched
watched-repo.watchedInterval=5

chain=ext,usr,remote-repo,watched-repo]]></programlisting>
            </section>
	</section>
   </section>

	<section id="configuring-hosted-repo">
		<title>Configuring a Hosted Repository</title>
		<para>You configure a @tomcat.product.name.short@ instance to host a repository 
		by editing the <literal>$SERVER_HOME/configuration/org.eclipse.virgo.apps.repository.properties</literal> file; 
		remote clients can then access the artifacts in this hosted repository and use them locally.
		</para>
              <para>When you specify a property in the file, use the format <literal>repository-name.property=value</literal>, where:
             <itemizedlist> 
		<listitem><para><literal>repository-name</literal> refers to the name of the hosted repository.</para></listitem>
		<listitem><para><literal>property</literal> refers to the name of a particular property.</para></listitem>
		<listitem><para><literal>value</literal> refers to the value of the property.</para></listitem>
             </itemizedlist> 
              </para>
             <para>For example, <literal>my-hosted-repo.type=external</literal> specifies that the <literal>type</literal> property 
             of the <literal>my-hosted-repo</literal> repository is <literal>external</literal>.
             </para>
		<para>The following table lists the properties that you can include in the <literal>org.eclipse.virgo.apps.repository.properties</literal> file. 
		</para>
	        <table id="hosted-repository-properties-table" colsep="1" frame="all" rowsep="1">
	          <title>Hosted Repository Properties</title>
		  <tgroup cols="2">
		   <thead>
			<row>
				<entry>Property</entry>
				<entry>Description</entry>
			</row>
		  </thead>
		  <tbody>
			<row>
				<entry><emphasis><literal>repository-name</literal></emphasis><literal>.type</literal></entry>
				<entry>Specifies the type of path of the hosted repository.  
				All paths are local to the current @tomcat.product.name.short@ instance. 
				You can set this property to one of the following valid values:
	<itemizedlist>

    	<listitem>
    	<para>
    	<literal>external</literal>: Specifies that this path points to a number of directories that satisfy a given search pattern. 
    	Use the <literal>searchPattern</literal> property to specify the directory search pattern.
    	</para>
    	</listitem>
	<listitem>
	<para>
	<literal>watched</literal>: Specifies that this path points to a single directory. 
	@project.name@ regularly scans watched repositories so it automatically picks up any changes to the artifacts in the directory at runtime. 
	Use the <literal>watchDirectory</literal> property to specify the actual watched directory and the <literal>watchInterval</literal> property 
	to specify how often @tomcat.product.name.short@ checks the directory.
	</para>
	</listitem>
	</itemizedlist>
			  <para>See <link linkend="configuring-repository-watched-versus-external">Watched or External Repository?</link> 
			  for additional information about when to configure watched or external repositories for your particular environment.
			  </para>
				</entry>
			</row>
			<row>
				<entry><emphasis><literal>repository-name</literal></emphasis><literal>.searchPattern</literal></entry>
			<entry> <para>Specifies the pattern that an external hosted repository uses when deciding which 
			local directories it should search when identifying artifacts.  
			Use this property when <literal>repository-name.type=external</literal>. 
			See <link linkend="configuring-provisioning-repository-search-paths" >Search Paths: Additional Information</link> 
			for detailed information about specifying a search pattern.  
			</para> </entry>
			</row>
			<row>
				<entry><emphasis><literal>repository-name</literal></emphasis><literal>.watchDirectory</literal></entry>
			<entry> <para>Specifies the single directory of a watched hosted repository. 
			You can specify either an absolute or relative pathname for the directory.  
			If you specify a relative pathname, it is relative to the root of the @tomcat.product.name.short@ installation (<literal>$SERVER_HOME</literal>).  
			Use this property when <literal>repository-name.type=watched</literal>.
			</para></entry>
			</row>
			<row>
				<entry><emphasis><literal>repository-name</literal></emphasis><literal>.watchInterval</literal></entry>
			<entry> <para>Specifies the interval in seconds between checks of a watched directory by a watched hosted repository.  
			This property is optional.  Use this property when <literal>repository-name.type=watched</literal>. 
			</para> </entry>
			</row>
		   </tbody>
		  </tgroup>
		</table>
		<para>The following sample shows a <literal>org.eclipse.virgo.apps.repository.properties</literal> file with a single external repository 
		called <literal>my-hosted-repo</literal> with search pattern <literal>$SERVER_HOME/repository/hosted/*</literal>.
		<programlisting><![CDATA[my-hosted-repo.type=external
my-hosted-repo.searchPattern=repository/hosted/*]]></programlisting>
		</para>

	<para>See <link linkend="configuring-repository-examples-remote-watched">Example of watched and remote repositories</link> 
	for details on how a local repository can remotely access the artifacts in this hosted repository.
	</para>
	</section>
	
    <section id="configuring-kernel" >
        <title>Configuring the Kernel and User Region</title>
        <para>This section provides information about configuring the @project.name@ kernel and the User Region.</para>

        <section id="configuring-kernel-properties">
            <title>Configuring the Kernel</title>

            <para>To change any of the kernel properties, provide the new value to the startup script. The following table describes all properties.</para>
            <table id="configuring-kernel-table" colsep="1" frame="all" rowsep="1">
                <title>Kernel Configuration Properties</title>
                <tgroup cols="3">
                    <thead>
                        <row>
                            <entry>
								Property (prefixed by <literal>org.eclipse.virgo</literal>)
							</entry>
                            <entry>
								Description
							</entry>
							<entry>
								Default Value
							</entry>
                        </row>
                    </thead>
                    <tbody>
                        <row>
                            <entry>
								<literal>.kernel.home</literal>
							</entry>
                            <entry>
								Specifies the location of the @kernel.product.name@.
							</entry>
							<entry>
								<literal>$SERVER_HOME</literal>
							</entry>
                        </row>
                        <row>
                            <entry>
								<literal>.kernel.config</literal>
							</entry>
                            <entry>
								Specifies the location of the @kernel.product.name@ and User Region <link linkend="configuring-kernel-files">configuration files</link>. 		
								The location of the configuration files can also be specified using
								<link linkend="starting-stopping-configuration-directory"><literal>-configDir</literal> startup parameter</link>.
							</entry>
							<entry>
								<literal>$SERVER_HOME/configuration</literal>
							</entry>
                        </row>
                        <row>
                            <entry>
								<literal>.kernel.domain</literal>
							</entry>
                            <entry>
								Specifies the <ulink url="http://download.oracle.com/javase/6/docs/api/javax/management/ObjectName.html">JMX domain</ulink> that should be
								used by the @kernel.product.name@.
							</entry>
							<entry>
								<literal>org.eclipse.virgo.kernel</literal>
							</entry>
                        </row>
                        <row>
                            <entry>
								<literal>.kernel.startup.wait.limit</literal>
							</entry>
                            <entry>
								Specifies the amount of time, in seconds, after which various operations time out out while trying to start the kernel.
								See <link linkend="configuring-framework-properties">Configuring OSGi Framework Properties</link> for the recommended way
								to configure this parameter.
							</entry>
							<entry><literal>180</literal>
							</entry>
                        </row>
                    </tbody>
                </tgroup>
            </table>
        </section>

        <section id="configuring-kernel-files">
            <title>Configuration Files</title>
            <para>The configuration of the @kernel.product.name@ and User Region by default is located in the <literal>$SERVER_HOME/configuration</literal> directory:</para>
            <table id="configuring-kernel-files-table" colsep="1" frame="all" rowsep="1">
                <title>Kernel Configuration Files </title>
                <tgroup cols="2">
                    <thead>
                        <row>
                            <entry>Property File</entry>
                            <entry>Description</entry>
                        </row>
                    </thead>
                    <tbody>
                        <row>
                            <entry><literal>org.eclipse.virgo.kernel.properties</literal></entry>
                            <entry>Configures <link linkend="configuring-deployment">deployment</link>. </entry>
                        </row>
                        <row>
                            <entry><literal>org.eclipse.virgo.kernel.userregion.properties</literal></entry>
                            <entry>Configures the <link linkend="configuring-user-region">User Region</link> of @project.name@.</entry>
                        </row>
                        <row>
                            <entry><literal>org.eclipse.virgo.kernel.users.properties</literal></entry>
                            <entry>Configures the <link linkend="configuring-authentication">users that are allowed to access</link> the Admin Console, and roles to which they map. </entry>
                        </row>
                        <row>
                            <entry><literal>org.eclipse.virgo.kernel.jmxremote.access.properties</literal></entry>
                            <entry>Configures the <link linkend="configuring-authentication">permissions for users</link> that are allowed to access the Admin Console. </entry>
                        </row>
                        <row>
                            <entry><literal>org.eclipse.virgo.kernel.authentication.config</literal></entry>
                            <entry>Configures the <link linkend="configuring-authentication">Java Authentication and Authorization Service (JAAS)</link> for the Tomcat server users.</entry>
                        </row>
						<row>
                            <entry><literal>osgi.console.ssh.properties</literal></entry>
                            <entry>Configures the kernel SSH console. See <xref linkend="admin-shell-enable"/>.</entry>
                        </row>
						<row>
                            <entry><literal>osgi.console.telnet.properties</literal></entry>
                            <entry>Configures the kernel telnet console. See <xref linkend="admin-shell-enable"/>.</entry>
                        </row>
                    </tbody>
                </tgroup>
            </table>
        </section>

        <section id="configuring-deployment">
        <title>Configuring Deployment</title>

        <para>You can configure two properties of deployment: the pickup directory into which you copy applications for hot-deployment and the deployment timeout.  </para>
        <para>To change any of these properties, edit the <literal>deployer.XXX</literal> properties of the <literal>$SERVER_HOME/configuration/org.eclipse.virgo.kernel.properties</literal> file.  The following table describes these properties.  </para>
        <table id="configuring-deployment-table" colsep="1" frame="all" rowsep="1">
                  <title>Deployment Configuration Properties</title>
              <tgroup cols="3">
                <thead>
                <row>
                    <entry>
						Property
					</entry>
                    <entry>
						Description
					</entry>
					<entry>
						Default Value
					</entry>
                </row>
                 </thead>
                 <tbody>
                <row>
                    <entry>
						<literal>deployer.pickupDirectory</literal>
					</entry>
                    <entry>
						Specifies the absolute or relative path to the pickup directory to which you copy applications for hot-deployment.
						Relative paths are relative to <literal>$SERVER_HOME</literal>.
					</entry>
					<entry>
						<literal>./pickup</literal>
					</entry>
                </row>
                <row>
                    <entry>
						<literal>deployer.timeout</literal>
					</entry>
                    <entry>
						Specifies the amount of time, in seconds, after which @project.name@ times out while trying to deploy an artifact.
						If you want to disable deployment timeout, specify <literal>0</literal>.
					</entry>
					<entry>
						  <literal>300</literal>  
					</entry>
                </row>
                </tbody>
             </tgroup>
            </table>

                     <para>The following listing displays the default configuration distributed with @project.name@; only relevant sections of the <literal>org.eclipse.virgo.kernel.properties</literal> file are shown. </para>

            <programlisting><![CDATA[deployer.timeout=300
deployer.pickupDirectory=pickup]]></programlisting>

            <para>So the default deployment timeout is 300 seconds and the default pickup directory is <literal>$SERVER_HOME/pickup</literal>.
            </para>
        </section>

	<section id="configuring-user-region">
		<title>Configuring the User Region</title>
		<para>
			The User Region is the subsystem of @project.name@ that
			supports deployed applications, both your own user applications and
			those of the server itself, such as the Admin Console. The User Region
			is deliberately isolated from the kernel, which protects the kernel from interference by applications.
		</para>
		<para>
			You configure the User Region by updating properties in the
			<literal>$SERVER_HOME/configuration/org.eclipse.virgo.kernel.userregion.properties</literal>
			file; these properties are described in the following table.  
		</para>
		<para>
			<emphasis role="bold">WARNING:</emphasis>
			We strongly recommend that you update only the
			<literal>initialArtifacts</literal>
			property; updating other properties could cause
			@project.name@ to fail. These properties are documented for your
			information.
		</para>

	 	<table id="configuring-user-region-table" colsep="1" frame="all" rowsep="1">
	    	  <title>User Region Configuration Properties</title>
		  <tgroup cols="2">
		    <thead>
			<row>
				<entry>Property</entry>
				<entry>Description</entry>
			</row>
		     </thead>
		     <tbody>
			<row>
				<entry><literal>baseBundles</literal></entry>
				<entry>Specifies the hard-coded list of bundles that @project.name@ installs directly into the User Region.
					@project.name@ does not perform any automatic dependency satisfaction for these bundles; in other words, you only get the bundles
					in the list and nothing more. </entry>
			</row>
			<row>
				<entry><literal>bundleImports</literal></entry>
				<entry>
					<para>
						Specifies the bundles in the kernel that @project.name@ imports into the User Region so that they are visible to bundles in the User Region.
						This property supports an optional <literal>bundle-version</literal> attribute which specifies a version range.
						By default only the system bundle is imported.
					</para>
					<para>
						Note that packages exported by these bundles are <emphasis>not</emphasis> automatically made available in the User Region: these must be specified using the
						<literal>packageImports</literal> property.
					</para>
				</entry>
			</row>
			<row>
				<entry><literal>packageImports</literal></entry>
				<entry>
					<para>
						Specifies the packages in the kernel that @project.name@ imports into the User Region so that they are in turn available to be
						imported by bundles in the User Region.
						This property supports a <literal>.*</literal> wildcard which is expanded based on the packages available in the kernel
						when the User Region is created.
						For example, <literal>org.eclipse.virgo.util.*</literal> will import all packages that start with
						<literal>org.eclipse.virgo.util.</literal> (but <emphasis>not</emphasis> the package <literal>org.eclipse.virgo.util</literal>
						which would need to be specified separately to be imported).
					</para>
					<para>
						The property also supports matching attributes such as <literal>version</literal>, <literal>bundle-symbolic-name</literal>,
				 		<literal>bundle-version</literal>, and user-defined attributes. This can be used to import all the packages of a bundle imported using the
						<literal>bundleImports</literal> property.
						For example the following imports all the packages of the system bundle:
						<programlisting><![CDATA[packageImports=*;bundle-symbolic-name="org.eclipse.osgi",\
 ...]]></programlisting>
						Note that if a package is specified more than once in <literal>packageImports</literal>, the last occurrence is used and the earlier
						occurrences are ignored.
						For this reason, it is recommended that imports specifying matching attributes are placed earlier in the list than other imports so that
						if an import is	specified with and without matching attributes, the form without the matching attributes is used.
					</para>
				</entry>
			</row>
			<row>
				<entry><literal>serviceImports</literal></entry>
				<entry>Specifies the services in the kernel that are imported into the User Region so they are available to bundles in the User Region.  </entry>
			</row>
			<row>
				<entry><literal>serviceExports</literal></entry>
				<entry>Specifies the services in the User Region that are exported to the kernel so they are available to bundles in the kernel.  </entry>
			</row>
			<row>
				<entry><literal>initialArtifacts</literal></entry>
				<entry>
					<para>
						Specifies the artifacts that @project.name@ deploys into the User Region when the server starts.
						@project.name@ performs dependency satisfaction when it deploys these artifacts.
						This means that you only need to list the top-level artifacts that you care about; @project.name@ automatically installs,
						from the repository, any other artifacts upon which they depend.
					</para>
					<para>
						The artifacts are specified as a comma separated list of URI strings of the form:
						<programlisting><![CDATA[repository://type/name[/version]]]></programlisting>
						where <literal>type</literal> is the artifact type (e.g. "plan", "par", "bundle",
						"configuration"), <literal>name</literal> is the (symbolic) name of the artifact, and, optionally,
						<literal>version</literal> is the version of the artifact.
						If <literal>version</literal> is omitted and there is at least one artifact in the repository with the given type and name, then the
						artifact with the highest version is selected.
						So, for example, the following entries are valid:
						<programlisting><![CDATA[initialArtifacts=...,\
 repository://plan/APlan,\
 repository://bundle/ABundle/1.0]]></programlisting>
					</para>
				</entry>
			</row>
		    </tbody>
		  </tgroup>
		</table>
		
		<section id="configuring-user-region-consoles">
            <title>Configurating User Region Consoles</title>
            <para>The configuration of the User Region consoles is located by default in the <literal>$SERVER_HOME/repository/ext</literal> directory:</para>
            <table id="configuring-user-region-consoles-table" colsep="1" frame="all" rowsep="1">
                <title>User Region Console Configuration Files </title>
                <tgroup cols="2">
                    <thead>
                        <row>
                            <entry>Property File</entry>
                            <entry>Description</entry>
                        </row>
                    </thead>
                    <tbody>
						<row>
                            <entry><literal>osgi.console.ssh.properties</literal></entry>
                            <entry>Configures the User Region SSH console. See <xref linkend="admin-shell-enable"/>.</entry>
                        </row>
						<row>
                            <entry><literal>osgi.console.telnet.properties</literal></entry>
                            <entry>Configures the User Region telnet console. See <xref linkend="admin-shell-enable"/>.</entry>
                        </row>
                    </tbody>
                </tgroup>
            </table>
        </section>

	</section>

	<section id="configuring-authentication">
		<title>Configuring Authentication</title>
	<para>
		@project.name@ uses the
		<ulink
			url="http://java.sun.com/javase/6/docs/technotes/guides/security/jaas/JAASRefGuide.html">Java Authentication and Authorization Service (JAAS)</ulink>
		framework to authenticate the administration user that connects to Web
		Servers using the Admin Console. This section describes
		how the authentication mechanism is configured by default, and the
		files that you need to update if you want to change the administration
		user, change their password, and so on.
	</para>
		<para>The <literal>$SERVER_HOME/configuration/org.eclipse.virgo.kernel.authentication.config</literal> file configures the underlying authentication technology for @project.name@.  The short file consists of the following entries:</para>

		<programlisting>virgo-kernel {
        org.eclipse.virgo.kernel.authentication.KernelLoginModule REQUIRED;
};
equinox_console {
	org.eclipse.virgo.kernel.authentication.KernelLoginModule REQUIRED;
};</programlisting>

		<para>The entry named <literal>virgo-kernel</literal> corresponds to the <literal>&lt;Realm&gt;</literal> element in the <literal>$SERVER_HOME/configuration/tomcat-server.xml</literal> file that configures the JAAS authentication mechanism for the <literal>Catalina</literal> service of the <link linkend="configuring-tomcat">Tomcat servlet container</link>.  The <literal>virgo-kernel</literal> entry specifies that the JAAS LoginModule that @project.name@ uses to authenticate users is <literal>org.eclipse.virgo.kernel.authentication.KernelLoginModule</literal> and that this <literal>KernelLoginModule</literal> is required to "succeed" in order for authentication to be considered successful. The <literal>KernelLoginModule</literal> succeeds only if the name and password supplied by the user are the ones it expects.  The default administration username/password pair for @tomcat.product.name.short@ is <literal>admin/springsource</literal>. </para>
		<para>
			The entry named <literal>equinox_console</literal> controls ssh authentication for the Virgo shell. It also uses the <literal>KernelLoginModule</literal>.
		</para>

	       <para>You configure the administration user in the <literal>org.eclipse.virgo.kernel.users.properties</literal> file.  The default file for a freshly installed @project.name@ is as follows:</para>

		<programlisting>##################
# User definitions
##################
user.admin=springsource

##################
# Role definitions
##################
role.admin=admin</programlisting>

	<para>
		The administration user that connect to the Admin Console must have the
		<literal>admin</literal>
		role. The preceding file shows how, by default, the
		<literal>admin</literal>
		role is assigned the
		<literal>admin</literal>
		user with password
		<literal>springsource</literal>.
	</para>

		<para>If you want to change the administration user, update the <literal>org.eclipse.virgo.kernel.users.properties</literal> file.  For example, if you want the <literal>juliet</literal> user, with password <literal>supersecret</literal>, to be the new adminstration user, update the file as shown:</para>


		<programlisting>##################
# User definitions
##################
user.juliet=supersecret

##################
# Role definitions
##################
role.admin=juliet</programlisting>
	
		<para>Be sure to restart @project.name@ after you make this change for it to take effect.</para>

		<para>The final file involved in @project.name@ authentication is <literal>$SERVER_HOME/configuration/org.eclipse.virgo.kernel.jmxremote.access.properties</literal>.  This file specifies the JMX access privileges that the administration user has; by default they are read and write, as shown in the following listing:</para>
		<programlisting>admin=readwrite</programlisting>
	<para>
		The only other value you can enter is
		<literal>readonly</literal>, which means that the adminstration user would only be able to <emphasis>view</emphasis>
		information using the Admin Console.
	</para>
	</section>


    </section>

	<section id="configuring-tomcat">
		<title>Configuring the Embedded Tomcat Servlet Container</title>
		<note>@nano.product.name@ uses the default Gemini Web configuration. The details described below may still apply.</note>
		<para>
			@project.name@
			embeds an OSGi-enhanced version of the <ulink url="http://tomcat.apache.org/">Tomcat Servlet Container</ulink>
			in order to provide support for deploying Java EE WARs and OSGi <emphasis>Web Application Bundles</emphasis>. 
			You configure the embedded Servlet container using the standard Apache Tomcat configuration.   The main difference is that the configuration file is called <filename>tomcat-server.xml</filename> rather than <literal>server.xml</literal>.  As with the other @project.name@ configuration files, the <literal>tomcat-server.xml</literal> file is located in the <literal>$SERVER_HOME/configuration</literal> directory.
			Another difference is that not all standard Apache Tomcat configuration is supported in @tomcat.product.name@: the restrictions are described in the
			remainder of this section.
		</para>
		<para>Here's an extract of the default configuration distributed with the @tomcat.product.name.short@.
		</para>
		<programlisting language="xml"><![CDATA[<?xml version='1.0' encoding='utf-8'?>
<Server port="8005" shutdown="SHUTDOWN">

	<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
	<Listener className="org.apache.catalina.core.JasperListener" />
	<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />

	<Listener className="org.eclipse.virgo.web.tomcat.ServerLifecycleLoggingListener"/>

	<Service name="Catalina">
		<Connector port="8080" protocol="HTTP/1.1"
			connectionTimeout="20000"
			redirectPort="8443" />

		<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
			maxThreads="150" scheme="https" secure="true"
			clientAuth="false" sslProtocol="TLS"
			keystoreFile="configuration/keystore"
			keystorePass="changeit"/>

		<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

		<Engine name="Catalina" defaultHost="localhost">
			<Realm className="org.apache.catalina.realm.JAASRealm" appName="virgo-kernel"
					userClassNames="org.eclipse.virgo.kernel.authentication.User"
					roleClassNames="org.eclipse.virgo.kernel.authentication.Role"/>

			<Host name="localhost"  appBase="webapps"
					unpackWARs="false" autoDeploy="false"
					deployOnStartup="false" createDirs="false">

				<Valve className="org.apache.catalina.valves.AccessLogValve" directory="serviceability/logs/access"
					prefix="localhost_access_log." suffix=".txt" pattern="common" resolveHosts="false"/>

				<Valve className="org.eclipse.virgo.web.tomcat.ApplicationNameTrackingValve"/>
			</Host>
		</Engine>
	</Service>
</Server>]]></programlisting>

	<section id="overview-tomcat-servlet-container">
	  <title>Description of the Default Apache Tomcat Configuration</title>
		<para>
		  The following bullets describe the main elements and attributes in the default <literal>tomcat-server.xml</literal> file; for details about updating this file to further configure the embedded Apache Tomcat server, see the <ulink url="http://tomcat.apache.org/tomcat-7.0-doc/config/index.html">Apache Tomcat Configuration Reference</ulink>.
		</para>

		<tip>
		  <title>Relative paths</title>
		  <para>If the configured path to a directory or file does not represent an absolute path, @project.name@ typically interprets it as a path relative to the <filename>$SERVER_HOME</filename> directory.</para>
		</tip>

		<itemizedlist>
		  <listitem><para>The root element of the <literal>tomcat-server.xml</literal> file is <literal>&lt;Server&gt;</literal>. The attributes of this element represent the characteristics of the entire embedded Tomcat servlet container. The <literal>shutdown</literal> attribute specifies the command string that the shutdown port number receives via a TCP/IP connection in order to shut down the servlet container. The <literal>port</literal> attribute specifies the TCP/IP port number that listens for a shutdown message.</para></listitem>

      		  <listitem><para>The <literal>&lt;Listener&gt;</literal> XML elements specify the list of lifecycle listeners that monitor and manage the embedded Tomcat servlet container. Each listener class is a Java Management Extensions (JMX) MBean that listens to a specific component of the servlet container and has been programmed to do something at certain lifecycle events of the component, such as before starting up, after stopping, and so on.</para>
			<para> The first four <literal>&lt;Listener&gt;</literal> elements configure standard Tomcat lifecycle listeners. The listener implemented by the <literal>org.eclipse.virgo.web.tomcat.ServerLifecycleLoggingListener</literal> class is specific to @tomcat.product.name@ and manages server lifecycle logging.
		</para> </listitem>

		<listitem><para>The <literal>&lt;Service&gt;</literal> XML element groups together one or more connectors and a single engine. Connectors define a transport mechanism, such as HTTP, that clients use to to send and receive messages to and from the associated service. There are many transports that a client can use, which is why a <literal>&lt;Service&gt;</literal> element can have many <literal>&lt;Connector&gt;</literal> elements. The engine then defines how these requests and responses that the connector receives and sends are in turn handled by the servlet container; you can define only a single <literal>&lt;Engine&gt;</literal> element for any given <literal>&lt;Service&gt;</literal> element.</para>

		<para> The sample <literal>tomcat-server.xml</literal> file above includes three <literal>&lt;Connector&gt;</literal> elements: one for the HTTP transport, one for the HTTPS transport, and one for the AJP transport. The file also includes a single <literal>&lt;Engine&gt;</literal> element, as required.
		</para></listitem>

		<listitem><para>The first connector listens for HTTP requests at the <literal>8080</literal> TCP/IP port. The connector, after accepting a connection from a client, waits for a maximum of 20000 milliseconds for a request URI; if it does not receive one from the client by then, the connector times out. If this connector receives a request from the client that requires the SSL transport, the servlet container automatically redirects the request to port <literal>8443</literal>. </para>
		</listitem>

		<listitem><para>The second connector is for HTTPS requests.  The TCP/IP port that users specify as the secure connection port is <literal>8443</literal>. Be sure that you set the value of the <literal>redirectPort</literal> attribute of your non-SSL connectors to this value to ensure that users that require a secure connection are redirected to the secure port, even if they initially start at the non-secure port.  The <literal>SSLEnabled</literal> attribute specifies that SSL is enabled for this connector.  The <literal>secure</literal> attribute ensures that a call to <literal>request.isSecure()</literal> from the connecting client always returns <literal>true</literal>. The <literal>scheme</literal> attribute ensures that a call to <literal>request.getScheme()</literal> from the connecting client always returns <literal>https</literal> when clients use this connector. </para>
		<para>The <literal>maxThreads</literal> attribute specifies that the servlet container creates a maximum of 150 request processing threads, 
		which determines the maximum number of simultaneous requests that can be handled. 
		The <literal>clientAuth</literal> attribute specifies that the servlet container does not require a certificate chain 
		unless the client requests a resource protected by a security constraint that uses CLIENT-CERT authentication.  
		</para>
                <para>The <literal>keystoreFile</literal> attribute specifies the name of the file that contains the servlet container&rsquo;s 
                private key and public certificate used in the SSL handshake, encryption, and decryption. 
                You use an alias and password to access this information. 
                In the example, this file is <literal>$SERVER_HOME/configuration/keystore</literal>.  
                The <literal>keystorePass</literal> attributes specify the password used to access the keystore. 
                </para></listitem>

		<listitem><para>The third AJP Connector element represents a Connector component that communicates with a web connector via the AJP protocol. 
		</para></listitem>
		<listitem><para>The engine has a logical name of <literal>Catalina</literal>; 
		this is the name used in all log and error messages so you can easily identify problems. 
		The value of the <literal>defaultHost</literal> attribute refers to the name of a <literal>&lt;Host&gt;</literal> 
		child element of <literal>&lt;Engine&gt;</literal>; 
		this host processes requests directed to host names on this servlet container.
		</para>
		</listitem>

		<listitem> <para>The <literal>&lt;Realm&gt;</literal> child element of <literal>&lt;Engine&gt;</literal> represents a database of 
		users, passwords, and mapped roles used for authentication in this service.  Virgo Web Server uses an implementation of the Tomcat 6 Realm interface that authenticates users through the Java Authentication and Authorization Service (JAAS) framework which is provided as part of the standard J2SE API.</para>
		   <para>With the JAASRealm, you can combine practically any conceivable security realm with Tomcat's container managed authentication.  For details, see <ulink url="http://tomcat.apache.org/tomcat-7.0-doc/realm-howto.html">Realm Configuration</ulink>.</para>

		</listitem>
		<listitem><para>The <literal>&lt;Host&gt;</literal> child element represents a virtual host, 
		which is an association of a network name for a server (such as <literal>www.mycompany.com</literal>) with the particular 
		server on which Catalina is running.  
		The servlet container unpacks Web applications into a directory hierarchy if they are deployed as WAR files. 
		</para>
		<para>
			Note that multiple <literal>&lt;Host&gt;</literal> elements are not supported in @tomcat.product.name@.
		</para>
		</listitem>

		<listitem><para>Finally, the <literal>org.apache.catalina.valves.AccessLogValve</literal> valve creates log files 
		in the same format as those created by standard web servers.   
		The servlet container creates the log files in the <literal>$SERVER_HOME/serviceability/logs/access</literal> directory.  
		The log files are prefixed with the string <literal>localhost_access_log.</literal>, have a suffix of <literal>.txt</literal>, 
		use a standard format for identifying what should be logged, and do not include DNS lookups of the IP address of the remote host.
		</para> </listitem>

		</itemizedlist>
	</section>

		<section id="configuring-tomcat-connectors">
			<title>Connector Configuration</title>
			<para> The @tomcat.product.name@ supports the configuration of any connector supported by Apache Tomcat. 
			See the default configuration above for syntax examples, and for further details of the configuration properties 
			supported for various <literal>&lt;Connector&gt;</literal> implementations, 
			consult the official <ulink url="http://tomcat.apache.org/tomcat-7.0-doc/config/http.html">Tomcat HTTP Connector</ulink> documentation.
			</para>
			<tip>
				<title>Configuring SSL for Tomcat</title>
				<para> The @tomcat.product.name@ distribution includes a preconfigured <filename>$SERVER_HOME/configuration/keystore</filename> 
				file that contains a single self-signed SSL Certificate. 
				The password for this <filename>keystore</filename> file is <literal>changeit</literal>.  
				This <filename>keystore</filename> file is intended for testing purposes only. 
				For detailed instructions on how to configure Tomcat&rsquo;s SSL support, 
				consult the official <ulink url="http://tomcat.apache.org/tomcat-7.0-doc/ssl-howto.html">Tomcat SSL Configuration HOW-TO</ulink>.
				</para>
			</tip>
		</section>

		<section id="configuring-tomcat-clustering">
			<title>Cluster Configuration</title>
			<para>
				@tomcat.product.name@ supports standard Apache Tomcat cluster configuration.
				By default, clustering of the embedded servlet container is disabled, 
				and the default configuration does not include any clustering information.  
				See  <ulink url="http://tomcat.apache.org/tomcat-7.0-doc/cluster-howto.html">Tomcat Clustering/Session Replication HOW-TO</ulink> 
				for detailed information about enabling and configuring clustering.
			</para>
		</section>
		
			<section id="configuring-tomcat-contexts">
				<title>Context Configuration</title>
				<para>
					@tomcat.product.name@ supports standard Apache Tomcat web application context configuration.
					The <ulink url="http://tomcat.apache.org/tomcat-7.0-doc/config/index.html">Apache Tomcat Configuration Reference</ulink> has a section on
					<ulink url="http://tomcat.apache.org/tomcat-7.0-doc/config/context.html">The Context Container</ulink> which describes the mechanism that
					is used in @tomcat.product.name.short@ for searching context configuration files and details the context configuration properties.
				</para>
				<para>
					Context configuration files may be placed in the following locations,
					where <literal>[enginename]</literal> is the name of Tomcat's engine ('Catalina' by default) and <literal>[hostname]</literal> names
					a virtual host ('localhost' by default), both of which are configured in <literal>tomcat-server.xml</literal>:
					<itemizedlist>
						<listitem>
						<para>
							<literal>$SERVER_HOME/configuration/context.xml</literal> provides the default context configuration file for all web applications.
						</para>
						</listitem>
						<listitem>
						<para>
							The <literal>$SERVER_HOME/configuration/[enginename]/[hostname]</literal> directory may contain:
					  		<itemizedlist>
								<listitem>
								<para>
									The default context configuration for all web applications of a given virtual host in the file <literal>context.xml.default</literal>.
								</para>
								</listitem>
					   			<listitem>
					   			<para>
									Individual web applications' context configuration files as described in the Apache Tomcat Configuration Reference.
									For example, the context for a web application with
									context path <literal>foo</literal> may be configured in <literal>foo.xml</literal>.
					   			</para>
								</listitem>
							</itemizedlist>
						</para>
						</listitem>
                    </itemizedlist>
				</para>
				<para>
					Note that the following context configuration features are not supported in @tomcat.product.name@:
					<itemizedlist>
						<listitem>
						<para>
							Custom class loaders.
						</para>
						</listitem>
						<listitem>
						<para>
							Specifying the context path. This is specified using the <literal>Web-ContextPath</literal> header in the web application's
							<literal>MANIFEST.MF</literal> file.
						</para>
						</listitem>
						<listitem>
						<para>
							Specifying the document base directory.
						</para>
						</listitem>
					</itemizedlist>
				</para>
			</section>

	</section>
	
	<section id="configuring-web">
		<title>Configuring the Web Integration Layer</title>
		<para>
			@tomcat.product.name@ integrates an OSGi-enhanced version of the <ulink url="http://tomcat.apache.org/">Tomcat Servlet Container</ulink>
			in order to provide support for deploying Java EE WARs and OSGi <emphasis>Web Application Bundles</emphasis>.
		</para>
		<para>
			For @tomcat.product.name@ you 
			configure the behaviour of the Web Integration Layer using the properties file called <literal>org.eclipse.virgo.web.properties</literal>.
			The <literal>org.eclipse.virgo.web.properties</literal> file is located in the <literal>$SERVER_HOME/repository/ext</literal> directory. 
		</para>
		<para>The following table describes the properties.  </para>
        <table id="configuring-web-integration-layer" colsep="1" frame="all" rowsep="1">
                  <title>Web Integration Layer Properties</title>
              <tgroup cols="3">
                <thead>
                	<row>
                    	<entry>
							Property
						</entry>
                    	<entry>
							Description
						</entry>
						<entry>
							Default Value
						</entry>
                	</row>
                </thead>
                <tbody>
                	<row>
                    	<entry>
							<literal>WABHeaders</literal>
						</entry>
                    	<entry>
							<para>
								Specifies how Web Application Bundle manifest headers are processed.
								See "Web Application Manifest Processing" in the
								<ulink url="../../virgo-programmer-guide/html/index.html">Programmer Guide</ulink> for details.
							</para>
							<para>
								A value of <literal>strict</literal> causes @tomcat.product.name.short@ to interpret certain headers in strict compliance with
								the OSGi Web Applications specification if they are not specified.
							</para>
							<para>
								A value of <literal>defaulted</literal> causes @tomcat.product.name.short@ to set certain headers to default values if they are not specified.
								This was how @tomcat.product.name.short@ behaved prior to version 3.
								<emphasis>This value is provided as a migration aid and may not be supported in future releases.</emphasis>
								A warning event log message (WE0006W) is generated if this value is specified.
							</para>
							<para>
								The @jetty.product.name@ will always operate in <literal>strict</literal> mode.
							</para>
						</entry>
						<entry>
							<literal>strict</literal>
						</entry>
                	</row>
                </tbody>
             </tgroup>
		</table>
		<para>
			There is no Web Integration Layer in @jetty.product.name@. The relevant configuration is described in
			<link linkend="configuring-jetty">Configuring the Embedded Jetty Servlet Container</link>.
		</para>
	</section>

	<section id="configuring-jetty">
		<title>Configuring the Embedded Jetty Servlet Container</title>
		<para>
			@jetty.product.name@ supports <emphasis>Web Application Bundles</emphasis>, but does not provide support for Java EE WARs.
		</para>
		<para>
			The @jetty.product.name@ contains a standard Jetty configuration file at <literal>SERVER_HOME/jetty/etc/jetty.xml</literal>. 
			This has been tailored to the @umbrella.product.name@. To make modifications please refer to the
			<ulink url="http://wiki.eclipse.org/Jetty/Howto/Configure_Jetty#Using_Jetty_XML">Jetty documentation</ulink>.
		</para>
	</section>
	
</chapter>
