我想从数据库或其他源加载我的OSGI jar文件

我想从数据库或其他源加载我的OSGI jar文件,osgi,Osgi,我是否需要提供自定义类加载器?大声想一想,这似乎不是正确的方法,因为在类加载器中不知道所需的版本。您可以随时将它们从数据库(或任何地方)下载到某个本地位置,然后将它们动态安装到OSGi框架中。您只需要为框架提供捆绑包的文件系统路径。当然,您必须自己编写所有的粘合代码。另一方面,如果您使用的是Eclipse P2,那么由于自动资源调配,您可能会有更多的灵活性。看看PAX URL项目: 这说明了如何将加载OSGi捆绑包与存储OSGi捆绑包的问题分离开来。理论上,我认为使用数据库作为捆绑存储没有任何主

我是否需要提供自定义类加载器?大声想一想,这似乎不是正确的方法,因为在类加载器中不知道所需的版本。

您可以随时将它们从数据库(或任何地方)下载到某个本地位置,然后将它们动态安装到OSGi框架中。您只需要为框架提供捆绑包的文件系统路径。当然,您必须自己编写所有的粘合代码。另一方面,如果您使用的是Eclipse P2,那么由于自动资源调配,您可能会有更多的灵活性。

看看PAX URL项目:

这说明了如何将加载OSGi捆绑包与存储OSGi捆绑包的问题分离开来。理论上,我认为使用数据库作为捆绑存储没有任何主要障碍,尽管我也没有看到任何明显的优势


对于捆绑包版本,您需要一些机制来确定要加载哪些捆绑包(和版本)。您应该使用版本信息将捆绑包存储在数据库中,否则如何存储同一捆绑包的不同版本?

一个简单的解决方案是创建您自己的引导捆绑包,该捆绑包将从数据库(或其他位置)提供所有其他捆绑包。OSGi允许您从任意
InputStream
安装捆绑包,因此将其插入您想要的任何源(例如JDBC)应该相当容易

有关更多详细信息,请参阅方法


您不应该寻找一个“回调”,框架将通过它通知您“何时需要加载所需的依赖项”,因为自动依赖项管理(alamaven)不是核心OSGi功能的一部分(尽管可以通过使用类似的服务来实现)

鉴于加载机制基本上与URL一起工作,我建议 尝试自定义URL处理程序。从逻辑上讲,您需要在使用此处理程序加载任何捆绑包之前加载并激活它,否则我认为它应该可以工作

请参阅“URL处理程序服务规范”,R4 OSGi核心规范


顺便说一句。

这似乎不公平,我宁愿跳过临时目录的事情,自己加载罐子。但是,我找不到回调,因此容器将在需要加载所需依赖项时通知我。确切地说,我如何知道需要哪些捆绑包,没有官方回调可用于自己解析捆绑包。您不需要任何回调。想想看,OSGi运行时是如何引导的?您需要一些机制来加载初始捆绑包集。您不会说您使用的是哪个OSGi容器,但是如果您在Eclipse安装目录中查找,您会发现一个进行引导的config.ini文件。当容器尝试加载捆绑包时,它实际上不是由容器调用的回调。这很容易——Eclipse有一个特殊的包,负责加载其他包(实际上,它有两个包)。您必须引导OSGi运行时+您的特殊加载程序包。如何做到这一点取决于您使用的OSGi运行时。没有涉及回调。我希望每次系统在加载包时发现“导入包”或“所需包”头时都会调用回调。这并不容易,尤其是当您想到零碎的包等时。您可以看看PackageCGE管理服务。