Хранимая процедура 'XXX' может быть запущена только при ошибке режима нецепной транзакции на сервере JBOSS 7 /JCONN driver4
В настоящее время я перемещаю приложения из JBOSS 5 в JBOSS 7.0.4. Я также изменил драйвер Sybase с Jconn3 на Jconn4 в процессе миграции. Я получаю ошибку ниже при выполнении процедуры Sybase в JBoss 7 с jconn4.jar:
2017.05.26 05:53:17 ERROR stderr(71): Caused by: com.sybase.jdbc4.jdbc.SybSQLException: Stored procedure
'sp_update_trade_data' may be run only in unchained transaction mode. The 'SET CHAINED OFF' command will cause the current session to use unchained transaction mode.
2017.05.26 05:53:17 ERROR stderr(71):
2017.05.26 05:53:17 ERROR stderr(71): at com.sybase.jdbc4.tds.Tds.processEed(Tds.java:4131)
2017.05.26 05:53:17 ERROR stderr(71): at com.sybase.jdbc4.tds.Tds.nextResult(Tds.java:3247)
2017.05.26 05:53:17 ERROR stderr(71): at com.sybase.jdbc4.jdbc.ResultGetter.nextResult(ResultGetter.java:78)
2017.05.26 05:53:17 ERROR stderr(71): at com.sybase.jdbc4.jdbc.SybStatement.nextResult(SybStatement.java:294)
2017.05.26 05:53:17 ERROR stderr(71): at com.sybase.jdbc4.jdbc.SybStatement.nextResult(SybStatement.java:276)
Я явно вызываю команду SET CHAINED OFF на уровне данных приложения перед вызовом процедуры. Но я все еще получаю ошибку ниже.
Я подозреваю, что некоторые настройки в JBOSS 7 переопределяют команду SET CHAINED OFF, вызываемую из приложения
Процедура выполняется без ошибок в JBOSS 5 с драйвером Jconn3.jar.
Можете ли вы решить эту ошибку.
2 ответа
Я решил эту проблему, изменив "unchain mode" на " anymode " в процедуре sybase.
Например: EXEC sp_procxmode '', 'anymode'.
Это позволит управлять транзакцией для хранимой процедуры внешними клиентами (т. Е. Контейнером JBoss).
Он также будет работать с локальными клиентами, таким образом, режим "Любой".
Если предположить, что режим выполнения хранимого процесса не изменился (через sp_procxmode), я бы посоветовал поближе взглянуть на различия в профилях соединений jconn3 и jconn4.
Я предполагаю, что jconn3 имел autocommit=true (запуск в режиме нецепной транзакции), в то время как jconn4 имеет autocommit=false (запуск в режиме цепочки транзакций).