2011-04-22 12 views
2

這是我第一次在這裏發表問題,我會盡量讓我的問題儘可能清楚。什麼是開發Java webapps最有效的方式?或者更具體地說,Wicket應用程序?

我嘗試找到開發Java webapps的最佳流程。經過試驗和錯誤的幾個月,我的Web開發環境是由由以下部分組成:

框架:阿帕奇檢票1.4.16
IDE:Eclipse的伽利略,與m2eclipse插件
構建工具:Maven的2
數據交通:2.1.1的EclipseLink通過JPA 2.0(含StaticWeave)
RDBMS:MSSQL 2005或以上JTDS
DI:谷歌吉斯2.0
開發Web容器:嵌入的Maven插件碼頭Jetty服務器。
目標web容器:Tomcat 6.x或更高版本

我使用maven Jetty插件來測試運行我的webapps,啓用JPDA,同時需要行精度跟蹤。

每當對源代碼進行更改時,我必須重新加載我的應用才能生效。按回車重新加載是好的,但經過多次重新加載(大約3~5取決於我的PermGen設置),OutOfMemoryException被拋出,比我不得不關閉並再次啓動我的應用程序。我知道自動重新加載可以通過配置來實現,但它只會導致OOME更快(由於重新加載過多)。

谷歌搜索後,我意識到有一些內存泄漏問題。我嘗試過放大MaxPermSize設置,但是我的裝備上的內存是有限的,而且設置一個非常大的內存是不合理的。順便說一句,內存泄漏檢測是在Tomcat 7中引入的,我發現大多數內存泄漏來自jTDS,Google Guice和Wicket本身,但我無能爲力。

我能做些什麼來加速我的發展進程嗎?爲了減少重新載入次數,我應該轉向更高級的Web容器,比如Glassfish(抱歉,我買不起WebLogic或WebSphere)或任何其他東西。

在此先感謝,歡迎任何評論!

+0

我使用JRebel(http://www.zeroturnaround.com/jrebel/),它確實有很大的幫助。我現在仍然需要重新啓動服務器,但大部分更改都是正常工作的。它非常適合像Wicket這樣以Java爲中心的框架。如果您可以使用「黑客」版本的JDK進行開發,您也可以嘗試DCEVM(http://ssw.jku.at/dcevm/)。 – tetsuo 2011-04-22 13:01:03

+0

OMG .... 我從來不知道之前有類似JRebel或DCEVM的東西! 我迫不及待地嘗試這些解決方案,但它是家庭週末! 非常感謝!我會在工作日檢查這些! – mickey 2011-04-22 13:57:02

+0

@tetsuo 順便說一句,爲什麼我不能將你的評論標記爲「答案」? – mickey 2011-04-22 15:49:45

回答

5

我使用JRebel,它確實有很大的幫助。我現在仍然需要重新啓動服務器,但大部分更改都是正常工作的。它非常適合像Wicket這樣以Java爲中心的框架。如果您可以使用「黑客」版本的JDK進行開發,那麼您也可以嘗試DCEVM

+0

對不起,我沒有足夠的聲望投票了這個答案。 我試過JRebel和DECVM,DECVM並不是一直都在工作,但JRebel很有用! 我第一次認爲第三方產品應該是官方聯合。 – mickey 2011-04-26 01:25:39

0

我有簡單的Jetty包裝在eclipse中啓動webapp。如果我在調試模式下啓動它,則除非更改方法簽名或字段名稱,否則不需要重新加載。不需要上下文重新加載。

import org.eclipse.jetty.server.Server; 
    import org.eclipse.jetty.webapp.WebAppContext; 

    public static void main(String[] args) { 
     Properties properties= ...//read properties from text file 
     Server server = new Server(properties.getPort()); 
     WebAppContext webapp = new WebAppContext(
       properties.getWebApplicationPath(), properties.getContextPath()); 
    server.start(); 
     //.... and here can be key capture for stopping Jetty 

    } 

其中properties.getWebApplicationPath()是./WebContent(或者某事不同,這取決於你的Maven項目結構)。

這不能解決在Tomcat中部署時的內存泄漏問題,但在開發過程中會非常有幫助。 我也使用Wicket和Guice,我沒有注意到內存泄漏。

+0

感謝您的回答,但方法簽名修改,甚至新類始終在開發週期中引入,似乎JRebel或DCEVM是更好的解決方案。 – mickey 2011-04-24 10:58:50

相關問題