项目一期已经完成。在最后的测试,bug修改,回归阶段,eclipse3.3 + wtp + tomcat5.5+jdk1.5给整个项目组带来了巨大的无力感。问题出在hot deploy上,在上面所述的环境下,任何java源代码的更改都会导致wtp的重启,session的失效,之前的页面操作需要重兴做一遍才能回到需要测试的页面。如果java web项目能做到ruby那样的hot deploy该多好啊。可惜项目2期依然是java的环境,看来只有自己想办法改善了。查了下网上的资料,大概有如下几条路可以走。

1:改用Tomcat 的嵌入式版本。
优点:启动速度更快,wtp上publish阶段所需要的copy 文件的时间可以节约下来。

疑问:Tomcat 的嵌入式版本是否支持hot deploy。感觉需要tomcat支持hot deploy 需要修改tomcat的classloader机制。

2:修改tomcat的classloader机制。在classloader的分层里面,tomcat的 classloader属于app 级别的classloader。可以通过修改tomcat的源代码来解决java类修改不需要重启tomcat的功能。

疑问:网上该方法的资料很少,javaeye上也只看到大家讨论过修改web中的配置文件,不需要重启tomcat的讨论,一切不确定因素太多了,项目等不得。

3:改用classfish v2来替代tomcat。
测试过一下。虽然不需要重启,不过build的时间依然不短,而且session还是失效了。效果没有现象中的理想。

4:wtp插件的问题。
将wtp插件改成使用sysdeo 的tomcatplugin插件。tomcatplugin插件如果发现有java文件修改,如果该文件的修改是tomcat 的classloader不支持hotdeploy,会给你提示。让你选择是否重启,这个比wtp已经人性化一点了。不过还是不能实现hotdeploy。

5:使用 javarebel

看javarebel的官网,上面提到的hotswap功能的确让人心动。不过是收费的,而且相关的使用经验和资料太少,风险比较大。


应该选择哪种方法解决问题,希望有经验的大大给点经验。
评论
wufan0023 2008-05-22
我的项目是使用嵌入Tomcat 在debug模式下可以实现热部署,但是有些文件的修改是不行的。还是会有重启的情况。一般性的修改java code 是可以的。
mmwy 2007-12-14
auauau 写道
javarebel 现在正在用,感觉启动速度慢了一倍,不过调试的效果还不错。我采用spring框架,新增加一个方法或者类,还是需要reload context的。
按照 mmwy 的方法,我没有设置成功,能不能再详细介绍一下,比如tomcat、eclipse版本都是什么。


eclipse-platform-3.3.1.1-win32
eclipse-JDT-3.3.1.1
eclipse-PDE-3.3.1.1
eclipse-CVS-Client-3.3.1.1
dtp_1.5.1_101607
emf-sdo-runtime-2.3.1
xsd-runtime-2.3.1
GEF-runtime-3.3.1
wtp-R-2.0.1-20070926042742

Tomcat是5.5.25和6.0.14


JDk1.6.0U3
auauau 2007-12-14
javarebel 现在正在用,感觉启动速度慢了一倍,不过调试的效果还不错。我采用spring框架,新增加一个方法或者类,还是需要reload context的。
按照 mmwy 的方法,我没有设置成功,能不能再详细介绍一下,比如tomcat、eclipse版本都是什么。
永远的小菜 2007-12-13
这个图形是在lomboz下的
wplqw 2007-12-13
2、Session中保存的对象没有实现Serializable接口。
=======================
有一定道理,
原来在weblogic部署一项目得时候偶尔出现这个提示
This attribute will be lost
upon redeployment. This message is logged only once per session.

后来发现是一个HttpSessionBindingListener得实现类没有串列话造成得,导致在重部署得时候该HttpSessionBindingListener从会话上下文中丢失.后来实现了Serializable,就没这个提示了.
neuzhujf 2007-12-13
在网上查查关于Session序列化的问题。
当Reload的时候,Tomcat会将当前的Session进行序列化,
然后启动完成后再把Session恢复。
所以Session应该不会失效。

失效的原因:
1、相关的配置不对;
2、Session中保存的对象没有实现Serializable接口。

供讨论。
boreas 2007-12-13
sorphi 写道
boreas 写道
mmwy的做法我有一个疑问,虽然服务器没有重启,session也未失效,可是修改的类起作用了吗?尤其是静态常量的一些修改


试一下就知道了啊,起作用。



谢谢你了,因为我用的MyEclipse插件,所以没有试。MyEclipse修改类是不用重启的,但是常量和配置文件修改是需要手动重启的,否则也不起作用。所以有了上面的问题。
e3002 2007-12-13
我的怎么没有那个图形界面啊。tomcat5.5
velna_007 2007-12-12
试了一下,修改的类被重新加载了,但静态配置文件还是没有起作用,这个估计需要所使用的框架的支持了,不是tomcat能说了算的
fkpwolf 2007-12-12
JPDA(Java Platform Debugger Architecture)
sorphi 2007-12-12
boreas 写道
mmwy的做法我有一个疑问,虽然服务器没有重启,session也未失效,可是修改的类起作用了吗?尤其是静态常量的一些修改


试一下就知道了啊,起作用。
boreas 2007-12-12
mmwy的做法我有一个疑问,虽然服务器没有重启,session也未失效,可是修改的类起作用了吗?尤其是静态常量的一些修改
vaja 2007-12-11
我也觉得不用嵌入式版本,设置 reloadable 为 true 即可。
lzmhehe 2007-12-10
以前使用tomcat 知道修改reloadable 可以支持热部署
但是现在使用weblogic 那么在myeclipse环境下怎么支持呢
我的开发和发布目录是同一个
sswh 2007-12-10
引用
1:改用Tomcat 的嵌入式版本。<br />
优点:启动速度更快,wtp上publish阶段所需要的copy 文件的时间可以节约下来。<br />


不用嵌入式版本,直接把Tomcat当成Application来启动,也可以省下“publish阶段所需要的copy 文件的时间”。

启动main class指定为:org.apache.catalina.startup.Bootstrap
启动程序参数:start
启动虚拟机参数:-Dcatalina.base="D:\eclipse\workspace\test\Server" -Dcatalina.home="D:\apache-tomcat-5.5.23" -Djava.endorsed.dirs="D:\apache-tomcat-5.5.23\common\endorsed"
classpath指定为:bootstrap.jar、tools.jar、commons-logging.jar
source根据需要添加,主要为方便调试时跟踪进源代码。
ygxdha 2007-12-10
非常感谢mmwy tomcat5.5 tomcat6.用debug模式启动只要按照你的方式设置成reloadable后。就可以进行热部署
wplqw 2007-12-08
参照mmwy的图例,tomcat 6确实可以热部署了,而且会话也没丢.
mmwy 2007-12-08
直接改配置文件的方法
mmwy 2007-12-08
4、
mmwy 2007-12-08
图形界面模式解决问题步骤

1、

2、

3、
发表评论

提醒: 该博客已发表在公共论坛,博客所有留言会成为论坛回贴,留言请注意遵守论坛发贴规则

您还没有登录,请登录后发表评论

ygxdha
搜索本博客
最新评论