栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

用于重载类的各种Java插件之间有什么区别,哪个是最直观的?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

用于重载类的各种Java插件之间有什么区别,哪个是最直观的?

免责声明: 我参与了JRebel开发,因此我的回答可能看起来有些偏颇,但是我会尽力解释。

为了回答这个问题,我首先要引起您的注意,您列出的名称之间的主要区别是:有些解决方案需要您更改应用程序设计,而其他不需要。

模块化解决方案,如 OSGi的JBoss的模块 提供的好处,如果你按照正确的道路和 模块化
应用程序。否则,如果部署一个孤岛捆绑包,则基本上意味着您要重新启动/重新部署整个应用程序,从而削弱了从这种方法中获得的任何好处。

Play框架 实际上是具有热部署功能的全栈框架。这些功能取决于您使用的框架版本。但是同样,与模块化相同的故事-框架强制执行某种编程模型。

Apache Commons JCI
并不是真正热更新代码的解决方案。AFAIK,它只是通过新的类加载器来编译和加载类。如上面提到的情况,这还涉及更改应用程序代码。我不确定这是好是坏。缺点是您几乎无法通过这种方式与生态系统进行任何广泛的集成。对于使用此功能的自制框架,此方法相当可行。就我自己而言,我宁愿使用Groovy,JRuby或Javascript之类的脚本语言来实现相同的目的。例如,类似这样的东西。

JRebelFakereplaceDCEVM- 那些家伙不在乎编程模型。但是差异很大:

DCEVM 对JVM进行了修补,其目标是提供一个完整的热交换解决方案。

JRebel 是一个Java代理(与-javaagent
VM参数挂钩),它检测应用程序代码并通过对类的新版本进行加载。JRebel的主要价值在于它提供了灵活的配置以及大量特定于框架的集成,因此您不仅可以完成Java类的热交换,还可以做更多的事情。例如,在Spring应用程序上下文中添加和自动装配新bean,动态添加新的EJB,以及新的Struts操作,等等。

Fakereplace 也是插桩剂,如 JRebel的
,但它对于Java代码的变化少了很多的支持(我认为),并支持框架的数量是不一样令人印象深刻。

Feenix* 可以完成Java Instrumentation
API所允许的所有工作。这基本上意味着它并没有真正在JVM的标准HotSwap之上增加价值。与 AgentSmith 相同
*

更新:这个答案促使Feenix的作者提出了一个新版本 -Feenix 2.0 ,它类似于JRebel与类一起工作的方式。但是正如作者自己说的那样-
Feenix仍然远不及JRebel。还有一些类似的解决方案,例如 HotswapAgentSpring Loaded-
这些工具也提供了类似的功能,但受其自身方式的限制。

现在介绍您的特定问题 ,如何使用JRebel解决:

应用程序的每个模块都应具有自己的配置文件rebel.xml。对于模块,我们的意思是EAR,WAR或WEB-
INF /
lib中的任何JAR依赖项(如您的情况)或服务器特定的库。指向已编译类所在目录的配置文件,JRebel将直接从该位置加载类。这一切都意味着,一旦对Java类进行了更改,
无需组装整个JAR。 相反
,您可以进行更改并编译源代码(利用IDE而不是构建脚本)。在应用程序代码中调用该类后,将由JRebel重新加载已编译的类。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/483483.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号