现在可以更轻松地将 WAR 文件部署到 OSGi Web 容器了

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

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

启用系统包的导入

您可以通过两种方式指示 RI 导入所有导出的系统包。

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

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

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

SpringSource-SystemPackages: import

导入哪些包?

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

尝试一下

首先,按照 Rob 之前 描述 的方式构建并启动 RI,但如果您使用了 RI 的先前版本,则应使用 clean 选项启动 PAX runner,以确保它使用新构建的 RI 捆绑包,而不是其缓存中的捆绑包

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 捆绑包时要导入的特定包,它现在应该可以成功启动

osgi> start 43

下一步是什么?

我们一直在研究真正的模块化 OSGi Web 应用程序的原型,并且我们越来越接近向您展示一些东西。 它将以 dm Server 的一个新组件的形式出现,运行在 OSGi Web 容器之上,该容器现在嵌入在 dm Server 中,以取代其以前的 Web 支持。 一切顺利的话,应该在本周末之前准备好。 敬请关注!

获取 Spring 新闻邮件

通过 Spring 新闻邮件保持联系

订阅

取得领先

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

了解更多

获得支持

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

了解更多

即将举行的活动

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

查看全部