我剛開始使用JCR(apache jackrabbit),我想問一個簡單的問題(因爲我沒有找到它的好教程): 因此,我需要什麼節點。結帳和Node.checkin方法? 這是什麼意思?JCR簽入/結帳操作
THX
我剛開始使用JCR(apache jackrabbit),我想問一個簡單的問題(因爲我沒有找到它的好教程): 因此,我需要什麼節點。結帳和Node.checkin方法? 這是什麼意思?JCR簽入/結帳操作
THX
'checkin'和'checkout'方法與JCR存儲庫如何跟蹤內容版本有關。 'checkout'方法向儲存庫發出信號,告知您的客戶端應用程序(可能)將修改某些可版本化的內容。 'checkin'方法向存儲庫發出信號,告知客戶端應用程序對可版本化的內容進行了更改,並且存儲庫應該在版本歷史記錄中記錄這些更改(例如,新版本)。
例如,假設我們想要在'/ a/b/c'中創建一個可版本化的節點。這是通過使用類似下面的代碼來完成的:
要創建內容,只需在節點上設置'mix:versionable'mixin(或者使用mixin或繼承自'mix:versionable'的主節點類型),然後然後保存您的更改。此時,存儲庫將初始化該節點(或子圖)的版本歷史記錄。
Node b = session.getNode("https://stackoverflow.com/a/b");
Node newNode = b.addNode("c");
newNode.addMixin("mix:versionable");
// set other properties and create children
session.save();
當選擇「session.save()」,倉庫會注意到「組合:多版本」混入,將初始化歷史版本在「/ A/B/C」的內容。從這一點開始,您的客戶端應用程序使用「checkout」和「checkin」向歷史添加新版本。
VersionManager vm = session.getWorkspace().getVersionManager();
vm.checkout("https://stackoverflow.com/a/b/c");
// make some changes at/under '/a/b/c'
session.save();
// Can make more changes and save, if desired
vm.checkin("https://stackoverflow.com/a/b/c");
當「籤」被調用時,庫將採取「/ A/B/C」的當前狀態,並且將其添加到歷史版本。當然,每當你想修改可版本化的節點時,這個過程都會重複。
在賈卡拉比特2.x中,在節點的方法是deprecated。相反,使用VersionManager.checkout/checkin(它們也可以在Jackrabbit 1.x中使用)。以下是一些示例代碼:
Node test = s.getRootNode().addNode("test");
Node t1 = test.addNode("t1");
t1.addMixin("mix:versionable");
s.save();
VersionManager vm = s.getWorkspace().
getVersionManager();
vm.checkout("/test/t1");
t1.setProperty("data", "Hello" + i);
s.save();
vm.checkin("/test/t1");
好的描述和例子也可以在這裏找到:https://docs.adobe.com/content/docs/en/spec/jcr/2.0/15_Versioning.html – 2016-12-19 22:44:07
'vm.checkout'是否創建了該版本的歷史記錄節點只有或遞歸的情況下,節點有孩子? – Emerald214 2016-06-09 10:04:17