Eclipse Kepler 和 JBoss Wildfly 热部署

Posted

技术标签:

【中文标题】Eclipse Kepler 和 JBoss Wildfly 热部署【英文标题】:Eclipse Kepler and JBoss Wildfly hot deployment 【发布时间】:2013-12-11 08:34:31 【问题描述】:

我正在尝试将 eclipse kepler 用于 Java EE 7。我已经安装了 JBoss Tools 并成功添加了 JBoss Wildfly 作为服务器。但是,我的更改不会自动部署。无论如何,该应用程序是否可以像使用 glassfish 时一样自动部署?

【问题讨论】:

【参考方案1】:

使用 Eclipse,在您的 WildFly 服务器上单击两次以编辑以下属性:

    发布:选择“构建事件后自动发布”。我也喜欢将发布间隔更改为 1 秒。 Application Reload Behavior:选中“Customize application reload ...”复选框并将正则表达式模式编辑为\.jar$|\.class$

就是这样。祝你好运!

【讨论】:

+1 但不幸的是第二个选项有严重的缺点:整个应用程序状态丢失。 让它对我有用的一件事:不要部署为压缩文件。在 eclipse Wildfly 属性中,不要选中“将项目部署为压缩档案”选项【参考方案2】:

@varantes 和@Sean 基本上都是正确的,但这些答案并不完整。

不幸的是,在 Java 服务器环境中实现完整、零停机的热部署的唯一方法是使用付费的JRebel 或免费的spring-loaded 工具。

但是对于小型项目,有一些方法可以通过部分热部署来加速工作。本质上:

    启用选项资源更改时自动发布 然后*.html*.xhtml 文件内部的更改立即 刷新浏览器后立即反映。 要使*.jsp 文件的热部署也能工作,那么你应该 在 $wildfly-home/standalone/configuration/standalone.xml 进行以下更改:<jsp-config/> 替换为:<jsp-config development="true"/>

重启服务器,享受网络文件的热部署。


但是在修改*.java源文件时,只能进行部分热部署。正如@varantes 在他的回答中所说,启用 Application Reload Behavior 并将正则表达式模式设置为 \.jar$|\.class$ 是一种选择,但有严重的缺点:重新启动整个模块,因此:

    这需要一些时间(取决于模块的大小)。 整个应用程序状态丢失。

因此,我个人不赞成这种解决方案。 JVM 支持(在调试模式下)方法主体的代码交换。因此,只要您只修改现有方法的主体,您就在家(零停机时间,更改会立即反映)。但是你必须在服务器设置中禁用自动发布,否则应用程序的状态仍然会被重新发布破坏。

但是,如果您正在大量编写 Java 代码(添加类、注释、构造函数),那么不幸的是,我只能建议将发布设置为 从不自动发布(或关闭服务器),并且当您完成工作时Java 文件,然后手动重新启动您的模块(或打开服务器)。由你决定。


它适用于小型 Java 项目,但对于较大的项目,JRebel 是无价的(或只是弹簧加载的),因为上述所有方法都不够用。也因为这样的问题,解决方案像 Rails/ Django /Play!框架获得了如此巨大的人气。

【讨论】:

即使玩游戏!框架,如果项目发展到相当大的规模,你会再次遇到同样的问题。 @AntonArhipov 我不明白为什么。你的意思是代码热替换的问题?我不这么认为(尽管从未见过这么大的 Play! 项目)。还是您的意思是长时间启动? 具体来说,热代码替换。我在 JRebel 团队(记录在案),我们从未考虑过为那些花哨的框架实现 JRebel 支持。但现在用户开始越来越多地询问支持 - 应用程序变大并且原生框架重新加载跟不上。 @G.Demecki 这是你帮助我的两倍。我刚刚找到了这个答案,并意识到我之前已经找到并支持了它!抱歉,我不能两次投票给你 :) 谢谢!【参考方案3】:

我假设您使用的是最新版本的 Wildfly(截至撰写时为 8.0 Beta 1)。

在standalone.xml 配置文件中,查找。添加属性 development="true" 并且它应该热部署。生成的配置将如下所示:

<jsp-config development="true"/>

【讨论】:

嗨@Sean 我这样做了,但是当我更改了 java 源文件时,我没有注意到更改。但是,如果我更改一个 xhtml,它就会被反映。【参考方案4】:

在 xPath = //servlet-container/jsp-config/ 的配置文件中添加属性(开发、检查间隔、修改测试间隔、失败时重新编译)

<servlet-container name="default" default-buffer-cache="default" stack-trace-on-error="local-only">
    <jsp-config development="true" check-interval="1" modification-test-interval="1" recompile-on-fail="true"/>
</servlet-container>

(适用于 WildFly-8.0.0.Final)

【讨论】:

【参考方案5】:

以调试模式启动服务器,它将跟踪方法内的机会。其他更改它会要求重新启动服务器。

【讨论】:

以上是关于Eclipse Kepler 和 JBoss Wildfly 热部署的主要内容,如果未能解决你的问题,请参考以下文章

eclipse通过hibernate tools逆向工程生成hbm.xml和实体类

学习Hibernate之Eclipse安装hibernate tools插件

IBM Worklight 6.0 - 在 Eclipse 4.3“Kepler”上安装失败

IBM Worklight 6.0 - 在 Eclipse 4.3 “Kepler”上安装失败

打开 Marketplace 时 Eclipse Kepler 崩溃

Eclipse Kepler中的XML编辑器不显示颜色