Spring Dynamic Modules 达到 1.0!

工程 | Adrian Colyer | 2008年1月25日 | ...

嗯,这花了比我们最初预期的长得多的时间,但我真的很高兴地说,Spring Dynamic Modules 项目今天达到了 1.0 里程碑。当我于 2006 年 9 月首次发布关于此主题的文章("Spring OSGi support gaining momentum")时,最初的规范只是 Spring Framework 中一个问题的附件,与更广泛的 OSGi 社区的联系才刚刚开始形成。

十八个月后,Spring Dynamic Modules 已成为 Spring 产品组合中的一个成熟项目,其提交者来自 SpringSource、BEA 和 Oracle。BEA 和 Oracle 都使用 Spring Dynamic Modules 来构建他们自己的基于 OSGi 的产品(例如,参见 "WebLogic Event Server - why we used Spring"),而 Spring Dynamic Modules 讨论组拥有近 1000 名成员。OSGi 联盟本身已经成立了一个企业专家组……

Spring Dynamic Modules 1.0 发布

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

我很高兴地报告(与Adrian一起),经过 3 个里程碑和 2 个候选版本后,Spring Dynamic Modules(以前称为 Spring OSGi)1.0 已发布

自从我之前的文章(关于 1.0 M1)以来,许多功能得到了改进或添加;我将在以后的文章中详细讨论它们(还有参考文档详细解释了该库),所以我只列举几个

- 一致性

我们希望提供一个强大、简单且一致的编程模型。这就是为什么 Spring Dynamic Modules 建立在 Spring 之上并使用其久经考验的概念、可靠性和普遍性。

- 高度非侵入性

推荐使用 Spring DM 的方法是**不要**在代码中使用其类,也不要在 bundle 清单中包含任何导入。如果您不在代码中使用 Spring,而只用于应用程序配置,则同样适用。Spring DM 为您创建应用程序上下文,因此无需依赖 Spring 或 Spring DM。而且不用担心自定义命名空间或 XML 模式 - 我们已经涵盖了它们。

- OSGi 服务动态生命周期管理

这是 Spring DM 最重要的功能之一——能够像使用普通 bean 一样与 OSGi 服务进行交互。您可以发布和使用 OSGi 服务而无需编写任何代码;我们将处理动态——并且您可以完全控制(以后会详细介绍)。

- 更智能的集成测试框架

由于我们在内部广泛使用 Spring-DM 集成测试,因此我们改进了默认设置、Maven 集成,并使自动清单生成比以前更快、更智能。例如,该框架会自动确定测试包中可用的类,并且不会为其生成导入。

- 简化的 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 Dynamic Modules 不仅仅是“Spring 化”API,而是处理不同的运行时环境。

 

关于工具,Spring IDE 支持 Spring DM 命名空间,并且(感谢Christian)还为 Eclipse PDE 提供了 Spring-DM 特定的目标,这是 Spring IDE 夜间构建中可用的功能(有关安装和使用插件的更多信息可在参考文档中找到)。

 

未来的方向

 

那么,现在 1.0 已经发布,接下来是什么?还有很多领域需要涵盖

Web 支持

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

持久性

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

AOP

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

 

结束语

 

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

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

话不多说,“使用 Spring DM 进行 OSGi 集成测试

 

领域对象依赖注入功能的新改进

工程 | Ramnivas Laddad | 2008年1月24日 | ...

Spring 的依赖注入 (DI) 机制允许配置在应用程序上下文中定义的 bean。如果您想将相同的思想扩展到非 bean 会怎样?Spring 对领域对象 DI 的支持利用 AspectJ 织入将 DI 扩展到任何对象,即使它是通过 Web 或 ORM 框架创建的也是如此。这使得可以创建丰富的领域行为对象,因为领域对象现在可以与注入的对象协作。在本博客中,我将讨论 Spring 框架在此领域的最新改进。

领域对象 DI 背后的核心思想非常简单:一个 AspectJ 织入的方面选择与创建反序列化匹配特定规范的任何对象的连接点相对应的连接点。对这些连接点的建议将依赖项注入到正在创建或反序列化的对象中。当然,魔鬼在于细节。例如,您如何选择与反序列化对应的连接点,或者您如何仅对每个对象注入一次依赖项?通过提供一些预先编写的……

Spring 作为技能要求超越 EJB

工程 | Rod Johnson | 2008年1月24日 | ...

职位列表是衡量技术真正采用情况的一个很好的指标。它们表明公司是否在花钱,从而能够区分实质和炒作;它们表明开发人员获得和提升相关技能的重要性(技术延续的一个重要因素);它们为公司采用特定技术提供了良好的安全指南。

因此,Indeed.com(一个职位列表聚合网站)的jobtrends网站是一个重要的资源。它允许随着时间的推移跟踪职位要求数量的趋势,并且……

