如何在JBoss中使用Java“热代码替换”?

时间:2009-02-11 19:03:02

标签: java debugging jboss

我正在运行JBoss 4.0.3.SP1_CP04并使用Eclipse 3.4.1的调试器连接到它,两者都使用JDK 1.6.0_11。

当我对方法进行微小更改(例如将逻辑中的“+ 1”更改为“+ 2”)并保存时,我立即收到一个标题为“Hot Code Replace Failed”的错误消息对话框错误“删除方法未实现”

Hot code replace failed dialog http://img6.imageshack.us/img6/531/hotcodereplacefailedkp6.png

有人可以建议让这个工作的步骤吗?

6 个答案:

答案 0 :(得分:4)

您要做的是以exploded WAR部署到JBOSS。通常情况下,如果编辑器进行了初始部署,那么它将在更改时管理复制单个文件。

在IntelliJ中,this is easy。我从来没有从Eclipse那里做过,但是this project是你最好的选择。

答案 1 :(得分:2)

我一直在使用JRebel,就修改代码和动态更新应用服务器而言,它可以节省生命。第一天支付给自己。 (我们有7分钟的编译/部署/重启周期)

答案 2 :(得分:1)

  1. 在Eclipse中运行调试器之前,确保工作区中的所有项目都已刷新(如果代码在Eclipse外部更改,则需要它,例如在使用外部工具从版本控制系统进行更改之后)
  2. 在Eclipse的Eclipse构建路径中,确保您不会将某些库类包含在您尝试热插拔的内容中
  3. 检查Eclipse JRE = JBoss JRE
  4. 检查您正尝试热插拔的课程。它有内部类吗?当我无法用内部类交换类时,我遇到问题,而其他类交换没有问题。

答案 3 :(得分:1)

原因是程序集可以使用其他编译器进行热交换。例如,如果您通过maven构建项目,我们使用javac。当您尝试执行热交换时,etslipse使用内置编译器jdt编译器(编译器不是从已安装的jdk中获取的,并且无法通过常规方式进行更改。)。获得的二进制类是不同的,jvm不能替代它们。

答案 4 :(得分:0)

你所描述的应该有用。你有什么jbm args来启用调试?

我的是这些: -Xdebug -Xnoagent -Xrunjdwp:transport = dt_socket,address = 8000,server = y,suspend = n

答案 5 :(得分:0)

我遇到了热码替换本身无法正常工作的问题。我们做了一些更改,例如确保选中“自动构建”并取消选中 - “发生构建路径错误时中止构建”。但就我而言,HCR本身并不起作用。我没有收到您提到的消息。更多细节在此链接中。 https://sites.google.com/site/javaerrorsandsolutions/home/hot-code-replacement