歲月如哥
          人生非夢(mèng)
          posts - 50,comments - 144,trackbacks - 0
                  在開發(fā)過(guò)程中,給 com.thunisoft.fy.business.sp.SelectListUtils 新增加了一個(gè)public static方法 getTestSelectList()。在頁(yè)面的處理的logic類里面使用的時(shí)候代碼提示都可以提示出來(lái),調(diào)用方法也沒有報(bào)編譯期錯(cuò)誤。刷新界面后,后臺(tái)運(yùn)行到剛才調(diào)用的地方就報(bào)如下錯(cuò)誤:
          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)
               咨詢同事,得到的是“增加靜態(tài)方法”要重啟tomcat服務(wù)。我重啟了tomcat果然就沒有問(wèn)題了:)
               有點(diǎn)不太明白,為什么增加靜態(tài)方法就要重啟tomcat服務(wù)?這樣在開發(fā)過(guò)程中如果經(jīng)常增加static方法豈不是每次都要重啟,然后就會(huì)很浪費(fèi)時(shí)間了。另外,為什么如果我只是修改了原來(lái)已經(jīng)存在的static方法的實(shí)現(xiàn),則可以正常調(diào)試。
          posted on 2008-04-21 12:54 歲月如歌 閱讀(1238) 評(píng)論(3)  編輯  收藏 所屬分類: java

          FeedBack:
          # re: 增加靜態(tài)方法要重啟tomcat?
          2008-04-22 20:12 | 隔葉黃鶯
          這就是一個(gè)容器的熱加載的能力了,不光是增加靜態(tài)方法要重啟 Tomcat,其他很多時(shí)候都要重啟 Tomcat,如 Sun JVM HotSwap 在以下情況都得重啟應(yīng)用。

          增刪非靜態(tài)方法,增刪構(gòu)造方法,增刪字段,覆蓋方法,改變方法或字段類型,改變超類,實(shí)現(xiàn)別的接口

          Tomcat 大約也就是用的 Sun JVM HotSwap,如果你發(fā)現(xiàn)也就只在創(chuàng)建新的類和改變方法體時(shí)不用重啟,而大多數(shù)我們的調(diào)試只是改變方法實(shí)現(xiàn)。

          如是你借助其他的 JVM,如 IBM的,或者用 JavaRebel 可以在除改變超類和接口時(shí)重啟外,其他時(shí)候都不用。

          見:JavaRebel 1.0 正式版發(fā)布,為應(yīng)用服務(wù)器偵測(cè)類的變化
          http://www.aygfsteel.com/Unmi/archive/2007/12/08/166285.html

          但我覺得用那個(gè)意義不大,特別不利于調(diào)試。既然改那么多,何礙于重啟一次呢,做好了集群就什么也不用怕的。  回復(fù)  更多評(píng)論
            
          # re: 增加靜態(tài)方法要重啟tomcat?
          2008-04-22 22:17 | 向左走向右走
          @隔葉黃鶯
          謝謝~學(xué)習(xí)  回復(fù)  更多評(píng)論
            
          # re: 增加靜態(tài)方法要重啟tomcat?
          2008-04-27 12:56 | henry1451
          你可以把tomcat設(shè)為自動(dòng)加載,即熱部署就不用重啟了.  回復(fù)  更多評(píng)論
            
          主站蜘蛛池模板: 苍南县| 贵溪市| 高要市| 安徽省| 绥宁县| 康保县| 安康市| 永寿县| 灵山县| 武平县| 北票市| 沙雅县| 凯里市| 章丘市| 民丰县| 蓝山县| 文安县| 怀集县| 天峻县| 桐乡市| 贵阳市| 教育| 通城县| 紫阳县| 鲜城| 崇明县| 即墨市| 临澧县| 荥经县| 丰宁| 阜新| 城步| 沿河| 陆良县| 镇远县| 平远县| 青阳县| 和林格尔县| 汉寿县| 翼城县| 麻江县|