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 配置文件中,查找
<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”上安装失败