理解Jackrabbit中的Version機制

2021-05-06 13:15:15 字數 1891 閱讀 7015

1. 乙個會產生version的節點,它的node type 一定包含有 mix:versionable。在jackrabbit裡面,只有實現了mix:versionable的node 才可以做checkin/checkout的操作。

2. 要讓乙個node產生新的version, 你做的第一步應當是checkout, 然後修改其中的各個屬性,然後是checkin。 在jackrabbit的定義檔案裡面,乙個支援version的節點一定有乙個屬性叫做 jcr:ischeckout, 他的預設值是true

3. 我們都知道,node 在 jackrabbit是乙個樹形的結構,而node 的 version 和 node 的儲存方式有很大的不同。在jackrabbit裡面,每乙個支援version的 node 都有乙個 jcr:versionhistory 屬性。這個屬性值是乙個引用(reference), 它就指向存在於 version storage 裡面的 version history 節點。而version history 的儲存可以說是平面的,類似於key-value的儲存方式,key存在於node 上, 而value儲存於 version storage 裡面。

4. 以下是乙個version history的示意圖。

* jcr:rootversion

*  |     |

* 1.0   2.0

*  |

* 1.1

*  |

* 1.2 ---/  ------/

*  |      /        /

* 1.3   1.2.0   1.2.0.0

*  |      |

* 1.4   1.2.1 ----/

*  |      |        /

* 1.5   1.2.2   1.2.1.0

*  |      |        |

* 1.6     |     1.2.1.1

*  |-----/

* 1.7

讓人感覺意外的是如何會產生 1.2.0 或者是 1.2.0.0呢。如果不是特別明白,繼續往下看。

5. 如果乙個節點要恢復成以前的乙個版本會發生什麼情況呢。實際上這一點並不能,呼叫node.restore() 可以讓乙個版本恢復到指定的乙個版本。假定現在node有兩個版本如下:

* jcr:rootversion

*  |

* 1.0

*  |

* 1.1

這時,我將版本恢復到1.0,便會產生乙個新的版本號, 如下

* jcr:rootversion

*  |

* 1.0

*  |

* 1.1 ---/

*  |      /       

* 1.2   1.1.0  

是的,這樣子第4裡面的疑惑已經知道的差不多了,但是2.0是怎麼來的呢?

6. version 裡面還有個概念叫做 version label, 它是用來快速定位 乙個version history 裡面的 version  的。

你可以通過 vh.getversionbylabel(label) 快速拿到乙個version, 而不需要通過skip方法去拿。

7. 2.0是一種什麼情況呢。如果有兩個workspace, 會出現2.0的情況。 workspace的node version 不同步時,則可以通過 node.merge或是node.update來使得這兩個workspace裡面的node 一致。用 node.merge方法時,如果兩個workspace裡面的version的版本的branch已經不一樣時,目標workspace中的node會為另乙個workspace的node 建乙個新的branch, 這個branch就是 2.0

8. onparentversion 屬性, 待續

jackrabbit中Xpath的用法

root smiky 20boy 歐陽瘋24 girl root xpath的七種節點型別 元素,屬性,文字,文件節點 即根節點 命名空間,注釋,處理指令 節點關係 父 子 兄弟 先輩 後代 xpath常用符號 從根節點開始選 從匹配選擇的當前節點擊擇文件中的節點,而不考慮它們的位置 example...

Jackrabbit的簡單節點定義檔案格式

注 本篇文章需要jcr基礎知識和jackrabbit基礎知識 jackrabbit能夠讓開發者制定自己的節點型別,應用程式能夠在啟動的時候讀取節點型別定義檔案,載入節點定義.下面是乙個簡單的說明 說明 jackrabbit 節點型別定義說明 名域的宣告.下面宣告了乙個名域ns,值為 節點型別的名字,...

V2G通俗理解1

通俗地說,所謂v2g,就是車 vehicle 與電網 grid 以多種形式增強了互動,從而實現了對雙方都好的 更加歡愉的狀態。本文寫作語言較為隨意,以科普為主。行文中若有原則性謬誤之處,請不吝賜教。從乙個親身經歷的小故事講起 本人是搞電動汽車的,直到研究生階段還對電網沒有深入研究。有一次做制動回饋研...