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

时间:2009-11-30 00:01:13

标签: osgi

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

4 个答案:

答案 0 :(得分:3)

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

请参阅“R4处理器服务规范”,R4 OSGi核心规范。

Glassfish is using this approach to install webapp bundles btw。

答案 1 :(得分:2)

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

有关详细信息,请参阅BundleContext.installBundle()方法。

你不应该寻找一个“回调”,框架会通过它“通知你何时需要加载一个必需的依赖”,因为自动依赖管理(ala Maven)不是核心OSGi功能的一部分(虽然可以通过使用OBR)等服务实现。

答案 2 :(得分:1)

查看PAX URL项目:http://wiki.ops4j.org/display/paxurl/Documentation

这证明了加载OSGi包的关注点与存储方式的分离。从理论上讲,我认为使用数据库作为捆绑存储没有任何重大障碍,但我也没有看到任何明显的优势。

对于捆绑软件版本,您需要一些机制来识别要加载的捆绑包(和版本)。您可以使用版本信息将捆绑包存储在数据库中,否则如何存储同一捆绑包的不同版本?

答案 3 :(得分:0)

您可以随时将它们从数据库(或其他)下载到某个本地位置,然后将它们动态安装到OSGi Framework中。您需要为框架提供的只是bundle的文件系统路径。当然,您必须自己编写所有胶水代码。另一方面,如果您使用的是Eclipse P2,则可以通过自动配置来获得更大的灵活性。