OSGi 应用程序隔离和共享
在运行时,OSGi 应用程序互相隔离,但共享其依赖性。
在运行时环境中,OSGi 应用程序互相隔离:
- OSGi 应用程序无法共享软件包。
- 每个 OSGi 应用程序使用自己的服务注册表在自己的独立 OSGi 框架中运行。
- 通过在应用程序清单中设置适当的头,可以在框架之间导入和导出 OSGi 服务。
对于每个正在运行一个或多个 OSGi 应用程序的应用程序服务器,还有一个共享捆绑软件空间。
OSGi 应用程序的主要内容在应用程序的框架中运行。 应用程序中的依赖性捆绑软件和共享捆绑软件在共享捆绑软件空间中运行。
启动应用程序时,该应用程序的部署清单中列示的捆绑软件将装入到运行时环境中。 部署清单的 Deployed-Content 头中列示的捆绑软件将装入到隔离的框架中。 部署清单的 Deployed-Use-Bundle 和 Provision-Bundle 头中列示的捆绑软件将装入到共享捆绑软件空间中。
共享捆绑软件空间中的依赖性捆绑软件可以起源于内部捆绑软件存储库、外部捆绑软件存储库或应用程序的内容。
然而,必须通过引用来提供应用程序中的共享捆绑软件,而不是将这些捆绑软件直接包含在应用程序中。 这是因为,如果将共享捆绑软件直接包含在应用程序中,那么当其他应用程序解析时这些捆绑软件不可用于这些应用程序,但这些捆绑软件在运行时位于共享捆绑软件空间中,这可能会导致问题。
以下内容显示了一个示例应用程序清单:
Manifest-Version: 1.0
Application-ManifestVersion: 1.0
Application-Name: Example Blog
Application-SymbolicName: example.blog.app
Application-Version: 1.0
Application-Content:
example.blog.api;version="[1.0.0,2.0.0)",
example.blog;version="[1.0.0,2.0.0)"在解析依赖性时,已部署的应用程序需要拉入附加的依赖性捆绑软件 blog.required.bundle(V1.2.0 级别)。 在软件包 blog.required.package 中提供了此捆绑软件。 此软件包将从共享捆绑软件空间中的依赖性捆绑软件连接至两个隔离的应用程序框架中的捆绑软件,如下图所示。
