巨大的EAR部署

时间:2009-10-14 16:11:18

标签: java-ee ear

我正在试图弄清楚如何通过相当慢的VPN连接将巨大的(40-50 MB)EAR文件部署到服务器。 EAR包含在Glassfish中创建的EJB和WAR项目,90%的文件大小来自使用的外部依赖库。

  1. 有没有人提出从Netbeans优雅部署到生产系统的策略,其中部署(通过网络)仅针对真正需要的内容(即仅一个WAR,而不是整个EAR,或者只有一个lib,而不是整个库子项目。

  2. 与第一点相关,如何将外部依赖库与Netbeans中的项目分开,以便项目在开发机器上编译,但是当创建EAR / WAR / EJB时,它不包含所有依赖项JAR ,这使它变得巨大。

  3. 也许我们需要编写自定义的ant脚本?开始使用maven?

    谢谢大家的回答,

    博若

3 个答案:

答案 0 :(得分:4)

这就是为什么将您的依赖项移出EAR并进入共享目录是一个坏主意:通过保留EAR中的所有依赖项,app-server能够干净地取消部署/重新部署该EAR并回收它的空间在JVM堆中使用(对于Sun JVM,permgen)。如果将某些依赖项移动到共享库中,则存在这些依赖项将维护对EAR中定义的某个对象的硬引用的风险。这意味着无法删除EAR类,最终您的app-server将在耗尽permgen空间后崩溃。

我建议使用SSH,假设“VPN”是指Windows SMB,它在复制文件时有很多来回通信。使用SSH(或更准确地说,SCP或RSYNC),您可以使用连接的全部带宽。

如果这仍然太慢,您应该考虑更改基础架构。由于VPN对我来说意味着公司网络,也许您可​​以在与部署计算机相同的网段上设置构建计算机。从流程的角度来看,无论如何,这是一个更好的想法:您不应该从开发人员工作站部署构建。相反,您应该将源检出到干净的环境中,进行构建,运行测试,然后进行部署。

另一种方法是查看您的特定app-serve是否支持“爆炸的耳朵” - 如果是,那么您只需上传已更改的JAR。

答案 1 :(得分:1)

合理的方法可能是在本地构建您的EAR,然后使用rsync镜像文件,然后触发重新部署。由于如果底层jar没有改变,EAR文件的大多数部分都不会改变,你将从rsync算法中获得很大的好处。

答案 2 :(得分:0)

为什么不将库jar复制到/ glassfish安装目录/ glassfish / domains / domain1 / lib并且不要将它们打包到你的ear文件中?