问题标签 [hotswap]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1402 浏览

java - JVM 对 Spring 加载的类的热交换,使用 JPDA

可以请任何人分享他关于这个话题的经验吗?

在 tomcat 上使用 jpda 时,即使对于通过 spring 加载的类,类重新加载是否有效?假设我有几个加载和实例化的类的 spring 上下文,我想在其中一个中更改一个方法。

通常,类会被替换、重新加载,并且每个其他实例都是从类的新版本实例化的。我想即使是旧实例也被旧实例替换了?

使用 Spring 时这是否也有效?所以我有一个 mvc 控制器,我改变它的方法?

或者我必须使用 JRebel 来满足这个要求。

0 投票
2 回答
5286 浏览

java - Java Hotswap 与 Eclipse 和本地机器上的远程调试

我正在尝试找出如何在使用我的构建系统进行调试时启用代码的热交换,并且正在干涸。

我有一个带有调试目标的 Ant 构建,如下所示:

然后我使用 Eclipse 中的远程调试选项连接到端口 8000。调试工作正常,但我无法像使用 Ant 之前那样编辑代码。我知道可以在 JBoss、Tomcat 和其他情况下使用热交换,但我只是通过 JVM 调用在本地运行我的程序,正如您从上面看到的那样。

有谁知道我的设置是否可行?

谢谢!

0 投票
4 回答
25540 浏览

java - 使用 Intellij 10.X 和 tomcat 6.X 修改后热部署 JSP

我有一个带有一个 java 类和一个 jsp 的 Hello-World 应用程序。JSP 打印出嵌入在 JSP 和 java 类中的一些文本。(它打印出两件事)

我按照此处的说明创建和部署我的应用程序,它(大部分)工作!我能够调用 JSP 并正确显示页面。按下 Intellij 重新加载按钮后,我还可以在 java 类中进行热交换更改。

问题:如果我更改 JSP,它不会反映在浏览器中。

我已经验证了以下内容:

  • Tomcat/conf 目录中的 web.xml 不会覆盖“开发”值。默认值为真。
  • HelloWorld\web\META-INF\context.xml 和 Tomcat\conf\context.xml 中的 context.xml 具有 reloadable=true
  • 任何更改都会立即将 JSP 从 C:\code\HelloWorld\web\index.jsp 复制到 C:\code\HelloWorld\out\artifacts\HelloWorld_war_exploded\index.jsp
  • 这不是浏览器缓存问题

有什么想法吗?

0 投票
2 回答
1308 浏览

java - 开发 Java webapps 最有效的方法是什么?或者更具体地说,说 Wicket 应用程序?

这是我第一次在这里发布问题,我会尽量让我的问题尽可能清楚。

我试图找到开发 Java webapps 的最佳流程。经过几个月的反复试验,我的 Web 开发环境由以下部分组成:

框架:Apache Wicket 1.4.16
IDE:eclipse Galileo,带有 m2eclipse 插件
构建工具:Maven 2
数据访问:EclipseLink 2.1.1 via JPA 2.0(带有 StaticWeave)
RDBMS:MSSQL 2005 或更高版本,带有 jTDS
DI:Google Guice 2.0
开发 Web 容器: 嵌入在 Maven Jetty 插件中的 Jetty 服务器。
目标 web 容器:Tomcat 6.x 或更高版本

我使用 maven Jetty 插件来测试运行我的 webapps,在需要行精度跟踪时启用 JPDA。

每当对源代码进行更改时,我都必须重新加载我的应用程序才能生效。按 ENTER 重新加载是可以的,但是在几次重新加载后(大约 3~5 取决于我的 PermGen 设置),抛出 OutOfMemoryException,然后我必须关闭并再次启动我的应用程序。我知道自动重新加载可以通过配置来实现,但它只会导致 OOME 更快(由于过度重新加载)。

谷歌搜索后,我意识到与一些内存泄漏问题有关。我已经尝试扩大 MaxPermSize 设置,但我的装备上的 RAM 是有限的,将其设置为非常大的东西是不合理的。顺便说一句,Tomcat 7 中引入了内存泄漏检测,我发现大多数内存泄漏来自 jTDS、Google Guice 和 Wicket 本身,但我对此无能为力。

我能做些什么来加速我的开发过程吗?为了减少重新加载时间,我应该转向更高级的 Web 容器,比如 Glassfish(抱歉,我买不起 WebLogic 或 WebSphere。)或其他任何东西。

