roller.properties[1]
which sits within the war, filled with defaults and never needs
modification (although a user can alter it if he wishes, it will
work),
and
a roller-custom.properties file[2] which is placed in the
classpath
($CATALINA_HOME/lib for Tomcat, corresponding folders for JBoss or
GlassFish.) For any value you put in roller-custom.properties, it
will
overwrite what is in roller.properties in the WAR. So you only
need
the
values in the custom file that you're actually overriding, making
it
very
short and simple. And if you don't use a
roller-custom.properties,
all
of
the defaults in the WAR will prevail.
You can keep deploying new versions of Roller.war to your servlet
container while never needing to re-configure either
roller.properties
or
roller-custom.properties, re-opening WARs, etc. as the
roller-custom.properties still sitting in $CATALINA_HOME/lib
automatically
is used--this is very convenient during development when the WARs
frequently get updated. Same with JUnit and Selenium testing, we
don't
alter the roller.properties but just place the
roller-custom.properties[2]
in the test classpath under src/test/resources (if you have
multiple
config
files, you can change the custom file name via setting a system
property[3]). All this is handled by the WebloggerConfig[4]
class,
which
first reads in roller.properties and the overwrites any values
from
roller-custom.properties.
[1] http://svn.apache.org/viewvc/***
*******roller/trunk/app/src/**<http://svn.apache.org/viewvc/********roller/trunk/app/src/**>
main/****<http://svn.apache.**org/viewvc/******roller/trunk/**
app/src/main/****<http://svn.apache.org/viewvc/******roller/trunk/app/src/main/****>
<http://svn.apache.**org/**viewvc/****roller/trunk/**app/**
src/main/**<http://svn.apache.**org/viewvc/****roller/trunk/**
app/src/main/**<http://svn.apache.org/viewvc/****roller/trunk/app/src/main/**>
<http://svn.apache.org/******viewvc/**roller/trunk/app/src/**
****main/**<http://svn.apache.org/****viewvc/**roller/trunk/app/src/****main/**>
<http://svn.apache.**org/**viewvc/**roller/trunk/**
app/src/**main/**<http://svn.apache.org/**viewvc/**roller/trunk/app/src/**main/**>
<http://svn.apache.**org/**viewvc/**roller/trunk/app/****
src/main/**<http://svn.apache.**org/viewvc/**roller/trunk/app/**
src/main/**<http://svn.apache.org/viewvc/**roller/trunk/app/src/main/**>
resources/org/apache/roller/**********weblogger/config/roller.**
**
properties?view=markup<http://********svn.apache.org/viewvc/****
** <http://svn.apache.org/viewvc/****>
roller/**
<http://svn.apache.org/viewvc/****roller/**<http://svn.apache.org/viewvc/**roller/**>
<
http://svn.apache.**org/**viewvc/roller/**<http://svn.**
apache.org/viewvc/roller/**<http://svn.apache.org/viewvc/roller/**>
trunk/app/src/main/resources/********org/apache/roller/**
weblogger/****
config/roller.properties?view=********markup<http://svn.**apache.<http://svn.apache.>
****
org/viewvc/roller/trunk/app/******src/main/resources/org/**
apache/****
roller/weblogger/config/******roller.properties?view=markup<****
http://svn.apache.org/viewvc/****roller/trunk/app/src/main/**<http://svn.apache.org/viewvc/**roller/trunk/app/src/main/**>
resources/org/apache/roller/****weblogger/config/roller.**
properties?view=markup<http://**svn.apache.org/viewvc/roller/**
trunk/app/src/main/resources/**org/apache/roller/weblogger/**
config/roller.properties?view=**markup<http://svn.apache.org/viewvc/roller/trunk/app/src/main/resources/org/apache/roller/weblogger/config/roller.properties?view=markup>
<
http://svn.apache.org/viewvc/**********roller/trunk/app/src/**<http://svn.apache.org/viewvc/********roller/trunk/app/src/**>
main/****<http://svn.apache.**org/viewvc/******roller/trunk/**
app/src/main/****<http://svn.apache.org/viewvc/******roller/trunk/app/src/main/****>
<http://svn.apache.**org/**viewvc/****roller/trunk/**app/**
src/main/**<http://svn.apache.**org/viewvc/****roller/trunk/**
app/src/main/**<http://svn.apache.org/viewvc/****roller/trunk/app/src/main/**>
<http://svn.apache.org/******viewvc/**roller/trunk/app/src/**
****main/**<http://svn.apache.org/****viewvc/**roller/trunk/app/src/****main/**>
<http://svn.apache.**org/**viewvc/**roller/trunk/**
app/src/**main/**<http://svn.apache.org/**viewvc/**roller/trunk/app/src/**main/**>
<http://svn.apache.**org/**viewvc/**roller/trunk/app/****
src/main/**<http://svn.apache.**org/viewvc/**roller/trunk/app/**
src/main/**<http://svn.apache.org/viewvc/**roller/trunk/app/src/main/**>
resources/org/apache/roller/**********weblogger/config/roller.**
**
properties?revision=1511052&**********view=markup<http://svn.***
***
apache.<http://svn.apache.>
**
org/viewvc/roller/trunk/app/********src/main/resources/org/**
apache/****
roller/weblogger/config/********roller.properties?revision=**
1511052&view=markup<http://****s**vn.apache.org/viewvc/**
roller/** <http://vn.apache.org/viewvc/roller/**><
http://svn.apache.**org/viewvc/roller/**<http://svn.apache.org/viewvc/roller/**>
trunk/app/src/main/resources/******org/apache/roller/**
weblogger/****
config/roller.properties?******revision=1511052&view=markup<**h**
ttp://svn.apache.org/viewvc/****roller/trunk/app/src/main/**<http://svn.apache.org/viewvc/**roller/trunk/app/src/main/**>
resources/org/apache/roller/****weblogger/config/roller.**
properties?revision=1511052&****view=markup<http://svn.apache.**
org/viewvc/roller/trunk/app/**src/main/resources/org/apache/**
roller/weblogger/config/**roller.properties?revision=**
1511052&view=markup<http://svn.apache.org/viewvc/roller/trunk/app/src/main/resources/org/apache/roller/weblogger/config/roller.properties?revision=1511052&view=markup>
[2] http://svn.apache.org/viewvc/***
*******roller/trunk/app/src/**<http://svn.apache.org/viewvc/********roller/trunk/app/src/**>
test/****<http://svn.apache.**org/viewvc/******roller/trunk/**
app/src/test/****<http://svn.apache.org/viewvc/******roller/trunk/app/src/test/****>
<http://svn.apache.**org/**viewvc/****roller/trunk/**app/**
src/test/**<http://svn.apache.**org/viewvc/****roller/trunk/**
app/src/test/**<http://svn.apache.org/viewvc/****roller/trunk/app/src/test/**>
<http://svn.apache.org/******viewvc/**roller/trunk/app/src/**
****test/**<http://svn.apache.org/****viewvc/**roller/trunk/app/src/****test/**>
<http://svn.apache.**org/**viewvc/**roller/trunk/**
app/src/**test/**<http://svn.apache.org/**viewvc/**roller/trunk/app/src/**test/**>
<http://svn.apache.**org/**viewvc/**roller/trunk/app/****
src/test/**<http://svn.apache.**org/viewvc/**roller/trunk/app/**
src/test/**<http://svn.apache.org/viewvc/**roller/trunk/app/src/test/**>
resources/roller-custom.**********properties?view=log<http://****
svn.apache.org/viewvc/roller/********trunk/app/src/test/**<http://svn.apache.org/viewvc/roller/******trunk/app/src/test/**>
resources/****<http://svn.**apache.org/viewvc/roller/******
trunk/app/src/test/resources/******<http://svn.apache.org/viewvc/roller/****trunk/app/src/test/resources/****>
<http://svn.**apache.org/**viewvc/roller/****<http://apache.org/viewvc/roller/****>
trunk/app/src/test/resources/******<http://svn.apache.org/**
viewvc/roller/**trunk/app/src/**test/resources/**<http://svn.apache.org/viewvc/roller/**trunk/app/src/test/resources/**>
roller-custom.properties?view=********log<http://svn.apache.**
org/****
<http://svn.apache.org/****><http://svn.apache.**org/**<http://svn.apache.org/**>
viewvc/roller/trunk/app/src/******test/resources/roller-**
custom.****
properties?view=log<http://**s**vn.apache.org/viewvc/roller/**<http://svn.apache.org/viewvc/roller/**>
trunk/app/src/test/resources/****roller-custom.properties?**
view=**log<http://svn.apache.**org/viewvc/roller/trunk/app/**
src/test/resources/roller-**custom.properties?view=log<http://svn.apache.org/viewvc/roller/trunk/app/src/test/resources/roller-custom.properties?view=log>
[3] http://svn.apache.org/viewvc/**********roller/trunk/app/pom.*
*xml?**<http://svn.apache.org/viewvc/********roller/trunk/app/pom.xml?**>
** <http://svn.apache.org/viewvc/********roller/trunk/app/pom.**
xml?**<http://svn.apache.org/viewvc/******roller/trunk/app/pom.xml?**>
<
http://svn.apache.org/****viewvc/****roller/trunk/app/****
pom.xml?**<http://svn.apache.org/**viewvc/****roller/trunk/app/**pom.xml?**>
<http://svn.apache.**org/viewvc/****roller/trunk/**app/pom.xml?**<http://svn.apache.org/viewvc/****roller/trunk/app/pom.xml?**>
**<http://svn.apache.org/****viewvc/****roller/trunk/app/****
pom.xml?**<http://svn.apache.org/**viewvc/****roller/trunk/app/**pom.xml?**>
<http://svn.apache.**org/viewvc/****roller/trunk/**app/pom.xml?**<http://svn.apache.org/viewvc/****roller/trunk/app/pom.xml?**>
<http://svn.apache.**org/**viewvc/**roller/trunk/app/****
pom.xml?**<http://svn.apache.**org/viewvc/**roller/trunk/app/**
pom.xml?**<http://svn.apache.org/viewvc/**roller/trunk/app/pom.xml?**>
revision=1511052&view=markup#**********l460<http://svn.apache.**
**
org/**** <http://svn.apache.org/****><h**ttp://svn.apache.<http://svn.apache.>
**org/**<http**://svn.apache.org/** <http://svn.apache.org/**>>
viewvc/roller/trunk/app/pom.********xml?revision=1511052&view=**
******
markup#l460<http://svn.apache.******org/viewvc/roller/trunk/**
app/****
pom.xml?revision=1511052&view=******markup#l460<http://svn.**
apache.org/viewvc/roller/****trunk/app/pom.xml?revision=**<http://apache.org/viewvc/roller/**trunk/app/pom.xml?revision=**>
1511052&view=markup#l460<http:**//svn.apache.org/viewvc/**
roller/trunk/app/pom.xml?**revision=1511052&view=markup#**l460<http://svn.apache.org/viewvc/roller/trunk/app/pom.xml?revision=1511052&view=markup#l460>
[4] <http://svn.apache.org/viewvc/**
********roller/trunk/app/src/****<http://svn.apache.org/viewvc/********roller/trunk/app/src/**>
main/****<http://svn.apache.**org/viewvc/******roller/trunk/**
app/src/main/****<http://svn.apache.org/viewvc/******roller/trunk/app/src/main/****>
<http://svn.apache.**org/**viewvc/****roller/trunk/**app/**
src/main/**<http://svn.apache.**org/viewvc/****roller/trunk/**
app/src/main/**<http://svn.apache.org/viewvc/****roller/trunk/app/src/main/**>
<http://svn.apache.org/******viewvc/**roller/trunk/app/src/**
****main/**<http://svn.apache.org/****viewvc/**roller/trunk/app/src/****main/**>
<http://svn.apache.**org/**viewvc/**roller/trunk/**
app/src/**main/**<http://svn.apache.org/**viewvc/**roller/trunk/app/src/**main/**>
<http://svn.apache.**org/**viewvc/**roller/trunk/app/****
src/main/**<http://svn.apache.**org/viewvc/**roller/trunk/app/**
src/main/**<http://svn.apache.org/viewvc/**roller/trunk/app/src/main/**>
java/org/apache/roller/**********weblogger/config/****
WebloggerConfig.java?revision=
**1491090&view=markup<http://********svn.apache.org/viewvc/**
roller/****
<http://svn.apache.org/viewvc/**roller/****<http://svn.apache.org/viewvc/roller/****>
<
http://svn.apache.**org/**viewvc/roller/**<http://svn.**
apache.org/viewvc/roller/**<http://svn.apache.org/viewvc/roller/**>
trunk/app/src/main/java/org/********apache/roller/weblogger/**
config/WebloggerConfig.java?********revision=1491090&view=****
markup<h**
ttp://svn.apache.org/viewvc/******roller/trunk/app/src/main/**<http://svn.apache.org/viewvc/****roller/trunk/app/src/main/**>
**<http://svn.apache.org/viewvc/****roller/trunk/app/src/main/**<http://svn.apache.org/viewvc/**roller/trunk/app/src/main/**>
**>
java/org/apache/roller/******weblogger/config/**
WebloggerConfig.java?revision=******1491090&view=markup<http:/**
/**
svn.apache.org/viewvc/roller/****trunk/app/src/main/java/org/****<http://svn.apache.org/viewvc/roller/**trunk/app/src/main/java/org/**>
apache/roller/weblogger/****config/WebloggerConfig.java?**
revision=1491090&view=markup<h**ttp://svn.apache.org/viewvc/**
roller/trunk/app/src/main/**java/org/apache/roller/**
weblogger/config/**WebloggerConfig.java?revision=**
1491090&view=markup<http://svn.apache.org/viewvc/roller/trunk/app/src/main/java/org/apache/roller/weblogger/config/WebloggerConfig.java?revision=1491090&view=markup>
http://**svn.apache.org/********viewvc/roller/**trunk/app/src/**
******<http://svn.apache.org/******viewvc/roller/**trunk/app/src/******>
<http://svn.apache.org/******viewvc/roller/**trunk/app/**
src/****<http://svn.apache.org/****viewvc/roller/**trunk/app/src/****>
<http://svn.apache.org/******viewvc/roller/**trunk/app/src/**
****<http://svn.apache.org/****viewvc/roller/**trunk/app/src/****>
<http://svn.apache.org/****viewvc/roller/**trunk/app/src/****<http://svn.apache.org/**viewvc/roller/**trunk/app/src/**>
main/java/org/**<http://svn.******apache.org/viewvc/roller/*****
* <http://apache.org/viewvc/roller/****><
http://apache.org/viewvc/**roller/****<http://apache.org/viewvc/roller/****>
trunk/app/src/main/java/org/******<http://svn.apache.org/**
viewvc/** <http://svn.apache.org/viewvc/**>
roller/**trunk/app/src/main/****java/org/**<http://svn.apache.**
org/viewvc/roller/**trunk/app/**src/main/java/org/**<http://svn.apache.org/viewvc/roller/**trunk/app/src/main/java/org/**>
**>
apache/roller/weblogger/********
**config/WebloggerConfig.java?******
**
**view=markup<
http://svn.apache.**org/******viewvc/roller/trunk/app/**
src/main/java/org/apache/********roller/weblogger/config/**
WebloggerConfig.java?view=********markup<http://svn.apache.**
org/****
<http://svn.apache.org/****><http://svn.apache.**org/**<http://svn.apache.org/**>
viewvc/roller/trunk/app/src/******main/java/org/apache/roller/**
**
weblogger/config/******WebloggerConfig.java?view=******markup<
http://svn.apache.org/****viewvc/roller/trunk/app/src/**<http://svn.apache.org/**viewvc/roller/trunk/app/src/**>
main/java/org/apache/roller/****weblogger/config/**
WebloggerConfig.java?view=****markup<http://svn.apache.org/**
viewvc/roller/trunk/app/src/**main/java/org/apache/roller/**
weblogger/config/**WebloggerConfig.java?view=**markup<http://svn.apache.org/viewvc/roller/trunk/app/src/main/java/org/apache/roller/weblogger/config/WebloggerConfig.java?view=markup>
I'd like to do the same thing with Apache JSPWiki, modify our own
PropertyReader.java to accept a new jspwiki-custom.properties
file.
Also,
to get rid of the mostly forgotten and empty
/ini/default_jspwiki.****
properties
and put whatever default values there into jspwiki.properties
(unless
where
the latter has already overridden those properties.) Basically,
jspwiki.properties will assume the role of
default_jspwiki.properties
and
we'll have a new optional jspwiki-custom.properties that will not
be
in
the
WAR at all (you don't want to have it in the WAR as it would get
read
over
what's in $CATALINA_HOME/lib, and if you had something to put in
jspwiki-custom.properties in the WAR you'd just use
jspwiki.properties
anyway.) Backwards compatibility would not be an issue, as you'd
just
take
your jspwiki.properties file from the old WAR and can still
insert it
into
the new WAR or just rename it jspwiki-custom.properties and put
it on
the
external classpath. WDYT?
Regards,
Glen