2

我有一个以嵌入式模式运行 Apache Felix OSGi 的 struts2 应用程序。是否可以将主 webapp 中的 jar 文件公开给 OSGi 包?否则,我将不得不部署相同的 jar 文件两次,包括在主应用程序的 webapp 类路径中,并再次作为捆绑包部署在嵌入式 Felix OSGi 容器中。

4

1 回答 1

2

是的。你当然可以做到这一点。但是,在 webapp 中嵌入 OSGi 容器存在一些已知问题。这是因为 webapp 的类加载器上下文是非标准的。我一直在使用一个做同样事情的应用程序。如果我能够从头开始编写应用程序,我不会这样做。相反,我会将 Struts2 部署为 OSGi 包本身,以及其他所有内容。换句话说,我会完全接受 OSGi 模块化运行时。

话虽如此,OSGi 容器本身就是一个包,可以像任何包一样导出包。它被称为“系统包”,您可以将“主机”应用程序的类加载器中的包指定为要通过系统包导出到 OSGi 容器的包。

请参阅此页面上的示例,并搜索此配置参数。

Constants.FRAMEWORK_SYSTEMPACKAGES_EXTRA

此配置参数包含主机应用程序的类加载器中的包列表,这些包应该可用于您的 osgi 包。

至于“问题”,请参阅这些链接作为开始:

很好地描述了嵌入到 webapp 中的危险。

关于类加载器问题的细节。

于 2012-12-19T19:45:30.860 回答