JackRabbit基础入门
程序员文章站
2024-01-17 13:12:58
...
在一个月前,我们经理就让我研究一下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); } }
这写就是完整的代码,呵呵。。。。。。
上一篇: 防止多个PHP表单提交_PHP教程
下一篇: PHP邮箱激活功能