所谓热部署,就是在应用正在运行的时候升级软件,却不需要重新启动应用。
对于Java应用程序来说,热部署就是在运行时更新Java类文件。在基于Java的应用服务器实现热部署的过程中,类装入器扮演着重要的角色。大多数基于Java的应用服务器,包括EJB服务器和Servlet容器,都支持热部署。类装入器不能重新装入一个已经装入的类,但只要使用一个新的类装入器实例,就可以将类再次装入一个正在运行的应用程序。
一、热部署介绍:
热部署对于程序开发的好处就不用多说了,这里记录一下自己的使用过程:
1.myeclipse的年代,那时候通过myeclipse新建的web项目,通过debug方式启动,可以获得修改java类中的方法体和jsp页面立即生效的功能;这是纯eclipse所没有的。
2.后来出了jrebel可以获得新增java类和方法也无需重启应用服务器即可生效的功能,当然这个功能不完美,有缺陷。
3.随着eclipse的升级,推出了Jee版本的eclipse,也就逐渐淘汰了myeclipse,但是JEE版本的eclipse和tomcat配合,即便使用debug模式启动,修改java类还是会导致整个应用的重新加载,这是不能忍受的,这时候,发现了jetty配合JEE版本的eclipse可以完美的实现热加载,即改即用,很方便。
二、热部署过程
先做个说明,没有热部署和有热部署的开发效率真是天差地别的。所以热部署受很多第三方软件包(Struts,Spring,Hibernate)的限制。本来可以热部署的,加入了第三方的包就不可以了。所以,先说明详细的软件环境,和程序配置是非常必要的。
虚拟机:java Tomcat Eclipse Myeclipse
应用程序情况:纯正的sertlet+jsp+javabean,数据库连接使用JDBC-ODBC桥连接Access数据库。没有使用任何第三方软件包,没有使用Struts,Spring,Hibernate。WebRootWEB-INFlib下是空的。
配置方法:
ie登陆http://Tomcat所在的服务器IP:8080/ →点超连接“Tomcat Administration”→ 输入用户名密码登陆→在左侧的功能树中→Tomcat Server→Service(Catalina)→Host(localhost)→Context(/要修改的web项目)→右侧新出现的页面中→Reloadable设置为true→Save按钮→Commit Changes。
开发时,修改.java文件后,调用这个类时日志提示:
以下是引用片段: - Reloading this Context has started |
这是正在重新加载修改后的.class文件。
j2ee开发插件(这里使用Myeclipse),也可能导致热部署失效。因为插件必须要把编译好的.class文件从工作空间复制到Tomcatwebapps下的项目里。才能使Tomcat得到需要热部署的文件。
最后说一下jreble,网上的资料比较复杂,下面介绍个最简单的方法:
在resin的启动文件,例如httpd.sh中增加:
Resin 3.1+版本:
以下是引用片段: exec $JAVA_EXE -javaagent:/opt/apps/resin/jrebel4.0-crack.jar -jar ${RESIN_HOME}/lib/resin.jar $* |
Resin 3.0-版本:
以下是引用片段: args=”-J-javaagent:/opt/apps/resin/jrebel4.0-crack.jar“ |
三、小结
在进行java web程序开发过程中,经常遇到这种问题,修改一个java文件(*.java),需要重启web服务器(如tomcat,weblogic等),部署项目。而起/停服务器浪费了大量的时间。在小项目中,也许我们感觉不到。但对于公司的大型项目:如数据中心,生产等系统开发而言,往往起/停需要等待几分钟时间。更浪费时间的是,对于一个类中的方法的调试过程,如果修改多次,需要反复的启停服务器,那么浪费的时间更多。从上可以看出,我们急需一个可快速起/停服务器的工具,来提高我们的开发效率。
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号
TechTarget
官方微博
TechTarget中国
作者
相关推荐
-
内存数据网格提供商一头扎进Java
10年的时间里,应用性能解决方案提供商Alachisoft一直在用NCache(针对N-Tier和网格计算.NET应用的内存计算和数据网格产品)为.NET社区服务。
-
遇到这样一个问题:通过java service wrapper部署应用,wrapper进程占用的内存会一直升高, 直到把内存吃完应用崩溃,但是这个wrapper
遇到这样一个问题:通过java service wrapper部署应用,wrapper进程占用的内存会一直升高 […]
-
Google App Engine for Java 对于目前中国需要学习吗?
-
前无古人后无来者的Java平台
开发人员一直在致力于保持Java的活力,经过20年后,我们感觉从来没有更好的、更令人激动的时刻如同Java社区一样。