2012年7月14日 星期六

Run-Jetty-Run加DCEVM改程式免重啟

Run Jetty Run:
http://code.google.com/p/run-jetty-run/
DCEVM:
http://ssw.jku.at/dcevm/

Run-Jetty-Run plug-in目前是由國內的TonyQ接手開發
DCEVM是奧地利的Thomas Wuerthinger開發
(現在好像是Oracle工程師 https://labs.oracle.com/people/wuerthinger)
小弟我也是聽了TonyQ的演講才知道有這兩個好物
如果您的系統有用到xerces.jar,因為會和Jetty衝到,需要把您系統的xerces.jar移除掉
否則AP啟動時會有以下錯誤訊息 java.lang.AbstractMethodError: org.apache.xerces.dom.DeferredDocumentImpl.set DocumentURI(Ljava/lang/String;)V
找到一篇文章說也可以在JVM啟動時加以下參數(我沒試過)
-Djavax.xml.parsers.DocumentBuilderFactory= com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl
( http://blog.chenlb.com/2010/11/abstract-method-error-xerces.html )
另外asm、cglib也要換成新的版本 ( http://tinyurl.com/7kntkdh )
目前試的結果要用Debug As啟動才能hot-deploy
google一下好像這種hotswap的技術好像只能用在JVM啟動時是debug mode?
試了一下JAVA和JSP修改都不用重啟就可以看到結果
如果Eclipse是搭配Tomcat去跑,Publishing要設定成Never publishing automatically
另外,我本來把DCEVM裝在JDK 7失敗,改用JDK 6就OK,沒在試其他JDK 7
DCEVM官方並不建議用在Production
除了DCEVM外,有些人是用JRebel
DCEVM是從VM層下手,JRebel是從ClassLoader下手,理論上DCEVM效能會比較好
小弟我也沒用過JRebel,無法實際比較
一點心得分享

P.S.如果對DCEVM的運作原理了解更多,可以看以下討論串
http://old.nabble.com/Enhanced-Class-Redefinition-JEP-td32152317.html

1 則留言:

  1. 今天有機會試了xml,果然是要重啟才生效~~~
    如果是jar的修改應該也要重啟吧??
    都是ClassLoader啟動載入的東西
    下次有機會再來試jar

    回覆刪除