本周 Spring:2011 年 2 月 8 日

工程 | Josh Long | 2011 年 2 月 08 日 | ...

本周 Spring 社区又迎来了激动人心的一周。社区似乎对新的 Tomcat 版本、移动客户端、Spring Data 和大数据(例如 Spring Gemfire、Redis,当然还有 Spring Data 项目)非常感兴趣。

提醒一下:Juergen Hoeller(Spring 核心框架的负责人,并以某种方式为所有姊妹 Spring 项目做出了贡献)将在两天后(2 月 10 日)举办两场相同的网络研讨会——北美场次欧洲场次——介绍 Spring 3.1 的新功能!请务必注册参加这个关于下一代最广泛使用的 Java 框架的免费网络研讨会!

这是一次创纪录的活动,预注册人数惊人。虽然目前还没有 Spring 3.1 的二进制文件(敬请期待!),但Spring 项目的代码始终可供您使用,因此,如果您像我一样对所有新功能感到兴奋,您可以在……之前观看此网络研讨会并开始试用它。

Spring Mobile 1.0.0.M3 发布

发布 | Keith Donald | 2011 年 2 月 04 日 | ...

尊敬的 Spring 社区:

我们很高兴地宣布,Spring Mobile 项目的第三个里程碑版本现已发布!

Spring Mobile 为 Spring MVC 提供扩展,有助于开发跨平台的移动 Web 应用程序。1.0.0.M3 版本提供了一个用于用户站点首选项管理的通用工具,可以独立使用或与移动站点切换器结合使用。请参阅更改日志参考手册以获取所有信息。

下载发行版或使用以下方法从 Maven 获取工件

    <repository>
        <id>org.springframework.maven.milestone</id>
        <name>Spring Maven Milestone Repository</name>
        <url>http://maven.springframework.org/milestone</url>
    </repository>
&lt;dependency&gt;
    &lt;groupId&gt;org.springframework.mobile&lt;/groupId&gt;
    &lt;artifactId&gt;spring-mobile-device&lt;/artifactId&gt;
    &lt;version&gt;1.0.0.M3&lt;/version&gt;
&lt;/dependency&gt;

github.com/SpringSource/spring-mobile-samples获取示例应用程序 | git clone git://github.com/SpringSource/spring-mobile-samples.git

此版本标志着我们与社区中早期采用者的第三次迭代,他们在自己的应用程序中使用 Spring Mobile。如果您正在构建移动 Web 应用程序,我们鼓励您尝试 1.0.0.M3 并与我们协作开发项目的下一个版本。

本周 Spring:2011 年 2 月 1 日

工程 | Josh Long | 2011 年 2 月 02 日 | ...

