10

我对 Java EE 很陌生,一直在为部署过程的缓慢而苦苦挣扎,想知道我是否做错了什么。我对 Django 有经验,其中代码的更改会立即发生,而且热部署 Java EE 应用程序似乎有点令人困惑——有多种东西声称可以热部署(Glassfish、Eclipse manic hotdeploy、Jetty hotdeploy、JRebel 等。 )。

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

在 Netbeans 中,根据以下屏幕截图,在保存时部署似乎已启用,但单击/取消单击是不可能的,因为它声称从我的 pom.xml 中获取信息(尽管我的 pom.xml 中没有这样的字段(仅依赖))。 在此处输入图像描述

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

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

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

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

我可以做些什么来解决这些问题,或者在 Java EE 中每次更改任何 Java 文件后等待大约 1 分钟是正常的吗?这个问题会显着降低生产力。

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

4

4 回答 4

5

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

第一个是NetBeans 站点上的这个常见问题解答,描述了如何为 Maven 项目打开保存时编译。似乎此设置默认关闭,仅默认打开用于测试。为了方便:

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

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

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

我想指出 NetBeans 常见问题解答,尽管在 netbeans.org 网站上不是官方出版物。任何人都可以创建一个常见问题解答,并且该信息可以并且将会在没有修改的情况下变得过时。

编辑:经过一番反思,我决定所谓的增量部署不是一种不同的部署方式,它只是在您Run的应用程序第二次执行增量部署时。

编辑:请注意,上面的说明将您指向Compile面板,而不是Run您在屏幕截图中选择的面板。这是我的屏幕截图,显示您需要for both application and test executionCompile面板下拉菜单中进行选择,默认为for test execution only

编译面板下拉

于 2011-10-20T19:40:50.673 回答
2

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

于 2011-12-17T18:22:47.350 回答
1

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

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

于 2013-11-08T13:43:37.027 回答
0

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

这对于应用 Java 代码更改很有用;它不是每次都有效,但我认为如果更改不是方法添加并且 bean 是请求范围的,它在大多数情况下都有效。我认为这可以手动进行保存时编译,但它比重新部署要好。

应用代码更改

于 2011-11-15T16:23:45.397 回答