jackrabbit

如果你不相信努力和时光,那么成果就会是第一个选择辜负你的。不要去否定你自己的过去,也不要用你的过去牵扯你现在的努力和对未来的展望。不是因为拥有希望你才去努力,而是去努力了,你才有可能看到希望的光芒。jackrabbit,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

<!-- Jackrabbit content repository -->
<dependency>
    <groupId>org.apache.jackrabbit</groupId>
    <artifactId>jackrabbit-core</artifactId>
    <version>2.20.10</version>
</dependency>

<dependency>
    <groupId>org.apache.derby</groupId>
    <artifactId>derby</artifactId>
    <version>10.14.2.0</version>
</dependency>
import javax.jcr.*;  

public class JcrStudentInfoCreator {  
  public static void main(String[] args) {  
      try {  
          // 1. 获取或初始化Session  
          Session session = getSession(); // 这是一个假设的方法,你需要实现它来获取Session  

          // 2. 获取或创建父节点  
          String parentNodePath = "/path/to/parent/node"; // 替换为实际的父节点路径  
          Node parentNode = session.getNode(parentNodePath);  
          if (parentNode == null) {  
              parentNode = session.getRootNode().addNode("students"); // 创建一个名为"students"的新父节点  
          }  

          // 3. 创建学生信息节点  
          for (int i = 0; i < 5; i++) { // 创建5个学生信息节点作为示例  
              String studentName = "Student" + i;  
              Node studentNode = parentNode.addNode(studentName, "studentInfoNodeType"); // 替换"studentInfoNodeType"为学生信息节点的节点类型  

              // 4. 设置节点属性  
              Property nameProperty = studentNode.setProperty("name", studentName);  
              studentNode.setProperty("age", 20); // 假设所有学生的年龄都是20岁  
              studentNode.setProperty("class", "ClassA"); // 假设所有学生都在ClassA班级  
          }  

          // 5. 保存更改  
          session.save();  
      } catch (RepositoryException e) {  
          e.printStackTrace();  
      }  
  }  
}

版本下的数据更新过程

//根据id找找节点Node nodeWithProperty = session.getNodeByIdentifier(anotherNodeId);  

// 获取根节点
Node rootNode = session.getRootNode();

// 获取或创建用户定义的节点
Node myNode = rootNode.addNode("myNode", "nt:unstructured");

// 设置一些属性
myNode.setProperty("prop1", "value1");
myNode.setProperty("prop2", "value2");

// 提交更改到存储库
session.save();

// 创建新版本
VersionManager versionManager = session.getWorkspace().getVersionManager();
// 切换回工作空间
versionManager.checkout("/myNode");

// 进行更多更改
myNode.setProperty("prop1", "new_value1");

// 提交更改到存储库并创建新版本
versionManager.checkin("/myNode");//将更改提交回原始节点并创建新版本  
// 获取新版本的信息  
//long versionNumber = versionManager.getVersionNumber(); // 获取版本号  
session.save();

不创建版,在原有版本修改获取指定id进行更新
在这里插入图片描述

javax.jcr 版本不变保存数据

import javax.jcr.*;  

public class JCRDataExample {  
public static void main(String[] args) throws RepositoryException {  
// 获取JCR存储库实例和会话对象...  
Repository repository = ...; // 注入或获取Repository实例  
Session session = repository.login(); // 登录到存储库并获取会话对象...  

// 获取要保存数据的节点路径  
String nodePath = "/path/to/your/node";  

// 设置节点的属性值  
session.setProperty(nodePath + "/property1", "value1");  
session.setProperty(nodePath + "/property2", "value2");  

// 保存数据  
session.save();  

// 最后,记得注销会话和关闭存储库连接  
session.logout();  
}  
}
package com.ruoyi;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.util.Calendar;

import javax.jcr.Binary;
import javax.jcr.Node;
import javax.jcr.NodeIterator;
import javax.jcr.Property;
import javax.jcr.PropertyIterator;
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.jcr.version.Version;
import javax.jcr.version.VersionHistory;
import javax.jcr.version.VersionIterator;
import javax.jcr.version.VersionManager;

import org.apache.jackrabbit.commons.JcrUtils;