本周社区发展迅速,令人着迷。具体而言,兴奋点在于更新、更前沿的技术,如 Spring Data、Gemfire 和 Virgo,或者是对 Tomcat 和 SpringSource Tool Suite 等技术的改进。无论如何,本周有很多内容需要学习,让我们开始吧!

  1. SpringSource Tool Suite 2.6.0.M1已发布。此新版本具有改进的内容辅助和快速修复功能、用于基于 Spring MVC @RequestMapping 的应用程序的新向导和视图。它还具有改进的 Groovy 内容辅助性能以及改进的 Groovy 语法高亮显示。
  2. Spring Data Graph - Neo4j 支持 1.0.0.M2 发布。新版本具有许多新功能,包括改进的索引支持——节点和关系的完整命名索引支持、节点和关系实体的删除、实体从框架方法实例化时的严格类型检查(根据类型策略)、对任意图实体的动态投影支持,以及对 Neo4j 1.2 的更新支持。
  3. Shekhar Gulati 在 IBM 的 DeveloperWorks 上发布了Spring Roo 入门(第 1 部分,从源代码构建)
  4. Tomcat 项目的高级贡献者 Mark Thomas撰写了关于在 Tomcat 7 中防止跨站点脚本攻击的文章
  5. VMWare vFabric GemFire 团队刚刚制作了一段视频,演示如何设置GemFire 的 Hibernate 缓存模块。视频演示了如何在 Maven 中配置该模块,然后演示了它在基于 Spring-DAO 的实现中的用法。最后,演示了如何使用 Spring Insight 监控应用程序的性能。对于一项更酷的技术来说,这是一段很酷的视频!
  6. Sebastian Pietrowski发布了一篇关于 Spring Data Redis 的优秀入门文章
  7. Shekhar Gulati 贡献了另一篇很棒的文章——同样在Spring Data 和 Redis上。 Spring Data 是用于支持更多专业数据持久化需求的一系列技术的总称。其中很大一部分是对当今可用的许多 NoSQL 数据存储的深入支持,以及对基于 JDBC 的持久化的更多专业支持。
  8. Java Code Geeks 撰写了一篇关于使用 Spring AOP 进行面向方面编程的优秀文章
  9. Jose Delgado 撰写了一篇关于如何在 Spring Roo 中配置应用程序以处理两个数据库的文章。
  10. Sivaprasadreddy Katamreddy 再次发力,这次是关于将控制反转和依赖注入应用于方法设计
  11. Glyn Normington 在 Twitter 上发文称 Eclipse Virgo 内核现在已成功运行,这是首次在使用 OSGi 4.3 框架挂钩实现的区域有向图上运行。恭喜!Eclipse Virgo 是以前称为 SpringSource dm Server 的新改进版本的名称。
  12. David Dossot 转推了一篇有趣的文章,探讨了

    使用 Spring 的 Activiti BPMN 2 引擎,该文章发表于上个月初。

  13. 在 Tomcat 6 和 7 的所有令人兴奋的消息中,很容易忘记 Tomcat 5 仍在更新和支持。 Tomcat 5.5.32 也刚刚发布!

Spring GemFire 1.0.0 发布,适用于 Java 和 .NET

发布 | Costin Leau | 2011 年 2 月 02 日 | ...

尊敬的 Spring 社区:

我们很高兴地宣布,Spring GemFire 1.0 项目的第一个 GA 版本现已适用于 Java 和 .NET!Spring GemFire 项目旨在简化使用 GemFire 作为分布式数据管理平台构建 Spring 驱动的、高度可扩展的应用程序的过程。

立即下载适用于 Java 的 Spring GemFire | 适用于 .NET 的 Spring GemFire

此版本包含以下功能

  • GemFire 基础设施(如 Cache、Region、Interest 等)的声明式依赖注入样式配置
  • 广泛的命名空间支持,用于配置所有主要的 GemFire 组件:缓存、复制、分区和客户端区域等
  • 将异常转换为 Spring 的可移植 DataAccess 异常层次结构
  • 模板和回调支持,便于轻松访问本机 API
  • 事务管理支持
  • Spring 支持的 GemFire 托管对象的连接
  • 自动生成非反射式 Instantiator
  • 对 GemFire 6.5(除了 6.0)的原生支持
  • 声明式缓存建议(适用于 .NET)

通过 Spring GemFire,Spring 用户在与 GemFire 交互时应该感觉很熟悉,而熟悉 GemFire 的开发人员将看到 Spring 容器及其……带来的好处和灵活性。

Spring Data Graph - Neo4j 支持 1.0.0.M2 发布

发布 | Thomas Risberg | 2011 年 2 月 01 日 | ...

尊敬的 Spring 社区:

我很高兴地宣布,支持 Neo4j 的 Spring Data Graph 1.0 项目的第二个里程碑版本现已发布!Spring Data 项目的主要目标是简化构建使用新数据访问技术(如非关系数据库、MapReduce 框架和基于云的数据服务)的 Spring 驱动的应用程序的过程。Graph Neo4j 模块提供了与Neo4j 图数据库的集成。

