使用嵌入式 OSGi 定义和公开主机 API
Defining and exposing host API with embedded OSGi
我目前正在为 插件 将 OSGi 模块化添加到项目中。基本思想是用户可以开发自己的 插件 ,可以在运行时添加到主应用程序以扩展或修改其功能 and/or 功能。
比如主应用使用Restlets为应用定义一个HTTPAPI。用户可能希望创建一个插件来添加具有特定功能的端点。或者他们可能希望创建一个存储在数据库中用于特定目的的新实体。
我知道这不是 'true' OSGi 模块化应用程序实现,经过一些研究后,我设法很容易地将 OSGi 功能添加到带有嵌入式 Felix
的现有项目中。与 felix.fileinstall
一起,应用程序监视部署文件夹并自动安装和启动放入部署文件夹的 jar 包(删除时停止并卸载)。
所以基本的想法已经实现并且效果很好。我很难理解的是我如何定义和发布主要应用程序 API(可以通过任何 插件 包实现)。另一方面,我不明白捆绑包开发人员如何获得对 API 信息的访问权限?
为了让捆绑包开发人员能够利用 API 他们需要某种 SDK?
一种方法是将 Constants.FRAMEWORK_BUNDLE_PARENT framework launch property to your application class loader and the Constants.FRAMEWORK_SYSTEMPACKAGES_EXTRA 框架启动 属性 设置为要向插件公开的包列表。然后,插件将以与任何其他包相同的方式在它们的包清单中为您的应用程序包使用 Import-Package
。
我目前正在为 插件 将 OSGi 模块化添加到项目中。基本思想是用户可以开发自己的 插件 ,可以在运行时添加到主应用程序以扩展或修改其功能 and/or 功能。
比如主应用使用Restlets为应用定义一个HTTPAPI。用户可能希望创建一个插件来添加具有特定功能的端点。或者他们可能希望创建一个存储在数据库中用于特定目的的新实体。
我知道这不是 'true' OSGi 模块化应用程序实现,经过一些研究后,我设法很容易地将 OSGi 功能添加到带有嵌入式 Felix
的现有项目中。与 felix.fileinstall
一起,应用程序监视部署文件夹并自动安装和启动放入部署文件夹的 jar 包(删除时停止并卸载)。
所以基本的想法已经实现并且效果很好。我很难理解的是我如何定义和发布主要应用程序 API(可以通过任何 插件 包实现)。另一方面,我不明白捆绑包开发人员如何获得对 API 信息的访问权限?
为了让捆绑包开发人员能够利用 API 他们需要某种 SDK?
一种方法是将 Constants.FRAMEWORK_BUNDLE_PARENT framework launch property to your application class loader and the Constants.FRAMEWORK_SYSTEMPACKAGES_EXTRA 框架启动 属性 设置为要向插件公开的包列表。然后,插件将以与任何其他包相同的方式在它们的包清单中为您的应用程序包使用 Import-Package
。