CMP调试记

来源:互联网 发布:推荐哲学方面的书 知乎 编辑:程序博客网 时间:2024/06/17 11:18
开始调试时间:愚人节12:00
结束调试时间:愚人节后第三天10:46
调试环境:JDK1.4.2
Jboss 3.2.6
Oracle 9i
出错信息:
顺利启动Oracle和Jboss,部署Jar包非常成功,客户端调用后Jboss抛出如下异常:
21:40:58,301 ERROR [LogInterceptor] TransactionRolledbackException in method: pu
blic abstract java.lang.Integer dbaccess.CountCMP.getIncrement() throws java.rmi
.RemoteException, causedBy:java.sql.SQLException: ORA-00936: 缺少表达式

调试过程:手法种种,均遭失败,身心受损

黎明曙光:1.查询Oracle文档关于ORA-00936的信息,得到如下解释:
ORA-00936: Cause: A required part of a clause or expression has been omitted. For example, a SELECT statement may have been entered without a list of columns or expressions or with an incomplete expression. This message is also issued in cases where a reserved word is misused, as in SELECT TABLE.
2.在jboss的日志中查找到如下的关于SQL语句的信息
2005-04-03 10:18:18,194 DEBUG [org.jboss.ejb.plugins.cmp.jdbc.JDBCLoadEntityCommand.CountCMP] Executing SQL: SELECT Increment FROM COUNT WHERE (Name=?)
3.把"SELECT Increment FROM COUNT WHERE (Name=?)"语句在Oracle SQlplus中执行同样得到如下结果:ORA-00936: 缺少表达式

解决方法: 怀疑Icrement是Oracle的保留字,把它改为MyIncrement,并在jbosscmp-jdbc.xml中做相应修改,打包部署重新启动Jboss服务器。

怀着再次遭受失败的心理准备又一次启动客户端程序,接下来见到了三天来第一次Jboss未抛异常的神奇画面,内心狂爽无比,一口气连续执行了20遍......
这次Bug调试感受颇深,肺腑之言碰到bug一定要寻根究底,抓住一切可以利用的信息,以免像我一样浪费大量的时间和精力。不过,个人感觉调试成功后的成就感和调试时间成正比:)