【问题标题】:Is it possible to do Hotswapping of ATG classes是否可以对 ATG 类进行热交换
【发布时间】:2013-12-31 18:07:41
【问题描述】:

我们遵循的部署是我们使用runAssembler.bat 构建一个ear 文件并将其部署在应用服务器中。我们使用 weblogic 和 jboss 来测试我们构建的模块。然而,对于每一个小的变化,我们都需要运行 runAssembler 并构建一个新的 ear 并将其部署在应用服务器中并重新启动服务器。

我想知道是否有人想出一种方法来对我们在 weblogic 或 jboss 中的 ATG 环境中编写的代码生成的类文件进行热交换。

【问题讨论】:

    标签: jboss weblogic jvm-hotspot atg hotswap


    【解决方案1】:

    通过在调试端口上将 IDE 连接到应用程序服务器,通常可以进行热交换。在 Eclipse 和 JBoss 上进行此设置已记录在 hereherehere。在 WebLogic here 中有一些设置信息。

    附加您的调试器,编辑 java 文件,单击“保存”,然后在您的 IDE 中进行热代码替换,它现在应该更新正在运行的类文件。在 Eclipse 中,如果无法进行同步,它通常会弹出一个窗口。如果您使用的是 Eclipse,请确保选中项目下的“自动构建”标志,否则您将永远等待。我通过 JBOSS(爆炸的 ATG EAR)执行此操作没有任何问题,并且在 WebSphere 7 上执行此操作的成功率不定。确保您用于编译构建的相同 JAVAC 是加载到您的 IDE 中的那个也可能是谨慎的编译路径。

    另一种至少减少构建/部署时间的方法是部署一个解压/分解的 EAR,然后简单地复制您的类文件(您可以使用 Eclipse FileSync 插件)并重新启动服务器。

    还有一些商业选项可用,例如JRebel

    【讨论】:

    • 我无法理解如何将远程调试概念扩展到热插拔。我之前做过 ATG 模块的远程调试,但从未将其扩展为热插拔。我不能使用 JRebel,因为某些组织问题。
    • 附加您的调试器,编辑 java 文件,单击“保存”并在您的 IDE 中使用hot code replacement,它现在应该更新正在运行的类文件。在 Eclipse 中,如果无法进行同步,它通常会弹出一个窗口。如果您使用的是 Eclipse,请确保选中项目下的“自动构建”标志,否则您将永远等待。我通过 JBOSS(爆炸的 ATG EAR)执行此操作没有任何问题,并且在 WebSphere 7 上执行此操作的可变成功。确保您用于编译构建的同一 JAVAC 是加载到的那个也可能是谨慎的您的 IDE 编译路径。
    • 我觉得这个解释很好地补充了答案。因此我添加了。要么批准我所做的编辑,要么您可以进行必要的更改。无论如何,我接受你的回答,谢谢。
    【解决方案2】:

    在我们的组织中,我们在使用DCEVM 方面取得了巨大成功。它只是修补您的 JDK(在 Windows 中:jvm.dll)。

    1. 下载并修补您的 JDK
    2. 启动你的 JBoss/Weblogic 和打过补丁的 JDK
    3. 设置 Eclipse 的已安装 JRE 指向已修补的 JDK(重新启动并重建一次)
    4. 启动服务器,启动调试器和连接
    5. 确保 Eclipse 的 Debug 视图显示“Dynamic Code Evolution VM”(而不是“HotSpot VM”之类的内容)
    6. 更改您的代码,瞧!

    【讨论】:

    • 是的,这就是我们一直在使用的……不完全,但在一定程度上满足了我们的需求。
    • 如果您还需要对 Spring 等特殊框架的自定义支持,请使用 HotSwap Agent:hotswapagent.org/quick-start
    • 这应该在没有 HotSwap 代理的情况下工作?
    • @Mike DCEVM 也可以在没有 Hotswap 代理的情况下工作。对于纯 Java 应用,DCEVM 就足够了,只有当你使用 Spring、Log4j 等框架时,才需要 Hotswap Agent。
    【解决方案3】:

    您可以使用 JRebel 做到这一点。热交换后无需重启服务器,只需从 Weblogic 重新加载部署即可。

    【讨论】:

    • 感谢您的回答,但我们目前无法使用 JRebel。
    • 还有DCEVM,不过我没用过,看看它是如何工作的,或者如何与ATG集成。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-30
    • 2015-11-30
    • 1970-01-01
    • 2018-11-23
    • 1970-01-01
    • 2014-01-06
    • 2018-12-19
    相关资源
    最近更新 更多