下载 | JavaDocs | 参考文档 | 更改日志

要了解有关该项目的更多信息,请访问Spring Neo4j 主页

此版本包含以下功能……

SpringSource Tool Suite 2.6.0.M1 发布

发布 | Christian Dupuis | 2011 年 1 月 28 日 | ...

尊敬的 Spring 社区:

我们很高兴地宣布,我们刚刚发布了下一版 SpringSource Tool Suite (STS) 的第一个里程碑版本。

此里程碑版本的一些亮点

  • 用于 @Autowired 和 @Qualifer 的内容辅助和快速修复
  • 在 @RequestMapping 中用于路径变量的内容辅助
  • 更新的 Spring 项目向导
  • ITD 中的 RequestMapping 现在位于 Spring Explorer 和 RequestMapping-View 中
  • 改进的 Groovy 内容辅助性能
  • 改进的 Groovy 语法高亮显示
有关新功能和错误修复的更多详细信息,请参阅 2.6.0.M1 的新增功能文档。还提供了详细的安装说明

与往常一样,可以在STS 下载页面(查看“其他下载”)中找到下载。

绿色 Bean:企业消息传递和 Spring 入门

工程 | Josh Long | 2011 年 1 月 26 日

| ...

在本篇文章中,我们将介绍消息的核心概念,以及 Spring 框架及其相关项目对各种消息类型的丰富支持。

什么是消息?为了更好地解释这一点,我将引用 Gregor Hohpe 和 Bobby Woolf 合著的开创性书籍《企业集成模式》(Addison Wesley,2004 年)中提供的示例。当你拨打电话时,你试图将信息传递给另一方。只有当对方在你拨打电话时可用时,这才能奏效。由于并非总是能够接听电话,因此我们使用语音邮件来排队消息。呼叫者在语音邮件中留言,然后被呼叫者可以在稍后异步地检索该消息(或者实际上是许多消息)。

在这个示例中,语音邮件位于双方之间。它存储消息,然后在被呼叫者(即接收者)检索时传递消息。在企业消息的世界中,事情的工作方式非常相似:一方将消息发送到消息代理(也称为面向消息的中间件 - MOM),另一方(当该方可以时)接收或显式查询消息代理中的任何消息。

这就是类比不再有用的地方。与语音邮件相比,消息代理有很多选项。消息代理处于理想的位置,可以提供额外的服务,例如路由,并保证消息传递。消息代理可以针对不同的用例进行优化,例如,你可以用速度换取持久性。消息代理可以将消息持久化到外部存储中以确保持久性,尽管这通常是一种可以在速度的名义下切换的配置。

在语音邮件示例中,一条消息由一方发送,然后传递给另一方 - 通信是点对点的。消息代理支持这一点,以及另一种称为发布-订阅的通信类型,其中消息传递给多个客户端。

消息代理的一个常见用途是解决两个不同系统之间的集成问题。发送到消息代理的数据通常采用发送方和接收方都通用的格式。两个系统使用消息代理唯一需要达成一致的是数据契约。消息通常包含消息体,其中存储消息本身的内容,以及消息头,它们是键/值对,提供有关消息体的元数据,可用于帮助消息的使用者处理消息。消息头可以是任何你想要的内容,但它们通常与消息本身或消息的处理器相关。

Java 消息服务

Java 消息服务 (JMS) API 指定了与消息代理交互的客户端接口。每个消息代理都提供自己的 API 实现,非常类似于 JDBC 驱动程序对 JDBC API 的操作。这意味着 JMS 客户端通常应该使用与服务器相同的客户端版本。有许多优秀的 JMS 代理实现可供选择。原因之一是消息一直是应用程序开发的重要组成部分,并且如今变得越来越重要。JMS 自 1.1 版起就成为 J2EE(现为 Java EE)规范的一部分。JMS 规范在过去十年的大部分时间里一直保持在 1.1 版。

