在JBoss上进行热部署 - 如何让JBoss“看到”这一变化?

时间:2009-06-09 10:34:50

标签: deployment jboss java-ee

我正在开发一个Java EE应用程序,我在开发期间在本地JBoss安装上反复部署。我希望通过将我的应用程序直接热部署到[JBOSS] / server / default / deploy / myApp

来加速构建

它似乎有效 - 但是在硬部署和JBoss开始使用新类之间似乎也有一些任意的延迟。我对JBoss不太熟悉,但我认为它会缓存类,这就是导致问题的原因。

我是否正确,如果是的话,我如何让JBoss刷新它的缓存?

16 个答案:

答案 0 :(得分:108)

我的捆绑包中遇到了同样的问题:( Eclipse IDE + JBoss服务器适配器)+ JBoss AS 7.0.1(社区项目)。

我的解决方案非常简单 - 您应该转到JBoss管理面板(默认为localhost:9990),在配置文件设置中打开Core - Deployment Scanners。打开Autodeploy-Exploded(设置为true),根据您的意愿,您可以设置扫描时间(默认为5000毫秒)以适合您(我设置为2000,以便在我对项目进行更改时在Eclipse中进行更快速的增量发布) 。而已。现在JBoss不仅为HTML(JSF,XHTML等)文件进行HOT部署,还负责处理POJO类(bean等)文件。

答案 1 :(得分:8)

不幸的是,这并不容易。在JBoss的幕后有更复杂的事情(大多数是与ClassLoader相关的)会阻止你热插入你的应用程序。

例如,如果您的某些班级签名发生变化,您将无法进行热交付。

到目前为止,使用MyEclipse IDE(Eclipse的付费分发版)是我发现的唯一能够非常成功地进行热部署的东西。但不是100%的准确性。但肯定比JBoss Tools,Netbeans或任何其他基于Eclipse的解决方案更好。

如果你想看一下,我一直在寻找免费工具来完成你在StackOverflow中asking人所描述的内容。

答案 2 :(得分:6)

你应该试试JRebel,它可以很好地进行热部署。有点贵,但物有所值。他们有试用版。

答案 3 :(得分:2)

热部署仅对应用程序的静态部分(jsf,xhtml等)的更改是稳定的。

