部署 WAR 到 OSGi Web 容器现在更加轻松

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

正如 Rob 在他关于 OSGi Web 容器介绍 的文章中提到的那样,dm Server 会自动将系统包导入 Web bundle。这已被证明非常有用,尤其是在将现有的 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 的清单文件中来启用此功能:

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 的新组件的形式出现,该组件运行在 OSGi Web 容器之上,dm Server 现在在其之前的 Web 支持中嵌入该容器。一切顺利的话,它应该在本周末准备好。敬请关注!

获取 Spring 新闻通讯

通过 Spring 新闻通讯保持联系

订阅

领先一步

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

了解更多

获得支持

Tanzu Spring 在一个简单的订阅中提供对 OpenJDK™、Spring 和 Apache Tomcat® 的支持和二进制文件。

了解更多

即将举行的活动

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

查看全部