领先一步
VMware 提供培训和认证,助您加速进步。
了解更多正如 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 支持。一切顺利的话,应该在本周末准备就绪。请持续关注!