今天遇到个这个问题, Struct2 + Hibernate, 上午的代码运行良好,但是下午在做了一些修改之后,java代码就变的难以驯服了, 不过 用排除发还是找到了问题的所在: 由于在 User 实体上加了 isAdmin字段,
Hibernate 的配置文件 属性:<property name="hbm2ddl.auto">update</property> 没有改变, 重新部署却出现 下面的异常 :
2009-11-23 8:14:14 org.apache.catalina.core.StandardWrapperValve invoke
严重: Servlet.service() for servlet default threw exception
java.lang.NoClassDefFoundError
at com.bbs.web.OpenSessionInView.doFilter(OpenSessionInView.java:43)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Thread.java:595)
百思不得其解, 还好上午的代码没有问题, 几番排除就解决了问题!把 User.hbm.xml
<property name="isAdmin"/>
删除 就没有了问题。
由此引出的两个思考:
1: 代码仓库的管理
程序员的代码不要隔天,去提交和更新。 像上面这种情况,如果是几天前的代码,根据上面的错误信息,怎么可能想到是 实体Bean 的问题。 保证仓库的代码的正确性和健壮性。 保持副本和 仓库服务端的代码在最短的时间差。
2: 错误信息
写代码就少不了异常和报错, 但是像上面这种 离奇的错误报告。 会让人很郁闷! 因为你根本找不到原因。 所以程序内一致的报错 体系 是必不可少的 。 也不知道是不是 Structs2 把信息更改了 ,还是 Hibernate 本身的问题 。
如果是 Hibernate 的问题的话 ,就该 给 Kaven king 提个 Bug 了