【问题标题】:Redeploying Java EE applications immediately立即重新部署 Java EE 应用程序
【发布时间】:2011-10-14 10:57:12
【问题描述】:

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

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

在 Netbeans 中,在保存时部署,根据以下屏幕截图似乎已启用,但单击/取消单击是不可能的,因为它声称从我的 pom.xml 中获取信息(尽管我的 pom.xml 中没有这样的字段) 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

【问题讨论】:

    标签: jakarta-ee netbeans jrebel hotdeploy


    【解决方案1】:

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

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

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

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

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

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

    编辑:经过一番思考,我认为所谓的增量部署不是一种不同的部署方式,只是第二次Run 应用程序执行增量部署.

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          【解决方案4】:

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

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

          【讨论】:

          • “应用代码更改”是热插拔。如果您要更改类签名,它将不起作用。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-02-03
          • 2011-06-17
          • 2015-02-14
          • 2016-02-16
          • 1970-01-01
          • 2014-05-23
          相关资源
          最近更新 更多