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

原创
2013/08/01 15:20
阅读数 2K

来到新公司就一直有这个问题。因为现产品的软件部分的最终形式是 EAR 包,开发人员在日常工作中即便做了一个很小的改动也要重新打一个 EAR 包部署的 JBoss 中。因为项目规模不小,所以整个打包部署的时间很长,严重影响了开发的效率。

曾经考虑过下面几个解决方法:

  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 了。

通过读 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 。具体的修改如下:

<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 包再部署了。

展开阅读全文
打赏
1
9 收藏
分享
加载中
更多评论
打赏
0 评论
9 收藏
1
分享
返回顶部
顶部