如何在原因未知时调试问题

时间:2011-08-29 13:27:52

标签: java jdbc weblogic-10.x distributed-transactions jrockit

我们在weblogic服务器v10.3.2.0中遇到以下异常。我们正在使用JRockit JRE 6.0。

我们在每个服务器请求中都涉及大约6-7个XA数据源。当刚开始处理最后一个数据源时,我们面临这个异常。

请有人建议。

java.sql.SQLException: Unexpected exception while enlisting XAConnection 
java.sql.SQLException: Transaction rolled back: setRollbackOnly called on transaction 
at weblogic.jdbc.jta.DataSource.enlist(DataSource.java:1616) 
at weblogic.jdbc.jta.DataSource.refreshXAConnAndEnlist(DataSource.java:1503) 
at weblogic.jdbc.jta.DataSource.getConnection(DataSource.java:446) 
at weblogic.jdbc.jta.DataSource.connect(DataSource.java:403) 
at weblogic.jdbc.common.internal.RmiDataSource.getConnection(RmiDataSource.java:364) 
at com.ibatis.sqlmap.engine.transaction.jta.JtaTransaction.init(JtaTransaction.java:68) 
at com.ibatis.sqlmap.engine.transaction.jta.JtaTransaction.getConnection(JtaTransaction.java:131) 
at com.ibatis.sqlmap.engine.mapping.statement.MappedStatement.executeQueryForObject(MappedStatement.java:120) 
at com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.queryForObject(SqlMapExecutorDelegate.java:518) 
at com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.queryForObject(SqlMapExecutorDelegate.java:493) 
at com.ibatis.sqlmap.engine.impl.SqlMapSessionImpl.queryForObject(SqlMapSessionImpl.java:106) 
at com.ibatis.sqlmap.engine.impl.SqlMapClientImpl.queryForObject(SqlMapClientImpl.java:82) 

3 个答案:

答案 0 :(得分:1)

正如您所写,此示例中未知原因。 我们可以看到事务已标记为“必须回滚”,可能是由于以前的数据源出现问题。

也许您可以检查以前的数据源以前的日志,找到原因?

答案 1 :(得分:1)

你说它是最后一个数据源 - 你读过这个吗? :http://muness.blogspot.com/2005/09/distributed-transactions-and-timeouts.html

如果您需要更多信息,可以用带有黑客com.ibatis.sqlmap.engine.transaction.jta.JtaTransaction.init()的版本替换ibatis吗?在那里添加一些日志记录,你可能会知道更多。

答案 2 :(得分:1)

如果我不得不猜测我会说最后一个数据源没有正确配置为XA数据源,没有安装XA驱动程序,或者不支持XA。

你在这里做任何有趣的异常处理会截断堆栈(捕获重新投掷但只保留顶层堆栈帧)或使用自定义异常处理库吗?如果你是我会放弃它。似乎应该有一个caused by:与数据源驱动程序相关的附加较低级别堆栈,以显示其他信息。

如果不是这种情况,这是您获得的唯一信息。可能是时候将服务器的日志记录提升到debugtrace,然后了解weblogic如何完成任务......

或者,如果您受到支持,我会与您的供应商一起验证您的驱动程序版本/配置。如果不是,您需要追踪文档并自行验证。