存储过程'XXX' may be 运行 only in unchained transaction mode error in JBOSS 7 server/JCONN driver4
Stored procedure 'XXX' may be run only in unchained transaction mode error in JBOSS 7 server/JCONN driver4
我目前正在将应用程序从 JBOSS 5 迁移到 JBOSS 7.0.4。作为迁移的一部分,我还将 Sybase 驱动程序从 Jconn3 更改为 Jconn4。在 JBoss 7 中使用 jconn4.jar:
执行 Sybase 过程时出现以下错误
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 驱动程序中执行正常,没有错误。
你能解决这个错误吗?
假设存储过程的执行模式没有变化(通过 sp_procxmode),我建议仔细查看 jconn3 和 jconn4 连接配置文件中的差异。
我猜 jconn3 有 autocommit=true(运行 在非链式事务模式下),而 jconn4 有 autocommit=false(运行 在链式事务模式下)。
我通过在 sybase 过程中将 'unchained mode' 更改为 'anymode' 解决了这个问题。
例如:EXEC sp_procxmode '','anymode'。
这将允许存储过程的事务由外部客户端(即 JBoss 容器)控制。
它也适用于本地客户端,因此 "Any" 模式。
我目前正在将应用程序从 JBOSS 5 迁移到 JBOSS 7.0.4。作为迁移的一部分,我还将 Sybase 驱动程序从 Jconn3 更改为 Jconn4。在 JBoss 7 中使用 jconn4.jar:
执行 Sybase 过程时出现以下错误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 驱动程序中执行正常,没有错误。
你能解决这个错误吗?
假设存储过程的执行模式没有变化(通过 sp_procxmode),我建议仔细查看 jconn3 和 jconn4 连接配置文件中的差异。
我猜 jconn3 有 autocommit=true(运行 在非链式事务模式下),而 jconn4 有 autocommit=false(运行 在链式事务模式下)。
我通过在 sybase 过程中将 'unchained mode' 更改为 'anymode' 解决了这个问题。
例如:EXEC sp_procxmode '','anymode'。
这将允许存储过程的事务由外部客户端(即 JBoss 容器)控制。
它也适用于本地客户端,因此 "Any" 模式。