使用Spring Boot切换到jBPM 7的SQL Sever数据库



我创建了一个应用程序https://start.jbpm.org/,它与H2配合良好。

现在我想切换到SQL服务器。启动时出现以下错误

Caused by: java.lang.RuntimeException: Could not commit session or rollback
at org.jbpm.services.task.persistence.TaskTransactionInterceptor.rollbackTransaction(TaskTransactionInterceptor.java:123) ~[jbpm-human-task-jpa-7.30.0.Final.jar:7.30.0.Final]
at org.jbpm.services.task.persistence.TaskTransactionInterceptor.execute(TaskTransactionInterceptor.java:108) ~[jbpm-human-task-jpa-7.30.0.Final.jar:7.30.0.Final]
at org.jbpm.services.task.persistence.TaskTransactionInterceptor.execute(TaskTransactionInterceptor.java:49) ~[jbpm-human-task-jpa-7.30.0.Final.jar:7.30.0.Final]
at org.drools.core.command.impl.AbstractInterceptor.executeNext(AbstractInterceptor.java:39) ~[drools-core-7.30.0.Final.jar:7.30.0.Final]
at org.drools.persistence.jta.TransactionLockInterceptor.execute(TransactionLockInterceptor.java:73) ~[drools-persistence-api-7.30.0.Final.jar:7.30.0.Final]

这是我的应用程序属性:

spring.datasource.url=jdbc:sqlserver://10.111.88.10:3341;DatabaseName=JBPM_7
spring.datasource.username=lo2
spring.datasource.password=ta
spring.datasource.driverClassName=com.microsoft.sqlserver.jdbc.SQLServerDriver
spring.jpa.show-sql=true
spring.jpa.hibernate.dialect=org.hibernate.dialect.SQLServer2012Dialect
spring.jpa.hibernate.ddl-auto=none
spring.jta.narayana.transaction-manager-id=1

我认为您的问题在于JTA,而不是让SQL Server运行。

若要首先使用SQL Server解决问题,需要安装SQL Server驱动程序。这可从Microsoft获得。目前,他们将多个驱动程序打包在一个档案中,因此您需要安装正确的驱动程序。

其次,您需要更改数据源(或创建一个新的数据源(以使用SQL Server。

第三,您需要更改Hibernate配置。

从上面可以看出,SQL Server运行的是Hibernate,但JTA事务有问题。配置文件包括用于将JTA用于容器管理事务的JNDI。I、 为了简单起见,在带有JDBC的JTA下使用用户管理的事务:

try {
txn = (UserTransaction) new InitialContext().lookup("java:comp/UserTransaction");
txn.begin();
...
txn.commit();
} catch (Exception e) {
try {
txn.rollback();
...
The lookup changes for container-managed transaction.  I am adding a JTA tag so people can expand on my answer.

最新更新