blob: f030d64762c44570318ded36225f11d21b586695 [file] [log] [blame]
<?xml version="1.0"?>
<!--
/*
* Copyright 2001-2004 The Apache Software Foundation.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-->
<document>
<properties>
<title>Configuration Howto</title>
</properties>
<body>
<section name="Configurating Turbine">
<p>
With Turbine 2.3, there are now two different ways to configure Turbine. The old
classic way was to provide a TurbineResources.properties file in the standard
properties format. However, added to 2.3 is the ability to specify an XML based
TurbineConfiguration.xml file that instructs Turbine how to load properties from
multiple sources.
</p>
</section>
<section name="Why do I want multiple sources of configuration?">
<p>
In the classic development environment, the developer has one environment, there is
a QA environment, and then production. While all of these environments strive to be
as similar as possible, there are often difference betweent them. For instance, in
the development environment, you might want to not have Turbine cache templates, that
way, as you change them, they are just reloaded. But in test and production you might
need them to be non reloading for performance. There are many other situations like this.
</p>
<p>
This leads to complex build scripts where you try and customize properties based on what
environment you are performing a build for. The more complex the build is, the less frequently
the development team performs them, which goes against Agile development principles. The
ability of Turbine to merge multiple configuration properties together allows developers to
easily customize Turbine without resorting to complex build scripts. A simple war:webapp is
all you need for any environment! Replacing something like build:dev, build:test, and build:live.
</p>
</section>
<section name="Classic Configuration Using Single Property File">
<p>
The classic way of performing configuration is to provide the properties file via your
web.xml file:
</p>
<source test=""><![CDATA[
<servlet>
<servlet-name>fortius</servlet-name>
<servlet-class>org.apache.turbine.Turbine</servlet-class>
<init-param>
<param-name>properties</param-name>
<param-value>
/WEB-INF/conf/TurbineResources.properties
</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
]]></source>
<p>
This works well, but if you want to customize the various settings that Turbine uses to
control it's behavior, then you need to provide a TurbineConfiguration.xml file!
</p>
</section>
<section name="TurbineConfiguration.xml File for Multiple Sources">
<p>
The TurbineConfiguration.xml file doesn't contain any configuration data itself, instead
it points at other files that may have configuration data. Turbine leverages Commons-Configuration's
ConfigurationFactory to access the data. For more information, look at
<a href="http://jakarta.apache.org/commons/sandbox/configuration/">Configuration</a> homepage.
</p>
<p>
To specify the location of your TurbineConfiguration.xml file, just change your servlet init
parameters to this:
</p>
<source test=""><![CDATA[
<servlet>
<servlet-name>fortius</servlet-name>
<servlet-class>org.apache.turbine.Turbine</servlet-class>
<init-param>
<param-name>configuration</param-name>
<param-value>
/WEB-INF/conf/TurbineConfiguration.xml
</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
]]>
</source>
<p>
This file will contain lines like this:
</p>
<source test=""><![CDATA[
<configuration>
<jndi className="org.apache.commons.configuration.JNDIConfiguration" prefix="java:comp/env"/>
<dom4j className="org.apache.commons.configuration.DOM4JConfiguration" fileName="/WEB-INF/conf/OtherProperties.xml"/>
<properties className="org.apache.commons.configuration.PropertiesConfiguration" fileName="/WEB-INF/conf/TurbineResources.properties"/>
</configuration>
]]></source>
<p>
The configurations specified first override the values of configurations specified
afterwords. So, if the configuration value "mail.server" is specified as mymailserver.mycompany.com in
your JNDI settings, and localhost in the TurbineResources.properties, then when you issue:
</p>
<source>
String mailServer = Turbine.getConfiguration().get("mail.server");
</source>
<p>
Then the mailServer value returned will be "mymailserver.mycompany.com". However, if you
don't have a setting specifed in your JNDI settings, then this would return "localhost".
</p>
</section>
</body>
</document>