我在我们的服务器中嵌入了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管理的情况下创建新的新连接。但是我们怎么做呢?
还有其他选择吗?
提前谢谢。
答案 0 :(得分:0)
我认为这是一个“坏死”,因为它的发布日期,但我在几分钟前就试图从WildFly 10中的单例会话bean处理Liquibase来解决这个问题。
因此,问题可以在配置级别上解决。由于事务是默认管理的内容,因此应该针对处理Liquibase的bean更改此行为。可以使用EJB部署描述符 - INSERT INTO ... SELECT ...
:
META-INF/ejb-jar.xml