在 JMS 中,客户端使用javax.jms.ConnectionFactory来创建一个javax.jms.Connection。然后可以使用Connection来创建一个javax.jms.SessionSession表示客户端与代理的交互,并允许发送和接收消息以及其他不太明显的操作。

接口上最有用的方法涉及创建消息生产者和消息消费者,这些生产者和消费者向javax.jms.Destination发送和接收消息。Destination映射了消息代理上“地址”的 JMS 概念。它还映射了代理存储消息的位置的概念。在 JMS 中,消息发送到、存储在和从同一位置使用,所有这些都由javax.jms.Destination实例表示。

[caption id="attachment_7506" align="alignnone" width="573" caption="上图中,蓝色元素表示生产者和消费者。橙色元素表示代理中缓冲消息的目标。在 JMS 中,这些是主题或队列。"][/caption]

Destination是一个接口,有两个更具体的子接口,javax.jms.Queuejavax.jms.Topic. Queue表示标准队列,它是一个点对点构造,如前所述。Topic提供发布-订阅消息传递,并且可以将单个消息传递给多个接收方。

要将消息发送到Destination,必须创建一个javax.jms.MessageProducer。然后可以使用MessageProducer发送javax.jms.Message

JMS 支持两种不同的机制来接收消息。第一种方法是请求消息,使用javax.jmx.MessageConsumer#receive()方法,该方法以同步方式从Destination返回单个消息;默认情况下,该方法会阻塞,直到收到消息。客户端可以使用javax.jms.MessageListener代替MessageConsumer,方法是调用javax.jms.Session#setMessageListener(MessageListener)MessageListener是一个接口,只有一个方法public void onMessage(javax.jms.Message),每当javax.jms.Message可用于在Destination上使用时,都会调用该方法。MessageListener提供异步消息处理:随着消息的到达,它们会被处理。

JMS API 中还有更多内容需要学习,但这些类和概念将最有助于我们讨论 Spring 对 JMS 消息的支持。第一级支持是org.springframework.jms.core.JmsTemplate,它提供了简化方法,将我们刚刚讨论的内容简化为单行代码。JmsTemplate需要javax.jms.ConnectionFactory实例来完成其工作。JmsTemplate可以为你完成很多工作。例如,要发送消息,JmsTemplate会建立javax.jms.Session,设置javax.jms.MessageConsumerjavax.jms.MessageProducer,设置所有事务机制,并为你提供对当前javax.jms.Session的引用,以便你可以创建你选择的消息并发送它。有了所有错误处理和构造逻辑,这很容易节省数十行代码。消息发送后,它会销毁或关闭大多数这些对象。这是应用程序服务器(如 Java EE 服务器)中的标准做法,因为ConnectionFactory实例由服务器创建、服务器管理并进行池化。它们在使用后缓存实例。在这些环境中关闭资源只是将它们返回到池中。因此,JmsTemplate在标准情况下执行正确的操作,假设ConnectionFactory缓存或池化实例。

