JackrabbitTest
来源:互联网 发布:广州入学积分怎么算法 编辑:程序博客网 时间:2024/06/18 16:37
package org.sf.jackrabbit;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FilterInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Calendar;
import java.util.Hashtable;
import java.util.Iterator;
import javax.jcr.Binary;
import javax.jcr.ItemExistsException;
import javax.jcr.Node;
import javax.jcr.NodeIterator;
import javax.jcr.PathNotFoundException;
import javax.jcr.Property;
import javax.jcr.Repository;
import javax.jcr.RepositoryException;
import javax.jcr.Session;
import javax.jcr.SimpleCredentials;
import javax.jcr.Workspace;
import javax.jcr.lock.LockException;
import javax.jcr.nodetype.ConstraintViolationException;
import javax.jcr.version.VersionException;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import org.apache.commons.exec.util.StringUtils;
import org.apache.commons.io.FileUtils;
import org.apache.jackrabbit.JcrConstants;
import org.apache.jackrabbit.api.management.DataStoreGarbageCollector;
import org.apache.jackrabbit.commons.JcrUtils;
import org.apache.jackrabbit.core.RepositoryImpl;
import org.apache.jackrabbit.core.SessionImpl;
import org.apache.jackrabbit.core.config.ConfigurationException;
import org.apache.jackrabbit.core.config.RepositoryConfig;
import org.apache.jackrabbit.core.data.DataIdentifier;
import org.apache.jackrabbit.core.data.DataStoreException;
import org.apache.jackrabbit.core.data.FileDataStore;
import org.apache.jackrabbit.core.gc.GarbageCollector;
import org.apache.jackrabbit.core.jndi.RegistryHelper;
import org.apache.jackrabbit.core.jndi.provider.DummyInitialContextFactory;
import org.junit.Before;
import org.junit.Test;
import org.xml.sax.InputSource;
public class JackrabbitTest {
static Session session = null;
static String mimeType = "application/pdf";
public void initSession1() throws RepositoryException {
RepositoryConfig repositoryConfig = null;
;
InputStream ins = Thread.currentThread().getContextClassLoader()
.getResourceAsStream("repository.xml");
String xmlPaht = "D:\\user\\sfit0734\\eclipseworkspace\\HelperSF\\repository.xml";
String repHomeDir = "E:\\shunfeng\\java_doc\\Jackrabbit\\repository";
// repositoryConfig = RepositoryConfig.create(new InputSource(ins),
// repHomeDir);
repositoryConfig = RepositoryConfig.create(xmlPaht, repHomeDir);
Repository repository = RepositoryImpl.create(repositoryConfig);
SimpleCredentials cred = new SimpleCredentials("admin",
"admin".toCharArray());
session = repository.login(cred, null);
}
public void initSession2() throws Exception {
Repository r = JcrUtils.getRepository();
// 登陆 .这里注意一点,需要以管理员的身份登陆,否则很多操作都没有权限,默认用户名和密码都是admin
SimpleCredentials cred = new SimpleCredentials("admin",
"admin".toCharArray());
session = r.login(cred, null);
}
public void initSession3() throws Exception {
// 初始化仓库
String configFile = "repository.xml";
String repHomeDir = "E:\\shunfeng\\java_doc\\Jackrabbit\\repository";
Hashtable<String, Object> hashTable = new Hashtable<String, Object>();
hashTable.put(Context.INITIAL_CONTEXT_FACTORY,
DummyInitialContextFactory.class.getName());
hashTable.put(Context.PROVIDER_URL, "192.168.1.52");
InitialContext ctx = new InitialContext(hashTable);
// RepositoryImpl.create(config)(config);
RegistryHelper.registerRepository(ctx, "repo", configFile, repHomeDir,
true);
Repository r = (Repository) ctx.lookup("repo");
// r = JcrUtils.getRepository();
// 登陆 .这里注意一点,需要以管理员的身份登陆,否则很多操作都没有权限,默认用户名和密码都是admin
SimpleCredentials cred = new SimpleCredentials("admin",
"admin".toCharArray());
session = r.login(cred, null);
}
public void initSession4(){
try {
RepositoryImpl rep2 = RepositoryImpl.create(RepositoryConfig.create(
new File("./target/dbClusterTest/node2")));
SimpleCredentials cred = new SimpleCredentials("admin",
"admin".toCharArray());
session = rep2.login(cred, null);
} catch (ConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (RepositoryException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Test
public void reg() throws RepositoryException{
Node rn = session.getRootNode();
Workspace ws = session.getWorkspace();
System.out.println(ws.getSession().isLive());
if (!ws.getSession().isLive()) {
ws.getNamespaceRegistry().registerNamespace("jcr",
"http://127.0.0.1/jcr/1.0");
}
}
@Before
public void init() throws Exception {
initSession1();
}
@Test
public void gc() throws IOException{
System.out.println("gc**********************************");
try {
delFileByJcrUtils(3);
GarbageCollector gc = ((RepositoryImpl) session.getRepository()).createDataStoreGarbageCollector();
gc.setPersistenceManagerScan(false);
gc.getDataStore().clearInUse();
listIdentifiers(gc);
// getFileByJcrUtils();
// gc.getDataStore().clearInUse();
if (gc.getDataStore() instanceof FileDataStore) {
// make sure the file is old (access time resolution is 2 seconds)
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
gc.mark();//标记
// gc.stopScan();
gc.sweep();//清创造
// gc.getDataStore().clearInUse();
// listIdentifiers(gc);
// gc.getDataStore().clearInUse();
gc.close();
} catch (RepositoryException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private static int listIdentifiers(GarbageCollector gc) throws DataStoreException {
System.out.println(("identifiers:"));
int count = 0;
Iterator<DataIdentifier> it = gc.getDataStore().getAllIdentifiers();
while (it.hasNext()) {
DataIdentifier id = it.next();
System.out.println(" " + id);
count++;
}
System.out.println("count*************"+count);
return count;
}
@Test
public void gc1() throws IOException{
System.out.println("gc1**********************************");
gc();
try {
delFileByJcrUtils(2);
GarbageCollector gc = ((RepositoryImpl) session.getRepository()).createDataStoreGarbageCollector();
gc.setPersistenceManagerScan(false);
gc.getDataStore().clearInUse();
// getFileByJcrUtils();
// gc.getDataStore().clearInUse();
if (gc.getDataStore() instanceof FileDataStore) {
// make sure the file is old (access time resolution is 2 seconds)
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
gc.mark();//标记
gc.sweep();//清创造
gc.getDataStore().clearInUse();
gc.close();
} catch (RepositoryException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Test
public void addNode() throws ItemExistsException, PathNotFoundException,
VersionException, ConstraintViolationException, LockException,
RepositoryException {
Node root = session.getRootNode();
// Store content
Node hello = root.addNode("hello");//,JcrConstants.NT_FILE
Node world = hello.addNode("world");
world.setProperty("message", "Hello, World!");
session.save();
// Retrieve content
Node node = root.getNode("hello/world");
System.out.println("hello:" + root.getPath());
System.out.println("world:" + node.getPath());
System.out.println("world message:"
+ node.getProperty("message").getString());
System.out.println("get node:" + root.getNode("hello"));
}
@Test
public void getNode() throws RepositoryException {
Node root = session.getRootNode();
// Store content
Node hello = root.getNode("hello");
Node world = hello.getNode("world");
System.out.println(world);
System.out.println("hello:" + hello.getPath());
System.out.println(hello.getProperties("message"));
System.out.println(root.getNode("hello/world"));
}
@Test
public void readFileFromNode() throws PathNotFoundException,
RepositoryException {
Node node = session.getRootNode();
JcrUtils.readFile(node);
Property data = node.getProperty(Property.JCR_DATA);
Binary binary = data.getBinary();
binary.getStream();
binary.dispose();
}
@Test
public void addFile() throws RepositoryException, FileNotFoundException {
// 加入文件
String path = "E:\\shunfeng\\java_doc\\pdf_test_file\\1.pdf";
String mimeType = "application/pdf";
String name = getName(path);
Node root = session.getRootNode();
Node fileNode = root.addNode(name);
System.out.println( fileNode.isNodeType(JcrConstants.NT_FOLDER));
System.out.println( fileNode.isNodeType(JcrConstants.NT_FOLDER));
Node resNode = fileNode.addNode("jcr:content");
resNode.setProperty("jcr:mimeType", mimeType);
resNode.setProperty("jcr:encoding", "");
File file = new File(path);
// 这里--用流加入
Binary binary = fileNode.getSession().getValueFactory()
.createBinary(new FileInputStream(file));
resNode.setProperty("jcr:data", binary);
Calendar lastModified = Calendar.getInstance();
lastModified.setTimeInMillis(file.lastModified());
resNode.setProperty("jcr:lastModified", lastModified);
// 保存
session.save();
}
@Test
public void getFile() throws RepositoryException, IOException {
// 加入文件
String path = "E:\\shunfeng\\java_doc\\pdf_test_file\\1.pdf";
String descpath = "E:\\shunfeng\\java_doc\\pdf_test_file\\1_1.pdf";
String name =getName(path);
Node root = session.getRootNode();
Node fileNode = root.getNode(name);
Node resNode = fileNode.getNode("jcr:content");
Property property = resNode.getProperty("jcr:data");
final Binary binary = property.getBinary();
InputStream ins = new FilterInputStream(binary.getStream()) {
@Override
public void close() throws IOException {
super.close();
binary.dispose();
}
};
property.getBinary().dispose();
FileUtils.copyInputStreamToFile(ins, new File(descpath));
}
@Test
public void getChildNode() throws RepositoryException {
Node root = session.getRootNode();
NodeIterator it = root.getNodes();
//然后就可以了遍历了
while (it.hasNext()) {
Node n = it.nextNode();
System.out.println("Depth:" + n.getDepth());
System.out.println("name:" + n.getName());
System.out.println("Path" + n.getPath());
System.out.println();
}
System.out.println(root.getNodes().getSize());
}
@Test
public void addFileByJcrUtils() throws RepositoryException, FileNotFoundException{
String path = "E:\\shunfeng\\java_doc\\pdf_test_file\\2.pdf";
String descpath = "E:\\shunfeng\\java_doc\\pdf_test_file\\2_1.pdf";
String name = path.substring(path.lastIndexOf("\\") + 1);
Node root = session.getRootNode();
JcrUtils.putFile(root, name, mimeType, new FileInputStream(path));
session.save();
}
public void addFileByJcrUtils( int i) throws RepositoryException, FileNotFoundException{
String path = "E:\\shunfeng\\java_doc\\pdf_test_file\\"+i+".pdf";
String descpath = "E:\\shunfeng\\java_doc\\pdf_test_file\\"+i+"_1.pdf";
String name = path.substring(path.lastIndexOf("\\") + 1);
Node root = session.getRootNode();
JcrUtils.putFile(root, name, mimeType, new FileInputStream(path));
session.save();
}
public String getName(String path){
String name = path.substring(path.lastIndexOf("\\") + 1);
return name;
}
@Test
public void batchAddFileByJcrUtils() throws RepositoryException, FileNotFoundException{
String path = "E:\\shunfeng\\java_doc\\pdf_test_file\\%s.pdf";
String descpath = "E:\\shunfeng\\java_doc\\pdf_test_file\\1_%s.pdf";
Node root = session.getRootNode();
Node node = null;
for(int i = 1; i < 10; i++){
String path1 = String.format(path, i);
node = root.addNode(getName(path1));
JcrUtils.putFile(node, getName(path1), mimeType, new FileInputStream(path1));
session.save();
}
}
@Test
public void batchDelFileByJcrUtils() throws RepositoryException, FileNotFoundException{
String path = "E:\\shunfeng\\java_doc\\pdf_test_file\\%s.pdf";
String descpath = "E:\\shunfeng\\java_doc\\pdf_test_file\\1_%s.pdf";
Node root = session.getRootNode();
for(int i = 1; i < 10; i++){
String path1 = String.format(path, i);
Node node = root.getNode(getName(path1));
node.remove();
}
session.save();
}
@Test
public void getFileByJcrUtils() throws RepositoryException, IOException{
addFileByJcrUtils(5);
String path = "E:\\shunfeng\\java_doc\\pdf_test_file\\5.pdf";
String descpath = "E:\\shunfeng\\java_doc\\pdf_test_file\\2_1.pdf";
String name = getName(path);
Node root = session.getRootNode();
System.out.println( root.getNode(name));
// root.getNode(name).remove();
JcrUtils.readFile(root.getNode(name),new FileOutputStream(descpath));
}
@Test
public void delFileByJcrUtils() throws RepositoryException, FileNotFoundException{
addFileByJcrUtils();
String path = "E:\\shunfeng\\java_doc\\pdf_test_file\\2.pdf";
String descpath = "E:\\shunfeng\\java_doc\\pdf_test_file\\2_1.pdf";
String name = path.substring(path.lastIndexOf("\\") + 1);
Node root = session.getRootNode();
root.getNode(name).remove();
session.save();
}
public void delFileByJcrUtils(int i) throws RepositoryException, FileNotFoundException{
addFileByJcrUtils(i);
String path = "E:\\shunfeng\\java_doc\\pdf_test_file\\"+i+".pdf";
String descpath = "E:\\shunfeng\\java_doc\\pdf_test_file\\"+i+"_1.pdf";
String name = path.substring(path.lastIndexOf("\\") + 1);
Node root = session.getRootNode();
root.getNode(name).remove();
session.save();
}
@Test
public void registerNamespace() throws RepositoryException{
Node root = session.getRootNode();
// 注册命名空间
Workspace ws = session.getWorkspace();
if (ws.getSession().isLive()) {
ws.getNamespaceRegistry().registerNamespace("jrc",
"http://jackrabbit.sf.org/jrc/1.0");
}
System.out.println(ws.getName());
}
/**
* 创建文件或者文件夹
* @throws FileNotFoundException
*/
@Test
public void createFileOrFolder() throws FileNotFoundException{
String path = "E:\\shunfeng\\java_doc\\pdf_test_file\\2.pdf";
String descpath = "E:\\shunfeng\\java_doc\\pdf_test_file\\2_1.pdf";
String name = path.substring(path.lastIndexOf("\\") + 1);
try {
Node root = session.getRootNode();
JcrUtils.putFile(root, "one5", mimeType, new FileInputStream(path));
session.save();
//是否是文件
System.out.println(root.getNode("one5").isNodeType(JcrConstants.NT_FILE));
root.addNode("folder",JcrConstants.NT_FOLDER);//创建文件夹
System.out.println("----"+root.getNode("folder").isNodeType(JcrConstants.NT_FOLDER));
session.save();
System.out.println(((SessionImpl)session).getQName(null));
} catch (RepositoryException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}