Я обновляю свое приложение до Grails 3, и у меня возникают проблемы с вызовом хранимых процедур MSSQL из Grails? В моем случае это работает в Grails 2.2.5, но не в Grails 3.3.9. Я постоянно получаю сообщение об ошибке, вызванное: java.sql.SQLException: ***, 1. Errno 7391: Операция не может быть выполнена, поскольку поставщику OLE DB "MSDASQL" для связанного сервера "OOWS" не удалось начать распределенную транзакцию.
Это работает, когда мне нужно получить данные из базы данных, а не когда я их отправляю.
Вот моя конфигурация источника данных:
grails:
transaction:
chainedTransactionManager:
enabled: true
---
hibernate:
cache:
queries: false
use_second_level_cache: false
use_query_cache: false
dataSource:
pooled: true
jmxExport: true
driverClassName: org.postgresql.Driver
dialect: org.hibernate.dialect.PostgreSQLDialect
username: ******
password: ******
environments:
development:
dataSource:
#dbCreate: create
url: jdbc:postgresql://localhost:5432/grailsuser
dataSources:
lookup:
pooled: true
driverClassName: net.sourceforge.jtds.jdbc.Driver
dialect: org.hibernate.dialect.SQLServer2008Dialect
username: *****
password: *****
url: jdbc:jtds:sqlserver://192.168.111.22:1433/SQL_TEST
properties:
jmxEnabled: true
initialSize: 5
maxActive: 50
minIdle: 10
maxIdle: 25
maxWait: 10000
maxAge: 600000
timeBetweenEvictionRunsMillis: 5000
minEvictableIdleTimeMillis: 60000
validationQuery: SELECT 1
validationQueryTimeout: 3
validationInterval: 15000
testOnBorrow: true
testWhileIdle: true
testOnReturn: false
jdbcInterceptors: ConnectionState
defaultTransactionIsolation: 2 # TRANSACTION_READ_COMMITTED
Вот код услуги:
@Transactional('lookup')
class MyService {
final session = sessionFactory_lookup.currentSession.connection()
def conn = new Sql(session)
conn.call '{call stor_Proc(?, ?, ?, ?, ?)}', [va1, var2, Sql.VARCHAR, Sql.INTEGER, Sql.INTEGER], { data->
println data
}
}
Я не понимаю, что я делаю не так.
Эта статья не помогла https://github.com/grails/grails-core/issues/10383.
Заранее спасибо за любую помощь.