`
dove19900520
  • 浏览: 597469 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

JackRabbit基础入门

阅读更多

在一个月前,我们经理就让我研究一下jackrabbit,为后面的内容管理开发做准备,我也一直在找关于jackrabbit的学习资料,无奈,好的资料都是英文的,看不太懂。终于在不懈努力下,写出了第一段代码。现在我将其粘贴出,大家一块学习下,有什么不足的,还请各位指点。

所需jar包:

commons-collections-3.2.1.jar
commons-dbcp-1.2.2.jar
commons-io-1.4.jar
commons-pool-1.3.jar
concurrent-1.3.4.jar
derby-10.5.3.0_1.jar
jackrabbit-api-2.4.0.jar
jackrabbit-core-2.4.0.jar
jackrabbit-jcr-commons-2.4.0.jar
jackrabbit-spi-2.4.0.jar
jackrabbit-spi-commons-2.4.0.jar
jcr-2.0.jar
lucene-core-3.0.3.jar
slf4j-api-1.6.4.jar
tika-core-1.0.jar
tika-parsers-1.0.jar

 

repository.xml配置文件

<?xml version="1.0"?>
<!DOCTYPE Repository PUBLIC "-//The Apache Software Foundation//DTD Jackrabbit 1.5//EN"
                            "http://jackrabbit.apache.org/dtd/repository-1.5.dtd">
<!-- Example Repository Configuration File
     Used by
     - org.apache.jackrabbit.core.config.RepositoryConfigTest.java
     -
-->

<Repository>
    <!--
        virtual file system where the repository stores global state
        (e.g. registered namespaces, custom node types, etc.)
    -->
    <FileSystem class="org.apache.jackrabbit.core.fs.local.LocalFileSystem">
        <param name="path" value="${rep.home}/repository"/>
    </FileSystem>

    <!--
        security configuration
    -->
    <Security appName="Jackrabbit">
        <!--
            security manager:
            class: FQN of class implementing the JackrabbitSecurityManager interface
        -->
        <SecurityManager class="org.apache.jackrabbit.core.security.simple.SimpleSecurityManager" workspaceName="security">
            <!--
            workspace access:
            class: FQN of class implementing the WorkspaceAccessManager interface
            -->
            <!-- <WorkspaceAccessManager class="..."/> -->
            <!-- <param name="config" value="${rep.home}/security.xml"/> -->
        </SecurityManager>

        <!--
            access manager:
            class: FQN of class implementing the AccessManager interface
        -->
        <AccessManager class="org.apache.jackrabbit.core.security.simple.SimpleAccessManager">
            <!-- <param name="config" value="${rep.home}/access.xml"/> -->
        </AccessManager>

        <LoginModule class="org.apache.jackrabbit.core.security.simple.SimpleLoginModule">
           <!-- 
              anonymous user name ('anonymous' is the default value)
            -->
           <param name="anonymousId" value="anonymous"/>
           <!--
              administrator user id (default value if param is missing is 'admin')
            -->
           <param name="adminId" value="admin"/>
        </LoginModule>
    </Security>

    <!--
        location of workspaces root directory and name of default workspace
    -->
    <Workspaces rootPath="${rep.home}/workspaces" defaultWorkspace="default"/>
    <!--
        workspace configuration template:
        used to create the initial workspace if there's no workspace yet
    -->
    <Workspace name="${wsp.name}">
        <!--
            virtual file system of the workspace:
            class: FQN of class implementing the FileSystem interface
        -->
        <FileSystem class="org.apache.jackrabbit.core.fs.local.LocalFileSystem">
            <param name="path" value="${wsp.home}"/>
        </FileSystem>
        <!--
            persistence manager of the workspace:
            class: FQN of class implementing the PersistenceManager interface
        -->
        <PersistenceManager class="org.apache.jackrabbit.core.persistence.pool.DerbyPersistenceManager">
          <param name="url" value="jdbc:derby:${wsp.home}/db;create=true"/>
          <param name="schemaObjectPrefix" value="${wsp.name}_"/>
        </PersistenceManager>
        <!--
            Search index and the file system it uses.
            class: FQN of class implementing the QueryHandler interface
        -->
        <SearchIndex class="org.apache.jackrabbit.core.query.lucene.SearchIndex">
            <param name="path" value="${wsp.home}/index"/>
            <param name="textFilterClasses" value="org.apache.jackrabbit.extractor.PlainTextExtractor,org.apache.jackrabbit.extractor.MsWordTextExtractor,org.apache.jackrabbit.extractor.MsExcelTextExtractor,org.apache.jackrabbit.extractor.MsPowerPointTextExtractor,org.apache.jackrabbit.extractor.PdfTextExtractor,org.apache.jackrabbit.extractor.OpenOfficeTextExtractor,org.apache.jackrabbit.extractor.RTFTextExtractor,org.apache.jackrabbit.extractor.HTMLTextExtractor,org.apache.jackrabbit.extractor.XMLTextExtractor"/>
            <param name="extractorPoolSize" value="2"/>
            <param name="supportHighlighting" value="true"/>
        </SearchIndex>
    </Workspace>

    <!--
        Configures the versioning
    -->
    <Versioning rootPath="${rep.home}/version">
        <!--
            Configures the filesystem to use for versioning for the respective
            persistence manager
        -->
        <FileSystem class="org.apache.jackrabbit.core.fs.local.LocalFileSystem">
            <param name="path" value="${rep.home}/version" />
        </FileSystem>

        <!--
            Configures the persistence manager to be used for persisting version state.
            Please note that the current versioning implementation is based on
            a 'normal' persistence manager, but this could change in future
            implementations.
        -->
        <PersistenceManager class="org.apache.jackrabbit.core.persistence.bundle.DerbyPersistenceManager">
          <param name="url" value="jdbc:derby:${rep.home}/version/db;create=true"/>
          <param name="schemaObjectPrefix" value="version_"/>
        </PersistenceManager>
    </Versioning>

    <!--
        Search index for content that is shared repository wide
        (/jcr:system tree, contains mainly versions)
    -->
    <SearchIndex class="org.apache.jackrabbit.core.query.lucene.SearchIndex">
        <param name="path" value="${rep.home}/repository/index"/>
        <param name="textFilterClasses" value="org.apache.jackrabbit.extractor.PlainTextExtractor,org.apache.jackrabbit.extractor.MsWordTextExtractor,org.apache.jackrabbit.extractor.MsExcelTextExtractor,org.apache.jackrabbit.extractor.MsPowerPointTextExtractor,org.apache.jackrabbit.extractor.PdfTextExtractor,org.apache.jackrabbit.extractor.OpenOfficeTextExtractor,org.apache.jackrabbit.extractor.RTFTextExtractor,org.apache.jackrabbit.extractor.HTMLTextExtractor,org.apache.jackrabbit.extractor.XMLTextExtractor"/>
        <param name="extractorPoolSize" value="2"/>
        <param name="supportHighlighting" value="true"/>
    </SearchIndex>
    
    <DataStore class="org.apache.jackrabbit.core.data.FileDataStore">
        <param name="path" value="${rep.home}/repository/datastore"/>
        <param name="minRecordLength" value="100"/>
    </DataStore>
</Repository>

 

 java代码:

import java.io.File;
import java.io.FileInputStream;
import java.util.Calendar;
import java.util.Hashtable;

import javax.jcr.Binary;
import javax.jcr.Node;
import javax.jcr.NodeIterator;
import javax.jcr.Property;
import javax.jcr.PropertyIterator;
import javax.jcr.Repository;
import javax.jcr.RepositoryException;
import javax.jcr.Session;
import javax.jcr.SimpleCredentials;
import javax.jcr.Value;
import javax.jcr.Workspace;
import javax.jcr.query.Query;
import javax.jcr.query.QueryManager;
import javax.jcr.query.QueryResult;
import javax.naming.Context;
import javax.naming.InitialContext;

import org.apache.jackrabbit.core.jndi.RegistryHelper;
import org.apache.jackrabbit.core.jndi.provider.DummyInitialContextFactory;
import org.apache.jackrabbit.value.BinaryImpl;
import org.apache.jackrabbit.value.StringValue;

import sun.net.www.MimeTable;

//import sun.net.www.MimeTable;

public class TestJackrabbit {
	public static void main(String[] args) throws Exception {

		// 初始化仓库
		String configFile = "config/repository.xml";
		String repHomeDir = "F:\\Company\\repository";
		Hashtable<String, Object> hashTable = new Hashtable<String, Object>();
		hashTable.put(Context.INITIAL_CONTEXT_FACTORY,
				DummyInitialContextFactory.class.getName());
		hashTable.put(Context.PROVIDER_URL, "127.0.0.1");
		InitialContext ctx = new InitialContext(hashTable);
		RegistryHelper.registerRepository(ctx, "repo", configFile, repHomeDir,
				true);
		Repository r = (Repository) ctx.lookup("repo");

		// 登陆           .这里注意一点,需要以管理员的身份登陆,否则很多操作都没有权限,默认用户名和密码都是admin
		SimpleCredentials cred = new SimpleCredentials("admin",
				"admin".toCharArray());
		Session session = r.login(cred, null);

		// /////////////注册工作区命名空间  start//////////////////////////////////
		// 根节点
		Node rn = session.getRootNode();

		// 注册命名空间
		Workspace ws = session.getWorkspace();
		if (!ws.getSession().isLive()) {
			ws.getNamespaceRegistry().registerNamespace("wiki",
					"http://127.0.0.1/wiki/1.0");
		}
		// /////////////注册工作区命名空间  end//////////////////////////////////
		
		
		// 添加内容
		Node encyclopedia = rn.addNode("wiki:encyclopedia");
		Node p = encyclopedia.addNode("wiki:entry");
		p.setProperty("wiki:title", toStringValue("rose"));
		p.setProperty("wiki:content",
				toStringValue("A rose is a flowering shrub."));
		p.setProperty("wiki:category", new Value[] { toStringValue("flower"),
				toStringValue("plant"), toStringValue("rose") });

		Node n = encyclopedia.addNode("wiki:entry");
		n.setProperty("wiki:title", toStringValue("Shakespeare"));
		n.setProperty("wiki:content",
				toStringValue("A famous poet who likes roses."));
		n.setProperty("wiki:category", toStringValue("poet"));
		// 保存
		session.save();

		// 查找 
		QueryManager qm = ws.getQueryManager();
		Query q = qm.createQuery(
				"//wiki:encyclopedia/wiki:entry[@wiki:title = 'rose']",
				Query.XPATH);// deprecated
		QueryResult result = q.execute();// 执行查询
		NodeIterator it = result.getNodes();
		// 然后就可以了遍历了   
		while (it.hasNext()) {
			Node entry = it.nextNode();
			// 简单的输出,后面会有输出详细内容的方法  
			System.out.println(entry.toString());
		}

		//  加入文件   
		File file = new File("F:\\我的文档\\图片素材\\非主流\\30.gif");
		MimeTable mt = MimeTable.getDefaultTable();
		String mimeType = mt.getContentTypeFor(file.getName());
		if (mimeType == null) {
			mimeType = "application/octet-stream";
		}
		Node fileNode = rn.addNode(file.getName(), "nt:file");
		Node resNode = fileNode.addNode("jcr:content", "nt:resource");
		resNode.setProperty("jcr:mimeType", mimeType);
		resNode.setProperty("jcr:encoding", "");
		
		//这里--用流加入   
		Binary fileBinary = new BinaryImpl(new FileInputStream(file));
		resNode.setProperty("jcr:data", fileBinary);

		Calendar lastModified = Calendar.getInstance();
		lastModified.setTimeInMillis(file.lastModified());
		resNode.setProperty("jcr:lastModified", lastModified);
		// 保存
		session.save();

		// 打印
		printAll(rn);

	}

	private static StringValue toStringValue(String str) {
		return new StringValue(str);
	}

	/**
	 * 打印
	 */
	private static void printAll(Node node) throws RepositoryException {
		printFormat(node.toString());
		PropertyIterator propertys = node.getProperties();
		while (propertys.hasNext()) {
			Property entry = propertys.nextProperty();
			if (entry.isMultiple()) {
				Value[] values = entry.getValues();
				if (values == null) {
					continue;
				}
				for (Value v : values) {
					printFormat(v.getString());
				}
			} else {
				printFormat(entry.getValue().getString());
			}
		}

		NodeIterator entries = node.getNodes();
		while (entries.hasNext()) {
			Node entry = entries.nextNode();
			printAll(entry);
		}
	}

	private static void printFormat(Object str) {
		System.out.println("####################:" + str);
	}
}

 这写就是完整的代码,呵呵。。。。。。

分享到:
评论
6 楼 挂挂挂挂 2016-04-07  
有jar包,我没找到可下载的资源 求帮忙
5 楼 dove19900520 2014-10-10  
wynstt 写道
你好,jackribbat的包能分享下吗?领导最近也让我研究它,包不好下载~
谢谢哈~

我这也没有现成的包了,都是很久之前看的了,包也删了
4 楼 wynstt 2014-09-04  
不好意思,出现别字了,是jackrabbit
3 楼 wynstt 2014-09-04  
你好,jackribbat的包能分享下吗?领导最近也让我研究它,包不好下载~
谢谢哈~
2 楼 oswaldl2 2013-08-26  
我是来看“非主流\\30.gif”的!!!
1 楼 53873039oycg 2012-11-29  
不错的文章,值得学习

相关推荐

    jackrabbit最全入门教程

    这个“jackrabbit最全入门教程”将会带你深入理解这个强大的内容管理解决方案。 首先,我们需要了解什么是JCR。JCR提供了一种统一的方式来访问和管理数字内容,无论这些内容是文档、图像、视频还是其他形式的数据。...

    Jackrabbit入门实例

    在这个"Jackrabbit入门实例"中,你将找到一系列在Eclipse环境下运行的示例项目,帮助初学者快速理解并掌握Jackrabbit的使用。 首先,让我们深入了解一下JCR。JCR是一个接口规范,定义了如何存储、检索和管理半结构...

    Apache Jackrabbit入门

    在本文中,我们将深入探讨Apache Jackrabbit的基础知识,以及如何开始使用它。 一、JCR和Apache Jackrabbit的概念 1. JCR:JCR为存储和检索非结构化信息提供了一个模型和API。它允许开发者创建可以跨各种存储后端...

    JackRabbit 学习参考资料总汇

    JackRabbit的API学习涵盖了多方面,从基础的环境搭建到具体的编程实践。文档中提到的API演示程序,说明了如何手动配置JackRabbit仓库。以下是一些重要知识点: 1. JackRabbit安装与配置:需要引入一系列的JAR包,...

    查看jackrabbit仓库的小工具

    Jackrabbit是Java Content Repository (JCR) API的一个开源实现,它提供了一个内容管理系统(CMS)的基础框架,广泛用于存储和检索结构化和非结构化数据。 Apache Jackrabbit是一个强大的内容管理存储系统,遵循JCR...

    Jackrabbit API

    API 包括多个关键组件,如`Session`、`Node`、`Property`和`Workspace`等,这些组件共同构成了内容管理的基础。 - `Session`:这是与JCR服务器进行交互的主要接口。通过登录获取Session,它可以进行读写操作,并且...

    jackrabbit

    ### Jackrabbit 在项目实施中的常见问题与解决方案 #### 一、Jackrabbit简介 Jackrabbit 是一个完全用 Java 编写的 JCR(Java Content Repository)实现,它可以作为一个独立的服务运行,也可以嵌入到更大的应用...

    Jackrabbit Oak 是一个可扩展的高性能分层内容存储库,旨在用作现代世界级网站和其他要求苛刻的内容应用程序的基础

    Jackrabbit Oak 是一种可扩展的高性能分层内容 专为现代世界级基础而设计的存储库 网站和其他要求苛刻的内容应用程序。Oak 工作是 Apache Jackrabbit 项目的一部分。 Apache Jackrabbit 是 Apache 软件基金会的一个...

    jackrabbit内容仓库的实例(两个工程)

    这两个项目将帮助我们深入理解和快速入门Jackrabbit的使用。 1. Jackrabbit核心概念: - JCR:JSR 170定义了内容存储的标准接口,使得应用程序可以透明地访问和操作不同类型的存储系统。 - Node:在JCR中,内容被...

    jackrabbit-standalone-1.5.6.jar jackrabbit 开发包

    jackrabbit 1.5.6 jar

    jackrabbit-standalone

    jackrabbit-standalone-1.6.5.jar是webDav的支持jar包。

    jackrabbit2.6

    5. **安全与权限**:Jackrabbit 包含了强大的安全模型,支持角色基础的访问控制(RBAC)和细粒度的权限设置,确保只有授权用户才能访问特定内容。 6. **持久化机制**:Apache Jackrabbit 使用持久化层来存储内容,...

    Jackrabbit Oak 是一个可扩展的高性能分层内容 存储库,旨在用作现代世界级的基础 网站和其他要求苛刻的内容应用程序

    无论你是要构建一个大型企业网站,还是需要一个健壮的内容管理基础设施,Jackrabbit Oak都能提供必要的工具和性能来支撑你的项目。通过其模块化设计、高性能架构、严格的安全控制和丰富的功能集,它无疑是CMS建站...

    jackrabbit教程

    Apache Jackrabbit 是一个开源的内容管理系统(CMS)框架,它实现了Java Content Repository (JCR) API。JCR API 是一种标准接口,允许应用程序访问和管理结构化内容存储库,类似于文件系统,但支持更丰富的数据类型...

    jackrabbit-webdav-2.3.2.src.zip

    杰克兔(Jackrabbit)是Apache软件基金会的一个项目,它是一个完全实现WebDAV协议的Java库。WebDAV是一种基于HTTP协议的协议扩展,用于用户编辑和管理存储在远程服务器上的文档。Jackrabbit提供了对WebDAV协议的...

    jackrabbit-api-1.5.0.jar

    jackrabbit-api-1.5.0.jar

    jackrabbit-webdav-2.7.1.zip

    标题中的"jackrabbit-webdav-2.7.1.zip"指的是Apache Jackrabbit的一个特定版本——2.7.1的WebDAV模块的压缩包。Apache Jackrabbit是Java内容存储库(Content Repository)的一个实现,它遵循JCR(Java Content ...

    jackrabbit-core-1.5.5.jar

    jackrabbit-core-1.5.5.jar

    jackrabbit-jcr-commons-2.5.0.zip

    杰克兔(Jackrabbit)是Apache软件基金会的一个开源项目,主要关注于实现Java Content Repository (JCR) API,这是Java世界中用于存储和管理结构化内容的标准。JCR Commons是Jackrabbit项目的一部分,它提供了一些...

Global site tag (gtag.js) - Google Analytics