我有一个服务器端应用程序,并希望嵌入一个osgi框架进行动态捆绑加载 假设我想公开一个QuoteImpl实现IQuote(实例化为服务器容器引导程序/ Spring的一部分),供不同的Bundles使用。
Q1。是否有一种将服务器应用程序实例暴露给Bundles的简洁方法? (顺便说一句,因为遗留的是不可能将服务器代码变成捆绑:)并且不想让整个应用程序成为可能。
尝试通过服务和捆绑进行暴露以投射到IQuote中。不确定我做得好但由于未解决的编译问题而失败,因为IQuote驻留在核心应用程序项目而不是捆绑项目中。任何想法?
答案 0 :(得分:3)
是的,这样做的方法是使用服务。 “host”应用程序将发布服务,OSGi中的bundle将以正常方式使用该服务。
使这项工作的关键是服务API(即包含IQuote
的包)必须由主机应用程序通过系统包导出导出。您可以通过在创建嵌入式OSGi框架时设置org.osgi.framework.system.packages.extra
属性来控制此操作。我在这个主题上写了blog post,可以帮助你入门(查找标题“公开应用程序包”)。
您声明存在编译问题。要解决这些问题,有必要了解如何构建项目和构建系统。
答案 1 :(得分:1)
这就是我在Java类中嵌入Equinox OSGi运行时的方法。我想你也可以这样做。 https://github.com/sarxos/equinox-launcher/blob/master/src/main/java/com/github/sarxos/equinox/Launcher.java