【问题标题】:Hot deploy of JSF pages in NetBeans to JBoss standalone将 NetBeans 中的 JSF 页面热部署到独立的 JBoss
【发布时间】:2016-06-15 16:27:47
【问题描述】:

背景

设置如下:

  • 使用 Subversion 的多开发人员环境
  • NetBeans 8.0.2
  • JDK 1.7
  • Java EE6
  • JBoss 6.2 EAP 独立运行

我们可能不会更改工具;我们既不能使用 Maven 也不能使用 JRebel。硬件升级也不在范围内。

代码组织

源代码,包括与网络相关的文件,检出到:

C:\Apps\07-Work\Project\Project-Admin\Project-Admin-User-war\

这个目录包括一个通用的开发结构(粗体从存储库中检出):

  • 构建 - 编译文件
  • dist - .war 文件
  • nbproject - 项目文件
  • src - Java 源代码
  • web - JSF 页面、WEB-INF 目录、CSS 文件等
  • build.xml - Ant 脚本

JBoss 安装

Web应用服务器安装到:

C:\Apps\04-Tools\jboss-eap-6.2

问题

开发 - 部署 - 测试 周期非常缓慢。测试对网页的单个更改可能需要 30 秒以上的时间。这是当前的流程:

  1. 在 NetBeans 中编辑文件。
  2. 保存文件。
  3. Shift+F11运行>>清理并构建)。
  4. 切换到浏览器选项卡 (http://localhost:9990/console/App.html#deployments)。
  5. 点击替换
  6. 点击选择文件
  7. 选择Project-Admin-User-war.war文件。
  8. 点击打开
  9. 点击下一步
  10. 点击保存
  11. 切换到浏览器选项卡 (http://localhost:8080/admin/users/)。
  12. F5 重新加载页面。

构建(第 3 步)大约需要 26 秒;手动部署增加了这一点。

这是理想的开发周期:

  1. 在 NetBeans 中更改 JSF 页面(注意:这是从存储库中签出的文件)。
  2. 保存 JSF 页面。
  3. Alt+Tab 到浏览器窗口。
  4. F5 重新加载页面。

对 Java 源代码更改进行热部署并不那么重要,因为代码开发时间往往比简单的网页布局更改要长得多。

编辑exploded contents 意味着开发人员不再编辑从存储库中签出的文件,因此会产生额外的步骤或脚本,或者可能会丢失工作。

其他人建议使用 Deploy on save 功能,即disabled:

另一个建议(根据屏幕截图)是在调试模式下运行应用程序,但选择 Debug >> Project (Ctrl+F5) 没有显示更改后的页面更新。

问题

是否可以使用给定的工具和约束来热部署 JSF 页面?如果是这样,实现理想的开发周期所需的具体步骤是什么?

独立配置

README.txt 文件显示可以“实时部署”内容:

H) 仅限手动模式:实时替换当前部署的解压缩内容的部分而不重新部署:

cp -r target/example.war/foo.html $AS/standalone/deployments/example.war

Windows 上的 cp 命令转换为:

xcopy /e /s /y src dest

这导致:

  1. 打开命令提示符。
  2. 更改目录:cd C:\Apps\04-Tools\jboss-eap-6.2\standalone\deployments
  3. 在复制过程中创建 skipdeploy 以防止部署:type nul >> Project-Admin-User-war.war.skipdeploy
  4. 复制文件以创建包含已更改文件的目录: xcopy /i /y /e /s C:\Apps\07-Work\Project\Project-Admin\Project-Admin-User-war\web Project-Admin-User-war.war

下一步:

  1. 删除跳过部署:rm Project-Admin-User-war.war.skipdeploy
  2. 创建多部署:type nul >> Project-Admin-User-war.war.dodeploy
  3. 返回浏览器。
  4. 按 F5 刷新。

结果是资源包丢失了:

相关

【问题讨论】:

  • 您会接受buy the fastest development computers available 作为答案吗?
  • 为什么需要第 3 步?不保存自动复制吗?即使在非调试模式下?你检查过了吗?您是否将 jsf 应用配置为在开发模式下运行?
  • @Kukeltje:保存不会自动复制它——NetBeans 不知道 JBoss 将其 WAR 文件保存在哪里,NetBeans 也不知道 JBoss 是否会自动分解 WAR 文件。可以将 NetBeans 配置为(作为 mjn 的答案)以自动部署到 JBoss,但这只是部分解决方案。应该花费最短时间的解决方案是直接复制更新 WAR 文件,无需重新构建或重新部署。复制是直接发生还是间接发生(通过deployments 目录)现在是破解这个问题的关键。

标签: jsf netbeans jboss web-deployment


【解决方案1】:

这里是对 http://wiki.netbeans.org 上自 2009 年以来 Ant 脚本更改的描述。也许它仍然有用。

http://wiki.netbeans.org/TaT_DeployOnBuildUsingJBoss

还有另一个脚本解决方案:

How to setup JBoss server with Netbeans?

【讨论】:

  • @DaveJarvis 很好,在给定的限制内 (We may not change the tools; we may use neither Maven nor JRebel) 我想说这是我能做的最好的(甚至是免费的)。如果我需要工作,我会回来;)
