Green Beans:让你的脚步(和应用)充满 Spring 活力

技术 | Josh Long | 2010 年 11 月 09 日 | ...

Spring framework 于 2003 年成为事实上的标准,自那时起一直帮助人们使用更简洁的代码构建更大、更好的应用。在这篇文章中,我们将讨论使用 Spring 组件模型配置应用的可用选项。我们将从最简单的形式构建一个简单的应用,并对其进行改造,以利用 Spring framework 中的许多简化特性,这些特性使其成为并继续成为当今应用的事实标准。

现代企业 Java 应用有许多相互协作的对象…

让 Spring 应用具备社交能力

技术 | Craig Walls | 2010 年 11 月 03 日 | ...

如今,越来越多的网民使用互联网通过社交网站与朋友、家人和同事建立联系。过去通过电子邮件进行的对话现在在某人的 Facebook 墙上或 Twitter 的一条简短推文中进行。曾经通过握手建立的联系现在使用 LinkedIn 创建。当需要面对面会议时,可以使用 TripIt 分享旅行细节。

就像人们使用这些社交网站相互交流一样,企业也在寻找方法将自己融入社交图谱,以便与客户建立更个性化的联系,并使其网站成为客户社交体验的延伸。

本周,我们很高兴地发布了 Spring Social 的第一个里程碑版本,它是 Spring 的一个新扩展,旨在提供一个平台,用于构建支持社交功能的 Spring 应用。我想借此机会向您介绍 Spring Social,并让您了解它所提供的功能。

安全地共享社交数据

表面上看,开发与各种社交网络交互的应用似乎很简单。由于大多数社交网络都提供 REST API,Spring 的 RestTemplate 似乎就是您所需要的一切。但您很快就会发现这些社交 REST API 受 OAuth 保护,而使用 OAuth 凭据通过 RestTemplate 发送请求签名并非易事。

OAuth 是一种开放协议,它使用户能够将其托管在一个或多个服务提供商上的数据共享给另一个应用。通过访问这些数据,应用可以以前所未有的方式聚合、呈现和处理信息,从而提供超出服务提供商本身预期或想象的附加价值。

几乎所有主要的服务提供商都支持 OAuth,包括 Twitter、Facebook、LinkedIn、TripIt 和 Foursquare,以及 Google 和 Yahoo API。因此,OAuth 对于开发支持社交功能的应用至关重要。

OAuth 保护的交互过程开始于一个来回协商的过程,通常被称为“OAuth 舞蹈”。典型的 OAuth 舞蹈涉及三方:

  • 服务提供商(例如 Twitter 或 LinkedIn)
  • 希望访问或更新该服务提供商托管数据的用户。
  • 用户希望与其共享数据的消费者应用。

此舞蹈的关键步骤如下:

  1. 消费者应用将用户重定向到服务提供商的网站进行登录并授权消费者。
  2. 假设用户同意授予消费者访问其数据的权限,流程会返回到消费者应用。
  3. 消费者应用从服务提供商接收访问令牌。

在步骤 3 中收到的访问令牌是访问服务提供商 REST API 时必须附带的“代客泊车密钥”。在 OAuth 1 中,这意味着访问令牌、请求 URL、参数以及一些其他信息会一起收集到一个基础字符串中,进行加密,并在请求中作为 Authorization 头部发送。构建此头部并将其附加到请求是一项复杂的任务。这就是使用 RestTemplate 访问受 OAuth 保护的资源很困难的原因。如果出错,您尝试访问的任何资源,服务提供商都将返回 HTTP 401,并且调试加密的 Authorization 头部非常棘手。

使用社交模板

Spring Social 的一个关键组件是其社交模板集合。这些模板(在底层利用了 RestTemplate)暴露了它们所建模的服务提供商的操作,为您处理了添加 OAuth Authorization 头部所需的复杂细节。

Spring Social 1.0.0.M1 包含 4 个社交模板供您选择:

  • TwitterTemplate
  • FacebookTemplate
  • LinkedInTemplate
  • TripItTemplate

要使用这些模板中的任何一个,只需创建它的一个实例,通过构造函数参数提供 OAuth 连接详细信息。例如,创建 TwitterTemplate 的实例:

TwitterTemplate twitter = new TwitterTemplate(apiKey, apiSecret, accessToken, accessTokenSecret);

