osgi中不同classloader之间对象的复制问题解决

在使用OSGi的felix环境中,通过引入transloader工具包解决不同bundle加载的对象复制时出现类型不匹配的问题。需在配置文件中添加额外的系统包导入,如sun.reflect包,确保所有bundle间对象的正常复制。

      在osgi环境中(我用的是felix),不同的bundle都有自己独立的classloader,当在一个bundle中复制另外一个bundle加载的对象时,会报类型不匹配的错误。这一问题的解决,需要利用反射的方法,进行处理。

       transloader是一个在不同的classloader间进行对象复制和对象转换的工具包,对于对象的复制,实现如下:

        ObjectWrapper wrap = new ObjectWrapper(ObjectInstance,CloningStrategy.MAXIMAL);
            Object newChromosome = (Object) wrap.cloneWith(ObjectInstance.getClass().getClassLoader());

但是,在osgi的标准设置下,会报一个找不到sun/reflect/ReflectionFactory的错误,这是因为,在osgi默认的jre导入package中,不包括sun.reflect包。需要在osgi的配置文件中,增加:

# To append packages to the default set of exported system packages,
# set this value.
org.osgi.framework.system.packages.extra=sun.reflect.*

# The following property makes specified packages from the class path
# available to all bundles. You should avoid using this property.
org.osgi.framework.bootdelegation=sun.*,com.sun.*,sun.reflect.*
把sun.reflect包导入到osgi的环境中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值