我是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(仅依赖项))。
现在,对某些文件的更改似乎立即生效。这些包括: - 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
答案 0 :(得分:5)
我发现既没有可靠的也没有官方消息来源,但由于你没有答案,我想指出我发现的两件事。
NetBeans网站上的第一个是this FAQ,描述了如何为Maven项目保存编译。默认情况下,此设置似乎处于关闭状态,默认情况下仅适用于测试。为方便起见:
转到项目属性对话框编译面板,将其打开以进行主要源代码执行。
第二个是,我必须强调,我并不完全理解这一点,NetBeans部署Web应用程序似乎有两种不同的方式。第一种方式是就地部署,看起来与手动将.war
文件部署到服务器相同。第二个是增量部署,如果它类似于增量编译,则意味着当您的应用程序进行热部署时,您只需部署更改的文件。
当您从项目的上下文菜单中单击Run
或Deploy
时,就地部署似乎是默认的部署方法。增量部署在您的项目已部署并再次单击Run
(或使用Run
工具栏按钮)时发生。
我想指出NetBeans FAQ,虽然在netbeans.org网站上不是官方出版物。任何人都可以创建一个常见问题解答,这些信息可以并且将在没有修订的情况下过时。
编辑:经过一番反思后,我决定所谓的增量部署不是一种不同的部署方式,只是第二次你Run
你的应用程序它做了一个增量部署。
修改:请注意,上述说明指向Compile
面板,而不是您在屏幕截图中选择的Run
面板。这是我的屏幕截图,显示您需要在for both application and test execution
面板下拉列表中选择Compile
,默认为for test execution only
答案 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是请求作用域,它大部分时间都有效。我认为这可以手动编译保存,但它比重新部署更好。