struts2 - 嵌入式模式下的 OSGi 暴露主应用程序中存在的 jar

标签 struts2 osgi apache-felix

我有一个 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 使用。

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

A good description of the embedded in a webapp dangers.

Specifics about classloader issues.

关于struts2 - 嵌入式模式下的 OSGi 暴露主应用程序中存在的 jar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13958648/

相关文章:

java - Struts2 有没有办法将元数据添加到 struts.xml 文件中的操作定义中?

java - 使用值 [Ljava.lang.String;@......] 设置表达式 X 时出错

struts2 - 我可以在struts2形式中使用html标签吗?

java - 当操作类实现 ParameterAware 时,无法从 Junit 中的请求获取数据

java - 读我自己的Jar list

java - 你如何从osgi中的字节反序列化一个对象

java - 单元测试 OSGi 组件

osgi - 系统 bundle 如何访问系统包?

java - OSGi DS : xml file is not generated

java - 无法解析 1.0 : missing requirement [1. 0] osgi.wiring.package; (&(osgi.wiring.package=