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 [1] https://flywaydb.org/ [2] https://github.com/apache/isis/blob/master/core/runtime/src/main/java/org/apache/isis/core/runtime/system/session/IsisSessionFactoryBuilder.java#L184