You never develop code without version control, why do you develop your database without it ?™
Liquibase (http://www.liquibase.org) is a simple, reliable and elegant solution for database refactoring management. It comes with main features :
- multi dabase support (SGBDR)
 - structural / data changeset
 - safety check (on md5sum basis)
 - safety database upgrade process (cluster is liquibase friend)
 - contexts execution filter (you Player know what I’m talking about)
 - automation tooling provided (ant / servlet, and now PlayFramework !)
 
Liquibase module differs from Migrate module for the main following reason :
Bundle changelog files within your Play application (see example),
Add liquibase dependency to your Play application
# Additional modules
# ~~~~~
# A module is another play! application. Add a line for each module you want
# to add to your application. Module paths are either absolutes or relative to
# the application root.
module.liquibase=${play.path}/modules/liquibase
First version configuration options are the following :
liquibase.active=true/false liquibase.changelog=changelog_path (classpath loaded) liquibase.properties=properties_path (classpath loaded) liquibase.contexts=ctxt1[,ctx2]
More features (hosts execution filter, underlying database changelog structure visualization…) to come
Changeset files / properties can be jared and integrated – thus versioned – as 3rd party libs, at module / application level, just the same way jdbc drivers are.
One may also handle changeset at the same level as domainmodel declaration – that’s what we do at GdTeam -, within dedicated module/application, using play module dependency mechanism to create modular app.
Modules archives are still built and maintained against 3rd party repository such as nexus / archiva / artifactory, and then released agains private / public play module repository (see http://code.google.com/p/play-repo/ for more information)