`
cats_tiger
  • 浏览: 273957 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

暴强的Javarebel——让JavaEE开发像ROR一样方便

阅读更多

ROR之所以开发效率比java高,除了语法的简洁和框架本身强大的功能之外,程序员不必反复的重启服务也是重要原因之一。JavaRebel 给Java带来了Ruby和PHP风格的动态重新装载类特性。虽然现在还有些局限性,但它可以显著地增加开发速度。JavaRebel允许一个应用程序(独立的或运行在应用服务器上的应用)重新装载在运行过程中发生的大多数类变化,包括增加或删除方法和域。JavaRebel可以帮助java实现快速反馈循环,使得JavaEE开发像ROR、PHP一样方便。

使用

Javarebel是一个Jvm插件,使用非常简单,只需要两步:

  • 将javarebel.jar加入classpath(不建议将javarebel.jar放在WEB-INF/lib下,因为生产环境不需要它)
  • 命令行中加入下面的启动参数
    java -noverify -javaagent:C:\libraries\javarebel.jar -Drebel.dirs=c:\workspace\project\classes
    Drebel.dirs指向工程中.class文件的目录,不必指定具体的类名。另外,javarebel.jar的名字不能修改。

在eclipse中使用也非常简单,如下图:


javarebel支持大多数jvm和常见的containers,包括Weblogic、Jboss、Tomcat、Jetty等,官网上没有提到Websphere不知道行不行。

感受

用了一个月,总得感觉是javarebel很好很强大,大约减少了80%的重启时间。很多时候都不要debug了,直接修改,然后刷新页面(ajax的话,都不用刷)就可以看到效果。以前因为担心Jboss等支持EJB3的container启动慢而没有使用seam这个强劲的框架,现在可以试试了。

Javarebel使用了动态代理,调试的时候会出现很多奇怪的类名,有点乱,不过这并不影响调试,反正spring、hibernate之类的也用了动态代理,乱就乱吧。

问题

在修改配置文件的时候仍然需要重新启动,幸好比起修改代码我们很少修改配置文件,随着Annotation的使用,这种修改配置的情况会越来越少。Javarebel会对性能产生影响,所以在性能测试和生产环境中不要使用。它会影响启动速度,但是开发中我们使用jetty,因为jetty的启动非常快,所以javareble的影响基本感觉不到。Javarebel的spring插件好像还不完善,我试了试,暂时放弃了,没多少影响的说。它是需要付费使用的,但是它提供的付费渠道俺都不会用,所以可以暂时当作免费的使用(好像没有什么限制),等俺有了Visa再说吧

其他的问题可以到官网上查,比如它的FAQ

 

  • 大小: 43.8 KB
分享到:
评论
29 楼 rmn190 2008-11-03  
不错,我现在就缺这个东西,
下一个搞一搞.
28 楼 cats_tiger 2008-11-01  
fyting 写道
就如楼上所说,大多数情况下在debug模式下启动服务器进行开发就解决问题了。
引用
在修改配置文件的时候仍然需要重新启动,幸好比起修改代码我们很少修改配置文件,随着Annotation的使用,这种修改配置的情况会越来越少。

没看错吧,在容器初始化时读取的annotation信息,他能自动搞定?不管用啥工具,框架本身不支持热部署都白搭,你有办法直接替换底层的class,但他却不会重新读取。

我修改hibernate annotated entities,它可以自动读取的。但是因为没有用Spring的annotation,所以不知道行不行。
27 楼 fyting 2008-11-01  
就如楼上所说,大多数情况下在debug模式下启动服务器进行开发就解决问题了。
引用
在修改配置文件的时候仍然需要重新启动,幸好比起修改代码我们很少修改配置文件,随着Annotation的使用,这种修改配置的情况会越来越少。

没看错吧,在容器初始化时读取的annotation信息,他能自动搞定?不管用啥工具,框架本身不支持热部署都白搭,你有办法直接替换底层的class,但他却不会重新读取。
26 楼 cloudeye 2008-10-31  
DEBUG的时候Eclipse自己的的热修补挺好的,绝大部分情况下不用重启。(如果是修正BUG的话,绝大部分情况不会去修改程序的接口或实例变量。)

如果使用代理,会让调试的时候断点定位不准的话,那是很头痛的。
25 楼 cuiyi.crazy 2008-10-31  
amonlei 写道
cuiyi.crazy 写道
我大概用了90天;在2天机器的3个系统下都用过;
甚至其能力直接让我质疑是否有单元测试的必要;

毕竟一个系统久了,经历的人手多了,不断改动多了,能满足单元测试集成测试就很难了;
所以这个javarebel还是很有效果的;

当我看到这个工具的时候,读了网上能找到所有它的文章,并打印了,整理格式后大概有40多页;
其中就有一个讨论针对:javarebel和测试驱动的讨论...
总之,我觉得对于遗留项目绝对是有效的


不重启,一般来说是跟集成测试有关。集成测试和单元测试不能相互取代,两码事


虽好几年没有做新项目,但仅就个人的经历来说,单元测试对遗留项目几乎没有帮助,尤其是之前没有什么测试的既存软件产品
24 楼 amonlei 2008-10-31  
cuiyi.crazy 写道
我大概用了90天;在2天机器的3个系统下都用过;

而且我做了购买的报告,虽然经理和架构师都没有去体验;

但是我觉得对生产力的影响很大;(我们产品用了struts1.2 ejb2 spring1.2.6,产品起源于1998年)
甚至其能力直接让我质疑是否有单元测试的必要;

毕竟一个系统久了,经历的人手多了,不断改动多了,能满足单元测试集成测试就很难了;
所以这个javarebel还是很有效果的;

当我看到这个工具的时候,读了网上能找到所有它的文章,并打印了,整理格式后大概有40多页;
其中就有一个讨论针对:javarebel和测试驱动的讨论...
总之,我觉得对于遗留项目绝对是有效的


不重启,一般来说是跟集成测试有关。集成测试和单元测试不能相互取代,两码事
23 楼 amonlei 2008-10-31  
fireflyc 写道
停,别拿恶心的ror说事行不?
就是一个不用重启web服务器的小工具而已。咱不拿ror说事。反胃。

愤青?自闭?保守?做技术,心态要open哦
22 楼 liuzongan 2008-10-31  
dengyin2000 写道
liuzongan 写道
dengyin2000 写道
用是可以用, 但是当你调试的时候 你会发现它把类改得乱七八糟了。 你真的想实现不用重启的话 用Groovy吧。

用Groovy开发,也要重启服务,给一个类加一个方法,也不能访问啊,大哥,有没有测试过啊?



试过 没问题。 改Controller没问题。 不知道你改的是不是domain。

我是在controller中试过,添加一个方法,可是不行啊(访问不了啊),我没有用开发工具,只是用editplus改的
21 楼 cats_tiger 2008-10-30  
dengyin2000 写道
liuzongan 写道
dengyin2000 写道
用是可以用, 但是当你调试的时候 你会发现它把类改得乱七八糟了。 你真的想实现不用重启的话 用Groovy吧。

用Groovy开发,也要重启服务,给一个类加一个方法,也不能访问啊,大哥,有没有测试过啊?



试过 没问题。 改Controller没问题。 不知道你改的是不是domain。

改Controller和Service没问题就OK了,domain修改毕竟比较少一些。不过Groovy和GRails不敢在真正的项目中用的...要是有合适的小项目可以先试用一下,几个小项目之后才能在整个团队推广。
javarebel对调试确实有一点影响,不过还是可以调试的。spring代理的service层也有一些代理类。另外,用了javarebel可以减少debug的次数,因为加一个log就可以看到中间变量,很方便,有点像当年调试js时候用alert。当然,这种办法是无法解决真正复杂的问题的,呵呵,在合适的地方用合适的技术吧。
20 楼 cuiyi.crazy 2008-10-30  
我大概用了90天;在2天机器的3个系统下都用过;

而且我做了购买的报告,虽然经理和架构师都没有去体验;

但是我觉得对生产力的影响很大;(我们产品用了struts1.2 ejb2 spring1.2.6,产品起源于1998年)
甚至其能力直接让我质疑是否有单元测试的必要;

毕竟一个系统久了,经历的人手多了,不断改动多了,能满足单元测试集成测试就很难了;
所以这个javarebel还是很有效果的;

当我看到这个工具的时候,读了网上能找到所有它的文章,并打印了,整理格式后大概有40多页;
其中就有一个讨论针对:javarebel和测试驱动的讨论...
总之,我觉得对于遗留项目绝对是有效的

19 楼 dengyin2000 2008-10-30  
liuzongan 写道
dengyin2000 写道
用是可以用, 但是当你调试的时候 你会发现它把类改得乱七八糟了。 你真的想实现不用重启的话 用Groovy吧。

用Groovy开发,也要重启服务,给一个类加一个方法,也不能访问啊,大哥,有没有测试过啊?



试过 没问题。 改Controller没问题。 不知道你改的是不是domain。
18 楼 liuzongan 2008-10-30  
dengyin2000 写道
用是可以用, 但是当你调试的时候 你会发现它把类改得乱七八糟了。 你真的想实现不用重启的话 用Groovy吧。

用Groovy开发,也要重启服务,给一个类加一个方法,也不能访问啊,大哥,有没有测试过啊?
17 楼 sklst 2008-10-30  
我只在View层用,感谢楼主的推荐。
16 楼 dengyin2000 2008-10-30  
aop hibernate 生成的是一些跟业务没关系的类。 我们在开发中都是修改自己写的代码, 这样在运行中会把你的类改得乱七八糟。年初当我发现这个东西的时候也兴奋了一下。 但是当我真的把他用在项目中的时候才发现其实不像想象中的那么好。 说成玩具一点都不假。
15 楼 cats_tiger 2008-10-29  
dengyin2000 写道
cats_tiger 写道
dengyin2000 写道
用是可以用, 但是当你调试的时候 你会发现它把类改得乱七八糟了。 你真的想实现不用重启的话 用Groovy吧。

Groovy私底下玩玩可以,但是用在大项目中还是有很多风险的,学习曲线、性能之类的都要考虑。



我赞同javarebel是玩具。 我有用过它, 不知道你有没有认真用过没。 除非你不用eclipse调式程序。 如果还想调试的话还是别用javarebel了。 Groovy就是java, Groovy可以编译成class运行。 Groovy作为前端是没有什么效率问题的。 我经历过的大多数效率都是在数据库这端。

我在帖子里写了,用的时候会出现很多乱七八糟的类。不过还是可以调试的,spring的AOP,Hibernate也生成一堆类,咱们不是照用不误吗。
14 楼 cats_tiger 2008-10-29  
hua0424 写道

cats_tiger 写道hua0424 写道这东西不是免费的啊,150美圆
貌似出于非盈利目的可以免费,你不拿去给客户部署就OK了吧。
不是啊,我运行之后说这个只能试用30天,这样有什么意义?就为了体验一下?
我真是搞不懂这种工具怎么不免费?

没有呀,我用了一个多月了,没有提示我什么信息。
13 楼 hua0424 2008-10-29  
cats_tiger 写道
hua0424 写道
这东西不是免费的啊,150美圆

貌似出于非盈利目的可以免费,你不拿去给客户部署就OK了吧。

不是啊,我运行之后说这个只能试用30天,这样有什么意义?就为了体验一下?
我真是搞不懂这种工具怎么不免费?
12 楼 jywv 2008-10-29  
是哦,LZ光觉得好用了,殊不知过了三十天要收费?
不试了
11 楼 langkins 2008-10-29  
ZeroTurnaround JavaRebel 1.2.1 (200809261633)
(c) Copyright Webmedia, Ltd, 2007, 2008. All rights reserved.

You are running JavaRebel evaluation license.
You have 30 days until the license expires.

You will see this notification until you obtain a
full license for your installation.
10 楼 murainwood 2008-10-29  
dengyin2000 写道
cats_tiger 写道
dengyin2000 写道
用是可以用, 但是当你调试的时候 你会发现它把类改得乱七八糟了。 你真的想实现不用重启的话 用Groovy吧。

Groovy私底下玩玩可以,但是用在大项目中还是有很多风险的,学习曲线、性能之类的都要考虑。



我赞同javarebel是玩具。 我有用过它, 不知道你有没有认真用过没。 除非你不用eclipse调式程序。 如果还想调试的话还是别用javarebel了。 Groovy就是java, Groovy可以编译成class运行。 Groovy作为前端是没有什么效率问题的。 我经历过的大多数效率都是在数据库这端。

Grails这个框架有"玩具"的嫌疑,Groovy可不是!!
看来Groovy受到了Grails的负面影响了啊^_^

相关推荐

Global site tag (gtag.js) - Google Analytics