The Roller installation process is unacceptably complex and I'd like
to fix that. I've been thinking about the problem for a couple of
weeks now and I've talked to folks in Sun, at ApacheCon and JavaOne
about the problem. I looked at configuration features in Tomcat and
Glassfish. I also looked at installation instructions for popular Java
webapps Confluence, JIRA, Liferay Portal and Blojsom.
So far, I've identified four these options:
1) Property file based configuration
- User puts JDBC and mail-session connection parameters in
roller-custom.properties
- If no JDBC and mail-session properties are found, falls back to
JNDI resources
- Roller creates/upgrades tables as needed (prompts user 1st and
can be disabled)
Pros:
- Easy, just one properties file for all Roller configuration
Cons:
- User still has to do configuration if they want to use JNDI resources
2) Separate installer for each Servlet container / app server
- Installer prompts user for configuration parameters
- Installer does all setup and deploys Roller
- Roller creates/upgrades tables as needed (prompts user 1st and
can be disabled)
Pros:
- Easy UI driven installation
- Supports JNDI resources
Cons:
- Need to develop separate installer for each Servlet container / app server
3) Standalone bundle with Roller, Servlet container / app server and database
- User downloads, unpacks, runs startup script... done!
Pros:
- Amazingly easy for user
- We can steal creation script from Blogapps for the Roller, Derby,
Tomcat bundle
Cons:
- We'll need a separate bundle for each server
- Not a complete solution if user wants database other than one we bundle
4) Roller does completely handles it's own installation
- Roller prompts user for configuration parameters, does all setup
- Creating JNDI data-source and mail-session if needed
- Or creating property file for non-JNDI based installation
- Roller creates/upgrades tables as needed (prompts user 1st and
can be disabled)
Pros:
- Easy UI driven installation
- Does everything!
Cons:
- Need to develop separate logic for each Servlet container / app server
- May be difficult or impossible for some servers
- May require application server jars in Roller's WEB-INF/lib directory
Before I go further with my proposal, I'd like to get some feedback.
At this point, I'm learning towards doing both options #1 and #2.
Option #3 is too limiting and option #4 is just too complex.
- Dave