我目前正在将应用从 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中的过程执行正常,没有错误 你能否解决这个错误。
答案 0 :(得分:1)
假设没有更改存储过程的执行模式(通过sp_procxmode),我建议仔细看看jconn3和jconn4连接配置文件中的差异。
我猜jconn3有autocommit = true(在unchained事务模式下运行),而jconn4有autocommit = false(在链式事务模式下运行)。
答案 1 :(得分:1)
我通过将' unchained mode' 更改为' anymode '来解决了这个问题。在sybase程序中。
例如: EXEC sp_procxmode'',' anymode' 。
这将允许外部客户端(即JBoss容器)控制存储过程的事务。
它也将与本地客户一起工作,因此" Any"模式。