在一个月前,我们经理就让我研究一下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);
}
}
这写就是完整的代码,呵呵。。。。。。
分享到:
相关推荐
jackrabbit最全入门教程,jackrabbit最全入门教程,jackrabbit最全入门教程,jackrabbit最全入门教程
一个Eclipse项目, 内含三个Apache Jackrabbit的入门实例, 以及所有需要的包, 在Eclipse中可直接运行。
NULL 博文链接:https://suigara.iteye.com/blog/1454765
jackrabbit 1.5.6 jar
jackrabbit-standalone-1.6.5.jar是webDav的支持jar包。
深入浅出讲解jackrabbit 共分十个专题。PDF 文档
里面包含两个工程,一个是官方的三个小demo,另一个是在ibm页面看到的实例,比小demo稍微高级一些,希望可以帮助大家迅速入门和理解jackrabbit。
Apache Jackrabbit API html ,非常详细,
jackrabbit-api-1.5.0.jar
jackrabbit教程,主要是网上整合的资源。比较全面。用法等。
jackrabbit-webdav-2.1.0.jar 具体用法可以网上查找
jackrabbit-core-1.5.5.jar
Jackrabbit Oak 是一个可扩展的高性能分层内容 存储库,旨在用作现代世界级的基础 网站和其他要求苛刻的内容应用程序。
常见问题查询。作为JCR的一个实例,为用户提供一种网络存储、共享、应用的方式
jackrabbit, 在amqplib上,简单的amqp/rabbitmq作业队列基于 node Jackrabbitnode.js 在不讨厌生命的情况下。producer.js:var jackrabbit = require('jackrabbit');var rabbit = jackrabbit(process
jackrabbit 研究初步,不想多说,肯定值。研究了好久哦。
jackrabbit开发用jar包,jackrabbit是基于Lucene的一种站内搜索技术,它用xml文件为他的元数据,自动穿件索引,使用xpath或者xquery的查询方法。
jackrabbit-webdav-1.5.5.jar
Jackrabbit Oak是一个可伸缩的高性能分层内容存储库,旨在用作现代世界级网站和其他要求苛刻的内容应用程序的基础。 Oak的努力是Apache Jackrabbit项目的一部分。 Apache Jackrabbit是Apache软件基金会的项目。 ...
Rabbit BL1800 Jackrabbit 说明书pdf,Rabbit BL1800 Jackrabbit 说明书