SpringSource Tool Suite 2.9.2 发布

发布 | Martin Lippert | 2012年5月24日 | ...

亲爱的 Spring 社区,

 

我们很高兴宣布 SpringSource Tool Suite (STS) 的更新版本 2.9.2 已发布。

 

此更新版本已更新,以支持并包含刚刚发布的 vFabric tc Server 2.7,并包含一些错误修复。有关新功能和错误修复的更多详细信息,请参见 新特性和注意事项 文档。详细的 安装说明 也已提供。一如既往,您可以在 STS 下载页面 下载。

 

尽情享用!

事务、缓存和 AOP:理解 Spring 中的代理使用

工程 | Michael Isvy | 2012年5月23日 | ...

在 Spring 框架中,许多技术特性都依赖于代理的使用。我们将通过三个示例深入探讨此主题:事务缓存 Java 配置

本博客文章中显示的所有代码示例都可以在我的 github 帐户上找到。

事务

第一步:无事务

下面的 Service 类目前还没有事务性。我们先看一下它的现状,然后再让它具有事务性。

@Service
public class AccountServiceImpl  implements AccountService {
 //…

//Not specifying a transaction policy here!
 public void create(Account account) {
 entityManager.persist(account);
 }
}

由于方法“create”没有事务性,它很可能会抛出异常(因为这个 Account 对象不应该……

本周 Spring - 2012年5月22日

工程 | Josh Long | 2012年5月22日 | ...

欢迎回到新一期的本周 Spring。像往常一样,本周我们有很多精彩内容!

  1. Rossen Stoyanchev 发布了他在 Spring MVC 3.2 预览系列中的另一篇博客。最新一篇介绍了一个 Spring MVC 聊天示例
  2. Oliver Gierke 宣布了 Spring Data JPA 1.1.0 GA 版本。Spring Data JPA 使构建基于 JPA 的 Repository 变得非常简单,从而节省了繁琐的样板代码。这个新版本包括用于查询生成的新关键字 (LessThanEqual, GreaterThanEqual, Before, After, StartsWith, EndsWith, 和 Contains),一个方便的 PersistenceUnitPostProcessor 用于扫描 JPA 实体(用于 Spring 3.1 之前的版本),支持 @Query 中的原生查询,以及支持声明式锁定。
  3. Jonathan Brisbin 宣布了 Spring Data REST 1.0.0.M2 版本。Spring Data REST 可以轻松地将您的 Spring Repository 对象导出为 RESTful 端点。新版本包括支持调用 Repository 接口的查询方法,支持 JSR 303 和 Spring Validator 验证,改进了对每次保存或删除前后发出的 Spring ApplicationEvent 的支持,以及基于注解的配置。
  4. Oleg Zhurakousky 宣布了 Spring Integration 2.2 的第一个里程碑版本。此版本包括依赖项升级、JPA 支持以及对 Spring AMQP 新支持的“publisher confirms and returns”的支持。
  5. Gary Russell 宣布了 Spring AMQP 的 1.1.0 版本,其中包含对 RabbitMQ 2.8.x 客户端的支持,而 RabbitMQ 2.8.x 客户端反过来支持镜像队列、代理故障转移、publisher confirms、returns、federated exchanges 等等。
  6. Matt Vickery 发表了一篇精彩的博文,介绍了Spring Integration 的 splitter-aggregator 模式
  7. Willie Wheeler 在他的自定义配置管理数据库 (CMDB) 上发表了一篇精彩的博文。该博文详细介绍了该项目,然后讨论了他在重建 CMDB 后端时使用 Spring Data 的 Repository。很棒的博文,Willie!
  8. Doug Haber 撰写了一篇精彩的博文,关于使用 Spring Data 和 Spring 3.1 中的 REST 支持处理分页
  9. 博客作者 panbhatt 发表了一篇详细的博文,关于如何使用 Spring MVC 的 REST 支持来解决他遇到的特定问题。
  10. 博客作者 OBSERWATORZY 描述了他在尝试消费 RESTful 服务时的特定思考过程,以及他是否想知道 Spring 是否提供了解决方案(当然提供了!)。继续阅读以了解他的解决方法。
  11. Vishal Biyani 撰写了一篇很好的入门文章,关于如何开始使用 Spring Roo 和 Cloud Foundry
  12. RabbitMQ 博客有一篇精彩的文章,介绍了排队论(并介绍了吞吐量、延迟和带宽)。
  13. JAXEnter 对本文中提到的一些新闻发布进行了精彩总结,包括 Spring AMQP 和 Spring Data JPA 的 GA 版本。

Spring Integration 2.2.0.M1 发布

发布 | Oleg Zhurakousky | 2012年5月17日 | ...

我们很高兴宣布 Spring Integration 2.2 流的第一个里程碑版本 - Spring Integration 2.2.0.M1Spring Integration 提供了 Spring 编程模型的扩展,以支持著名的企业集成模式

除了常见的错误修复外,此版本还带来了不少新功能和升级:

  • 依赖项升级,例如 Spring 3.1.0.RELEASE、Spring AMQP 1.1.0.RELEASE、Spring Data Mongo 1.1.0.M1、Spring Gemfire 1.1.1.RELEASE
  • JPA 支持
  • 集成上下文平滑关闭的初步支持
  • 基于 Spring AMQP 新功能的“Publisher Confirms and Returns”支持
  • 等等。

此版本还包含许多改进。您可以在此处查看完整的发布说明。

有关 Spring Integration 的更多信息,请参阅项目的主页

本周 Spring,2012年5月15日

工程 | Josh Long | 2012年5月16日 | ...

欢迎回到新一期的本周 Spring!。像往常一样,本周有很多内容要介绍。那么,继续!

  1. Rossen Stoyanchev 刚刚发布了他介绍 Spring MVC 3.2 新功能系列博客的第二部分和第三部分。在第一部分中,Rossen 介绍了如何使 Spring MVC @Controller 异步化。在第二部分中,Rossen 介绍了如何向现有 Web 应用添加长轮询。在需要通过客户端应用模拟服务器端推送的许多场景中,长轮询都很有用。
  2. <LI>  The video for <a href= "http://blog.springsource.org/author/ozhurakousky/">Oleg Zhurakousky</A>'s followup webinar introducing <a href ="http://www.springsource.org/node/3550">More Practical Tips and Tricks with Spring Integration</A> has just been posted. Check it out! </LI> 
     <LI> <A href ="http://blog.springsource.org/author/rclarkson/">Roy Clarkson</A>  just announced that <a href = "http://www.springsource.org/spring-mobile/news/1.0.0-released">Spring Mobile 1.0.0 has  been released</A>!  </LI>
    
    
    
    <LI>  SpringSource and Cloud Foundry rockstar  <a  href  ="http://blog.springsource…

Spring Data JPA 1.1.0 GA 发布

发布 | Oliver Drotbohm | 2012年5月16日 | ...

亲爱的 Spring 社区,我很高兴宣布 Spring Data 1.1.0 的 GA 版本已发布。整个版本修复了 72 个 bug,并带来了改进和新功能。以下是最重要的几点:

  • 用于查询生成的新关键字:LessThanEqual, GreaterThanEqual, Before, After, StartsWith, EndsWith, Contains
  • PersistenceUnitPostProcessor 用于扫描 JPA 实体(用于 Spring 3.1 之前的版本)
  • Repository 的 CDI 集成(详细信息请参见此处
  • 支持 @Query 中的原生查询
  • 支持声明式锁定

发布二进制文件可通过我们的 Artifactory 实例获取,地址是 http://repo.springsource.org,稍后也将提供在 Maven Central 中。

下载 | JavaDocs | 参考文档 (HTML) | 参考文档 (PDF) | 变更日志

期待您在论坛问题跟踪器中提供反馈。

Spring Data REST 1.0.0.M2 发布

发布 | Jon Brisbin | 2012年5月16日 | ...

紧随 Spring Data JPA 1.1.0 GA 版本之后,我很高兴宣布 Spring Data REST 的里程碑 2 版本。除了许多错误修复之外,这个 M2 版本还包括对 Spring Data REST 导出器功能的重大更新。

新功能包括:

  • 查询方法支持 - Spring Data REST 1.0.0.M2 支持调用 Repository 接口的查询方法。结果以指向顶级资源的链接形式返回。
  • 全面验证支持 - 除了 JSR-303 验证,Spring Data REST 导出器还识别在您的 ApplicationContext 中声明的 Spring Validator Bean,以提供丰富的验证支持。您的 Validator Bean 可以执行任何操作,甚至可以查找其他数据来验证对象图的完整性。
  • ApplicationEvent 处理 - 导出器的验证支持建立在 Spring ApplicationEvent 机制之上。ApplicationEvents 在每次保存或删除之前和之后发出,允许您的代码绑定到这些生命周期事件并触发其他操作。
  • 基于注解的 URL 配置 - 有一个新的注解:@RestResource,您可以将其放在 Repository 接口或 Repository 的查询方法上,以影响资源的导出 URL 和指向该资源所生成的链接关联的“rel”属性。

Starter Web 应用 | Wiki | 发布说明

要了解有关该项目的更多信息,请访问 Spring Data REST 的主页,或访问Github 仓库下载源代码。

Spring MVC 3.2 预览:聊天示例

工程 | Rossen Stoyanchev | 2012年5月16日 | ...

最后更新于 2012年11月5日 (Spring MVC 3.2 RC1)

之前博客文章中,我介绍了 Spring MVC 3.2 中基于 Servlet 3 的异步能力,并使用 spring-mvc-showcase 和 Spring AMQP 的 stocks 示例来演示它。本文介绍了一个聊天示例,其中外部事件不是 AMQP 消息,而是包含聊天消息的 HTTP POST 请求。在本文的第二部分,我将转到一个分布式聊天示例,其中的事件是 Redis 通知。

聊天并不是 Web 应用的常见需求。然而,它是一个很好的例子,说明了只有通过实时通知才能满足的需求。它比电子邮件或状态警报对时间延迟更敏感,而且在浏览器中与朋友聊天、在网络研讨会期间与同事聊天或在购物网站上与在线客服聊天并不罕见。您可以想象其他类型的在线协作。

示例

The spring-mvc-chat sample is available on Github. Although not the focus of this blog post, the client side uses Thymeleaf, knockout.js, and jQuery. Thymeleaf is an excellent alternative to JSPs that enables clean HTML templates with support for previews allowing a designer to double-click an HTML template and view it unlike a JSP that requires a Servlet container. knockout.js 是一个客户端 MVC 框架,非常方便将行为附加到 HTML 元素。要快速了解它,请参考它优秀的教程之一。jQuery 用于 DOM 脚本和 Ajax 请求。

ChatController

ChatController 暴露了获取和发布聊天消息的操作。这是获取消息的方法:


@RequestMapping(method=RequestMethod.GET)
@ResponseBody
public DeferredResult<List<String>> getMessages(@RequestParam int messageIndex) {

  final DeferredResult<List<String>> deferredResult = new DeferredResult<List<String>>(null, Collections.emptyList());
  this.chatRequests.put(deferredResult, messageIndex);

  deferredResult.onCompletion(new Runnable() {
    @Override
    public void run() {
      chatRequests.remove(deferredResult);
    }
  });

  List<String> messages = this.chatRepository.getMessages…

Spring AMQP 1.1.0 发布

发布 | Gary Russell | 2012年5月16日 | ...

Spring AMQP 将 Spring 编程模型的熟悉优势带给了 AMQP,特别是 RabbitMQ。

我们很高兴宣布适用于 Java 的 spring-amqp 1.1.0 版本正式发布,该版本支持 RabbitMQ 2.8.x 客户端,并提供以下功能...

  • 镜像队列
  • 代理故障转移
  • Publisher Confirms
  • Returns
  • 联邦交换器
  • ...等等

更多信息请参阅项目的主页

Spring Integration 2.2.0 里程碑 1 版本支持此 spring-amqp 版本的特性。

Spring MVC 3.2 预览:向现有 Web 应用添加长轮询

工程 | Rossen Stoyanchev | 2012年5月14日 | ...

最后更新于 2012年11月5日 (Spring MVC 3.2 RC1)

在我的上一篇文章中,我讨论了如何通过返回一个由 Spring MVC 在单独线程中调用的 Callable 来使 Spring MVC 控制器方法异步化。

但是,如果异步处理依赖于在 Spring MVC 未知的线程中接收某些外部事件(例如,接收 JMS 消息、AMQP 消息、Redis 发布-订阅通知、Spring Integration 事件等等),怎么办?我将通过修改来自 Spring AMQP 项目的现有示例来探索这种情况。

示例

Spring AMQP 有一个股票交易示例,其中 QuoteController 通过 Spring AMQP 的 RabbitTemplate 发送交易执行消息,并通过 Spring AMQP 的 RabbitMQ listener container 以消息驱动的 POJO 风格接收交易确认和报价消息。

在浏览器中,该示例使用轮询来显示报价。对于交易,初始请求提交交易并返回一个确认 ID,然后使用该 ID 进行轮询以获取最终确认。我已更新该示例以利用 Spring 3.2 Servlet 3 异步支持。 master 分支包含更改前的代码,spring-mvc-async 分支包含更改后的代码。下图显示了对报价请求频率的影响(使用 Chrome 开发者工具):

更改前:传统轮询

更改后:长轮询

如您所见,常规轮询会非常频繁地发送新请求(相隔几毫秒),而长轮询则请求之间可能相隔 5、10、20 秒或更长时间——这显著减少了总请求数量,同时不会损失延迟,即新报价出现在浏览器中所需的时间。

获取报价

那么需要进行哪些更改呢?从客户端角度来看,传统轮询和长轮询是无法区分的,因此 HTML 和 JavaScript 没有改变。从服务器端来看,请求必须被保持直到新的报价到来。以下是控制器处理报价请求的方式:



// Class field
private Map<String, DeferredResult> suspendedTradeRequests = new ConcurrentHashMap<String, DeferredResult>();

...

@RequestMapping("/quotes")
@ResponseBody
public DeferredResult<List<Quote>> quotes(@RequestParam(required = false) Long timestamp) {

  final DeferredResult<List<Quote>> result = new DeferredResult<List<Quote>>(null, Collections.emptyList());
  this.quoteRequests.put(result, timestamp);

  result.onCompletion(new Runnable() {
    public void run() {
      quoteRequests…

获取 Spring 快讯

订阅 Spring 快讯,保持连接

订阅

抢占先机

VMware 提供培训和认证,助您飞速进步。

了解更多

获取支持

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

了解更多

即将举行的活动

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

查看全部