Green Beans:让你的脚步(和应用)充满 Spring 活力
Spring framework 于 2003 年成为事实上的标准,自那时起一直帮助人们使用更简洁的代码构建更大、更好的应用。在这篇文章中,我们将讨论使用 Spring 组件模型配置应用的可用选项。我们将从最简单的形式构建一个简单的应用,并对其进行改造,以利用 Spring framework 中的许多简化特性,这些特性使其成为并继续成为当今应用的事实标准。
现代企业 Java 应用有许多相互协作的对象…
Spring framework 于 2003 年成为事实上的标准,自那时起一直帮助人们使用更简洁的代码构建更大、更好的应用。在这篇文章中,我们将讨论使用 Spring 组件模型配置应用的可用选项。我们将从最简单的形式构建一个简单的应用,并对其进行改造,以利用 Spring framework 中的许多简化特性,这些特性使其成为并继续成为当今应用的事实标准。
现代企业 Java 应用有许多相互协作的对象…
如今,越来越多的网民使用互联网通过社交网站与朋友、家人和同事建立联系。过去通过电子邮件进行的对话现在在某人的 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 舞蹈涉及三方:
此舞蹈的关键步骤如下:
在步骤 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 的话题。
创建其他社交模板的实例没有太大区别。LinkedInTemplate
和 TripItTemplate
的构造函数都具有与上面所示的 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!");
如果您想查看用户的近期旅行计划,TripItTemplate
的 getTrips()
方法可以满足您:
List trips = tripIt.getTrips();
for(Trip trip : trips) {
System.out.println("I'm traveling to " + trip.getPrimaryLocation() +
" on " + trip.getStartDate());
}
这只是 Spring Social 模板可以做的事情的示例。查看 API 文档以了解其他可用操作。
当我在上面创建 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 版本已发布。
该项目已将其文档迁移到 Sphinx,这是用于记录 Python 语言本身的工具。您可以访问项目网站,以 HTML 格式查看文档或下载 epub 版本以便在智能手机或平板设备上阅读。
此版本的 Spring Python 迁移至 Python 2.6,不再支持 2.4 和 2.5。这意味着团队正准备利用 Python 的许多新特性,这也为未来某个时候向 Python 3.x 过渡铺平了道路。
Spring Python 有…
经过十多个月的开发和近 900 项独立改进,Spring Roo 1.1.0 已发布(点此下载)!与 Spring Roo 1.1.0 GA 版本发布同时,Google Web Toolkit、SpringSource Tool Suite、AspectJ 和 AJDT 团队也完成了支持 GA 版本的发布,这样您就可以享用所有这些工具的最新版本,它们可以很好地协同工作。
我们在 Spring Roo 1.1.0 中引入了如此多的新特性,以至于很难决定突出哪些。尽管如此,让我们简要浏览一下我们为您的 Java 编程乐趣添加的一些好东西。
现在可以逆向工程现有关系数据库并自动创建带有相应字段的 Roo 实体。但是使用 JPA 工具做到这一点不是已经很久了吗?是的,没错。关键区别在于 Roo 的数据库逆向工程是增量式的。这意味着当 Roo 对数据库进行逆向工程时,它将发现的所有字段放入类型间声明(ITD)中。这与 Roo 的其余部分一致,并允许 Roo 轻松实现逆向工程实体的往返维护。特别是,您可以重复地重新自省数据库以识别任何更改,同时确保您在 .java 源文件中编写的任何代码都得到保留。Roo 甚至会删除不再存在的实体(当然除非您告诉 Roo 不要删除),Roo 会自动处理复杂的情况,如复合主键(包括标识符类的创建和维护…
NoSQL 数据存储兴起的原因之一是需要将应用扩展到关系型世界中的传统舒适区之外。具有讽刺意味的是,早在 NoSQL 一词被创造出来之前很久,Gemfire 就一直在做这件事,它为世界上一些最大的金融机构提供了扩展能力。
Gemfire 远不止是一个缓存,它是一个完整的数据平台,支持网格计算、Map/Reduce、连续查询和事务性写回。
对于那些参加了非常成功的 SpringOne2GX 大会主题演讲的人来说,这可能已经是旧闻了。今天,我很高兴向其他人宣布 用于 Gemfire 的 GORM 已可用…
我们目前正在庆祝第六届 SpringOne 2GX 开发者大会——自去年起,也庆祝 Groovy 和 Grails。一如既往,与成就 Spring 非凡地位的开发者社区一起交流非常棒。今年,我们不仅出席人数创纪录(比去年翻了一番!),而且合作伙伴阵容强大(由 Google、salesforce.com 和 Accenture 领衔),还有异常多的新举措与社区分享。
要讨论的话题如此之多,这很容易成为史上最长的博客文章。相反,让我们来谈谈一些亮点…
Java EE 6 上的 Spring - 一个可行的组合?当您拥有 Java EE 6 服务器可以部署时,您能轻松继续使用 Spring 吗?在几小时前刚刚开幕的本届 SpringOne 大会上,我将再次就 Spring 和 EE 6 发表演讲:现在重点关注 GlassFish 3,它是目前唯一可用于生产环境的 EE 6 服务器。作为预告,以下是该演讲中的四个关键考量…
GlassFish 3 提供了许多开箱即用的中间件:Servlet 3.0, JSF 2.0, JPA 2.0, 以及…
新的现代应用的特点包括高度交互性、数据丰富、包含业务流程,并且可以通过网络从 PC 和移动设备访问。支撑这些应用的平台利用虚拟化基础设施,提供适量的功能,并能根据需求变化轻松扩展。
VMware 的 vFabric Cloud Application Platform 正是这样一种平台,旨在最有效地运行 Spring 应用并提供现代应用体验。该平台的一个重要组成部分是 vFabric GemFire。vFabric GemFire 的内存分布式数据管理以低延迟、高可靠性以及线性、动态可扩展性将数据带给应用。我们很高兴地宣布 vFabric GemFire 6.5 版本…
Gemini Web 项目的第一个发布候选版已开放下载。请参阅缺陷列表,了解自里程碑 4 以来的变化。感谢 SAP 的 Violeta Georgieva 的持续贡献。
该项目定于 10 月 20 日进行 Eclipse 审查,以便能在 10 月底之前从孵化阶段毕业并发布 1.1.0 版本。Virgo 项目依赖于 Gemini Web,也应同时毕业并发布其 2.1.0 版本。