Description
from Kambiz:
Hi,
in our non-Isis projects, we use FlyWay [1] for DB migrations and I
would like to integrate it into our Isis workflow. The simplest path to
do so would be a DomainService with a PostConstruct annotated init
method:
@PostConstruct
public void init(final Map<String, String> properties) {
Flyway flyway = new Flyway();
// Point it to the database
String jdbcUrl = properties.get("isis.persistor.datanucleus.impl.javax.jdo.option.ConnectionURL");
String user = properties.get("isis.persistor.datanucleus.impl.javax.jdo.option.ConnectionUserName");
String password = properties.get("isis.persistor.datanucleus.impl.javax.jdo.option.ConnectionPassword");
flyway.setDataSource(jdbcUrl, user, password);
flyway.setLocations("classpath:db/migrations");
// Start the migration
flyway.migrate();
}
but this isn't a viable solution, as IsisSessionFactoryBuilder's
buildSessionFactory() method initialises the DataNucleus (DN)
PersistenceSessionFactory before the services are constructed [2].
So DN has already found the mismatch between the JDO annotations and the
database before we enter the init method of our DB migration
bootstrap/seed service.
I could contribute a patch, if someone could hint on the preferred way
of implementing the functionality.
Thank you
Kambiz