SpringSource 认证计划

工程 | Daryl Heinz | 2008年1月17日 | ...

注意:此文章已编辑以反映 Spring 向Pivotal的迁移。一篇关于Spring 培训和认证的较新的博客在这里

自从六个月前我加入SpringSource担任培训总监以来,我不断听到一个同样的请求。基于对Spring技能日益增长的需求,全球的开发者和顾问都在寻求量化的方法来证明他们的Spring专业技能。同样,需求背后的招聘经理们也希望有一个认证项目来帮助他们识别和招聘那些拥有Spring基础知识并能立即投入使用的技术人员。

正如Spring项目团队响应开源社区需求一样,我们也做出了回应,并很高兴地宣布推出SpringSource认证项目。该项目将于今年一月(2008年)启动,首先推出Spring Framework 专业认证……

采用的力量:为什么没有一家公司能够忽视开发者的需求

工程 | Rod Johnson | 2008年1月16日 | ...

今天真是个新闻不断的日子,我们在伦敦完成了首届年度Spring eXchange。首先是Sun Microsystems收购MySQL的新闻,然后是期待已久的甲骨文收购BEA Systems。在进一步评论之前,我想祝贺我们在MySQL的所有朋友,特别是Mårten Mickos,以及我们在BEA的所有朋友。该行业整合的趋势正在增强。

作为一家开源公司,我们非常高兴看到MySQL获得应有的回报。我们亲眼目睹了Mårten和他的同事们为构建他们的软件、社区和强大的……所付出的努力。

祝托尼·霍尔生日快乐

工程 | Rod Johnson | 2008年1月14日 | ...

上周五是托尼(C.A.R.)·霍尔的生日。C. A. R. Hoare是谁?如果你是程序员,你可能熟悉快速排序——这是一种优雅且惊人简单的排序算法,在大多数情况下速度极快。如果你学习过计算机科学,你几乎肯定用多种语言实现了快速排序,并且会识别此页面上的动画。霍尔在1960年发明了快速排序,现在它是使用最广泛的排序算法。快速排序运行中

除了其他贡献外,霍尔还发明了用于指定…交互的通信顺序进程 (CSP) 语言。

捕获故障和系统状态(第一部分)

工程 | Alef Arendsen | 2008年1月7日 | ...

在Spring Experience上,我主持了一个关于各个方面的研讨会。其中一个是我上周描述的Hibernate同步方面。另一个是能够捕获首次故障和系统状态的方面,有时称为首次故障数据捕获 (FFDC)。我主持这个研讨会是为了展示一些非常有用的方面,但人们在实践中可能还没有遇到过。我经常听到人们询问日志记录、跟踪、事务管理和安全性以外的方面。我认为Hibernate同步方面和FFDC方面是很好的例子。

介绍

FFDC的目标是在发生错误时捕获有关系统当前状态的尽可能多的信息。以下条目解释了该方面的功能以及如何在您自己的应用程序中使用它。

让我们……

在JDBC操作之前,刷新Hibernate会话(包含TSE示例代码)

工程 | Alef Arendsen | 2008年1月4日 | ...

在一个事务中混合使用对象关系映射器和不使用对象关系映射器的代码可能会导致数据在应该可用时在底层数据库中不可用。由于我偶尔会遇到这种情况,我认为如果我写下解决这个问题的方法对大家都有帮助。

简而言之:我将在本文的其余部分介绍一个方面,该方面会触发底层持久性机制(JPA、Hibernate、TopLink)将任何脏数据发送到数据库。

顺便说一下,我在去年12月在Spring Experience的其中一个研讨会上介绍了这个方面,这篇博文也包含了源代码,供那些……

Spring .NET 1.1和容器配置

工程 | Mark Pollack | 2008年1月4日 | ...

对于Spring.NET来说,这相当忙碌的一年。在12月份正式发布之前,我们经历了两个里程碑和两个候选版本。1.1版本的首批代码早在2004年末由Aleks Seovic编写,他开始从事ASP.NET框架的工作。简而言之,这花费了很长时间。值此年末之际,回顾过去和现在都是很自然的事情,我想感谢项目中的其他成员和Spring.NET社区的所有贡献和支持。我期待着2008年取得巨大成功!

Spring.NET 1.1的功能集相当广泛。用于依赖注入的IoC容器、AOP、ASP.NET框架、声明式事务管理和更多。但是,您可以获得的最大收益(以提高代码的结构和可测试性)是将依赖注入和AOP添加到您的“开发者工具箱”中。依赖注入是更基础的……

获取Spring通讯

通过Spring通讯保持联系

订阅

领先一步

VMware提供培训和认证,以加快您的进度。

了解更多

获取支持

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

了解更多

即将举行的活动

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

查看全部