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();
  }
 }
}

0 0