|
这个主题共有 5 回复 / 1 页 [
]
|
|
|
|
|
|
板桥或其他兄弟,请帮帮忙。
|
发表: 2005年04月14日 16:48
|
回复
|
|
我现在要实现通过定制的ClassLoader来实现类的动态重新加载,具体的说,指间隔检查指定的类(不在系统默认装载器能够装载的路径下),如果发现类被修改过,则用自己写的classloader重新装载该类 现在遇到如下问题:我用自己写的classloader 装载该类,可是装载后我不能像使用普通的类那样使用该类,例如,通常我们这样使用一个类:Hello hello = new Hello();然后我们就可以通过hello来调用各种方法了,我是这样来重新装载一个类的:Class cl = new MyClassLoader().loadClass("OneClass.class");这时如果我用下列转换:OneClass oc = (OneClass)cl;,系统就抛出一个类型转换异常。这时只能通过反射机制来使用该类,我现在想知道如何能够想使用普通类那样使用重新装载的类cl。另外,由于我要不断的检查不断的重新加载类,这就导致一个问题:每次加载都是用MyClassLoader进行重加载,第一次没问题,第二次就会抛出类已经加载的异常,这是因为第一次MyClassLoader已经加载过这个类了,所以再加载的时候就跑出异常。 如果我写得不明白,或者需要从源码获得更多的判断信息,请告诉我。
|
|
|
|
|
|
Re: 板桥或其他兄弟,请帮帮忙。
|
发表: 2005年04月14日 22:31
|
回复
|
|
个人看法: 你这个和服务器加载类有点类似,所以也可以采用相同的策略来解决. 监视某个路径----线程, 发现该路径下有新的文件变动,就启动检查机制, 然后分析该文件.
|
|
|
|
|
|
Re: 板桥或其他兄弟,请帮帮忙。
|
发表: 2005年04月15日 11:27
|
回复
|
|
谢谢SportsBaby1980的回复,我正是如此做的,现在已经用特定的class loader 装载了,通过反射机制检查,证明已成功装载,现在我需要在重装载后在新写的类中象使用普通类的实例那样使用重新装载的类的实例,而不是通过Method的invoke方法来调用。这很让我为难啊,找不到解决办法,我曾试着了解weblogic等服务器的 hot redeploy 原理,好像这不是短时间能够做到的。 有哪位兄弟实现过类似的功能吗?继续寻求帮助......
|
|
|
|
|
|
Re: 板桥或其他兄弟,请帮帮忙。
|
发表: 2005年04月15日 14:42
|
回复
|
|
不知道你使用的地方和你频繁更新的地方的关系
如果是直接引用的话,估计希望不大
|
|
|
|
|
|
Re: 板桥或其他兄弟,请帮帮忙。
|
发表: 2005年04月15日 14:42
|
回复
|
|
|
|
|
|
|
|
Re: 板桥或其他兄弟,请帮帮忙。
|
发表: 2005年04月16日 15:28
|
回复
|
|
使用MBean
可参考exo portal平台中TomcatWebAndPortletDeployer之类的做法。
|
|
|
|