GORM 的另一种风格:MongoDB
我们致力于使 GORM 普及到 NoSQL 存储的努力今天又达到了一个里程碑,我们很高兴宣布推出适用于 MongoDB 的 GORM。
MongoDB 是一种文档数据库,它弥合了键值存储(快速且高度可扩展)和传统 RDBMS 系统(提供丰富的查询和深度功能)之间的差距。
类似于 Redis 和 Gemfire 插件,适用于 MongoDB 的 GORM 完全支持 CRUD 操作
def person = new Person(name:"Fred", age: 45)
person.save()
person = Person.get(person.id)
assert person != null
person.delete()
assert Person.get(person.id) == null
通过动态查找器进行丰富查询…
SpringSource Tool Suite 2.5.1 发布
尊敬的 Spring 社区
我很高兴地宣布我们刚刚发布了 SpringSource Tool Suite (STS) 2.5.1.RELEASE。
新版本的一些亮点
- 新功能使 Spring Roo 1.1.0.RELEASE 更加强大
- 支持 tc Server 2.1,包括 Spring Insight
- 现在可以直接从 STS 内部将 Grails 项目部署到 tc Server;只需将应用程序拖到服务器上,并确保启动新的 Spring Insight 来分析您的应用程序
- Groovy 代码调试增强
- JDT weaving 默认启用
Hyperic 4.5 发布
经过数月的开发,我很自豪地宣布发布 Hyperic 4.5。在此版本中,我们将 Hyperic 从运行在 JBoss 上的 EJB 应用程序迁移到运行在 Tomcat 上的 Spring Web 应用程序。详细的迁移步骤在我的将 Hyperic 从 EJB 迁移到 Spring 的案例研究中有所介绍,该案例研究最初在最近的 SpringOne 2GX 大会上发表。在这篇文章中,我想重点介绍一下这次转换中我最喜欢的一些方面。
改进的可测试性
切换到 Spring 使我们能够将现有的无状态会话 EJB 转换为具有自动注入依赖的 POJO。这消除了大量使得单元测试非常困难的静态 JNDI 查找代码。Spring 也使得集成测试显著更容易。在转换之前,我们有一些集成测试,每个测试都需要几分钟来引导一个近似的 EJB 容器。这个过程既繁琐又容易出错。此外,测试经常使数据库处于不一致的状态,因此需要添加数据库设置或清除代码,这增加了测试执行时间,偶尔还会导致测试结果不一致。转换后,我们能够利用 Spring 的集成测试支持来测试我们转换后的 EJB 的新服务层,例如…
Green Beans:让 Spring 融入你的步伐(和应用程序)
Spring 框架于 2003 年成为事实上的标准,并从那时起一直帮助人们用更清晰的代码构建更大、更好的应用程序。在这篇文章中,我们将讨论使用 Spring 组件模型配置应用程序的可用选项。我们将从最简单的形式开始构建一个简单的应用程序,然后对其进行重构,以利用 Spring 框架中的许多简化特性,这些特性使其成为并继续成为当今应用程序事实上的标准。
现代企业 Java 应用程序有许多协作对象,这些对象…
Spring 应用社交化
越来越多地,网民使用互联网通过社交网站与朋友、家人和同事联系。曾经通过电子邮件进行的对话现在正在以在某人的 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)
- 希望访问或更新该服务提供商托管数据的用户。
- 用户希望共享其数据的消费者应用程序。
这个舞蹈的关键步骤如下:
- 消费者应用程序将用户定向到服务提供商的网站进行登录并授权消费者。
- 假设用户同意授予消费者访问其数据的权限,流程将返回到消费者应用程序。
- 消费者应用程序从服务提供商接收访问令牌。
在步骤 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
构造函数的四个参数都是字符串值。API 密钥和 API 秘密在你向 Twitter 注册应用时获得(参见 http://dev.twitter.com/apps/new)。访问令牌和访问令牌秘密是在与 Twitter 的 OAuth 舞蹈结束时,按每个用户授予给你的应用的。此时,我将假设你已经获得了所有这四个值;我们稍后会回头讨论如何管理 API 密钥和令牌。
创建其他社交模板的实例大同小异。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 文档以查看其他可用的操作。
管理 OAuth 连接
当我在上面创建 TwitterTemplate
实例时,我略去了 API 密钥/秘密和访问令牌的来源。最初,访问令牌会在用户授权应用程序访问其托管在服务提供商上的数据后收到。但你可能不希望每次用户使用你的应用程序时都强制他们进行授权,因此你需要一种长期存储访问令牌以便在未来会话中重用的方法。
在第一个里程碑版本中,Spring Social 没有提供 OAuth 令牌管理策略,由应用程序自行获取和管理 OAuth 详细信息。这是我们打算在 1.0 Milestone 2 中解决的问题。然而,在此期间,我们可以借鉴 Greenhouse 来了解这可能会如何实现。
在 Greenhouse 中,有关服务提供商的所有信息都存储在一个关系数据库中的 ServiceProvider
表中,其模式如下:
正如您所见,ServiceProvider
表包括(除其他信息外)提供商的 API 密钥和秘密。要访问单个服务提供商记录,Greenhouse 使用 JdbcServiceProviderFactory
,它是 ServiceProvider
接口的一个实现:
package com.springsource…
Spring Social 1.0.0 里程碑 1 现已发布
尊敬的 Spring 社区:
我们很高兴地宣布 Spring Social 1.0 的第一个里程碑版本现已发布!
Spring Social 使得开发支持社交的应用程序成为可能,将你的应用程序用户连接到他们经常使用的社交网络。更重要的是,Greenhouse 参考应用程序展示了 Spring Social 的能力。
Spring Social 1.0.0-M1 包含以下核心功能:
- 用于与 Twitter、Facebook、LinkedIn、TripIt 和 Greenhouse 交互的社交模板
- 一个支持 OAuth 的连接工厂,用于使用 OAuth 认证详细信息对 RestTemplate 请求进行签名
- 一个用于在 Spring MVC 控制器中提取 Facebook 用户 ID 和访问令牌信息的 Web 参数解析器
为了帮助您入门,我发布了Spring 应用社交化,这是一篇关于 Spring Social 的介绍。
这个里程碑版本仅仅是一个开始。我们期待您的反馈,以帮助我们塑造 Spring Social。
Spring Python 1.2.0.RC1 发布!
经过数月的工作,Spring Python 的第一个 1.2 版本现已发布。
该项目已将其文档迁移到 Sphinx,这是用于文档化 Python 语言本身的工具。您可以访问项目网站并以 HTML 格式查看,或者下载 epub 版本以便在智能手机或平板电脑设备上查看。
此版本的 Spring Python 迁移到 Python 2.6,放弃了对 2.4 和 2.5 的支持。这意味着团队正准备利用 Python 的许多新特性,这也为将来某个时候向 Python 3.x 过渡铺平了道路。
Spring Python 有…
Spring 3.0.5 现已发布

在上周的 SpringOne 2GX 大会的各种新闻和兴奋中,一条消息可能被忽略了,那就是 Spring 3.0.5 现已发布。此版本解决了 80 多个小问题,并对 Spring 表达式语言 (SpEL)、注解支持和嵌入式数据库进行了一些小改进。请务必阅读变更日志以获取所有详细信息。
下载 | 文档 | Javadoc API | 变更日志 | JIRA