Spring Modules的一部分,JCR模塊的主要目標是:以一種類似Spring主分發(fā)包中ORM包的方式,簡化使用JSR-170 API進行開發(fā)。特點如下:
JcrTemplate,允許執(zhí)行JcrCallback和異常處理(將需檢查的JCR異常轉(zhuǎn)換成不需檢查的Spring DAO異常)。這個模板實現(xiàn)了來自JCRSession的絕大部分方法,可以簡單地作為替換物使用。此外該模板知道線程綁定的會話,這個會話可以跨幾個方法使用,這在使用事務(wù)型倉庫時非常有用。
RepositoryFactoryBean,它配置、啟動和停止倉庫實例。因為JSR-170并沒有說明倉庫配置的標準方式,需要注意實現(xiàn)在這個方面的不同。這個支持包含預(yù)定義的用于Jackrabbit和Jeceira的FactoryBean,以及一個可以很容易支持其它倉庫的抽象基類。
SessionFactory,用來統(tǒng)一Repository,Credentials和Workspace接口,允許自動注冊監(jiān)聽器和自定義名字空間。
Spring聲明性事務(wù)為那些實現(xiàn)了(可選)事務(wù)特性的倉庫提供了支持。
OpenSessionInView攔截器和過濾器允許每個線程跨不同組件使用同一會話。與JcrTemplate一起,檢索、關(guān)閉和管理JCR會話的工作已經(jīng)外部化,對于調(diào)用者完全透明。
本文將使用參考實現(xiàn)(Jackrabbit),由于JCR模塊使用的是javax.jcr接口,因此改變實現(xiàn)根本就是一個配置的問題。讓我們一步一步地來看看在Jackrabbit之上如何使用Java內(nèi)容倉庫,以及如何讓Spring模塊來幫助完成這一工作。
配置倉庫和SessionFactory
JCR支持提供RepositoryFactoryBean類配置Jackrabbit,它需要JackRabbit的配置文件和主目錄。注意,RepositoryFactoryBean在使用本地文件系統(tǒng)時特別有用;對于服務(wù)器環(huán)境,倉庫可能被注冊在JNDI中,此時可以使用JndiObjectFactoryBean幫助類(Spring分發(fā)包的一部分)檢索它:
或使用Spring 2.0的模式名字空間:
為了簡化與JCR的工作,模塊增加了SessionFactory接口:
public interface SessionFactory {
public Session getSession() throws RepositoryException;
public SessionHolder getSessionHolder(Session session);
}
SessionFactory隱藏了實現(xiàn)內(nèi)部的認證細節(jié),因此一旦配置完成,使用同一證書的會話可以很容易的被檢索出來。為了利用實現(xiàn)的特性(沒有涵蓋在規(guī)范中的),這個接口允許檢索SessionHolder。它是一個JCR模塊特定類,主要被用于事務(wù)和會話管理(通過一種可用于每個JCR實現(xiàn)的缺省、通用實現(xiàn)),但是它不支持可選特性或自定義特性(如JackrabbitSessionHolder,它支持Jackrabbit的事務(wù)基礎(chǔ)結(jié)構(gòu))。JCR模塊提供一種簡易、透明的方式來發(fā)現(xiàn)SessionHolder實現(xiàn)(這些我將在以后詳細提到),使之很容易地插入對JSR-170其它兼容庫的支持。
SessionFactory的缺省實現(xiàn)是JcrSessionFactory,它要求一個進行工作的倉庫和證書。
這個bean聲明非常簡單,需要注意的地方是,密碼被提供給SimpleCredential的構(gòu)造函數(shù):它只接受字符數(shù)組,使用Spring工廠聲明作為一種變通。
JcrTemplate,允許執(zhí)行JcrCallback和異常處理(將需檢查的JCR異常轉(zhuǎn)換成不需檢查的Spring DAO異常)。這個模板實現(xiàn)了來自JCRSession的絕大部分方法,可以簡單地作為替換物使用。此外該模板知道線程綁定的會話,這個會話可以跨幾個方法使用,這在使用事務(wù)型倉庫時非常有用。
RepositoryFactoryBean,它配置、啟動和停止倉庫實例。因為JSR-170并沒有說明倉庫配置的標準方式,需要注意實現(xiàn)在這個方面的不同。這個支持包含預(yù)定義的用于Jackrabbit和Jeceira的FactoryBean,以及一個可以很容易支持其它倉庫的抽象基類。
SessionFactory,用來統(tǒng)一Repository,Credentials和Workspace接口,允許自動注冊監(jiān)聽器和自定義名字空間。
Spring聲明性事務(wù)為那些實現(xiàn)了(可選)事務(wù)特性的倉庫提供了支持。
OpenSessionInView攔截器和過濾器允許每個線程跨不同組件使用同一會話。與JcrTemplate一起,檢索、關(guān)閉和管理JCR會話的工作已經(jīng)外部化,對于調(diào)用者完全透明。
本文將使用參考實現(xiàn)(Jackrabbit),由于JCR模塊使用的是javax.jcr接口,因此改變實現(xiàn)根本就是一個配置的問題。讓我們一步一步地來看看在Jackrabbit之上如何使用Java內(nèi)容倉庫,以及如何讓Spring模塊來幫助完成這一工作。
配置倉庫和SessionFactory
JCR支持提供RepositoryFactoryBean類配置Jackrabbit,它需要JackRabbit的配置文件和主目錄。注意,RepositoryFactoryBean在使用本地文件系統(tǒng)時特別有用;對于服務(wù)器環(huán)境,倉庫可能被注冊在JNDI中,此時可以使用JndiObjectFactoryBean幫助類(Spring分發(fā)包的一部分)檢索它:
或使用Spring 2.0的模式名字空間:
為了簡化與JCR的工作,模塊增加了SessionFactory接口:
public interface SessionFactory {
public Session getSession() throws RepositoryException;
public SessionHolder getSessionHolder(Session session);
}
SessionFactory隱藏了實現(xiàn)內(nèi)部的認證細節(jié),因此一旦配置完成,使用同一證書的會話可以很容易的被檢索出來。為了利用實現(xiàn)的特性(沒有涵蓋在規(guī)范中的),這個接口允許檢索SessionHolder。它是一個JCR模塊特定類,主要被用于事務(wù)和會話管理(通過一種可用于每個JCR實現(xiàn)的缺省、通用實現(xiàn)),但是它不支持可選特性或自定義特性(如JackrabbitSessionHolder,它支持Jackrabbit的事務(wù)基礎(chǔ)結(jié)構(gòu))。JCR模塊提供一種簡易、透明的方式來發(fā)現(xiàn)SessionHolder實現(xiàn)(這些我將在以后詳細提到),使之很容易地插入對JSR-170其它兼容庫的支持。
SessionFactory的缺省實現(xiàn)是JcrSessionFactory,它要求一個進行工作的倉庫和證書。
這個bean聲明非常簡單,需要注意的地方是,密碼被提供給SimpleCredential的構(gòu)造函數(shù):它只接受字符數(shù)組,使用Spring工廠聲明作為一種變通。