1

我目前正在将应用程序从JBOSS 5迁移到JBOSS 7.0.4。作为迁移的一部分,我还将 Sybase 驱动程序从 Jconn3 更改为 Jconn4。在使用 jconn4.jar 在 JBoss 7 中执行 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命令

该过程在带有 Jconn3.jar 驱动程序的 JBOSS 5 中执行良好,没有错误。
你能解决这个错误吗?

4

2 回答 2

1

假设存储过程的执行模式没有变化(通过 sp_procxmode),我建议仔细查看 jconn3 和 jconn4 连接配置文件的差异。

我猜 jconn3 有 autocommit=true (在非链式事务模式下运行),而 jconn4 有 autocommit=false (在链式事务模式下运行)。

于 2017-05-29T14:33:45.183 回答
1

我通过在 sybase 过程中将 'unchained mode'更改为 ' anymode ' 解决了这个问题。
例如:EXEC sp_procxmode '','anymode'
这将允许存储过程的事务由外部客户端(即 JBoss 容器)控制。
它也适用于本地客户端,因此是“任何”模式。

于 2017-06-01T08:50:00.023 回答