Java 企業應用 (EAR) 在 JBoss AS 中的快速重部署

來到新公司就一直有這個問題。由於現產品的軟件部分的最終形式是 EAR 包,開發人員在平常工做中即使作了一個很小的改動也要從新打一個 EAR 包部署的 JBoss 中。由於項目規模不小,因此整個打包部署的時間很長,嚴重影響了開發的效率。 服務器

曾經考慮過下面幾個解決方法: app

  1. JRebel
          從 JRebel 的介紹來看,這個東西很強大,很炫。拋開它商業軟件的性質不談(固然國內小公司的開發人員不受此條限制),由於它是基於類生成技術,就是沒當代碼有變化,JRebel 就會基於今生成新的類,再由JRebel 的類去調用,從而實現熱部署。這種方式有幾個問題:(1) 由於 JVM 的 ClassLoader 一旦加載類就沒法卸載,致使 JRebel 的這種熱部署方式加載的類會愈來愈多,致使內存問題;(2) 使用 JRebel 以後,由於實際應用中的類是 JRebel 生成的,對反射和代碼調試都會有一些影響。在一個複雜的應用中,這些問題都會被放大,因此 JRebel 就不考慮了。
  2. OSGi
          OSGi 是爲動態模塊化而生的,因此使用 OSGi 以後,在應用的部署上也能夠實現真正的模塊化。但問題有兩個,因爲 OSGi 的技術複雜性,對整個團隊要求都很高。並且使用 OSGi 改造已有項目,各項成本都很高
  3. SOA
          和 OSGi 的相同點是改動太大

因此,上面三個選項都被否認了,可行的解決方法就是在應用服務器方面動腦筋了。由於咱們用的是 JBoss(仍是 4.x,很丟人的說)。因此就研究 JBoss AS 了。 dom

經過讀 JBoss AS 的文檔,發現最新的 JBoss AS 7.x 支持兩種部署格式,一個是 zipped,另外一種是 unzipped。前者指的就是常見的 war、ear 包,還有不常見的 sar 包,後者指的就是文件夾形式,可是文件夾名要帶上 .war/ear 的後綴。 模塊化

JBoss AS 默認的部署目錄是 %AS%/standalone/deployments。在默認配置下,zipped 和 unzipped 這兩個格式的應用放到部署目錄中就能夠直接部署了。可是在重部署時,默認配置下只有 zipped 格式的可以自動生效。要想 JBoss AS 也支持 unzipped 格式的自動重部署,必須修改  %AS%/standalone/configuration/standalone.xml 。具體的修改以下: spa

<subsystem xmlns="urn:jboss:domain:deployment-scanner:1.1">
    <deployment-scanner path="deployments" relative-to="jboss.server.base.dir" scan-interval="5000" auto-deploy-exploded="true"/>
</subsystem>

auto- deploy-exploded 爲要添加的內容。(你也能夠修改 scan-interval 提升加載速度) 調試

在作了上面這個簡單的配置以後,你就能夠直接修改 EAR ( or WAR) 裏面的內容了。編輯某個模塊的代碼,而後只需將相應模塊打包,直接替換 your_app.ear 中相應的 jar 包,等上幾秒,而後就生效了。不用再像過去那樣生成完整的 EAR 包再部署了。 code

相關文章
相關標籤/搜索