Spring Android 和 Maven(第 2 部分)

工程 | Roy Clarkson | 2011 年 2 月 9 日 | ...

Spring Android 和 Maven(第 1 部分) 中,我描述了如何使用 Maven 从命令行构建 Android 应用程序。在这篇文章中,我将向您展示如何在 Eclipse IDE 中使用 Maven 依赖项管理构建 Android 应用程序。该应用程序还将展示 Spring Android 1.0.0.M2 中的最新功能,该功能本周发布。

概述

Maven Android 插件允许您使用 Maven 构建 Android 应用程序并受益于依赖项管理。Google 的 Android 开发工具 (ADT) 插件允许您在 Eclipse IDE 中开发和构建 Android 应用程序。为了在 Eclipse 中获得 Maven 依赖项管理,需要 Android 开发工具的 Maven 集成 插件,该插件集成了 m2eclipse、ADT 插件和 Maven Android 插件……

本周 Spring:2011 年 2 月 8 日

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

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

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

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

本周 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 入门(第 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 在推特上 表示 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 也刚刚发布!

绿色 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),每当 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.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…

本周 Spring:2011 年 1 月 18 日

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

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

  1. 我们继续“绿色 Bean”系列的基础知识,刚刚发布了一篇关于 一起使用 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 业务服务 的文章。

绿色 Bean: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 Roo 1.1.1 中的新增功能

工程 | Ben Alex | 2011 年 1 月 11 日 | ...

我们很高兴地宣布 Spring Roo 1.1.1 正式发布。此新版本包含 超过 250 个修复和增强功能,包括许多性能和功能改进。

与往常一样,SpringSource Tool Suite (STS) 2.5.2 将很快发布,并包含此新版本的 Spring Roo。您还可以 下载 Spring Roo 1.1.1 的独立版本并立即开始使用。

让我们简要介绍一下添加到 Roo 1.1.1 中的一些更值得注意的增强功能。如果您要升级基于 Roo 的项目,我们建议您查看我们在 参考指南 中包含的 特定版本升级说明。参考指南也包含在…

Spring Web Services 2.0 发布

工程 | Arjen Poutsma | 2011 年 1 月 11 日 | ...

经过近一年的开发,我很高兴地宣布 Spring Web Services 2.0 已经发布!在这篇文章中,我想介绍一些主要的新功能。

需要 Java 5+ 和 Spring 3.0

您可能已经知道,我们将对象 XML 映射 (OXM) 模块从 Spring-WS 项目移到了 Spring 3.0 中。因此,由于 org.springframework.oxm 包中存在冲突的类,使用 Spring-WS 1.5(及其自己的 OXM 模块)与 Spring 3.0 结合使用存在一些问题。

从 2.0 版本开始,我们不再将 OXM 模块作为 Spring-WS 的一部分提供,而是依赖于 Spring 的 OXM。因此,**Spring Web Services 2.0 需要 Spring 3.0**才能工作。通常,我们在版本要求方面会更宽松一些,不一定需要最新的 Spring 版本,但这一次是…

绿色 Bean:在服务层中开始使用 Spring

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

所有应用程序都源于领域模型。“领域模型”一词描述了系统中对您尝试解决的问题很重要的名词或数据。服务层(业务逻辑所在的地方)操作应用程序数据,并最终必须将其持久化(通常在数据库中)。解释很简单,但在实践中,构建良好的服务层对于任何开发人员来说都可能是一项艰巨的任务。这篇文章将向开发人员介绍 Spring 框架中构建更好服务层的可用选项。假设读者对…

绿色 Bean:Spring MVC 入门

工程 | Colin Sampaleanu | 2011年1月4日 | ...

Spring MVC是核心 Spring 框架的一部分,是一个成熟且功能强大的动作-响应式 Web 框架,具有广泛的功能和选项,旨在处理各种以 UI 为中心和非 UI 为中心的 Web 层用例。所有这些都可能让 Spring MVC 新手感到不知所措。我认为,对于这些用户来说,展示启动和运行一个基本的 Spring MVC 应用程序需要多么少的工作是有用的(例如,将我的示例视为世界上最简单的 Spring MVC 应用程序),这就是我将在本文的其余部分中演示的内容。

我假设您熟悉 Java、Spring(基本依赖注入概念)以及基本的 Servlet 编程模型,但不知道 Spring MVC。阅读完此博文后,读者可以通过查看 Keith Donald 的Spring MVC 3 Showcase继续学习 Spring MVC…

获取 Spring 时事通讯

通过 Spring 时事通讯保持联系

订阅

领先一步

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

了解更多

获取支持

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

了解更多

即将举行的活动

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

查看全部