Web 应用与 OSGi
自 Spring Dynamic Modules 首个里程碑发布以来,在 OSGi 中运行 web 应用的需求便接踵而至。这可能是最受期待的功能之一,也难怪,1.0 最终版本发布后,Web 支持便成为 1.1 分支的主要重点。我很高兴地报告,随着刚刚发布的 M2,正如 Juergen 已经暗示的,Spring-DM 不仅支持普通的 war 包(自 1.1.0 M1 起可用),还支持在 OSGi 内部运行的 Spring-MVC 应用。在这篇文章中,我想简要讨论典型的 OSGi web 场景和 Spring-DM 的方法。但首先,
为何在 OSGi 中部署 WAR 包?
简单的问题:OSGi 原生提供了版本控制、包连接和热重载。想象一下在你的应用中利用这些特性:你可以停止在以下目录中嵌入库WEB-INF/lib并开始在你的 web 应用之间共享它们,避免 taglibs 重复(同时保持多个版本运行),并在运行时只更新应用的某些部分。这尤其有用,因为 web 应用往往是分层的,因此在其生命周期中会经历大量的变化。为何在 OSGi 中运行 web 应用会存在问题?
Servlet 规范围绕着 web 容器 的概念展开:一个为 web 组件提供标准服务(例如生命周期管理(对象创建和销毁、线程分配)、并发、HTTP 请求处理等等)的运行时环境。另一方面,OSGi 平台也作为一个托管环境,拥有其服务注册表、包连接和版本控制(仅举几例)。为了解决这个问题,OSGi 委员会在纲要规范中设计了 Http Service。…