在此先感谢,欢迎任何意见!

0 投票
8 回答
112259 浏览

intellij-idea - 如何启用 Intellij 热代码交换

Intellij 似乎没有在我的安装中进行基本的热代码交换。

对于此代码:

我在method2()处设置了一个断点,mainTest.method1();然后修改字符串,按ctrl+s并继续一步一步。不幸的是,运行时没有更新,正在打印旧字符串。句号 - 编译 - 运行会打印新字符串。所以我的结论是热插拔不​​起作用。

我需要设置什么设置来启用热代码交换吗?

  • Ubuntu,JDK 1.6
  • Intellij 10.5 Ultimate(评估版)
0 投票
1 回答
319 浏览

java - 使用 JRebel 交换类的字节码

如前所述,我想在执行期间更改字节码。我没有运行任何类型的应用程序或 Web 服务器,它只是用于命令行程序。

当然我可以只创建一个新的 ClassLoader,但从性能的角度来看这是不可行的。

我遇到了 JRebel,它应该能够做到这一点,但我找不到任何示例,教程来存档它。

Java Hotswap 不是一个选项,因为它不能处理多个 Classloader

演示我想要什么的简单示例:

首先我想加载类Car

做一些事情

更改源代码

同一个类加载器中重新编译和更改字节码

再次执行相同的类

希望我说清楚了。

0 投票
3 回答
9496 浏览

python - Python运行程序的热插拔

以下代码允许您runtime.py在运行时修改的内容。换句话说,你不必打断runner.py

运行时导入的模块是:

这种原始机制允许您“如何交换” Python 代码(a la Erlang)。有更好的选择吗?

请注意,这只是一个学术问题,因为我没有必要做这样的事情。但是,我有兴趣了解更多有关 Python 运行时的信息。

编辑

我创建了以下解决方案:Engine对象为模块中包含的函数提供接口(在这种情况下,模块被称为engine.py)。该Engine对象还产生一个线程来监视源文件中的变化,如果检测到变化,它会调用notify()引擎上的方法,重新加载源文件。

在我的实现中,更改检测基于每秒轮询一次frequency检查文件的 SHA1 校验和,但其他实现也是可能的。

在此示例中,检测到的每个更改都记录到名为 的文件hotswap.log中,其中注册了校验和。

检测更改的其他机制可能是服务器或线程inotify中的使用。Monitor

engine.py文件:

日志样本:

再说一次 - 这是一个学术讨论,因为此时我不需要热交换 Python 代码。但是,我喜欢能够了解一点运行时并意识到什么是可能的,什么是不可能的。请注意,加载机制可以添加锁,以防它正在使用资源,以及异常处理,以防模块未成功加载。

注释?

0 投票
1 回答
695 浏览

c++ - 对于 C/C++、Linux,热交换/编辑并继续

我正在寻找一个支持(Visual Studio 的) Edit and continue 功能的 IDE。我知道 Netbeans 为 Java 提供了它(称为热交换、修复和继续),但找不到任何关于 Linux 系统的 C/C++ 实现的信息。

任何帮助将不胜感激。

0 投票
2 回答
4732 浏览

java - Eclipse 热代码替换不起作用

当我在调试模式下运行我的程序并尝试使用热代码替换功能时,它不会改变正在运行的应用程序中的任何内容,并且没有显示错误窗口。我正在使用 Eclipse 版本 3.6.2、JVM 1.6 和 Windows 7。我已选中“自动构建”,我未选中“发生构建路径错误时中止构建”,但没有任何帮助。(而且我不是在创建/删除方法或类似的东西。)

0 投票
2 回答
677 浏览

erlang - Erlang:将客户端进程/功能卸载到服务器?

我的场景如下 - 我有一个带有函数 foo() 的客户端 C,它执行一些计算。

我想要一个不知道 foo() 的服务器 S 来执行这个函数,并将结果发送回客户端。

我正在尝试确定在 Erlang 中执行此操作的最佳方法。我正在考虑:

  • 热代码交换 - 即在 S 中“升级”代码,使其具有函数 foo()。执行并发送回客户端。
  • 以分布式方式,所有节点都已适当注册,按照S! C:foo() - 用于将函数“发送”到进程/节点 S

还有其他我没有想到的方法(或语言的特征)吗?

谢谢您的帮助!