We are developing a large-scale web- and java-based product which by its nature can be deployed on multiple servers to achieve better performance, redundancy and scalability. Also this application uses several databases (currently MS SQL Server only supported, in the near-future Oracle is coming as well, maybe DB2 too) which can be deployed on multiple servers as well. There's also the web tier (currently only Tomcat and WebSphere supported), however no EJBs.
Like I said, this is a PRODUCT which our clients need to install. Hence the question: are there any general-purpose installers out there that can perform the operations below:
[*] Fresh Install of the Product (no prior installation)
[*] Upgrade - takes a previously installed version and upgrades it to the latest, both the product and the user data.
[*] Reconfiguration - allows the customer to perform changes in the cluster - add servers, move services/databases from one server to another etc
[*] Uninstall - removes the application.
We have an installer that does all these operations, however it was done as an afterthought, not much thought went into its architecture. Hence for each new release we're faced with the problem of constantly tweaking it (oh, we added this new component, so we need to also copy these files, the other files are no longer needed, let delete them etc). Ideally we see that the component developer should also be responsible for installation/upgrade/uninstall issues related to the component and the installer should be generic enough to just orchestrate the whole process while delegating the details to the application components. This way we can reuse the same installer (and components) to produce installers for other products.
So right now, in order to minimize the development costs, we're faced with the need to write the generic installer. Or to integrate one. I was looking all over place and could find just a few frameworks out-there: OSGi, SmartFrog. However these frameworks are targeted specifically to Java components and don't solve the database components which are the most complicated to install/manage/uninstall.
So to summarize, so far I could not find anything useful which is strange - Java's been around for 10 years now, database systems even longer. And no useful installer so far. :-(
Or maybe I wasn't looking deep enough? Can you prove me wrong? ;-)