TwitterTemplate 构造函数的四个参数都是字符串值。当您在 Twitter 注册您的应用时,会获得 API key 和 API secret(参见 http://dev.twitter.com/apps/new)。access token 和 access token secret 在与 Twitter 进行 OAuth 舞蹈结束时按用户授予您的应用。此时,我将假设您已经获得了所有这四个值;稍后我们将回到如何管理 API keys 和 tokens 的话题。

创建其他社交模板的实例没有太大区别。LinkedInTemplateTripItTemplate 的构造函数都具有与上面所示的 TwitterTemplate 构造函数相同的参数列表。由于 Facebook 的 API 安全性基于 OAuth 2,FacebookTemplate 的构造函数稍微简单一些,只需要访问令牌的值:

FacebookTemplate facebook = new FacebookTemplate(accessToken);

一旦您获得了这些社交模板的实例,您可以用它做什么?如果您正在使用 TwitterTemplate,也许您想知道已认证用户的 Twitter 屏幕名称:

String screenName = twitter.getProfileId();

或者更复杂一点,也许您可以代表用户发送一条推文:

twitter.updateStatus("Hey, I'm tweeting with #Spring Social!");

类似地,有了 FacebookTemplate,您可以在用户的墙上发帖:

facebook.updateStatus("Spring Social can also post to Facebook!");

如果您想查看用户的近期旅行计划,TripItTemplategetTrips() 方法可以满足您:

List trips = tripIt.getTrips();
for(Trip trip : trips) {
    System.out.println("I'm traveling to " + trip.getPrimaryLocation() +
                                 " on " + trip.getStartDate());
}

这只是 Spring Social 模板可以做的事情的示例。查看 API 文档以了解其他可用操作。

管理 OAuth 连接

当我在上面创建 TwitterTemplate 实例时,我没有详细说明 API key/secret 和访问令牌的来源。最初,访问令牌是在用户授权应用访问其托管在服务提供商的数据后收到的。但您可能不希望每次用户使用您的应用时都强制他们进行授权,因此您需要一种方法来长期存储访问令牌,以便在将来的会话中重复使用。

在其第一个里程碑版本中,Spring Social 不提供 OAuth token 管理策略,由应用自行获取和管理 OAuth 详细信息。这是我们打算在 1.0 Milestone 2 版本中解决的问题。与此同时,我们可以参考 Greenhouse 作为这种做法的示例。

在 Greenhouse 中,所有关于服务提供商的信息都存储在关系数据库的 ServiceProvider 表中,其 schema 如下:

如您所见,ServiceProvider 表中除其他信息外,还包含提供商的 API key 和 secret。为了访问单个服务提供商记录,Greenhouse 使用了 JdbcServiceProviderFactory,它是 ServiceProvider 接口的一个实现。

package com.springsource…

Spring Python 1.2.0.RC1 发布了!

技术 | Greg L. Turnquist | 2010 年 11 月 03 日 | ...

经过数月的工作,Spring Python 的第一个 1.2 版本已发布

该项目已将其文档迁移到 Sphinx,这是用于记录 Python 语言本身的工具。您可以访问项目网站,以 HTML 格式查看文档或下载 epub 版本以便在智能手机或平板设备上阅读。

此版本的 Spring Python 迁移至 Python 2.6,不再支持 2.4 和 2.5。这意味着团队正准备利用 Python 的许多新特性,这也为未来某个时候向 Python 3.x 过渡铺平了道路。

Spring Python 有…

Spring Integration 2.0 发布候选版 1

技术 | Mark Fisher | 2010 年 10 月 29 日 | ...

我们很高兴地宣布 Spring Integration 2.0 的第一个发布候选版!下载 | 参考手册 | JavaDoc

我想借此机会提供一份通用的“新特性有哪些?”指南。实际的新特性和改进太多了,无法在一篇文章中全部涵盖,但我将重点介绍一些亮点。随着 2.0 GA 版本的临近,我们将发布更多博客。目前,这篇文章大致基于我和 Oleg 上周在 SpringOne 大会上的一个演讲。该演讲主要是演示驱动的,其代码可在我们的 Git 仓库中找到。

一大步跃进:Spring Roo 1.1.0 发布了!

技术 | Ben Alex | 2010 年 10 月 27 日 | ...

经过十多个月的开发和近 900 项独立改进,Spring Roo 1.1.0 已发布(点此下载)!与 Spring Roo 1.1.0 GA 版本发布同时,Google Web ToolkitSpringSource Tool SuiteAspectJAJDT 团队也完成了支持 GA 版本的发布,这样您就可以享用所有这些工具的最新版本,它们可以很好地协同工作。

我们在 Spring Roo 1.1.0 中引入了如此多的新特性,以至于很难决定突出哪些。尽管如此,让我们简要浏览一下我们为您的 Java 编程乐趣添加的一些好东西。

增量式数据库逆向工程

现在可以逆向工程现有关系数据库并自动创建带有相应字段的 Roo 实体。但是使用 JPA 工具做到这一点不是已经很久了吗?是的,没错。关键区别在于 Roo 的数据库逆向工程是增量式的。这意味着当 Roo 对数据库进行逆向工程时,它将发现的所有字段放入类型间声明(ITD)中。这与 Roo 的其余部分一致,并允许 Roo 轻松实现逆向工程实体的往返维护。特别是,您可以重复地重新自省数据库以识别任何更改,同时确保您在 .java 源文件中编写的任何代码都得到保留。Roo 甚至会删除不再存在的实体(当然除非您告诉 Roo 不要删除),Roo 会自动处理复杂的情况,如复合主键(包括标识符类的创建和维护…

介绍用于 Gemfire 的 GORM

技术 | Graeme Rocher | 2010 年 10 月 26 日 | ...

NoSQL 数据存储兴起的原因之一是需要将应用扩展到关系型世界中的传统舒适区之外。具有讽刺意味的是,早在 NoSQL 一词被创造出来之前很久,Gemfire 就一直在做这件事,它为世界上一些最大的金融机构提供了扩展能力。

Gemfire 远不止是一个缓存,它是一个完整的数据平台,支持网格计算、Map/Reduce、连续查询和事务性写回。

对于那些参加了非常成功的 SpringOne2GX 大会主题演讲的人来说,这可能已经是旧闻了。今天,我很高兴向其他人宣布 用于 Gemfire 的 GORM 已可用…

SpringOne2GX 2010:将 Java 创新推向云端

技术 | Rod Johnson | 2010 年 10 月 22 日 | ...

我们目前正在庆祝第六届 SpringOne 2GX 开发者大会——自去年起,也庆祝 Groovy 和 Grails。一如既往,与成就 Spring 非凡地位的开发者社区一起交流非常棒。今年,我们不仅出席人数创纪录(比去年翻了一番!),而且合作伙伴阵容强大(由 Googlesalesforce.comAccenture 领衔),还有异常多的新举措与社区分享。

要讨论的话题如此之多,这很容易成为史上最长的博客文章。相反,让我们来谈谈一些亮点…

Java EE 6 服务器上的 Spring 3

技术 | Juergen Hoeller | 2010 年 10 月 20 日 | ...

Java EE 6 上的 Spring - 一个可行的组合?当您拥有 Java EE 6 服务器可以部署时,您能轻松继续使用 Spring 吗?在几小时前刚刚开幕的本届 SpringOne 大会上,我将再次就 Spring 和 EE 6 发表演讲:现在重点关注 GlassFish 3,它是目前唯一可用于生产环境的 EE 6 服务器。作为预告,以下是该演讲中的四个关键考量…

1. GlassFish 3 这样的 Java EE 6 服务器是 Spring 3 的一个优秀的运行时环境

GlassFish 3 提供了许多开箱即用的中间件:Servlet 3.0, JSF 2.0, JPA 2.0, 以及…

VMware vFabric GemFire 6.5:为现代应用提供现代数据管理

技术 | Adam Fitzgerald | 2010 年 10 月 12 日 | ...

新的现代应用的特点包括高度交互性、数据丰富、包含业务流程,并且可以通过网络从 PC 和移动设备访问。支撑这些应用的平台利用虚拟化基础设施,提供适量的功能,并能根据需求变化轻松扩展。

VMware 的 vFabric Cloud Application Platform 正是这样一种平台,旨在最有效地运行 Spring 应用并提供现代应用体验。该平台的一个重要组成部分是 vFabric GemFire。vFabric GemFire 的内存分布式数据管理以低延迟、高可靠性以及线性、动态可扩展性将数据带给应用。我们很高兴地宣布 vFabric GemFire 6.5 版本

Gemini Web 发布候选版

技术 | Glyn Normington | 2010 年 10 月 04 日 | ...

Gemini Web 项目的第一个发布候选版已开放下载。请参阅缺陷列表,了解自里程碑 4 以来的变化。感谢 SAP 的 Violeta Georgieva 的持续贡献。

该项目定于 10 月 20 日进行 Eclipse 审查,以便能在 10 月底之前从孵化阶段毕业并发布 1.1.0 版本。Virgo 项目依赖于 Gemini Web,也应同时毕业并发布其 2.1.0 版本。

订阅 Spring 新闻通讯

订阅 Spring 新闻通讯,保持联系

订阅

先行一步

VMware 提供培训和认证,助您快速提升。

了解更多

获得支持

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

了解更多

近期活动

查看 Spring 社区的所有近期活动。

查看全部