`
ygxdha
  • 浏览: 5882 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

项目一期结束后的思考。怎么样改善tomcat的工作环境

阅读更多
项目一期已经完成。在最后的测试,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功能的确让人心动。不过是收费的,而且相关的使用经验和资料太少,风险比较大。


应该选择哪种方法解决问题,希望有经验的大大给点经验。
分享到:
评论
29 楼 sunrie 2008-08-27  
使用嵌入tomcat,用debug方式,是不需要重启就redeploy的
28 楼 liran_java 2008-08-27  
qrtt1 写道
		StandardContext context = (StandardContext) this.embedded
				.createContext(contextPath, absolutePath);
		context.setReloadable(reloadable);


tomcat 可以設 reloadable

27 楼 ssuupv 2008-08-12  
mmwy 方法我的不行啊.不知道为什么
26 楼 aids198311 2008-05-23  
收藏了.好贴!
25 楼 wufan0023 2008-05-22  
我的项目是使用嵌入Tomcat 在debug模式下可以实现热部署,但是有些文件的修改是不行的。还是会有重启的情况。一般性的修改java code 是可以的。
24 楼 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
23 楼 auauau 2007-12-14  
javarebel 现在正在用,感觉启动速度慢了一倍,不过调试的效果还不错。我采用spring框架,新增加一个方法或者类,还是需要reload context的。
按照 mmwy 的方法,我没有设置成功,能不能再详细介绍一下,比如tomcat、eclipse版本都是什么。
22 楼 永远的小菜 2007-12-13  
这个图形是在lomboz下的
21 楼 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,就没这个提示了.
20 楼 neuzhujf 2007-12-13  
在网上查查关于Session序列化的问题。
当Reload的时候,Tomcat会将当前的Session进行序列化,
然后启动完成后再把Session恢复。
所以Session应该不会失效。

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

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


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



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


试一下就知道了啊,起作用。
14 楼 boreas 2007-12-12  
mmwy的做法我有一个疑问,虽然服务器没有重启,session也未失效,可是修改的类起作用了吗?尤其是静态常量的一些修改
13 楼 vaja 2007-12-11  
我也觉得不用嵌入式版本,设置 reloadable 为 true 即可。
12 楼 lzmhehe 2007-12-10  
以前使用tomcat  知道修改reloadable 可以支持热部署
但是现在使用weblogic  那么在myeclipse环境下怎么支持呢
我的开发和发布目录是同一个
11 楼 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根据需要添加,主要为方便调试时跟踪进源代码。
10 楼 ygxdha 2007-12-10  
非常感谢mmwy 
tomcat5.5 tomcat6.用debug模式启动只要按照你的方式设置成reloadable后。就可以进行热部署

相关推荐

Global site tag (gtag.js) - Google Analytics