【解决方案2】:

概述

使用以独立模式运行的 JBoss 6.2 EAP 实现热部署分三个部分完成:配置、爆炸和热部署。

配置

确保deployment scanner 配置如下:

确保已配置 Web 子系统和系统属性:

  1. 停止 JBoss。
  2. 编辑%JBOSS_HOME%\standalone\configuration\standalone.xml
  3. </extensions> 之后(<management> 之前),立即禁用缓存:

    <system-properties>
      <property name="java.net.preferIPv4Stack" value="true"/>
      <property name="org.jboss.as.web.deployment.DELETE_WORK_DIR_ONCONTEXTDESTROY" value="true"/>
    </system-properties>
    
  4. 找到网络子系统(例如,xmlns="urn:jboss:domain:web...)。
  5. 添加以下元素:

    <configuration>
        <jsp-configuration development="true"/>
    </configuration>
    
  6. 保存文件。
  7. 启动 JBoss。

爆炸

爆炸需要提取 WAR 文件的全部内容,其中的内容将在(非常近的)将来部署。

  1. 清理并构建应用程序(在 NetBeans 中为 Shift+F11)。
  2. 切换到 JBoss 独立部署目录。
  3. 创建一个跳过部署文件。
  4. 创建 WAR 目录。
  5. 解压 WAR 文件。
  6. 删除跳过部署文件。
  7. 创建部署文件。

这类似于以下内容(在 Windows 平台上;根据需要替换 %JBOSS_HOME% 和 %PROJECT_HOME% 的路径):

cd %JBOSS_HOME%\standalone\deployments
type nul >> Project-Admin-User-war.war.skipdeploy
mkdir Project-Admin-User-war.war
cd Project-Admin-User-war.war
jar -xvf %PROJECT_HOME%\dist\Project-Admin-User-war.war
cd ..
del *skipdeploy
type nul >> Project-Admin-User-war.war.dodeploy

热部署

创建一个包含以下内容的批处理文件:

cd %JBOSS_HOME%\standalone\deployments
type nul >> Project-Admin-User-war.war.skipdeploy
xcopy /i /y /e /s %PROJECT_HOME%\web Project-Admin-User-war.war
del *skipdeploy
type nul >> Project-Admin-User-war.war.dodeploy

网页开发

理想的开发周期已经接近完成:

  1. 在 NetBeans 中编辑文件。
  2. 保存文件。
  3. 运行批处理文件。
  4. Alt+Tab 到浏览器。
  5. F5 刷新。

Ant 有一个OnSaveTask,它可能会被强制运行批处理,甚至完全替代批处理文件。留给读者作为练习。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-22
    • 2011-02-06
    • 2020-02-18
    • 2016-03-24
    • 1970-01-01
    相关资源
    最近更新 更多