问题标签 [dcevm]

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 投票
0 回答
896 浏览

java - Tomcat 扫描注解太慢

我有一个配置为使用 DCEVM 的 Tomcat 8.5.32

要动态重新加载的类在 $CATALINA_HOME/conf/Catalina/localhost/mycontext.xml 中指定,以便 Tomcat 直接从 Eclipse 自动重新生成的 .class 文件重新加载它们。

这可行,但 Tomcat 加载上下文需要两分钟以上,因为有一百多个目录。

通过org.apache.catalina.startup.ContextConfig.level = FINE在 conf/logging.properties 中设置,我得到了一条踪迹,告诉我大部分时间可能都花在搜索注释上。

有没有办法告诉Tomcat不要在某些目录中查找注释,以便只扫描实际包含带有注释的类的目录?

我一直在阅读ContextConfig 的源代码,似乎有一些排除规则,但我无法理解它们。

这是 catalina.out 的摘录:

0 投票
0 回答
446 浏览

java - DCEVM 安装不成功 - JVM_CopySwapMemory 错误(在 jvm.dll 中找不到)

我将 Idea 与 JDK1.8.0_201 和 DCEVM-8u181-installer-build2 一起使用。安装程序似乎可以正确修改 JDK,但是当我尝试运行 java -version 或 java -version -XXaltjvm=dcevm 时,会以我的母语弹出系统错误(我使用的是本地化的 Win 7)。翻译大致是“在动态连接的库 jvm.dll 中找不到过程 JVM_CopySwapMemory 的入口点”。

问题是什么?我是在使用不兼容的 DCEVM 和 Java 版本还是问题出在其他地方?

0 投票
1 回答
340 浏览

java - HotswapAgent org.hotswap.agent.command.ReflectionCommand 异常的原因?

在更改我的代码时,我在尝试使用 DCEVM (8u181) 和 Tomcat (7.0.62.0) 运行 HotswapAgent (1.3.0) 时遇到了以下问题:

原因是什么?

0 投票
0 回答
523 浏览

java - 资源文件未重新加载

我的目标是用 DCEVM/Hotswap 代替 JRebel 来代替使用 Maven 构建的 Tomcat 项目。我相信它正在检测我的类文件更改并适当地处理它们。但是,它没有检测资源更改。

我开始假设它会加载 JVM 通常会加载的所有内容。接下来,我添加了一个 hotswap-agent.properties 文件,但也没有让它工作。

热插拔-agent.properties

我也试过 watchResources= 和 watchResources=true

我不清楚“watchResources”的格式应该是什么。

由于 IP 原因,我无法将完整的日志文件粘贴到公共论坛中,但确实看到了:

有趣的是,我的文件不在 C:\Software\src\main\resources 下,而是在 C:\Repos\myproject\src\main\java 和 c:\Repos\myproject\src\main\resources 下。

如果重要的话,资源是一个 MyBatis 映射器 XML 文件。

我想要一些消息,说明它检测到资源的变化和适当的消息。

0 投票
1 回答
1062 浏览

java - 如何使用 DCEVM/Hotswap 代理进行 jar 文件更新?

我正在使用 DCEVM 热插拔代理将 java spring boot 应用程序作为 jar 文件运行。当我更改 jar 文件中的一些类文件时,应用程序不会重新加载这些更改。但是如果我提取我的 jar 文件并将我的应用程序作为一个简单的 java 类文件运行,将所有依赖项添加到类路径(就像 IntelliJ Idea 所做的那样),然后替换它成功重新加载的任何类文件。

运行提取的 jar 文件:

运行上述命令后,如果我进行任何更改并重新编译然后替换更新的类文件,则检测到更改并且我的应用程序反映了更改。

我得到上面的日志,它告诉我该类已重新加载。一切正常。

运行jar文件:

运行后如果我使用以下命令更新 jar 文件:

jar 文件得到更新,但没有反映更改,也没有生成日志。

0 投票
1 回答
172 浏览

java - 如何在没有 IDE 的情况下重新加载更改/HotSwap 重新加载类

目前我的设置包括 vim 和一个运行 Gradle 任务的单独终端窗口。

我想知道是否有可能触发 Gradle 守护程序的重新加载/重新编译更改类操作,以便 DCEVM 可以检测到它们并重新加载它们。

0 投票
2 回答
4005 浏览

java - 是否有可能有一个“HotReload”基于 docker 的 java 环境?

