I happened across LiquiBase as I was recently doing some Google searching. It looks like an interesting project and I would like to get involved at the user level or at the developer level.
In any case, I recently created an opensource project that has some similarities to LiquiBase. I developed my solution before I learned about LiquiBase and it takes a different approach.
My project is similar to LiquiBase in some respects but a took a different approach. GarinDriver is a much smaller project (dev team of 1). Most of the code was a weekend project (last weekend). The approach, I took was to integrate the system for running the deployment scripts into the JDBC driver layer. By integrating the deployment of scripts into the JDBC driver my system ensures that client’s can never access the database until it is properly initialized (i.e. the JDBC url used by the client describes a minimal database level and internally the GarinDriver can promote the database to the proper level by running required members from a stack of scripts using a databased tracking table to coordinate script running). The GarinDriver contract with scripts is basically run once and supports many clients with contention rules to prevent conflict. When a client connects through the driver it checks it’s stack of scripts vs. the database tracking table and runs only the scripts needed to move the database forward. The GarinDriver is really a wrapper around a backend jdbc driver and as such the GarinDriver focus is on the script stack with all real work handed off to the backend jdbc driver. It seems like a different approach then LiquiBase and there is a possibility that the concept could be merged into LiquiBase.
From my understanding the LiquiBase concept is similar but also includes a set of tools to create a stack of deployment scripts and a way to organize running such scripts. What I really like is that LiquiBase seems to have a database vendor neutral way of describing DDL changes (and possibly a vendor neutral way of describing data loads).
The LiquiBase servlet listener approach is somewhat similar to my approach but I think integration at the JDBC driver level is a better approach vs. servlet listener since it prevents clients from getting to the database before the servlet listener has a chance to do it’s work (i.e. other servlet listers and/or objects that kick off from web context initialization). In addition the JDBC driver approach works for applications that are not running in the servlet model.
Does LiquiBase provide a JDBC driver wrapper concept similar to GarinDriver?
Do members of the LiquiBase community think that JDBC driver integration concept provides value?
Is LiquiBase interested in the idea of integration with the GarinDriver concept?