First Hops
Hop 0: Getting started
新建Maven项目,修改pom.xml中的依赖
<dependencies>
<!– The JCR API –>
<dependency>
<groupId>javax.jcr</groupId>
<artifactId>jcr</artifactId>
<version>2.0</version>
</dependency>
<!– Jackrabbit contentrepository –>
<dependency>
<groupId>org.apache.jackrabbit</groupId>
<artifactId>jackrabbit-core</artifactId>
<version>2.2.4</version>
</dependency>
<!– Use Log4J for logging–>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.5.11</version>
</dependency>
</dependencies>
你可能 ClassNotFoundException异常信息当试图编译和执行以下示例时候
Hop 1: Logging in toJackrabbit
创建一个jackrabbit内容存储库并启动一个登录会话来访问它
import javax.jcr.Repository;
import javax.jcr.Session;
import org.apache.jackrabbit.core.TransientRepository;
/**
* First hop example. Logs in to a content repository and prints a
* status message.
*/
public class FirstHop {
/**
* The main entry point of theexample application.
*
* @param args command linearguments (ignored)
* @throws Exception if an erroroccurs
*/
public static void main(String[]args) throws Exception {
Repository repository = newTransientRepository();
Session session =repository.login();
try {
String user =session.getUserID();
String name =repository.getDescriptor(Repository.REP_NAME_DESC);
System.out.println(
"Logged in as "+ user + " to a " + name + " repository.");
} finally {
session.logout();
}
}
}
Run as->java application
Logged in as anonymous to a Jackrabbit repository.
详解FirstHop.java文件
import javax.jcr.Repository;
import javax.jcr.Session;
JCR API的接口位于:jcr-1.0.jar / javax.jcr,该包的所有接口与仓库的实现方式无关
Repository接口代表一个的仓库的实例
Session接口代表访问仓库一个登录会话,该会话访问仓库内的任何内容
注意:如果多线程同时访问内容,需要开启多个会话(会话实例不能保证线程安全)
import org.apache.jackrabbit.core.TransientRepository;
部署jackrabbit推荐使用JNDI
或者在一个使程序代码不直接依赖jackrabbit的容器环境,使用其他配置机制,
如果仅做一个简单独立的应用可以使用TransientRepository类
public class FirstHop
public static void main(String[] args) throws Exception
作为简单应用示例,仅main()方法,使用jvm进行异常处理
实际应用通常是web应用或者EJB组件,使用不同的设置和错误处理模式
Repository repository = new TransientRepository();
因此,除非你想通过库设置进行直接控制,否则无需手动配置。
Session session = repository.login();
Repository.login()开启一个使用默认工作空间且没有用户凭据的仓库会话
Jackrabbit尝试使用java认证和授权服务(JAAS)配置,但对于匿名用户默认JAAS无法找到
使Repository接口对象进一步实例化
try { … } finally { session.logout(); }
当顺利执行house,需要释放所有获得资源且保证JCR会话不发生异常
finally进行释放资源:Session.logout()关闭唯一开启的会话,transientrepository自动关闭
String user = session.getUserID();
The username or identifier of the user associated witha session is available using the,若为空则默认返回anonymous
String name = repository.getDescriptor(Repository.REP_NAME_DESC);
每个内容仓库实现都会产生大量的字符串描述符来描述各种实现属性(比如:实现级别、JCR特性可支持的选项)
通过查看Repository接口的标准仓库描述列表:
REP_NAME_DESC描述符的是repository实现的名称"Jackrabbit".
Hop 2: Working withcontent
内容仓库的主要功能是存储和检索内容,在JCR内容仓库的内容包括:
结构化或非结构话数据模型作为一个包含实际数据属性的层次结构的结点
下面示例应用程序功能:
1.将存用一些内容储初始化为空内容仓库
2.检索存储的内容并输出
3.删除存储内容
import javax.jcr.Repository;
import javax.jcr.Session;
import javax.jcr.SimpleCredentials;
import javax.jcr.Node;
import org.apache.jackrabbit.core.TransientRepository;
/**
* Second hop example. Stores, retrieves, and removes example content.
*/
public class SecondHop {
/**
* The main entry point of theexample application.
*
* @param args command linearguments (ignored)
* @throws Exception if an erroroccurs
*/
public static void main(String[]args) throws Exception {
Repository repository = newTransientRepository();
Session session =repository.login(
newSimpleCredentials("username", "password".toCharArray()));
try {
Node root =session.getRootNode();
只要有信心,人永远不会挫败