将 WAR 部署到 OSGi Web 容器现在更加容易

工程 | Andy Wilkinson | 2009 年 6 月 16 日 | ...

正如 Rob 在他关于 OSGi Web 容器的介绍 中提到的,dm Server 会自动将系统包导入 Web 捆绑包。这被证明非常有用,尤其是在将现有的 WAR 文件部署到 OSGi 环境时。我最近花了一些时间将此功能从 dm Server 的 Web 子系统迁移到 OSGi Web 容器 RI。这篇博文将介绍新功能,以及如何使用它。

启用系统包的导入

有两种方法可以指示 RI 导入所有导出的系统包。

安装 Web bundle 时,现在可以使用 SpringSource-SystemPackages URL 参数来自动导入系统 bundle 的所有导出。例如:

install webbundle:file:mywar.war?SpringSource-SystemPackages=import

或者,如果您不想每次安装 WAR 文件时都记得指定该参数,可以通过将 SpringSource-SystemPackages 头添加到 WAR 的 manifest 来启用此功能。

SpringSource-SystemPackages: import

导入哪些包?

RI 会为系统 bundle 导出的每个包生成一个导入,除非 WAR 文件已经导入了该包,或者该包包含在 WEB-INF/classes 中,或者包含在 WEB-INF/lib 的 Jar 包中。如果 WAR 文件已经导入或包含该包,则系统 bundle 的导出将被忽略,任何现有的导入将保持不变。在生成新导入的情况下,它将以一个版本范围生成,该版本范围精确地包含从系统 bundle 导出的版本。

试用

首先,按照 Rob 之前 描述 的方式构建并启动 RI。需要注意的是,如果您使用的是 RI 的早期版本,则应该使用 clean 选项启动 PAX runner,以确保它使用新构建的 RI bundle 而不是缓存中的 bundle。

pax-run --clean --platform=equinox --snapshot runner.bundles

以前,为了成功使用 formtags WAR,需要使用 Import-Package URL 参数导入一些包。

install webbundle:file:formtags.war?Import-Package=org.xml.sax,org.xml.sax.helpers,javax.xml.parsers,org.w3c.dom

这有点麻烦,因为您需要知道要导入哪些包。现在,您可以使用 SpringSource-SystemPackages URL 参数。

osgi> install webbundle:file:formtags.war?SpringSource-SystemPackages=import
Bundle id is 43

在安装 formtags Web bundle 时无需列出要导入的特定包,它现在应该可以成功启动。

osgi> start 43

下一步是什么?

我们一直在开发一个真正模块化的 OSGi Web 应用程序的原型,并且非常接近向您展示。它将是一个新的 dm Server 组件,运行在 dm Server 现在嵌入的 OSGi Web 容器之上,取代了它以前的 Web 支持。一切顺利的话,应该在本周末准备就绪。请持续关注!

获取 Spring 新闻通讯

通过 Spring 新闻通讯保持联系

订阅

领先一步

VMware 提供培训和认证,助您加速进步。

了解更多

获得支持

Tanzu Spring 提供 OpenJDK™、Spring 和 Apache Tomcat® 的支持和二进制文件,只需一份简单的订阅。

了解更多

即将举行的活动

查看 Spring 社区所有即将举行的活动。

查看所有