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

时间:2012-12-19 18:22:42

标签: struts2 osgi apache-felix

我有一个struts2应用程序,它在嵌入式模式下运行Apache Felix OSGi。是否可以将主webapp中的jar文件暴露给OSGi包?否则,我必须在主应用程序的webapp类路径中包含两次相同的jar文件,并再次在嵌入式Felix OSGi容器中部署为bundle。

1 个答案:

答案 0 :(得分:2)

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

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

请参阅此page上的示例,然后搜索此配置参数。

Constants.FRAMEWORK_SYSTEMPACKAGES_EXTRA

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

至于“问题”,请将这些链接视为开头:

A good description of the embedded in a webapp dangers.

Specifics about classloader issues.