2007-08-19
奇怪的OSGi-Spring类加载的问题
关键字: Spring OSGi
调试程序时发现一个奇怪的类加载问题,描述如下:
假设有一个Bundle,其中有类a.A和b.B:
以及他们的Spring配置:
META-INF.MF中仅导出包a。
现在启动该Bundle,A和B的ClassLoader都是CL1,这是毫无疑问的。但当使用Eclipse的OSGi控制台命令 update 时,问题出现了,会抛出异常“Failed to convert property value of type [b.B] to required type [b.B] for property 'b' ”,这个异常很奇怪,似乎有点自相矛盾。其实不然,update后,由于A所在包属于导出包,可能被其他Bundle共享,所以其ClassLoader仍为CL1,因此A中定义的变量ab的类型B是由CL1加载的,而此时的bBean在初始化时,其ClassLoader却是一个新的实例CL2。因此,虽然bBean和ab的类型都是b.B,由于两者的ClassLoader不同,所以就出现了上面的错误信息。
这里的关键就是CL2的产生,为什么在update时要新生成一个ClassLoader实例?目前尚不清楚这个Bug属于Eclipse的OSGi控制台的还是OSGi-Spring项目本身,甚至是OSGi规范。请高人帮忙指点迷津。
假设有一个Bundle,其中有类a.A和b.B:
java 代码
- package a;
- public class A{
- private B ab;
- public void setB(B b){
- this.ab = b;
- }
- }
以及他们的Spring配置:
xml 代码
- <bean id="bBean" class="b.B" />
- <bean id="aBean" class="a.A">
- <property name="b" ref="bBean"/>
- </bean>
META-INF.MF中仅导出包a。
现在启动该Bundle,A和B的ClassLoader都是CL1,这是毫无疑问的。但当使用Eclipse的OSGi控制台命令 update 时,问题出现了,会抛出异常“Failed to convert property value of type [b.B] to required type [b.B] for property 'b' ”,这个异常很奇怪,似乎有点自相矛盾。其实不然,update后,由于A所在包属于导出包,可能被其他Bundle共享,所以其ClassLoader仍为CL1,因此A中定义的变量ab的类型B是由CL1加载的,而此时的bBean在初始化时,其ClassLoader却是一个新的实例CL2。因此,虽然bBean和ab的类型都是b.B,由于两者的ClassLoader不同,所以就出现了上面的错误信息。
这里的关键就是CL2的产生,为什么在update时要新生成一个ClassLoader实例?目前尚不清楚这个Bug属于Eclipse的OSGi控制台的还是OSGi-Spring项目本身,甚至是OSGi规范。请高人帮忙指点迷津。
- 01:25
- 浏览 (1390)
- 评论 (1)
- 分类: OSGi
- 进入论坛
- 发布在 Eclipse PlugIns&RCP&OSGI 圈子
- 相关推荐
评论
earls
2007-08-20
今天看了一下org.osgi.framework.Bundleupdate方法的API,原来所有导出的类在update时都不能被更新,这也就是其ClassLoader还是原来的那个的缘故。只有调用PackageAdmin.refreshPackages或者整个框架重载时才会更新那些导出的类
- 浏览: 17024 次
- 性别:

- 来自: 北京

- 详细资料
搜索本博客
最新评论
-
Spring、OSGi整合Hibernat ...
有几个问题,想请教一下,当其他任何bundle实现了wanged.core.pe ...
-- by jncz -
Spring、OSGi整合Hibernat ...
...
-- by hustlong -
Spring、OSGi整合Hibernat ...
基础的学习请先参考《OSGi实战》Opendoc,是入门级的,可以从blog.b ...
-- by BlueDavy -
Spring、OSGi整合Hibernat ...
引用目前OSGi还是不够成熟,支持的第三方软件也不是太多,文档也不齐全,所以学习 ...
-- by fangzhouxing -
Spring、OSGi整合Hibernat ...
我觉得fragment主要用来解决本地化问题和一些不涉及对外提供服务的扩展问题。 ...
-- by earls






评论排行榜