我正在开发一个Java EE应用程序,在开发期间我需要在本地的JBoss安装中反复部署应用程序。我想通过热部署将我的应用程序直接部署到[JBOSS]/server/default/deploy/myApp,以加快构建速度。
它似乎可以工作,但是在硬部署之后,JBoss开始使用新类之前会有一些随意的延迟。我对JBoss不是很熟悉,但我假设它缓存类,并且这就是问题的原因。
我是否正确?如果是,则如何使JBoss清除其缓存?
我正在开发一个Java EE应用程序,在开发期间我需要在本地的JBoss安装中反复部署应用程序。我想通过热部署将我的应用程序直接部署到[JBOSS]/server/default/deploy/myApp,以加快构建速度。
它似乎可以工作,但是在硬部署之后,JBoss开始使用新类之前会有一些随意的延迟。我对JBoss不是很熟悉,但我假设它缓存类,并且这就是问题的原因。
我是否正确?如果是,则如何使JBoss清除其缓存?
我在我的捆绑包中也遇到了同样的问题:(Eclipse IDE + JBoss服务器适配器)+ JBoss AS 7.0.1(社区项目)。
我的解决方案非常简单-您应该转到JBoss管理面板(默认情况下是localhost:9990),在配置文件设置中打开“Core - Deployment Scanners”。 打开Autodeploy-Exploded(设置为true),并根据需要设置扫描时间(默认为5000 ms)以适合您的需求(我将其设置为2000,以便在进行项目更改时在Eclipse中进行更快速的增量发布)。就这样。现在,JBoss不仅可以对HTML(JSF,XHTML等)文件进行HOT部署,还可以处理POJO类(bean等)文件。
这只是我的个人看法:
Cold deployment(冷部署)是在停止应用程序(或整个服务器)后,安装新版本,最后重新启动应用程序(或整个服务器)的部署方式。它适合官方生产部署,但在开发过程中执行该操作速度非常慢,如果你采用这种方式,就忘记快速开发吧。
Auto deployment(自动部署)是服务器定期重新扫描新的EAR/WAR并在幕后自动为您部署它的能力,或者是IDE(Eclipse)在源代码更改时自动部署整个应用程序。JBoss可以做到这一点,但JBoss的营销部门错误地称之为“hot deployment(热部署)”。与冷部署相比,自动部署不太慢,但与热部署相比仍然很慢。
Hot deployment(热部署)是能够实现在 "as you type" 的幕后部署能力。当您进行更改时,无需重新部署整个应用程序,只需要部署更改即可。您更改一个Java源代码,Voila!它已经在运行了。您甚至没有注意到它在部署。JBoss无法做到这一点,除非您购买JRebel(或类似产品),但这对我而言太昂贵。
现在是我的“推销”:D
开发时使用Tomcat怎么样?免费提供完全的hot deployment(热部署)... 我在开发过程中经常使用它,然后在WebSphere、JBoss或Weblogic上进行部署。别误会,这三个用于生产效果很好,但在本地机器上进行快速开发实在太慢了。如果您一整天都使用这三个工具,开发生产力就会受到影响。
根据我的经验,我不再使用WebSphere、JBoss和Weblogic进行快速开发。当然,我仍然在本地环境中安装它们,但只是为了需要运行的偶尔测试。我没有为JRebel付款,同时还获得了快速开发速度。我提到Tomcat与JBoss完全兼容了吗?
Tomcat是免费的,不仅具有自动部署,还支持即时热部署(Java代码、JSP、JSF、XHTML),而且在Eclipse中输入时,即时部署也很方便(没错,你没看错)。MYKong在一个页面上(https://www.mkyong.com/eclipse/how-to-configure-hot-deploy-in-eclipse/)详细介绍了如何设置它。
您喜欢我的推销吗?
干杯!
热部署仅对应用程序的静态部分(jsf、xhtml等)的更改稳定。
以下是根据 JBoss AS 7.1.1.Final 的一个可行解决方案:
.war
文件夹中),并使用文本编辑器(例如Notepad++)打开它。完成后,请不要忘记将这些更改复制到实际的开发环境中,重新构建和部署。
在使用Eclipse Mars和WildFly 11时这对我很有帮助。双击Servers下的WildFly服务器以打开配置页面。在概述选项卡中-> 发布,选择“当资源更改时自动发布”并将间隔设置为1。接下来,在概述选项卡中-> 应用程序重新加载行为,取消选中使用默认模式并将模式设置为\.jar$|\.class$
。在部署选项卡中,取消选中将项目部署为压缩档案。希望这可以帮到您。
我曾经遇到过同样的问题,但现在我认为我已经控制住了。
你是使用eclipse还是命令行或其他方式?
当我使用命令行时,我想我执行了"seam clean"或"seam undeploy",甚至可能是"seam restart",然后再执行"seam explode"。我可能在不同的时间尝试了所有这些操作,从未费心去查找每个操作的含义。
关键是要从两个位置删除已部署的war文件。
1. $JBOSS_HOME/server/default/deploy
2. $PROJECT_HOME/exploded_archives
我相信"seam undeploy"会删除第一个,而"seam clean"则会删除第二个。
当我使用eclipse(我使用的是免费版)时,我首先关闭"Project/Build Automatically"。然后当我准备部署时,我会执行Project/Build Project或Project/Build All,具体取决于我所做的更改。当我更改xhtml时,Build Project就足够了。当我更改java源代码时,Build All就可以了。可能这些操作是相同的,只是我自己想象出了不同之处,但是这些操作的某种组合方式一定适用于您。
但是您必须注意输出。有时应用程序没有被清理或卸载。这将导致您看不到更改。有时我会先关闭服务器,然后重新构建/清理/部署项目。
希望这可以帮助您。
TDR
我在链接上找到了解决方案:
步骤如下:
当我修改一个页面(网页)后,我进行更新并刷新网页浏览器:我的修改都会出现。我已经配置了 Jboss 进行自动扫描(不确定是否有帮助)。
<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>
<property name="scanPeriod">2000</property>
然后,在你的web.xml文件中:
<context-param>
<param-name>facelets.DEVELOPMENT</param-name>
<param-value>true</param-value>
</context-param>
<context-param>
<param-name>facelets.REFRESH_PERIOD</param-name>
<param-value>0</param-value>
</context-param>
<context-param>
<param-name>org.jboss.seam.core.init.debug</param-name>
<param-value>true</param-value>
</context-param>