I think you've identified all of the right changes to make, but I'm not
really seeing how they come together very well as implementations.
I think that for #1 we should flush out more properties than what you
listed there and try to make them as consistent as possible, for example ...
database.installation=[auto,manual]
database.connectionProvider=[built-in,jndi,custom,etc]
database.type=[mysql,oracle,etc]
database.driver=
database.url=
mail.strategy=[built-in,jndi,custom,etc]
mail.hostname=
mail.username=
mail.password=
For #2 I think we should be creating some kind of DatabaseProvider class
which knows how to look at the db config properties and provide all the
right kind of database functionality. I don't think we want to save
anything to the servlet context.
#3 sounds right, but doesn't give much details. Again, I think we want
something like a MailProvider class which wraps the functionality of
looking up the right way to get a mail session.
I think #4 is okay, but I would like to move away from using the roller
context as our initialization class. I think I had mentioned this
before, but I think what we really want is a standalone Roller
bootstrapper class which can be called from the contextInitialized()
method or other places when needed. So in the event of install/upgrade
the app can detect that there is work needed before the app should be
bootstrapped and it can do whatever install/upgrade work is needed then
do the bootstrap.
#5 sounds wacky to me. I don't really want that functionality
implemented as a filter, I think that the db upgrading should be done by
the DatabaseProvider and if we want some kind of UI for interacting with
that then we should allow for that using the bootstrapper idea. The
only thing I would potentially think a filter could be used for in this
situation is something like the InitFilter that we already have where
that filter can check some kind of flag to see if the app has been
bootstrapped yet and if not then it redirects all requests to the
install/upgrade page.
I like #6, but asking the user to restart/redeploy is no fun, so that's
where the independent bootstrapper would be useful.
And #7 is same as #6 really.
-- Allen
Dave wrote:
Based on the discussion so far, I've put together an initial proposal
for fixing the Roller installation experience. Please provide
feed-back here on the dev list.
Abstract
The Roller installation process is unacceptably complex. It's having a
negative impact on Roller adoption and distracting the Roller
community on the user mailing list. We need to make it really easy to
install Roller.
Requirements
* Easy installation, meaning:
o Ask users to provide minimum information to get Roller up
and running
o Create and upgrade tables automatically for user
* Additionally:
o It must be possible to disable automatic upgrade of database
tables
o It must be possible to specify DB and mail via properties
or JNDI names
Here's the rest:
http://cwiki.apache.org/confluence/display/ROLLER/Proposal+Easy+Install
- Dave