public class JcrDemo {
public static void printDirectoryTree(Node root, int depth) throws RepositoryException {

 StringBuilder prefixBuilder = new StringBuilder();
 for (int i = 0; i < depth; i++) {
     prefixBuilder.append("|  ");
 }
 String prefix = prefixBuilder.toString();

 if (!root.hasNodes()) {
     System.out.println(prefix + root.getName());
     return;
 }
 for (NodeIterator nodes = root.getNodes(); nodes.hasNext();) {
     Node childNode = nodes.nextNode();
     printDirectoryTree(childNode, depth + 1);
 }
}

private static Session session;
public static void main(String[] args) throws Exception {
//Repository repository = JcrUtils.getRepository();
//JcrUtils.getRepository("repository.xml");new File(jcr地址)
//Repository repository = JcrUtils.getRepository("file:///D:/path/to/repository");
//JcrUtils.getRepository("file:/D:/path/to/repository");  
//System.setProperty( "org.apache.jackrabbit.repository.home","F:\\weixin\\emlsr\\jackrabbit");
      session = JcrUtils.getRepository().login(new SimpleCredentials("admin", "admin".toCharArray()));//"http://localhost:4502/"
      Workspace workspace = session.getWorkspace(); 
      QueryManager queryManager = workspace.getQueryManager();  
      String xpath = "/jcr:root/myFile//*[@jcr:primaryType='nt:unstructured']";
      xpath = "/jcr:root/myFile//*[@id='12345']";
      xpath = "/jcr:root/myFile//*[@jcr:primaryType='nt:unstructured' and @id='12345']";
      xpath = "/jcr:root/myFile/*";//myFile下所有节点如果没*查询myFile创建多个node节点数据
      xpath = "/jcr:root/element(*, nt:base)";  
      xpath = "/jcr:root/myFile/node()";
      xpath = "/jcr:root/myFile//student";
      xpath = "/jcr:root/myFile/student/@id";
      xpath = "/jcr:root/myFile/student[@id='12345']";
      xpath = "/jcr:root/myFile/jcr:content";
      xpath = "/jcr:root/myFile/jcr:content/@jcr:mimeType";
      xpath = "/jcr:root/myFile/element(*, nt:base)";
      xpath = "/jcr:root/myFile/element(jcr:content, nt:base)";
      xpath = "/jcr:root/myFile//*[(@id and @age)]";// 创建查询语句,查询具有属性"a"和属性"b"的节点
      xpath = "/jcr:root/myFile//*[(@id = '12345' and @age = 20)]";
      //XPath查询不直接支持同时指定多个元素类型
      xpath = "/jcr:root/myFile/element(student, nt:base)"; 
      xpath = "/jcr:root/myFile/element(student, nt:base)[jcr:contains(@id, '12345')]";
      Query query = queryManager.createQuery(xpath,Query.XPATH);
      QueryResult result = query.execute();  

      // 处理查询结果获取指定版本数据
      NodeIterator nodeIterator = result.getNodes(); 
      VersionManager versionManager = workspace.getVersionManager();
      // 检查节点是否为版本化  
      if (session.getRootNode().getNode("myFile").isNodeType("mix:versionable")) {  
          System.out.println("The node is versionable.");  
          // 在这里可以对版本化节点执行版本操作...  
          VersionHistory versionHistory = versionManager.getVersionHistory(session.getRootNode().getNode("myFile").getPath());
          VersionIterator versions = versionHistory.getAllVersions();
      } else {  
          System.out.println("The node is not versionable.");   
          // 在这里处理非版本化节点的操作...  
      }   

      while (nodeIterator.hasNext()) {  
          //Version version = versions.nextVersion();
          Node node = nodeIterator.nextNode(); 
         // 处理每个节点的jcr:data属性  
//       Node contentNode = node.getNode("jcr:content");
//       Binary binary = contentNode.getProperty("jcr:data").getValue().getBinary();
//       Binary bin = node.getProperty("jcr:content/jcr:data").getBinary();
         System.out.println(node);
//       System.out.println(node.getProperty("jcr:mimeType").getValue().getString());
//              System.out.println(node.getProperty("jcr:data").getValue().getBinary());


      }  
      
      
        //只有当你开启版本才可以查询不然报错
//          VersionHistory versionHistory = versionManager.getVersionHistory(session.getRootNode().getNode("myFile").getPath());
//          Version latestVersion = versionHistory.getVersionByLabel("jcr:lastReleasedVersion");
//          if (latestVersion != null) {
//              String latestVersionName = latestVersion.getName();
//              System.out.println("Latest Version Name: " + latestVersionName);
//          } else {
//              System.out.println("No versions found.");
//          }

     

      
  }  


static void find001() throws RepositoryException {
Workspace workspace = session.getWorkspace(); 
     QueryManager queryManager = workspace.getQueryManager();  
     Query query = queryManager.createQuery("//myFile/jcr:content",Query.XPATH);
     QueryResult result = query.execute();  
     // 处理查询结果获取指定版本数据
     NodeIterator nodeIterator = result.getNodes(); 
     VersionManager versionManager = workspace.getVersionManager();
     // 检查节点是否为版本化  
     if (session.getRootNode().getNode("myFile").isNodeType("mix:versionable")) {  
         System.out.println("The node is versionable.");  
         // 在这里可以对版本化节点执行版本操作...  
         VersionHistory versionHistory = versionManager.getVersionHistory(session.getRootNode().getNode("myFile").getPath());
         VersionIterator versions = versionHistory.getAllVersions();
     } else {  
         System.out.println("The node is not versionable.");  
         // 在这里处理非版本化节点的操作...  
     }   

     while (nodeIterator.hasNext()) {  
           //Version version = versions.nextVersion();
           Node node = nodeIterator.nextNode(); 
           // 处理每个节点的jcr:data属性  
//             Node contentNode = node.getNode("jcr:content");
//             Binary binary = contentNode.getProperty("jcr:data").getValue().getBinary();
//             Binary bin = node.getProperty("jcr:content/jcr:data").getBinary();
//             System.out.println(binary);
           if(node.getParent().hasNode("describe")) {
        	  Node describeBode = node.getParent().getNode("describe");
              PropertyIterator propertyIterator = describeBode.getProperties();  
              while (propertyIterator.hasNext()) {  
                  Property property = propertyIterator.nextProperty();  
                  System.out.println("Property Name: " + property.getName());  
                  System.out.println("Property Value: " + property.getValue().getString());  
              }  
              
              //遍历当前节点的所有属性
              for (PropertyIterator propIt = node.getProperties(); propIt.hasNext();) {
                  Property property = propIt.nextProperty();
                  System.out.println("  Property Name: " + property.getName());
                  System.out.println("  Property Value: " + property.getString());
              }
            }
           System.out.println(node.getProperty("jcr:data").getValue().getBinary());
     }  
    
}


static void find002() throws RepositoryException {
Workspace workspace = session.getWorkspace(); 
    QueryManager queryManager = workspace.getQueryManager();  
    Query query = queryManager.createQuery("//describe/@fileName",Query.XPATH);//describe[@fileName='test1']
    QueryResult result = query.execute();  
    // 处理查询结果获取指定版本数据
    NodeIterator nodeIterator = result.getNodes(); 
    VersionManager versionManager = workspace.getVersionManager();
    // 检查节点是否为版本化  
    if (session.getRootNode().getNode("myFile").isNodeType("mix:versionable")) {  
        System.out.println("The node is versionable.");  
        // 在这里可以对版本化节点执行版本操作...  
        VersionHistory versionHistory = versionManager.getVersionHistory(session.getRootNode().getNode("myFile").getPath());
        VersionIterator versions = versionHistory.getAllVersions();
    } else {  
        System.out.println("The node is not versionable.");  
        // 在这里处理非版本化节点的操作...  
    }   

    while (nodeIterator.hasNext()) {  
         Node node = nodeIterator.nextNode(); 
         PropertyIterator propertyIterator = node.getProperties();  
         while (propertyIterator.hasNext()) {  
             Property property = propertyIterator.nextProperty();  
             System.out.println("Property Name: " + property.getName());  
             System.out.println("Property Value: " + property.getValue().getString());  
         }  
         
         //遍历当前节点的所有属性
         for (PropertyIterator propIt = node.getProperties(); propIt.hasNext();) {
             Property property = propIt.nextProperty();
             System.out.println("  Property Name: " + property.getName());
             System.out.println("  Property Value: " + property.getString());
         }
    }  
   
}



static void find003() throws RepositoryException {
    QueryManager queryManager = session.getWorkspace().getQueryManager();  
    // 定义查询条件和参数  FROM 后是节点的类型下面表示/myFile下的如nt:resource,nt:unstructured,nt:base类型里的数据
    String statement = "SELECT * FROM [nt:base] AS s WHERE ISDESCENDANTNODE(s, '/myFile')";// WHERE [jcr:version] = $version
    //String version = "1.0"; // 指定版本号  
    // 创建查询对象  
    Query query = queryManager.createQuery(statement, Query.JCR_SQL2);  
    // 设置查询参数  
    //query.bindValue("version", session.getValueFactory().createValue(version));

    // 执行查询并获取结果  
    QueryResult result = query.execute();  
    NodeIterator nodeIterator = result.getNodes();  

    // 遍历查询结果并处理节点  
    while (nodeIterator.hasNext()) {  
        Node node = nodeIterator.nextNode();  
        //遍历当前节点的所有属性
        for (PropertyIterator propIt = node.getProperties(); propIt.hasNext();) {
            Property property = propIt.nextProperty();
            System.out.println("  Property Name: " + property.getName());
            System.out.println("  Property Value: " + property.getString());
        }
    }  

    // 最后,记得注销会话和关闭存储库连接  
    session.logout();  

   
}




public static void addFile() {
    try {
        Node root = session.getRootNode();

        // 创建一个新的node来存储文件//路径myFile
        Node fileNode = root.addNode("myFile");
        //(第一个节点)nt:unstructured节点类型表示该节点没有特定的结构或属性定义,它只是一个容器,可以包含其他节点和属性
        Node studentNode = fileNode.addNode("student", "nt:unstructured");  
        // 设置学生的属性  
        studentNode.setProperty("name", "John Doe");  
        studentNode.setProperty("age", 20);  
        studentNode.setProperty("id", "12345");  
        
        //精简案例1
        //或者创建多个学生文件夹形式
        // 创建 students 节点(如果尚未存在)
//          Node studentsNode = root.getNode("students");
//          if (studentsNode == null) {
//              studentsNode = root.addNode("students", "nt:folder");
//          }
//
//          // 创建示例学生节点
//          Node student1 = studentsNode.addNode("student1", "studentNodeType");
//          student1.setProperty("name", "张三");
//          student1.setProperty("age", 18);
//          student1.setProperty("gender", "男");
//          student1.setProperty("score", 85);
//
//          Node student2 = studentsNode.addNode("student2", "studentNodeType");
//          student2.setProperty("name", "李四");
//          student2.setProperty("age", 19);
//          student2.setProperty("gender", "女");
//          student2.setProperty("score", 90);

        
        
//          精简案例2
//          Node studentsFolder = session.getRootNode().addNode("students", "nt:folder");
//          
//          Node studentNode = studentsFolder.addNode("student1", "nt:unstructured");
//          studentNode.setProperty("firstName", "John");
//          studentNode.setProperty("lastName", "Doe");
//          studentNode.setProperty("age", 20);
//          
//          Node coursesFolder = studentNode.addNode("courses", "nt:folder");
//          Node mathCourseNode = coursesFolder.addNode("math", "nt:unstructured");
//          mathCourseNode.setProperty("courseName", "Mathematics");
//          mathCourseNode.setProperty("grade", 85);


        Node wenj = fileNode.addNode("describe","nt:unstructured");
        wenj.setProperty("width", 800);
        wenj.setProperty("height", 600);
        wenj.setProperty("fileName", "test1");
        //(第二个节点)在上述节点中创建一个存放文件数据的节点包含文件内容
        Node resNode = fileNode.addNode("jcr:content", "nt:resource");
        resNode.setProperty("jcr:data", session.getValueFactory().createBinary(new FileInputStream(new File("D:\\aaa.pdf"))));
        resNode.setProperty("jcr:mimeType", "application/pdf");
        resNode.setProperty("jcr:encoding", "");
        resNode.setProperty("jcr:lastModified", Calendar.getInstance()); 
        // Enable versioning
        //if (!fileNode.isNodeType("mix:versionable")) {
        //    fileNode.addMixin("mix:versionable");
            session.save();
        //  String id = studentNode.getIdentifier();  
        //  System.out.println("StudentNode ID: " + id );  

        //}
        //如果你要创建版本
        //VersionManager versionManager = session.getWorkspace().getVersionManager();  
        //versionManager.checkpoint(studentNode.getPath()); //创建版本
        //versionManager.checkout(studentNode.getPath()); // 将工作副本设置为检出状态,以便查看版本历史记录。在检出状态下,您可以查看但不可以更改工作副本。  
        //versionManager.checkin(studentNode.getPath()); // 将工作副本设置为检入状态,以便将更改保存到存储库。在检入状态下,您不能对工作副本进行更改。如果您希望保存更改,必须执行checkpoint操作。在执行此操作后,工作副本将被标记为最新版本。然后可以将其检入存储库。  
        session.logout(); // 关闭会话和存储库连接。  
        System.out.println("File is uploaded.");
    } catch (RepositoryException | FileNotFoundException e) {
        e.printStackTrace();
    }
}


public static void addFile001() throws FileNotFoundException {
    try {
        Node root = session.getRootNode();
        // 创建一个新的node来存储文件//路径myFile
        Node fileNode = root.addNode("imagesTest");
        fileNode.setProperty("id", "12345");  
        //fileNode = fileNode.addNode("folder", "nt:folder");再目录下创建文件
        Node resNode = fileNode.addNode("image", "nt:file");
        Node resourceNode = resNode.addNode("jcr:content", "nt:resource");
        resourceNode.setProperty("jcr:data", session.getValueFactory().createBinary(new FileInputStream(new File("D:\\aaa.pdf"))));
        resourceNode.setProperty("jcr:mimeType", "application/pdf");
        resourceNode.setProperty("jcr:encoding", "");
        resourceNode.setProperty("jcr:lastModified", Calendar.getInstance()); 
        session.save();   
        session.logout(); // 关闭会话和存储库连接。  
        System.out.println("File is uploaded.");
    } catch (RepositoryException e) {
        e.printStackTrace();
    }
}

static void down() throws RepositoryException {
Node root = session.getRootNode();
    Node fileNode = root.getNode("myFile");
    // 获取与'fileNode'关联的'jcr:content'节点,其中包含文件内容
    Node resNode = fileNode.getNode("jcr:content");
    Property dataProperty = resNode.getProperty("jcr:data");
    // 获取文件内容
    Binary binaryData = dataProperty.getBinary();
    InputStream is = binaryData.getStream();
    System.out.println(is);
}


//删除版本
void delVersion(Node node) throws RepositoryException {
// 删除所有现有版本
VersionHistory versionHistory = node.getVersionHistory();
for (VersionIterator vi = versionHistory.getAllVersions(); vi.hasNext();) {
  Version v = vi.nextVersion();
  versionHistory.removeVersion(v.getName());
}

}

void allVersion(VersionManager versionManager, Node node) throws RepositoryException {
VersionHistory versionHistory = versionManager.getVersionHistory(node.getPath());
VersionIterator versions = versionHistory.getAllVersions();
while (versions.hasNext()) {
  Version version = versions.nextVersion();
  System.out.println("Version Name: " + version.getName());
  System.out.println("Version Created: " + version.getCreated());
  // ...
}
}		

}



public static void currentVer(Session session) throws PathNotFoundException, RepositoryException {
    // 获取会话和定位到节点
    Node node = session.getNode("/path/to/node"); // 获取节点
    if (node.isNodeType("mix:versionable")) {
        node.checkout(); // 检出节点(如果需要)
        
        VersionHistory versionHistory = node.getVersionHistory();
        VersionIterator versions = versionHistory.getAllVersions();
        
        Version latestVersion = null;
        while (versions.hasNext()) {
            Version version = versions.nextVersion();
            if (latestVersion == null || version.getCreated().after(latestVersion.getCreated())) {
                latestVersion = version;
            }
        }
        
        if (latestVersion != null) {
            String versionName = latestVersion.getName();
            System.out.println("The current version number is: " + versionName);
        } else {
            System.out.println("No versions found for the node.");
        }
    } else {
        System.out.println("The node is not versionable.");
    }

}
	 
	  

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/200905.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!