繁体   English   中英

如何在运行时清理OSGi捆绑包缓存

[英]How to clean OSGi bundles cache at runtime

我有以下示例方案...(请注意,我可以使用服务来实现方案,但是我正在尝试一些事情)

一个具有Activator类的OSGi捆绑包(将其命名为“客户端”),另一个OSGi捆绑包是一个简单的库(命名为“服务器”),其中公开了一个名为callMe()的方法。 在“客户端”的start()方法中,有一个对“服务器”的callMe()方法的调用。 当然,“服务器”捆绑包在具有callMe()方法的类的地方公开了该包,而“客户端”捆绑包则将其作为导入的包。 在未安装两个捆绑软件的情况下启动OSGi框架,我首先安装了“客户端”捆绑软件,当我尝试执行start()方法时,显示以下错误:

org.osgi.framework.BundleException:包org.example.helloworld中未解决的约束[4]:无法解决4.0:缺少要求[4.0] osgi.wiring.package; (osgi.wiring.package = org.example.helloworldlib)

没错,因为既未安装也未解决“服务器”捆绑包。 现在,我安装了“服务器”捆绑包,并在“客户端”上调用了start():这一次一切正常,因为安装了“服务器”捆绑包,因此可以解析,激活“客户端”,并且可以在其上调用callMe()方法“服务器”。

之后,我卸载“服务器”捆绑包,离开“客户端”。 现在奇怪的是...停止“客户端”并重新启动()...“客户端”有效! 即使我以前卸载了它,也可以调用“ server”的callMe()方法! 我知道OSGi框架具有捆绑包缓存,因此似乎“服务器”捆绑包在缓存中,但是为什么没有在捆绑包列表中显示呢?

是否可以在运行时清除缓存?

保罗。

当捆绑包进入已解决状态时,OSGi会建立与所需软件包的连接。 然后,将保留这些布线,直到调用刷新为止。

因此,在卸载服务器捆绑包时,客户端保持工作是完全正常的。

当您调用刷新时,将再次执行解析步骤。 因此,此时客户端无法解决。 据我所知,接线没有缓存在磁盘上。

因此,如果您卸载服务器并重新启动框架客户端,也应该无法解决。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM