当前位置: 首页 > 知识库问答 >
问题:

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

萧修永
2023-03-14

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

一个带有激活器类(将其命名为“客户端”)的OSGi捆绑包,另一个OSGi打包包是一个简单的库(将其称为“服务器”),公开了一个名为callMe()的方法。在“client”的start()方法中,有一个对“server”的callMe()方法的调用。当然,“服务器”包公开了我们使用callMe()方法的类的包,“客户端”包将其作为导入包。在没有安装两个bundle的情况下启动OSGi框架,我首先安装“客户端”bundle,当我尝试执行start()方法时,会显示以下错误:

org.osgi.framework.BundleException: Unresolve constraint in bundle org.example.helloworld [4]: 无法解决 4.0: missing requirements [4.0] osgi.wiring.package;(osgi.wiring.package=org.example.helloworldlib)

这是正确的,因为“服务器”捆绑包既没有安装也没有解析。现在,我在“client”上安装了“server”捆绑包并召回start():这次一切正常,因为“server”捆绑包已经安装,因此可以解析,激活“客户端”,并且可以在“server”上调用callMe()方法。

之后,我卸载了“服务器”包,留下了“客户端”。奇怪的是现在…停止“客户端”并重新启动它…客户端工作!它能够调用“server”的callMe()方法,即使我以前卸载过它!我知道OSGi框架有一个bundle缓存,所以“服务器”bundle似乎在缓存中,但为什么它没有显示在bundles列表中呢?

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

保罗。

共有1个答案

梁丘宏硕
2023-03-14

OSGi 在捆绑软件进入已解析状态时构建到所需软件包的连接。然后,它会保留这些连接,直到调用刷新。

因此,当您卸载服务器包时,客户端继续工作是完全正常的。

当您调用refresh时,解析步骤再次完成。因此在这一点上客户端无法解决。据我所知,连线没有缓存在磁盘上。

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

 类似资料:
  • 我有几个OSGi捆绑包,它们是在Eclipse中使用普通清单管理依赖项和Maven Tycho的外部构建构建构建的。 在Equinox上运行Eclipse内部的捆绑包工作正常。用第谷建造它们效果很好。 现在我想使用Tycho Surefire运行集成测试,为此我创建了一个简单的测试包,其中包含一些基本测试。测试中的bundle依赖于OSGi容器中的其他bundle和一些小的启动级别调整,以便正确运

  • 问题内容: 如何从jar库创建OSGi捆绑包? 问题答案: 如果您使用的是eclipse:有一个向导。 它允许您选择许多jar库,并创建一个包含这些jar的插件项目(即OSGi捆绑包)。 你可以在这里找到它:

  • 我使用EclipseIndigo使用OSGiJava框架开发了一些包。有一个主捆绑包,它依赖于其他捆绑包,并且具有要运行的主程序。如果我尝试在Eclipse中运行所有捆绑包,一切都正常工作,但是如果我将每个捆绑包保存为一个JAR,并在命令行中启动OSGi框架,当我尝试启动主捆绑包时,会出现异常<code>NoClassDefFoundError。找不到的类是依赖项。包的其余部分处于活动状态,主包刚

  • 我在Apache Felix上开发了一个OSGI捆绑包。捆绑包公开不同的API来实时管理YouTube事件。捆绑包服务将通过REST服务公开,并将由用户通过Web浏览器(chrome、safari、mozilla)使用。 我为该帐户生成凭据Google(client_secret和client_id)并将其保存在文件中,然后我的代码使用此凭据并正常工作。 我使用这个类(在youtube文档中找到)

  • 我正在将我的spring-java项目转移到OSGi。 我有一些依赖项,这些依赖项在spring ebr repo或maven repo中不能作为包提供。处理它们的最佳方法是什么? null

  • 我正在努力开发OSGI包以发布给Karaf。我在创建新项目时使用Netbeans 7.4和Create Maven OSGI包。我想我要做的是处理不同项目之间的依赖关系,在Netbeans中使用它们,然后发布到Karaf。 我试图做的是建立一个REST web服务;我发现这个教程是一个很好的起点,使一些基本的东西开始和运行。因此,我开始使用子项目设置父项目(所有这些都来自Maven OSGI Bu