Grails 3 вызывает хранимую процедуру MSSQL - не может начать распределенную транзакцию - PullRequest
0 голосов
/ 23 апреля 2019

Я обновляю свое приложение до 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.

Заранее спасибо за любую помощь.

...