我有一个 struts2 应用程序,它在嵌入式模式下运行 Apache Felix OSGi。是否可以将主 web 应用程序中的 jar 文件公开给 OSGi 包?否则,我将不得不部署相同的 jar 文件两次,一次包含在主应用程序的 webapp 类路径中,并再次部署为嵌入式 Felix OSGi 容器内的 bundle 。
最佳答案
是的。你当然可以做到这一点。但是,在 Web 应用程序中嵌入 OSGi 容器存在一些已知问题。这是因为 web 应用程序的类加载器上下文是非标准的。我一直在使用一个具有完全相同功能的应用程序。如果我能够从头开始编写应用程序,我就不会这样做。相反,我会将 Struts2 与其他所有内容一起部署为 OSGi 包本身。换句话说,我会完全接受 OSGi 模块化运行时。
话虽如此,OSGi 容器本身就是一个 bundle ,并且可以像任何 bundle 一样导出包。它被称为“系统 bundle ”,您可以将“主机”应用程序的类加载器中的包指定为通过系统 bundle 导出到 OSGi 容器的包。
请参阅此 page 的示例,并搜索该配置参数。
Constants.FRAMEWORK_SYSTEMPACKAGES_EXTRA
此配置参数包含来自主机应用程序的类加载器的包列表,这些包应该可供您的 osgi bundle 使用。
至于“问题”,请参阅以下链接作为开始:
关于struts2 - 嵌入式模式下的 OSGi 暴露主应用程序中存在的 jar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13958648/