2010-10-15 23 views
8

Tôi chỉ mới bắt đầu làm việc với JCR (apache jackrabbit), tôi muốn đặt câu hỏi đơn giản (vì tôi không tìm được hướng dẫn tốt cho nó): Vì vậy, để làm gì tôi cần Node. phương thức thanh toán và Node.checkin? Chúng có ý nghĩa gì?JCR checkin/checkout hoạt động

Thx

Trả lời

8

Phương pháp 'checkin' và 'checkout' phải làm như thế nào với kho lưu trữ JCR theo dõi các phiên bản nội dung. Phương thức 'checkout' gửi đến kho lưu trữ mà ứng dụng khách của bạn (có thể) sẽ sửa đổi một số nội dung có thể phiên bản. Phương thức 'checkin' báo hiệu cho kho lưu trữ rằng ứng dụng khách của bạn đã thực hiện thay đổi đối với nội dung có thể phiên bản và rằng kho lưu trữ sẽ ghi lại những thay đổi đó (ví dụ: phiên bản mới) trong lịch sử phiên bản.

Ví dụ: hãy tưởng tượng rằng chúng tôi muốn tạo nút tại '/ a/b/c' có thể phiên bản được. Điều này được thực hiện bằng cách sử dụng một cái gì đó giống như mã sau đây:

Để tạo nội dung, bạn chỉ cần đặt mixin 'mix: versionable' (hoặc sử dụng loại mixin hoặc nút chính kế thừa từ 'mix: versionable') trên một nút và sau đó lưu các thay đổi của bạn. Tại thời điểm đó, kho lưu trữ sẽ khởi tạo lịch sử phiên bản cho nút đó (hoặc biểu đồ con).

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

Khi 'session.save()', kho sẽ lưu ý các 'mix: versionable' mixin và sẽ khởi lịch sử phiên bản dành cho các nội dung tại '/ a/b/c'. Từ thời điểm này, ứng dụng khách của bạn sử dụng 'checkout' và 'checkin' để thêm các phiên bản mới vào lịch sử.

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

Khi 'checkin' được gọi, kho lưu trữ sẽ lấy trạng thái hiện tại '/ a/b/c' và sẽ thêm nó vào lịch sử phiên bản. Tất nhiên, quá trình này được lặp lại mỗi lần bạn muốn thay đổi các nút có thể phiên bản.

+0

Có 'vm.checkout' tạo lịch sử phiên bản của điều đó không nút chỉ hoặc đệ quy trong trường hợp nút đó có con? – Emerald214

3

Trong Jackrabbit 2.x, các phương pháp trên nút là deprecated. Thay vào đó, sử dụng VersionManager.checkout/checkin (chúng có sẵn trong Jackrabbit 1.x). Dưới đây là một số mã mẫu:

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"); 
+0

Mô tả và ví dụ tốt cũng có thể được tìm thấy tại đây: https://docs.adobe.com/content/docs/en/spec/jcr/2.0/15_Versioning.html –

Các vấn đề liên quan