发帖    主题    评论    推荐    标签    作者    订阅    查搜    注册   登陆   关注
 
面向对象 设计模式 领域驱动设计 企业架构 框架 开发教程 微服务 CQRS 扩展性 并发编程 事件溯源 分布式 SOA
1 2 3 下一页 Go 3

类的热拔插功能该如何实现

2003-04-30 13:20
赞助商链接

比如我实例化了一个类,该类的class文件在该实例的生命期内被更新,当系统得知了这一消息后,终止该实例并载入新类后实例化该类。请问,我该如何让JVM从类文件中重新获取该类?谢谢

2003-04-30 21:39

没有实际做过, 从看过的资料知道大概这样做:
1. 实现你自己的ClassLoader, 给这个loader加listener
2. listener监听loaded的文件last update time 属性来触发管理终止实例的事件
3. 终止实例以后, 把旧的loaded的class文件clear掉, 重新调用一次新的文件.

难点是在于怎样处理已经实例化的Class的引用, 统一终止掉?
在做某些server的应用中才会有这样的需求吧?

你可以参考一下resin和phoenix源代码, 它们都有Plug and Play的功能的.

2003-05-01 01:51

你的疑题提得非常好,是这样的,我的系统是可以通过JMX进行远程更新的,通过MBean我可以让系统知道哪些模块需要重启(而不是服务器重启)。我的每个模块仅提供一组facade与外界通信,这些facade实际上由proxy模式实现,系统可跟踪每个被实例化的proxy。当更新消息到达时,proxy中的被代理对象被置换(销毁该对象),取而代之的是一个只能抛出ApplicationExpiredException的代理对象,这样就解决了处理对象引用的问题。
至于ClassLoader,是否有详细的资料?

2003-05-01 22:35

不了解JMX技术, 不能帮什么忙
这个是ClassLoader javadoc的link:
http://java.sun.com/j2se/1.4.1/docs/api/java/lang/ClassLoader.html

希望对你有用, good luck with your project.

2003-05-02 00:03

I am curious about your jmx client UI, I have tried html adaptor from Sun and JBoss, and a swing based one( I don't remember, someone post on theserverside ), they did save me the effort to build my own console, but with some many things under some many categories to monitor/control, I need a better jmx console tool that's easy customizable.

Quake is right on the point about classloader, what we did here is throw exception if old instance is still refereneced. Sorry can't give you the code as it's not my own, but it's very basic once you read the jdk doc.

3Go 1 2 3 下一页

赞助商链接

赞助商链接

返回顶部

移动版 关于本站 使用帮助 联系反馈 最佳分辨率1366x768
OpenSource JIVEJDON Powered by JdonFramework Code © 2002-20 jdon.com