最近,公司要做一个新项目。我要先把环境确定好。正常使用Myeclipse就可以了。但上Myeclispe的官网上不去了。一开始我以为是GFW干的,后来网上说因为中国盗版太多了。Myelipse官方把所有中国的IP都被封了。
哎~~~。也是给人家的印象太不好了。不爱让我们用,我就不用了。
上eclipse.org下了一个Eclipse IDE for Java EE Developers,基于WTP的。一开始的使用还凑合。但到热部署的时候,用Tomcat自带的热部署会引起随TOMCAT自动启动的Servlet再次运行,实际相当于重启了tomcat。这是个大问题啊。
想当年在做客服V3的时候,每次修改一个类,都要重启应用服务器,当时是weblogic+Struts1+sping+hibernate。机器还慢,是一个痛苦的过程。及其影响效率。
后来我在Myeclipse上解决了这个问题,客服V4的开发就没有这个问题。但怎么解决的忘了。在硬盘中一顿翻找,最后终于找到了:
Myeclipse配置Tomcat4时,其中Run mode 和Debug mode决定了修改.java文件后,能否自动发布既实现热部署.txt
Myeclipse配置Tomcat4时,其中Run mode 和Debug mode决定了修改.java文件后,能否自动发布。
Run mode 需要重启Tomcat 4才能让修改后的.java文件生效
Debug mode 修改.java文件后,马上生效
当初被郁闷了那么长时间的问题,和这么重要的解决方法,我咋能忘呢?
感叹一下时间的威力和自己的记性。
然后上网搜索了一下,对这个问题又有了一个全新的、全面的、深刻的认识。
先说一下我对热部署的需求:就是我改了一个.java文件,这个修改可以在运行中的web服务器中马上生效。而不用重启web服务器。
以下为引文:
This new feature encapsulates the ability to substitute modified code in a running application through the debugger APIs.
——'HotSwapping' using JVM:http://www.jug.mk/blogs/ipenov/entry/hotswapping_using_jvm
网上很多人误解热部署和热加载的概念,所以造成乱配置的行为,这里提示一下.
热部署:就是容器状态在运行的情况下部署或者重新部署整个项目.在这种情况下一般整个内存会清空,重新加载.简单来说就是Tomcat或者其他的web服务器会帮我们重新加载项目.这种方式可能会造成sessin丢失等情况.
热加载:就是容器状态在运行的情况下重新加载改变编译后的类.在这种情况下内存不会清空,sessin不会丢失,但容易造成内存溢出,或者找不到方法。因为内存无法转变成对像. 一般改变类的结构和模型就会有异常,在已经有的变量和方法中改变是不会出问题的。在中模式最好是在调试过程中使用,免得整个项目加载.
debug模式都支持热加载.很方便使用.
——IDEA TOMCAT WEB开发 SSH开发 修改类不重启 热部署 热加载 IDEA8:http://3000pzj.javaeye.com/blog/503222
部署在项目开发过程中是常有的事,特别是debug的时候。但是如果每次fix一个bug都要把整个项目重新部署一遍以便测试fix的效果或者继续debug其他bug,那对开发人员来说无疑是一大噩梦。不过谁都不想噩梦连连,有了JVM的hotSwap以及Intellij Idea对debug,hotSwap的支持,从此美梦相伴(夸张了点:))。今天通过这篇文章介绍一下通过对Intellij Idea热部署的设置达到最方便的最高效的debug效果。
我想在介绍具体设置之前,不妨了解一些背景知识和概念。
HotSwap:“HotSwap”是JPDA(Java Platform Debugger Architecture)中的一个特性,JPDA增强是自Java 2 SDK1.4新增的功能。HotSwap允许将JVM中的类定义替换为新的类定义,这就允许开发人员在debug时,将修改过的class替换JVM中旧有的class,无需重新启动服务器。不过,目前HotSwap只支持对方法body的修改,不支持对类和方法签名的修改(比如修改类名,方法名,方法参数等)。考虑这些限制,也是有理由的,替换类定义,就需要新类和旧类之间有一个关联,这里关联就是类的全名(或许还有其他信息),类名都改了,就不知道替换哪个类了。至于方法签名的修改,应该是考虑到运行时方法的调用,通过方法签名替换已有的方法调用。