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