2015-04-16 87 views
0

即時通訊在使用java 1.7的tomcat上的j2ee應用程序中使用Jackrabbit 2.0。 我想至少在rootnode下創建一個usernode版本,並且在該版本的lessonnode下並且在該版本的filecardnode下。每一個都包含一個序列化對象作爲屬性的lesson-和filecardnode。 我能夠恢復每一個單一的,但我希望在一個給定版本的lessonnode接收凍結節點,其中包含所有filecardnodes到那個時間....但如果我搜索子節點上沒有子節點。 任何建議什麼即時做錯了,或者我mabey瞭解規格中的錯誤。如何在jackrabbit中正確添加可版本化的節點

我這是怎麼保存的節點:

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

} 

任何幫助,將不勝感激....在此先感謝!

回答

1

如果您希望能夠檢索版本化節點的子節點,那麼您只能使父節點可版本化。

當你父孩子多版本所以他們之間沒有任何聯繫,他們被保存爲獨立的version秒。如果你想讓他們都可版本化,那麼你將不得不添加自己的屬性,以便鏈接特定版本的filecardnode與特定版本的lessionnode

+0

Thx ....我通過從Subnodes獲取自己的VersionHistory,找到了解決該問題的解決方案。思想家長知道他的孩子們,但沒有..... Mabey你也有一個提示,以及該問題以及:http://stackoverflow.com/questions/29945095/versionhistory-of-node-disappered-after-restore-parentnode-降低版本插孔 – user2047809

+0

我這樣做。首先,也許你想接受我的答案或提供你自己的問題,因爲問題是固定的;) – TedTrippin

相關問題