You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@isis.apache.org by "Dan Haywood (JIRA)" <ji...@apache.org> on 2016/07/19 11:23:20 UTC

[jira] [Commented] (ISIS-1471) Integrate Flyway or Liquibase or something similar

    [ https://issues.apache.org/jira/browse/ISIS-1471?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15383974#comment-15383974 ] 

Dan Haywood commented on ISIS-1471:
-----------------------------------

Jeroen:

Hi Kambiz,

There's currently not a nice hook that I can think of to execute Flyway
migrations. I would create a separate "upgrade" mode to start Isis that
bootstraps with an in-memory db and allows you to do the Flyway stuff. But
Dan probably has other ideas ;-)

I've looked into Flyway for exactly the same purpose but was not really
enthousiast about it. What I disliked the most is that you have to maintain
every single db change in scripts. For me, the domain model is the source
and persistence should be derived from that. And Datanucleus does an
excellent job in creating all database artifacts so I want to keep
leveraging that.

What we currently do (manually) is roughly this:
1. stop Isis;
2. drop all db constraints;
3. apply db upgrade script (for the changes that cannot be handled by
Datanucleus);
4. start Isis;
5. execute upgrade service (for programmatic changes).

We are also trying to crack the nut on how to automate this but encounter a
few hurdles and I am not sure if Flyway can tackle those:
- we have applications that consist of multiple modules, each with its own
db schema and that change independently and the application should
orchestrate the right order of upgrading;
- a lot of times data is migrated, even between schemas and we sometimes
use temporary views to do a pre and post check;

Any ideas are welcome.

Cheers,

Jeroen

> Integrate Flyway or Liquibase or something similar
> --------------------------------------------------
>
>                 Key: ISIS-1471
>                 URL: https://issues.apache.org/jira/browse/ISIS-1471
>             Project: Isis
>          Issue Type: New Feature
>          Components: Core
>    Affects Versions: 1.13.0
>            Reporter: Dan Haywood
>            Assignee: Dan Haywood
>             Fix For: 1.14.0
>
>
> 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
> [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



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)