领先一步
VMware提供培训和认证,以加速您的进步。
了解更多我很高兴地宣布(与Adrian一起),经过3个里程碑和2个候选版本后,Spring动态模块(以前称为Spring OSGi)1.0版本已发布。
自从我之前的文章(关于1.0 M1)以来,许多功能得到了改进或添加;我将在以后的文章中详细讨论它们(还有参考文档详细解释了该库),这里我只列举几个。
- 一致性
我们希望提供一个强大、简单且一致的编程模型。这就是为什么Spring动态模块构建在Spring之上并使用其成熟的概念、可靠性和普遍性。
- 高度非侵入性
推荐使用Spring DM的方式是**不要**在代码中使用其类,或者在bundle清单中导入任何这些类。如果您不在代码内部使用Spring,而只是将其用于应用程序配置,则同样适用此规则。Spring DM会为您创建应用程序上下文,因此您无需依赖Spring或Spring DM。并且不用担心自定义命名空间或XML模式——我们已经涵盖了这些。
- OSGi服务动态生命周期管理
这是Spring DM最重要的功能之一——能够像处理普通bean一样与OSGi服务交互。您可以发布和使用OSGi服务而无需编写任何代码;我们将处理动态性——并且您可以完全控制(以后会详细介绍)。
- 更智能的集成测试框架
由于我们在内部广泛使用Spring-DM集成测试,因此我们改进了默认设置、Maven集成,并使自动清单生成比以前更快、更智能。例如,该框架会自动确定测试bundle中可用的类,并且不会为其生成导入。
- 简化的bundle交互
Andy Piper(博客)添加了一种简单、声明式的方式,可以根据模块生命周期和Spring bean依赖关系来安装/启动/停止/更新bundle。
- 受管的启动/关闭上下文创建
在OSGi中,应用程序被分解成各种模块(也称为bundle),它们依赖于彼此的服务。这在模块之间创建了一个依赖树,这在启动和关闭期间变得很重要。传统上,这可以通过基于依赖顺序安装和启动bundle来解决,但这并不能完全解决问题。正如OSGi规范建议的那样,初始化时间较长的OSGi服务(例如连接池)应该依赖于与用于启动和停止bundle的不同线程。这意味着如果启动了一个bundle,并不意味着它的服务也启动了。并非每个应用程序都准备好等待在启动期间获取其所需的服务——实际上,很少有应用程序这样做。这意味着一个bundle将失败,因为它依赖于几毫秒后发布的服务(OSGi默认情况下是一个在VM内运行的平台,事情发生得非常快)。
这种行为并不罕见——实际上,在具有多个bundle的多核平台上启动时,这很常见。Spring DM通过确定依赖关系(来自Spring配置)并在它们可用之前等待它们来解决这个问题。类似的过程将用于关闭,Spring DM将根据它们的依赖顺序停止上下文,因此您无需担心启动或停止bundle。
- 无线程依赖等待
在讨论依赖机制时,我不能不提到Hal Hildebrand(参见他的博客)实现的用于依赖等待的“无线程”方法(听起来有点像矛盾,我知道——我们正在努力为其取一个更炫的名字)。由于各种服务需要可用于模块才能正确启动,因此需要某种等待/监视,这传统上意味着使用线程。
但是,在OSGi平台上可能存在(并且将存在)多个模块(很容易达到几十个)——每个模块使用一个等待线程根本无法扩展。我们努力改进此模型的一件事是,我相信我们提供了一个非常好的解决方案——等待过程根本**不**使用线程。这意味着无论部署了3个bundle还是300个bundle,除非模块实际启动,否则不会消耗CPU时间。
Spring动态模块不仅仅是“Spring化”API,而是处理不同的运行时环境。
关于工具,Spring IDE支持Spring DM命名空间,并且(感谢Christian)还为Eclipse PDE提供了Spring-DM特定的目标,这是Spring IDE夜间构建中可用的功能(有关安装和使用插件的更多信息可在参考文档中找到)。
既然1.0版本已经发布,接下来是什么?还有很多领域需要涵盖。
OSGi平台提供了一个专用的Http服务,但使用它需要编码。诸如资源加载、JSP生成和部署之类的操作可以大大简化。这是1.1版本的主要关注领域。
现代持久化工具提供高级功能,例如延迟加载,这些功能会弯曲OSGi环境强制执行的模块化边界,因为它们依赖于类生成和代理。我们希望解决这个问题,并且就像Web支持一样,无论使用的是普通JDBC还是/和ORM工具,都能提供流畅的体验。
继持久化问题之后,我们正在寻找在OSGi内部进行通用AOP的解决方案。这是一个难题,要正确地做到这一点,需要内部OSGi平台的支持。好消息是,像Equinox Aspects这样的项目已经带路,OSGi企业专家组(EEG)已经注意到这个问题。
如果您想了解有关Spring动态模块的更多信息,请查看项目页面和参考文档,并使用我们的邮件列表(论坛很快就会出现)。此外,最近我们制作了一些OSGi/Spring DM屏幕录像,这些录像在Spring DM主页上提供。第一个(由两部分组成),由我本人制作,展示了如何快速创建一个项目来使用Spring DM进行集成测试。
为什么进行集成测试?因为使用Spring DM这是一个非常简单快捷的过程,并且是学习OSGi(尤其是在模块化方面)非常有效的方法。
将来会有更多屏幕录像——请告诉我们您想看到什么,我们将根据请求数量相应地排队。