岁月如哥
人生非梦
posts - 50,comments - 144,trackbacks - 0
        在开发过程中,给 com.thunisoft.fy.business.sp.SelectListUtils 新增加了一个public static方法 getTestSelectList()。在页面的处理的logic类里面使用的时候代码提示都可以提示出来,调用方法也没有报编译期错误。刷新界面后,后台运行到刚才调用的地方就报如下错误:
2008-04-21 12:30:27,032 [com.thunisoft.summer.web.action.BaseAction]-[ERROR] runtime exception
java.lang.NoSuchMethodError: com.thunisoft.fy.business.sp.SelectListUtils.getTestSelectList()Lcom
/thunisoft/fy/support/selectObj/SelectList;
    at com.thunisoft.fy.spxt.pub.ajxq.AjxqLogic.displayZxAjxq_right(AjxqLogic.java:
736)
    at com.thunisoft.fy.spxt.pub.ajxq.AjxqLogic.displayAjxq_right(AjxqLogic.java:
116)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:
39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:
25)
    at java.lang.reflect.Method.invoke(Method.java:
324)
    at com.thunisoft.summer.web.action.MemoryAction.execute(MemoryAction.java:
102)
    at org.springframework.web.struts.DelegatingActionProxy.execute(DelegatingActionProxy.java:
106)
    at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:
430)
    at com.thunisoft.fy.web.struts.SummerRequestProcessor.process(SummerRequestProcessor.java:
134)
    at org.apache.struts.action.ActionServlet.process(ActionServlet.java:
1196)
    at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:
414)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:
689)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:
802)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:
237)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:
157)
    at com.thunisoft.summer.web.filter.UserAASFilter.doFilter(UserAASFilter.java:
111)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:
186)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:
157)
    at org.ajaxanywhere.AAFilter.doFilter(AAFilter.java:
46)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:
186)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:
157)
    at com.thunisoft.summer.web.filter.CharsetFilter.doFilter(CharsetFilter.java:
48)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:
186)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:
157)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:
214)
    at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:
104)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:
520)
    at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:
198)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:
152)
    at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:
104)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:
520)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:
137)
    at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:
104)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:
118)
    at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:
102)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:
520)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:
109)
    at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:
104)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:
520)
    at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:
929)
    at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:
160)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:
799)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:
705)
    at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:
577)
    at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:
683)
    at java.lang.Thread.run(Thread.java:
534)
     咨询同事,得到的是“增加静态方法”要重启tomcat服务。我重启了tomcat果然就没有问题了:)
     有点不太明白,为什么增加静态方法就要重启tomcat服务?这样在开发过程中如果经常增加static方法岂不是每次都要重启,然后就会很浪费时间了。另外,为什么如果我只是修改了原来已经存在的static方法的实现,则可以正常调试。
posted on 2008-04-21 12:54 岁月如歌 阅读(1039) 评论(3)  编辑  收藏 所属分类: java

FeedBack:
# re: 增加静态方法要重启tomcat?
2008-04-22 20:12 | 隔叶黄莺
这就是一个容器的热加载的能力了,不光是增加静态方法要重启 Tomcat,其他很多时候都要重启 Tomcat,如 Sun JVM HotSwap 在以下情况都得重启应用。

增删非静态方法,增删构造方法,增删字段,覆盖方法,改变方法或字段类型,改变超类,实现别的接口

Tomcat 大约也就是用的 Sun JVM HotSwap,如果你发现也就只在创建新的类和改变方法体时不用重启,而大多数我们的调试只是改变方法实现。

如是你借助其他的 JVM,如 IBM的,或者用 JavaRebel 可以在除改变超类和接口时重启外,其他时候都不用。

见:JavaRebel 1.0 正式版发布,为应用服务器侦测类的变化
http://www.blogjava.net/Unmi/archive/2007/12/08/166285.html

但我觉得用那个意义不大,特别不利于调试。既然改那么多,何碍于重启一次呢,做好了集群就什么也不用怕的。  回复  更多评论
  
# re: 增加静态方法要重启tomcat?
2008-04-22 22:17 | 向左走向右走
@隔叶黄莺
谢谢~学习  回复  更多评论
  
# re: 增加静态方法要重启tomcat?
2008-04-27 12:56 | henry1451
你可以把tomcat设为自动加载,即热部署就不用重启了.  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航: