Spring动态模块1.0发布

工程 | Costin Leau | 2008年1月25日 | ...

我很高兴地宣布(与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版本已经发布,接下来是什么?还有很多领域需要涵盖。

Web支持

OSGi平台提供了一个专用的Http服务,但使用它需要编码。诸如资源加载、JSP生成和部署之类的操作可以大大简化。这是1.1版本的主要关注领域。

持久性

现代持久化工具提供高级功能,例如延迟加载,这些功能会弯曲OSGi环境强制执行的模块化边界,因为它们依赖于类生成和代理。我们希望解决这个问题,并且就像Web支持一样,无论使用的是普通JDBC还是/和ORM工具,都能提供流畅的体验。

AOP

继持久化问题之后,我们正在寻找在OSGi内部进行通用AOP的解决方案。这是一个难题,要正确地做到这一点,需要内部OSGi平台的支持。好消息是,像Equinox Aspects这样的项目已经带路,OSGi企业专家组(EEG)已经注意到这个问题。

 

结束语

 

如果您想了解有关Spring动态模块的更多信息,请查看项目页面和参考文档,并使用我们的邮件列表(论坛很快就会出现)。此外,最近我们制作了一些OSGi/Spring DM屏幕录像,这些录像在Spring DM主页上提供。第一个(由两部分组成),由我本人制作,展示了如何快速创建一个项目来使用Spring DM进行集成测试。
为什么进行集成测试?因为使用Spring DM这是一个非常简单快捷的过程,并且是学习OSGi(尤其是在模块化方面)非常有效的方法。

将来会有更多屏幕录像——请告诉我们您想看到什么,我们将根据请求数量相应地排队。

最后,“使用Spring DM进行OSGi集成测试

 

获取Spring新闻通讯

通过Spring新闻通讯保持联系

订阅

领先一步

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

了解更多

获得支持

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

了解更多

即将举行的活动

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

查看全部