Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在jackrabbit中正确添加可版本化的节点_Java_Jakarta Ee_Nodes_Versioning_Jackrabbit - Fatal编程技术网

Java 如何在jackrabbit中正确添加可版本化的节点

Java 如何在jackrabbit中正确添加可版本化的节点,java,jakarta-ee,nodes,versioning,jackrabbit,Java,Jakarta Ee,Nodes,Versioning,Jackrabbit,我在tomcat wtih java 1.7上的j2ee应用程序中使用Jackrabbit 2.0。 我想至少在根节点下设置一个usernode,在该节点下设置一个可版本的lessonnode,在该节点下设置一个可版本的filecardnode。每个节点都是lesson和filecardnode,其中包含一个序列化对象作为属性。 我能够还原每个单独的节点,但我希望在给定版本的lessonnode下接收到一个frozennode,该节点保存到该时间的所有filecardnodes…但是如果我搜索该

我在tomcat wtih java 1.7上的j2ee应用程序中使用Jackrabbit 2.0。 我想至少在根节点下设置一个usernode,在该节点下设置一个可版本的lessonnode,在该节点下设置一个可版本的filecardnode。每个节点都是lesson和filecardnode,其中包含一个序列化对象作为属性。 我能够还原每个单独的节点,但我希望在给定版本的lessonnode下接收到一个frozennode,该节点保存到该时间的所有filecardnodes…但是如果我搜索该节点上的子节点,则没有子节点。 任何关于我做错了什么的建议,或者我可能理解规格中的错误

以下是我保存节点的方式:

    public Node insertNewLessonNode(String userID, LessonEntity lessonEntity,
        Session session) throws PathNotFoundException, RepositoryException,
        IOException {
    //that adds a usernode if not there already 
    Node userNode = handleLessonParentNodes(lessonEntity, userID, session);

    Node lessonNode = userNode.addNode(LESSON
            + lessonEntity.getID(), "nt:unstructured");
    lessonNode.addMixin("mix:versionable");
    lessonNode.setProperty("id", lessonEntity.getID());
    lessonNode.setProperty("data", JRUtils.serializObject(lessonEntity));
    session.save();
    session.getWorkspace().getVersionManager()
            .checkin(lessonNode.getPath());

    System.out.println("Lesson "
            + session.getWorkspace().getVersionManager()
                    .getBaseVersion(lessonNode.getPath()));

    return lessonNode;
}

public Node insertNewFileCardNode(Node lessonNode,
        FileCardEntity fileCardEntity, String userID, Session session)
        throws UnsupportedRepositoryOperationException,
        RepositoryException, IOException {

    nodeCheckout(lessonNode, session);

    Node fileCardNode = null;
    fileCardNode = lessonNode.addNode(FILECARD + fileCardEntity.getID(),
            "nt:unstructured");
    fileCardNode.addMixin("mix:versionable");

    fileCardNode
            .setProperty("data", JRUtils.serializObject(fileCardEntity));
    session.save();
    session.getWorkspace()
            .getVersionManager()
            .checkin(
                    lessonNode.getPath() + DEL + FILECARD
                            + fileCardEntity.getID());

    System.out.println("FileCard "
            + session
                    .getWorkspace()
                    .getVersionManager()
                    .getBaseVersion(
                            lessonNode.getPath() + DEL + FILECARD
                                    + fileCardEntity.getID()));

    return fileCardNode;
}
我就是这样恢复它的:

     public void restoreLesson(String lessonId,
        String userID, String versionName) throws SQLException, VersionException, ItemExistsException, UnsupportedRepositoryOperationException, LockException, InvalidItemStateException, RepositoryException {
    Session session = JRRepository.getInstance().getSession();
    String userNodePath = session.getRootNode().getNode(USER + userID)
            .getPath();
    String absPath = userNodePath + DEL + LESSON+lessonId;
    VersionHistory versionHistory = session.getWorkspace()
            .getVersionManager().getVersionHistory(absPath);
    VersionIterator iterator = versionHistory.getAllVersions();




    LessonEntity lessonEntity = null;

    while (iterator.hasNext()) {
        Version version = (Version) iterator.next();
        if (version.getName().equals(versionName)) {
            Node frozenNode = version.getFrozenNode();
            Value value = frozenNode.getProperty("data").getValue();

            //here i expect a few of my filecardnodes...but theres nothin...
            //i tried already with differened searchpatterns
            for (NodeIterator iterator3 = frozenNode.getNodes("nt:unstructured"); iterator3.hasNext();) {
                Node type = (Node) iterator3.next();
                System.out.println(type.getName());
            }

            Object ob = JRUtils.deSerializeObject(value.getBinary());

            lessonEntity = (LessonEntity) ob;

        }
    }

    session.getWorkspace().getVersionManager()
            .restore(absPath, versionName, false);
    List<LessonEntity> updateList = new ArrayList<LessonEntity>();
    lessonEntity.setLastModified(new Date());
    updateList.add(lessonEntity);
    lessonDao.updateLessons(updateList, userID);

    session.logout();

}
public void restoreLesson(字符串lessonId,
字符串userID,字符串versionName)引发SQLException,VersionException,ItemExistsException,UnsupportedPositionOperationException,LockException,InvalidItemStateException,RepositoryException{
会话会话=JRRepository.getInstance().getSession();
字符串userNodePath=session.getRootNode().getNode(用户+用户ID)
.getPath();
字符串absPath=userNodePath+DEL+LESSON+lessonId;
VersionHistory VersionHistory=session.getWorkspace()
.getVersionManager().getVersionHistory(absPath);
VersionIterator迭代器=versionHistory.getAllVersions();
LessonEntity LessonEntity=null;
while(iterator.hasNext()){
Version Version=(Version)迭代器.next();
if(version.getName().equals(versionName)){
Node frozenNode=version.getFrozenNode();
Value-Value=frozenNode.getProperty(“数据”).getValue();
//在这里,我期待我的一些filecardnodes…但是没有。。。
//我已经尝试了不同的搜索模式
for(NodeIterator迭代器3=frozenNode.getNodes(“nt:非结构化”);迭代器3.hasNext();){
节点类型=(节点)迭代器3.next();
System.out.println(type.getName());
}
Object ob=JRUtils.deSerializeObject(value.getBinary());
lessonEntity=(lessonEntity)ob;
}
}
session.getWorkspace().getVersionManager()
.restore(absPath,versionName,false);
List updateList=new ArrayList();
lessonEntity.setLastModified(新日期());
updateList.add(lessonEntity);
更新列表(updateList,userID);
session.logout();
}

任何帮助都将不胜感激…提前感谢

如果希望能够检索已版本化节点的子节点,则必须仅使父节点可版本化


当您将父级和子级设置为可设置版本时,它们存储为单独的
版本
s,因此它们之间没有链接。如果您确实想使它们都具有版本性,那么您必须添加自己的属性,以便将特定版本的
filecardnode
与特定版本的
lessionnode

Thx链接起来……我已经通过从子节点获取自己的版本历史,找到了解决该问题的方法。虽然parentnode知道他的孩子的版本,但没有……也许你也有一个关于这个问题的提示:我知道。首先,也许你愿意接受我的答案,或者提供你自己的答案,因为问题已经解决;)