这是一个有效的解决方案,根据 JBoss AS 7.1.1.Final

  • 构建项目。
  • 导航到[JBOSS_HOME] / standalone / tmp / vfs。
  • 打开最近修改的名为&#34的文件夹;部署[some_alphanumeric_values]",即" deployment344b1c870c8edbd"。
  • 导航到您要编辑的特定视图(通常,这包含在打包的{{1}中用文本编辑器(即Notepad ++)打开它。
  • 进行所需的更改并保存文件。
  • 刷新浏览器上的相应页面。现在可以看到更改。
  • 完成后,不要忘记将这些更改复制到您的实际开发环境中,重建并重新部署。

    答案 4 :(得分:2)

    只是我的两分钱:

    • 冷部署是在停止(或停止整个服务器)时部署应用程序的方式,然后安装新版本,最后重新启动应用程序(或启动整个服务器)。它适用于官方生产部署,但在开发过程中这样做会很慢。如果你这样做,请忘记快速发展。

    • 自动部署是服务器必须定期为新EAR / WAR重新扫描并在幕后为您自动部署它,或者为IDE(Eclipse)自动部署它的能力在对源代码进行更改时,自动部署整个应用程序。 JBoss做到了这一点,但JBoss的营销部门称之为误导性的" 热部署"。与冷部署相比,自动部署的速度并不慢,但与热部署相比,速度非常慢。

    • 热门部署是您在键入"时可以在幕后部署" 的功能。进行更改时无需重新部署整个应用程序。热部署部署更改。你改变了一个Java源代码,瞧!它已经运行了。你从来没有注意到它正在部署它。 JBoss不能这样做,除非你买JRebel(或类似的),但这对我来说太多了(我便宜)。

    现在我的销售宣传" :d

    在开发过程中使用 Tomcat 怎么样?全天配备热部署 ...免费。我在开发期间一直这样做,然后在WebSphere,JBoss或Weblogic上部署。不要误会我的意思,这三个对于生产很有帮助,但对于本地机器的快速开发来说真的很棒。如果你整天使用这三种产品,开发效率会下降。

    根据我的经验,我停止使用WebSphere,JBoss和Weblogic进行快速开发。我仍然将它们安装在我的本地环境中,但仅限于我可能需要运行的偶尔测试。在我获得极佳的开发速度的同时,我不会为JRebel付费。我是否提到Tomcat与JBoss完全兼容?

    Tomcat是免费的,不仅可以自动部署,还可以在Eclipse中键入REAL热部署(Java代码,JSP,JSF,XHTML)(是的,您阅读良好)。 MYKong有一个页面(https://www.mkyong.com/eclipse/how-to-configure-hot-deploy-in-eclipse/),详细说明了如何设置它。

    你喜欢我的销售宣传吗?

    干杯!

    答案 5 :(得分:1)

    我遇到了同样的问题,但我想我现在已经掌控了它。

    您使用的是eclipse或命令行还是??

    当我使用命令行时,我认为我做了“缝合干净”或“接缝取消部署”,或者甚至可能是“缝线重启”,然后是“接缝爆炸”。我可能曾经一次尝试过所有这些,从不打扰每个人做什么。

    我们的想法是从两个地方删除已部署的war文件

    1. $JBOSS_HOME/server/default/deploy
    2. $PROJECT_HOME/exploded_archives
    

    我很确定“缝合取消部署”会移除第一个并且“缝隙清理”会移除第二个。

    当我使用eclipse(我使用免费的)时,我首先关闭“Project / Build Automatically” 然后,当我准备好部署时,我会根据我改变的内容执行Project / Build Project或Project / Build All。当我更改xhtml时,Build Project就足够了。当我改变java源代码Build All工作。它们可能会做同样的事情而且差异在我的想象中,但这些东西的某些组合对你有用。

    你必须观察输出。有时候应用程序不会被清理或取消部署。这将导致您无法看到您的更改。有时我先关闭服务器,然后重建/清理/部署项目。

    希望这有帮助。

    TDR

    答案 6 :(得分:1)

    link上找到解决方案:

    怎么做:

    1. 配置爆炸战争工件以扩展.war
    2. 将爆炸工件部署到WildFly或Jboss
    3. 配置IntelliJ以更新更新操作上的资源
    4. 当我修改页面(网页)时,我会更新,当我刷新网页浏览器时:我的mod就在那里。 我确实为自动扫描配置了Jboss(不确定它确实有帮助)

    答案 7 :(得分:0)

    实际上我的问题是命令行mvn实用程序由于某种原因不会看到更改。我打开了部署扫描程序中的自动部署,但仍然没有区别。但是......我在Eclipse环境中徘徊,因为我为它的Servers窗口添加了一个JBoss服务器,我发现我能够在我的工作区中“添加或删除...”模块。每当我对代码进行更改时添加项目,部署扫描程序检测到代码更改,JBoss就会通过更新代码的循环!像魅力一样。

    以下是设置此步骤所需的步骤;

    首先,如果您还没有这样做,请使用File-> New-> Other-> Server将您的JBoss服务器添加到Eclipse中,然后通过添加JBoss AS 7服务器的动作。确保找到您正在使用的目录。

    添加后,向下看Eclipse附近的“Servers”选项卡。你应该看到你的JBoss服务器。突出显示它并查找“添加或删除...”。从那里你应该看到你的项目。

    添加后,对代码进行一些小改动,然后观察JBoss为您进行热点部署。

    答案 8 :(得分:0)

    我一直在用Eclipse和Wildfly开发一个项目,由于部署了我在应用程序中需要的所有第三方库,爆炸的EAR文件变得越来越大。我将部署指向我的Maven存储库,我猜每次都会重新复制这些存储库。因此,当我在服务层更改Java代码时重新部署应用程序变成了一场噩梦。

    然后转向Hotswap代理,这对于在不重新部署应用程序的情况下看到EJB代码的更改有很大帮助。

    但是我最近升级到Wildfly 10,Java 8和JBoss Developer Studio 10,在此过程中我花时间移动所有第三方应用程序jar,例如进入Wildfly模块的主要部分,我从部署配置中删除了我的Maven repo。现在重新部署整个应用程序,这是一个非常大的应用程序,只需几秒钟,它比以前快得多。我甚至觉得不需要安装Hotswap,也不想冒任何风险。

    因此,如果您使用Wildfly在Eclipse下构建,那么使用Wildfly模块让您的应用程序远离第三方库,您将会更好。

    答案 9 :(得分:0)

    Netbeans 8.02和8.1 IDE和JBOSS EAP 6.4的解决方案:

    1. 从Netbeans的服务选项卡中,将JBOSS服务器添加到“服务器”节点。
    2. 如果您使用的是MAVEN,netbeans会将文件和maven复制文件编译到./target目录。您需要创建从。\ target到JBOSS_HOME \ standalone \ deployments的符号链接。在windows下,一个示例命令是

      cd %JBOSS_HOME%\standalone\deployments mklink /d MyWebApplication.war %PROJECTS_HOME%\MyWebApplication\target\MyWebApplication-1.0.0

      以上创建了从%JBOSS_HOME%\standalone\deployments\MyWebApplication.war\target\MyWebApplication-1.0.0的符号链接,maven在编译后或jsp,html或任何其他文件更改后传输所有文件。

    3. 最后要考虑的是在%JBOSS_HOME%\ standalone \ deployments中创建一个CentralManagement.war.dodeploy文件。该文件将告诉JBOSS将war“文件”部署为Web应用程序

    答案 10 :(得分:0)

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

    答案 11 :(得分:0)

    我正在使用 JBoss AS 7.1.1.Final 。在我的web.xml中添加以下代码片段有助于我动态更改jsp文件:

    <servlet>
        <servlet-name>jsp</servlet-name>
        <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
        <init-param>
            <param-name>development</param-name>
            <param-value>true</param-value>
        </init-param>
        <load-on-startup>3</load-on-startup>
    </servlet>
    

    希望这会有所帮助。!!

    答案 12 :(得分:0)

    将应用程序部署为爆炸(project.war文件夹),添加到您的web.xml:

    <web-app>
        <context-param>
            <param-name>org.jboss.weld.development</param-name>
            <param-value>true</param-value>
        </context-param>
    

    每次部署时更新web.xml时间(追加空白行):

    set PRJ_HOME=C:\Temp2\MyProject\src\main\webapp
    set PRJ_CLSS_HOME=%PRJ_HOME%\WEB-INF\classes\com\myProject
    
    set JBOSS_HOME= C:\Java\jboss-4.2.3.GA-jdk6\server\default\deploy\MyProject.war
    set JBOSS_CLSS_HOME= %JBOSS_HOME%\WEB-INF\classes\com\myProject
    
    copy %PRJ_CLSS_HOME%\frontend\actions\profile\ProfileAction.class %JBOSS_CLSS_HOME%\frontend\actions\profile\ProfileAction.class
    copy %PRJ_CLSS_HOME%\frontend\actions\profile\AjaxAction.class %JBOSS_CLSS_HOME%\frontend\actions\profile\AjaxAction.class
    
    ECHO.>>%JBOSS_HOME%\WEB-INF\web.xml
    

    答案 13 :(得分:0)

    这适用于Eclipse Mars和WildFly 11.在服务器下双击WildFly服务器以打开配置页面。在概述标签中 - &gt;发布,选择“资源更改时自动发布”并将间隔设置为1.接下来,“概述”选项卡 - &gt;应用程序重新加载行为,取消选中使用默认模式并将模式设置为\.jar$|\.class$。在“部署”选项卡中,取消选中“将项目部署为压缩存档”。希望这会有所帮助。

    答案 14 :(得分:0)

    如果您正在使用Eclipse IDE,则有一个免费插件Manik-Hotdeploy

    此插件可让您将Eclipse工作区与wildfly部署文件夹连接。完成Maven构建后,您的工件(例如战争或耳朵)将被自动推送到服务器的部署文件夹中。网络内容文件(例如.xhtml .jsf ...)也将被热部署。

    该插件可用于野蝇,玻璃鱼和payara。

    阅读JBoss/Wildfly Support部分以了解更多详细信息。

    答案 15 :(得分:-6)

    使用Ant脚本并进行目标部署。

    部署目标应该:

    1. 停止JBoss
    2. 将ear或war复制到deploy目录
    3. 启动JBoss
    4. ==&GT;在测试期间进行后续部署后,没有缓存+也没有内存不足问题。