我试图让一个用 maven 构建的 java 程序在 docker-compose 场景上运行,并在我进行更改时热重载。我在原始 libvm 之上添加了trava-jdk libvm,并在适当的位置添加了 hotswapagent lib。当我运行 java -version 时,它给了我想要的东西

我的 dockerfile 是下面的那个

现在我发现自己对如何在 Ide 上应用热重载并正确运行代码有点迷茫。

如果您想知道为什么我需要这样的 hack,我有一个具有 E2E 测试的 IoT 环境,我希望能够快速迭代新测试或失败的测试,而无需重新编译或重新启动容器。

0 投票
1 回答
491 浏览

tomcat - 与 Hybris 的 HotSwap - 不适用于 Hybris 店面扩展代码

我已经在本地机器上安装了 altjvm 并使用https://github.com/HotswapProjects/HotswapAgent/releases中的 hotswap在 Hybris 中进行热部署。hybris 服务器正常启动,但第一次,ant clean all大约需要30 分钟服务器启动大约需要40 分钟。对于立面或填充器的任何更改,仅通过构建所需的扩展来反映更改。

但问题在于店面扩展。每当在店面扩展中进行任何更改时,我都会收到“<strong> Unable create CtClass for URI '<>_tag.class' ”所有标记文件的错误,之后页面无法打开。

使用的 Hybris 版本: 6.7

DCEVM 版本: DCEVM-8u181-installer-build2.jar

java版本: “1.8.0_191”</p>

操作系统: Windows 10 专业版。

如果有人对此问题有所了解,请告诉我。

0 投票
1 回答
103 浏览

java - 将 HotswapAgent/DCEVM 与 Clojure REPL 一起使用时出现 LinkageError

我正在尝试在混合 Clojure/Java Leiningen 项目中使用HotswapAgent/DCEVM,以避免在重新编译 Java 源代码后必须重新启动 REPL(我已经知道其他方法,例如 JRebel 和 Virgil)。

简而言之,问题是LinkageError在重新加载我重新编译的 Java 类后得到了一个,并且似乎该类没有被重新加载。

为了提供更多详细信息,我~/.lein/profiles.clj在配置文件中进行了设置,以便我们使用此处:repl找到的当前版本的 DCEVM JVM来运行 REPL。这是的相关部分:profiles.clj

为了重现该问题,我使用以下代码设置了一个最小的 Leiningen Clojure 和 Java 混合项目,其中包含一个小型 Java 类AD

以及一小段导入此类的 Clojure 代码:

然后我在 Emacs/CIDER 中启动 Clojure REPL,加载dcevm-complex-demo.ad命名空间并评估(raise-to-power (variable 3.0))产生结果的表达式AD(value=81.0, deriv=108.0)。然后我修改Java源代码,例如,我将行更改public static int EXPONENT = 4;为并在终端中public static int EXPONENT = 3;重新编译使用。lein javacREPL 中的一条消息告诉我该类AD已重新加载。但是当我重新评估表达式时,(raise-to-power (variable 3.0))我会期望得到结果AD(value=27.0, deriv=27.0),但我得到了这个错误:

dcevm-complex-demo.ad/raise-to-power (ad.clj:10) 处的执行错误 (LinkageError)。加载器约束违规:解析方法“AD AD.raiseToPower()”时,当前类 dcevm_complex_demo/ad$raise_to_power 的类加载器 clojure.lang.DynamicClassLoader @7c53a0c2 和方法定义类 AD 的类加载器“app” , 对于签名中使用的 AD 类型具有不同的 Class 对象(dcevm_complex_demo.ad$raise_to_power 在加载器 clojure.lang.DynamicClassLoader @7c53a0c2 的未命名模块中,父加载器 clojure.lang.DynamicClassLoader @1217a2dd;AD 在加载器的未命名模块中'应用程序')

这是完整的 REPL 交互的样子:

REPL 交互

我怎样才能使类的重新加载AD工作?我怀疑我可能必须更改函数clojure.lang.RT.baseLoader()clojure/lang/RT.java),但我不太确定如何去做。

0 投票
1 回答
301 浏览

spring-boot - GraalVM 上的热重载

我最近从 OpenJDK 8 升级到 GraalVM 20.1.0 (OpenJDK 11.0.7)。有没有人知道如何实现热类重新加载(或至少是网络资产重新部署)。

  • Spring-Boot-Devtools 不会接受这些更改。
  • HotSpotAgent (DCEVM) 有一个 JDK11 版本,您可以用它来替换您的 JVM,但它不是 GraalVM(并且不会具有 Polyglot 功能)
  • JRebel(我有许可证,不支持 GraalVM)

是这样吗?肯定不是...