我有以下示例方案...(请注意,我可以使用服务来实现方案,但是我正在尝试一些事情)
一个具有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会建立与所需软件包的连接。然后,将保留这些布线,直到调用刷新为止。
因此,在卸载服务器捆绑包时,客户端保持工作状态是完全正常的。
当您调用刷新时,将再次执行解析步骤。因此,此时客户端无法解决。据我所知,接线没有缓存在磁盘上。
因此,如果您卸载服务器并重新启动框架客户端,也应该无法解决。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句