【问题标题】:Custom Class Loading issues自定义类加载问题
【发布时间】:2014-07-08 15:20:36
【问题描述】:

我目前正在处理的问题要求将动态 Web 项目中的类更改加载到 JVM,而无需重新启动应用程序。我已经知道 J Rebel,因为我也尝试过使用它(只是没有足够的现金购买它)。所以我实际上坚持为这个项目创建一个自定义类加载器。

我真正的问题在于如何检测类文件中的更改并将更改加载到 JVM 中。因此,如果存在工具或 API,或者如果有人知道如何去做,或者有任何参考链接可以帮助解决这个问题,我将非常感谢。

提前致谢

【问题讨论】:

  • 为什么您认为必须构建自己的 ClassLoader?你想达到什么目的?
  • 如果您的意思是“热部署 Web 应用程序”,免费容器(Tomcat、Jetty)长期支持它。
  • M 试图用完整的新对象结构、对 html 绑定的更改或任何更改来重新加载整个类。热部署不能实现这个目标,而且它只能在我不感兴趣的调试模式下工作。该应用程序非常庞大,并且已经投入生产,只是试图减少升级的停机时间
  • 如果您的目标是最大限度地减少部署停机时间,您首先应该考虑更改您的部署过程并且不要弄乱类加载器。也许你应该考虑蓝绿色部署(参见martinfowler.com/bliki/BlueGreenDeployment.html)。类加载是一个非常复杂的过程,在运行的应用程序中替换它们非常复杂。
  • 嗯,真是个好东西。感谢这个想法。格雷戈

标签: java class jvm loader


【解决方案1】:

从 Java 7 开始,您可以使用 NIO.7 WatchService 请参阅此 Oracle tutorial

顺便说一句:您不应该创建自己的ClassLoader

【讨论】:

  • 谢谢,这正是我想要的,是的,我有自己的类加载器
【解决方案2】:

如果您使用 Tapestry IOC 作为您的 IOC container,您将免费获得实时服务重新加载。

请注意,只有实际的实现才能实时重新加载,如果要更改界面,则需要重新启动应用程序。

如果您选择使用Tapestry web framework,您还可以即时重新加载页面和组件类。

【讨论】:

    猜你喜欢
    • 2012-03-24
    • 1970-01-01
    • 2017-11-04
    • 2016-08-29
    • 2015-06-11
    • 2012-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多