在像应用程序服务器这样的托管环境中,你通常需要从 JNDI 获取javax.jms.ConnectionFactory。你可以使用 Spring 来为你查找该引用并配置JmsTemplate。在我们的示例中,我们希望更松散地操作,因此我们将使用独立的 ActiveMQ 消息代理。ActiveMQ 是一款流行的开源消息代理。开源消息代理。要使用它,请下载它,然后在 bin 文件夹中运行适合你的操作系统的启动脚本。在你的应用程序中,你需要客户端库才能连接到相应的 ActiveMQ 版本。在撰写本文时,ActiveMQ 的最新版本是 5.4.2。如果你使用 Maven,请将以下依赖项添加到你的 Maven pom 文件中



            <dependency>
                <groupId>org.apache.activemq</groupId>
                <artifactId>activemq-core</artifactId>
                <version>${activemq.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.activemq</groupId>
                <artifactId>activemq-optional</artifactId>
                <version>${activemq.version}</version>
            </dependency>

确保为${activemq.version}创建一个 Maven 属性,或者手动将字符串替换为相应的版本。还有一个activemq-all依赖项,但它会下载许多可能不需要的 jar 文件。对于我们的应用程序,上面的两个依赖项就足够了。

将 Spring 与 JMS 结合使用

让我们检查一下基本 JMS 应用程序的配置。首先,让我们检查一下基本的 Spring XML 配置



<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/200…

SpringOne 2GX 2010 技术讨论:Spring Integration 2.0 的新增功能?

新闻 | Adam Fitzgerald | 2011 年 1 月 21 日 | ...

SpringOne 2GX 2010 Tech Talk: What's new in Spring Integration 2.0
来自SpringOne 2GX 2010的另一个会议已被InfoQ发布。这次是Mark FisherOleg ZhurakouskySpring Integration 2.0 的新增功能上进行演示。

Mark 和 Oleg 使用以代码为中心的演示来描述如何在 Spring Integration 中集成 Spring 3.0 功能,哪些企业集成模式已实现以及通道适配器和网关在何处进行了更新。他们演示了对 Spring Integration 的新STS工具支持,并讨论了一些未来的功能和项目的走向。

此演示文稿是了解Spring Integration 2.0的绝佳方式。2.0 的 GA 版本在此演讲后不到一个月就发布了,因此所有涵盖的主题都与当前版本保持一致。再次感谢 InfoQ报道 SpringOne 2GX 2010

本周的 Spring:2011 年 1 月 18 日

工程 | Josh Long | 2011 年 1 月 18 日 | ...

对于整个 Spring 社区来说,这是又一个很棒的一周。除了 Tomcat 7 稳定版本的令人兴奋的公告外,社区中还有许多精彩的帖子。

  1. 继续“绿豆”系列的基础知识,我们刚刚发布了一篇关于一起使用 Spring 和 Maven的文章。
  2. Tomcat Expert 社区已宣布Tomcat 7 的第一个稳定版本。我们知道 Tomcat 是 Spring 开发人员运行其应用程序的首选位置,因此请务必查看最新功能。

  3. Nicholas Sankel 撰写了一篇关于如何使用 Spring Roo 和 Vaadin UI 框架 的博文。
  4. Tomcat Expert 社区提供了 2010 年十大文章列表
  5. Tomasz Nurkiewicz 撰写了一篇精彩的 博文,探讨了如何使用 Spring 框架完全去除 XML
  6. Sivaprasadreddy Katamreddy 撰写了一篇关于 Spring AOP 的入门介绍,从存在问题的代码逐步过渡到使用 Spring AOP 改进后的代码。
  7. 一位名叫 (据我所知) Warlock 的人士撰写了关于 Spring MVC 基于注解的会话处理支持 的博文。
  8. Sal Peace 撰写了一篇关于如何使用 Spring MVC 3.0 的 portlet 支持与 WebSphere 7 集成 的精彩入门介绍。
  9. Viral Patel 撰写了一个关于 在 Spring 3 MVC 和 Hibernate 中保存和检索 BLOB 对象数据 的教程。
  10. Jorram Barrez(来自 Activiti 项目)发布了一篇关于使用 Spring 将 Activiti BPMN 2.0 业务流程连接到 EJB 业务服务 的文章。

Green Beans:Maven 和 Spring 入门

工程 | Josh Long | 2011 年 1 月 17 日 | ...

Apache Maven 是一款流行的开源工具,它提供了一种约定优于配置的方法来管理项目构建。事实上,Eclipse 社区调查显示,Maven 的采用率从 2009 年的 8% 增长到 2010 年的 28%,这突显了它在各种项目设置中的实用性。即使您可以在不使用 Maven 的情况下使用 Spring,但也有很多理由建议 Spring 开发人员使用它。在这篇文章中,我将向您展示如何开始使用 Maven,以及如何在 Spring 库、存储库和工具(如 SpringSource Tool SuiteSpring Roo)中成功使用它。

Maven 处理项目构建。如果您的项目遵循 Maven 的约定,Maven 可以相对轻松地提供强大的功能和复杂性。它是声明式的;您描述的是 *想要做什么*,而不是 *如何去做*。如果您来自久负盛名的构建工具(如 Make 或 Ant),这种方法看起来会有些不同。

您在 Maven 项目配置中声明项目的依赖项。然后,这些依赖项将代表您解析并下载。这类似于许多不同操作系统中找到的包系统。假设您正在使用 OS X 的 finkports 命令行工具。要更新操作系统的功能,用户可以选择要安装的包(例如,最新的安全补丁或 glib 库的新版本)到管理客户端,然后指示客户端从称为包存储库的知名服务器下载并安装它。下载包后,包管理器会查阅包的清单,其中列出了该包依赖的所有库(位于其他包中)——它的传递依赖项。这些也将被下载。

有几种方法可以安装 Maven,如果您还没有安装它。从 Apache 网站 下载它。选择较新的版本。目前,许多人使用 Maven 2.21 或最近发布的 Maven 3。下载您想使用的版本,然后将其解压缩到您选择的目录中。或者,一些操作系统在包系统中提供了 Maven 2 构建(以及即将推出的 Maven 3 构建)。例如,在 Ubuntu 上,您可以运行 sudo apt-get install maven2。如果您使用的是 SpringSource Tool Suite(可 在此免费下载),则无需担心,Maven 已经下载并包含在您的 STS 安装文件夹中。无论您如何获取 Maven 二进制文件到您的系统上,请确保该二进制文件位于操作系统的搜索路径中。通常,这只是将 Maven 安装的 bin 文件夹添加到操作系统的 PATH 变量的问题。创建一个 Maven 安装本身的系统变量 MAVEN_HOME 也是一个好习惯。在 Unix(包括 OS X)或 Linux 机器上,此设置看起来大致相同。在我的机器(一台 Ubuntu Linux 机器)上,它看起来像这样

export MAVEN_HOME=/home/jlong/bin/springsource/maven-2.2.1.RELEASE 
export PATH=$PATH:$MAVEN_HOME/bin

要进行测试,打开一个新的 shell 并发出以下命令

mvn --version

您应该会看到一些输出确认系统上存在该命令,如下所示

jlong@jlong-mbp:~/Desktop/code$ mvn --version 
Apache Maven 2.2.1 (r801777; 2009-08-06 12:16:01-0700) 
Java version: 1.6.0_22 
Java home: /usr/lib/jvm/java-6-sun-1.6.0.22/jre 
Default locale: en_US, platform encoding: UTF-8 
OS name: "linux" version: "2.6.35-22-generic" arch: "amd64" Family: "unix" 
jlong@jlong-mbp:~/Desktop/code$ 

Maven 入门

Maven 项目假定一个标准的目录结构,至少看起来像这样

./pom.xml ./src ./src/main ./src/main/java ./src/main/resources ./src/test ./src/test/java ./src/test/resources

在目录结构的根目录中是一个 XML 文件(始终称为 pom.xml),Maven 期望它。pom.xml(POM 是 Project Object Model 的缩写)描述了特定于您的项目且无法自动推断的事物,例如依赖项、项目名称等。

目录 说明 目录内容(相对于项目根目录)
src/main/java 包含项目的 Java 源代码
src/main/resources 包含项目的任何类路径相关的资源(例如,Spring 应用程序上下文 .xml 文件)
src/test/java 包含测试的 Java 源代码…

获取 Spring 时事通讯

与 Spring 时事通讯保持联系

订阅

领先一步

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

了解更多

获取支持

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

了解更多

即将举行的活动

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

查看全部