本周 Spring 动态:2011 年 2 月 8 日

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

Spring 社区本周依然精彩纷呈。新版 Tomcat 发布、移动客户端、Spring Data 以及大数据(如 Spring Gemfire、Redis,以及当然的 Spring Data 项目)似乎引起了社区的广泛关注。

温馨提示:Spring 核心框架的领导者兼所有姐妹 Spring 项目的贡献者 Juergen Hoeller 将在两天后(2 月 10 日)举行两次相同的网络研讨会——一次面向北美一次面向欧洲——介绍 Spring 3.1 的新特性!务必注册参加这次免费的网络研讨会,了解最广泛使用的 Java 框架的下一代迭代!

此次活动报名人数创下纪录,预注册数量惊人。虽然 Spring 3.1 的二进制文件(还未发布;敬请期待!),但Spring 项目的代码始终可供您使用,因此——如果您和我一样对所有新功能感到兴奋——您将在发布前很久就能通过本次网络研讨会开始体验了……

Spring Mobile 1.0.0.M3 发布

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

亲爱的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 月 2 日 | ...

本周社区的进展如火如荼,令人着迷。根据您的关注点不同,兴奋点可能在于 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(第一部分,从源代码构建)的入门介绍。
  4. Tomcat 项目高级贡献者 Mark Thomas 撰文介绍了如何在 Tomcat 7 中防范跨站脚本攻击 (XSS)
  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 中配置应用程序以处理两个数据库的精彩文章。如何在 Spring Roo 中配置应用程序以处理两个数据库
  10. Sivaprasadreddy Katamreddy 又有新作品了,这次是关于将控制反转和依赖注入应用于方法设计
  11. Glyn Normington 在推文中提到 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 发布 for Java 和 .NET

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

亲爱的Spring社区,

我们很高兴地宣布 Spring GemFire 1.0 项目的首个 GA 版本现已支持 Java 和 .NET!Spring GemFire 项目旨在通过使用 GemFire 作为分布式数据管理平台,简化构建支持 Spring 的高可伸缩性应用程序的过程。

立即下载Spring GemFire for Java | Spring GemFire for .NET

此版本包含

  • GemFire 基础设施(如 Cache、Region、Interest 等)的声明式依赖注入风格配置
  • 针对主要 GemFire 组件的广泛命名空间支持:cache、replicated、partitioned 和 client 区域等
  • 异常翻译到 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 月 1 日 | ...

亲爱的Spring社区,

我很高兴地宣布 Spring Data Graph 1.0 项目(支持 Neo4j)的第二个里程碑版本现已可用!**Spring Data** 项目的主要目标是简化构建使用新兴数据访问技术(如非关系型数据库、map-reduce 框架和基于云的数据服务)的 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 和 @Qualifier 的内容辅助和快速修复
  • @RequestMapping 中路径变量的内容辅助
  • 更新的 Spring 项目向导
  • 来自 ITD 的 RequestMapping 现在位于 Spring Explorer 和 RequestMapping-View 中
  • 改进了 Groovy 的内容辅助性能
  • 改进了 Groovy 的语法高亮
有关新功能和错误修复的更多详细信息,请参阅 2.6.0.M1 新功能和值得注意文档。还提供了详细的安装说明

与往常一样,下载可从 STS 下载页面获取,请查看“其他下载”。

Green Beans:企业消息传递和 Spring 入门

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

在本文中,我们将介绍消息传递的核心概念,以及 Spring 框架及其姐妹项目提供的丰富消息传递支持。

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

在这个例子中,语音邮箱位于双方之间。它存储消息,然后在被呼叫者(接收者)检索时将其传递。在企业消息传递领域,情况非常相似:一方将消息发送到消息代理(也称为消息导向中间件 - MOM),而另一方——当该方能够——在稍后接收或显式查询消息代理中的任何消息。

这正是类比停止有用的地方。与语音邮箱相比,消息代理具有许多选项。消息代理非常适合提供附加服务,例如路由,并保证消息传递。消息代理可以针对不同的用例进行优化,例如,你可以权衡速度与持久性。消息代理可能会将消息持久化到外部存储以确保持久性,尽管这通常是可以通过配置来切换以提高速度的选项。

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

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

Java Message Service

Java 消息服务 (JMS) API 规定了与消息代理交互的客户端接口。每个消息代理都提供自己的 API 实现,非常类似于 JDBC 驱动程序对 JDBC API 的作用。这意味着 JMS 客户端通常应该使用与服务器相同版本的客户端。有许多优秀的 JMS 代理实现可供选择。其中一个原因是消息传递一直是应用程序开发的重要组成部分,并且今天仍然如此。自 1.1 版本以来,JMS 一直是 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.TopicQueue 代表标准的队列,这是之前描述的点对点构造。Topic 提供发布/订阅消息传递,并将一条消息传递给多个接收者。

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

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

JMS API 中还有很多内容需要了解,但这些类和概念将在我们讨论 Spring 对 JMS 消息传递的支持时对您大有帮助。第一层支持是 `org.springframework.jms.core.JmsTemplate`,它提供了简化的方法,可以将我们刚才讨论的许多事情简化为一行代码。`JmsTemplate` 需要一个 `javax.jms.ConnectionFactory` 实例来工作。`JmsTemplate` 可以为您做很多工作。例如,发送消息时,`JmsTemplate` 会建立一个 `javax.jms.Session`,设置一个 `javax.jms.MessageConsumer` 或 `javax.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
InfoQ 发布了 SpringOne 2GX 2010 的另一个会话。这次是 Mark FisherOleg Zhurakousky 介绍 Spring Integration 2.0 的新功能

Mark 和 Oleg 使用以代码为中心的演示来描述 Spring 3.0 功能如何集成到 Spring Integration 中,实现了哪些企业集成模式,以及通道适配器和网关在何处进行了更新。他们演示了 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. 我们继续“Green Beans”系列的回归基础,刚刚发布了一篇关于将 Spring 和 Maven 一起使用的文章。
  2. Tomcat Expert 社区宣布了Tomcat 7 的第一个稳定版本。我们知道 Tomcat 是 Spring 开发人员运行应用程序的首选场所,因此请务必查看最新功能。
  3. Nicholas Sankel 撰写了一篇关于使用Spring Roo 和 Vaadin UI 框架的博客。
  4. Tomcat Expert 社区提供了2010 年十大文章列表
  5. Tomasz Nurkiewicz 撰写了一篇精彩的博客,探讨了如何完全去除 XML 并使用 Spring 框架。
  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 Community Surveys 显示 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 社区所有即将举行的活动。

查看所有

版权所有 © 2005 -2025Broadcom。保留所有权利。“Broadcom”一词指 Broadcom Inc. 和/或其子公司。
使用条款 隐私 商标指南

Apache®、Apache Tomcat®、Apache Kafka®、Apache Cassandra™ 和 Apache Geode™ 是 Apache Software Foundation 在美国和/或其他国家的商标或注册商标。Java™、Java™ SE、Java™ EE 和 OpenJDK™ 是 Oracle 和/或其关联公司的商标。Kubernetes® 是 Linux Foundation 在美国和其他国家的注册商标。Linux® 是 Linus Torvalds 在美国和其他国家的注册商标。Windows® 和 Microsoft® Azure 是 Microsoft Corporation 的注册商标。“AWS”和“Amazon Web Services”是 Amazon.com Inc. 或其关联公司的商标或注册商标。所有其他商标和版权均为其各自所有者的财产,仅为提供信息之目的提及。其他名称可能是其各自所有者的商标。