专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »Java教程 » java中的:JAVA中的JCR模块 »正文

java中的:JAVA中的JCR模块

来源: 发布时间:星期三, 2008年9月10日 浏览:74次 评论:0
Spring Modules的一部分,JCR模块的主要目标是:以一种类似Spring主分发包中ORM包的方式,简化使用JSR-170 API进行开发。特点如下:

JcrTemplate,允许执行JcrCallback和异常处理(将需检查的JCR异常转换成不需检查的Spring DAO异常)。这个模板实现了来自JCRSession的绝大部分方法,可以简单地作为替换物使用。此外该模板知道线程绑定的会话,这个会话可以跨几个方法使用,这在使用事务型仓库时非常有用。
RepositoryFactoryBean,它配置、启动和停止仓库实例。因为JSR-170并没有说明仓库配置的标准方式,需要注意实现在这个方面的不同。这个支持包含预定义的用于Jackrabbit和Jeceira的FactoryBean,以及一个可以很容易支持其它仓库的抽象基类。
SessionFactory,用来统一Repository,Credentials和Workspace接口,允许自动注册监听器和自定义名字空间。
Spring声明性事务为那些实现了(可选)事务特性的仓库提供了支持。
OpenSessionInView拦截器和过滤器允许每个线程跨不同组件使用同一会话。与JcrTemplate一起,检索、关闭和管理JCR会话的工作已经外部化,对于调用者完全透明。
本文将使用参考实现(Jackrabbit),由于JCR模块使用的是javax.jcr接口,因此改变实现根本就是一个配置的问题。让我们一步一步地来看看在Jackrabbit之上如何使用Java内容仓库,以及如何让Spring模块来帮助完成这一工作。

配置仓库和SessionFactory
<bean id="repository" class="org.springmodules.jcr.jackrabbit.RepositoryFactoryBean">
<!-- normal factory beans params -->
<property name="configuration" value="classpath:jackrabbit-repo.xml"/>
<property name="homeDir" ref="./tmp/repo"/>
</bean>

JCR支持提供RepositoryFactoryBean类配置Jackrabbit,它需要JackRabbit的配置文件和主目录。注意,RepositoryFactoryBean在使用本地文件系统时特别有用;对于服务器环境,仓库可能被注册在JNDI中,此时可以使用JndiObjectFactoryBean帮助类(Spring分发包的一部分)检索它:

<bean id="repository" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="java:comp/env/jcr/myRepository"/>
</bean>

或使用Spring 2.0的模式名字空间:

<jndi:lookup id="entityManagerFactory" jndi-name="jcr/myRepository"/>

为了简化与JCR的工作,模块增加了SessionFactory接口:

public interface SessionFactory {
public Session getSession() throws RepositoryException;
public SessionHolder getSessionHolder(Session session);
}

SessionFactory隐藏了实现内部的认证细节,因此一旦配置完成,使用同一证书的会话可以很容易的被检索出来。为了利用实现的特性(没有涵盖在规范中的),这个接口允许检索SessionHolder。它是一个JCR模块特定类,主要被用于事务和会话管理(通过一种可用于每个JCR实现的缺省、通用实现),但是它不支持可选特性或自定义特性(如JackrabbitSessionHolder,它支持Jackrabbit的事务基础结构)。JCR模块提供一种简易、透明的方式来发现SessionHolder实现(这些我将在以后详细提到),使之很容易地插入对JSR-170其它兼容库的支持。

SessionFactory的缺省实现是JcrSessionFactory,它要求一个进行工作的仓库和证书。

<!-— SessionFactory -->
<bean id="jcrSessionFactory" class="org.springmodules.jcr.JcrSessionFactory">
<property name="repository" ref="repository"/>
<property name="credentials">
<bean class="javax.jcr.SimpleCredentials">
<constructor-arg index="0" value="bogus"/>
<!-- create the credentials using a bean factory -->
<constructor-arg index="1">
<bean factory-bean="password" factory-method="toCharArray"/>
</constructor-arg>
</bean>
</property>
</bean>

<!-- create the password to return it as a char[] -->
<bean id="password" class="java.lang.String">
<constructor-arg index="0" value="pass"/>
</bean>

这个bean声明非常简单,唯一需要注意的地方是,密码被提供给SimpleCredential的构造函数:它只接受字符数组,使用Spring工厂声明作为一种变通。
0

相关文章

读者评论

发表评论

  • 昵称:
  • 内容: