立即重新部署Java EE应用程序

时间:2011-10-14 10:57:13

标签: java-ee netbeans jrebel hotdeploy

我是Java EE的新手,并且一直在努力解决部署过程的缓慢问题,并想知道我是否做错了什么。我对Django很有经验,其中代码的更改立即发生,似乎热部署Java EE应用程序有点令人困惑 - 有很多事情声称热部署(Glassfish,Eclipse manic hotdeploy,Jetty hotdeploy,JRebel等。 )。

我的项目是一个Maven项目,我正在使用Netbeans进行部署。该站点使用Spring,JSF和Hibernate框架。

在Netbeans中,Deploy on Save,根据以下屏幕截图似乎已启用,但点击/取消点击是不可能的,因为它声称从我的pom.xml获取信息(尽管我的pom中没有这样的字段。 xml(仅依赖项))。 enter image description here

现在,对某些文件的更改似乎立即生效。这些包括:   - JSF文件   - 静态文件

以下需要部署的更改:   - 任何XML文件   - 任何属性文件,甚至是本地化属性文件   - 任何java文件

对这些的更改要求我手动部署 并重新部署需要半分钟,即使我目前只有2-3个类,基本上只有一个用户类和一个授权类。该项目目前只允许登录,尽管如此,编译大约需要几秒钟;容器(Glassfish)似乎消耗了大约600 MB的RAM,甚至在几次部署后也会出现PermGen错误,我需要使用任务管理器来终止java进程。 (我已经读过这与每次重新部署后的垃圾收集器泄漏有关,我甚至使用jhat生成一个配置文件,但是提供了一个包含数千个类,我的类,Spring,Hibernate类等的列表。)

我也听说过jrebel,并尝试运行它,但似乎它与我的Netbeans版本(7.0)不兼容,即使它似乎运行,对任何java文件的任何修改仍然需要重新部署。

我可以采取哪些措施来解决这些问题,或者在每次更改任何Java文件后等待大约1分钟的Java EE中是否正常?这个问题严重影响了生产力。

以下是部署应用程序时的Glassfish输出:http://pastebin.com/7FhZ6AVh

4 个答案:

答案 0 :(得分:5)

我发现既没有可靠的也没有官方消息来源,但由于你没有答案,我想指出我发现的两件事。

NetBeans网站上的第一个是this FAQ,描述了如何为Maven项目保存编译。默认情况下,此设置似乎处于关闭状态,默认情况下仅适用于测试。为方便起见:

  

转到项目属性对话框编译面板,将其打开以进行主要源代码执行。

第二个是,我必须强调,我并不完全理解这一点,NetBeans部署Web应用程序似乎有两种不同的方式。第一种方式是就地部署,看起来与手动将.war文件部署到服务器相同。第二个是增量部署,如果它类似于增量编译,则意味着当您的应用程序进行热部署时,您只需部署更改的文件。

当您从项目的上下文菜单中单击RunDeploy时,就地部署似乎是默认的部署方法。增量部署在您的项目已部署并再次单击Run(或使用Run工具栏按钮)时发生。

我想指出NetBeans FAQ,虽然在netbeans.org网站上不是官方出版物。任何人都可以创建一个常见问题解答,这些信息可以并且将在没有修订的情况下过时。

编辑:经过一番反思后,我决定所谓的增量部署不是一种不同的部署方式,只是第二次你Run你的应用程序它做了一个增量部署。

修改:请注意,上述说明指向Compile面板,而不是您在屏幕截图中选择的Run面板。这是我的屏幕截图,显示您需要在for both application and test execution面板下拉列表中选择Compile,默认为for test execution only

Compile panel drop down

答案 1 :(得分:2)

JRebel与NetBeans 7.0兼容(http://plugins.netbeans.org/plugin/22254/jrebel-netbeans-plugin),实际上它与任何IDE兼容。

答案 2 :(得分:1)

这是来自NetBeans团队的Geertjan Wielenga的精彩视频,该团队介绍了如何在NetBeans 7.2.1和GlassFish 3.1.2上设置JRebel:

如何在NetBeans IDE中开始使用JRebel:http://www.youtube.com/watch?v=kveXKv2q4Ec

答案 3 :(得分:0)

“编译保存”对我来说减慢了很多东西,但我之后发现的另一件事是Netbeans中的“应用代码更改”按钮,这只在调试模式下可见。 (图片右侧的绿色按钮)

这对应用Java代码更改很有用;它每次都不起作用,但我认为如果更改不是方法添加并且bean是请求作用域,它大部分时间都有效。我认为这可以手动编译保存,但它比重新部署更好。

Apply Code Changes