将liquibase嵌入JBoss EJB JPA JTA环境中

时间:2015-04-28 21:40:04

标签: hibernate jpa jboss liquibase jta

我在我们的服务器中嵌入了liquibase,因此我们可以在数据库启动之前警告用户数据库中的同步问题。

我们所做的是从entityManager获取连接。

EntityManagerFactory emf = entityManager.getEntityManagerFactory();
DataSource currentDatasource = (DataSource) emf.getProperties().get("hibernate.connection.datasource");
try {
   connection = currentDatasource.getConnection();
 } catch (SQLException e) {
    ....
 }

然后用它喂Liquibase。 (我们先得到数据库对象)

 Liquibase liquibase = new Liquibase("postgresql-master-changelog.xml", new CompositeResourceAccessor(clFO, fsFO, threadClFO), database);
 liquibase.reportStatus(true, "",  new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out))));

现在的问题是它似乎开始工作但我们得到了

You cannot rollback during a managed transaction!

所以我们不知道怎么做这一切。唯一的选择是在没有JTA管理的情况下创建新的新连接。但是我们怎么做呢?

还有其他选择吗?

提前谢谢。

1 个答案:

答案 0 :(得分:0)

我认为这是一个“坏死”,因为它的发布日期,但我在几分钟前就试图从WildFly 10中的单例会话bean处理Liquibase来解决这个问题。

因此,问题可以在配置级别上解决。由于事务是默认管理的内容,因此应该针对处理Liquibase的bean更改此行为。可以使用EJB部署描述符 - INSERT INTO ... SELECT ...

打开Bean管理的事务
META-INF/ejb-jar.xml