10. Tạo phiên bản (Versionin g)
10.11 Thuộc Tính OnParentVersion
Mỗi thành phần (bao gồm Node và các thuộc tính) của một Node có một trạng thái cho biết hành động tương ứng xảy ra đối với Node con hay thuộc tính khi Node cha của nó thực hiện việc tạo ra phiên bản trên Repository. Trạng thái này được xác
định bởi thuộc tính OnParentVersion trong PropertyDef hay trong ChildNodeDef được quy định bởi loại Node của Node cha.
Xét ví dụ trong đó có Node N là một Node có thể tạo ra phiên bản được (Versionable Node) trên một Workspace W của Repository R. Node N này có loại Node T với T là loại Node con của loại Node nt:versionable và T cho phép N có thuộc tính có tên P và Node con C.
các hành động xảy đến cho P và C khi N tạo ra phiên bản trên Repository tùy thuộc vào thuộc tính OnParentVersion trong PropertyDef của P và trong ChildNodeDef của C được quy định bởi T.
Các giá trị có thể có của thuộc tính OnParentVersion là
• COPY
Phát triển CMS module cho hệ thống Intranet cuả Công ty TMA
• INITIALIZE
• COMPUTE
• IGNORE
• ABORT
Các giá trị của thuộc tính OnParentVersion này được quy định như các hằng số
trong lớp OnParentVersionAction. javax.jcr.version. OnParentVersionAction int COPY int VERSION int INITIALIZE int COMPUTE int IGNORE int ABORT
Bảng 2: Các hằng số trong giao diện javax.jcr.version.OnParentVersionAction
10.11.1 COPY
Khi gọi phương thức chekin() của N, C và toàn bộ các thành phần con của nó (bao gồm Node con và các thuộc tính con) sẽ được sao chép vào vùng lưu phiên bản như là cây con của VN. C và các thành phần trong cây con của nó sẽ không có Version History của riêng nó, do đó, C không cần phải là Node có thể tạo phiên bản được (Versionable Node)
Phát triển CMS module cho hệ thống Intranet cuả Công ty TMA
Khi gọi phương thức restore của N để phục hồi lại trạng thái VN, những bản sao chép của C và cây con của nó đã được lưu trước đó (khi gọi phương thức checkin) cũng sẽđược phục hồi để thay thế C và cây con của nó trên Workspace
10.11.2 VERSION
Khi gọi phương thức chekin() của N, VN sẽ thêm vào một tham chiếu đến Version History của C. Do đó, điều này cũng yêu cầu C là một Node có thể tạo ra phiên bản. Nếu C là Node không thể tạo ra phiên bản thì cách xử lý cũng giống như
trường hợp IGNORE.
Khi gọi phương thức restore của N để phục hồi lại trạng thái VN, nếu trên Workspace hiện thời có sẵn một Node tương ứng với Version History của C thì khi đó thể hiện của C này sẽ trở thành Node con của N. Nếu trên Workspace hiện thời không có Node nào (hay nói chính xác là thể hiện nào) tương ứng với Version History của C thì một phiên bản trên Version History của C sẽđược phục hồi lại như là một Node con của N. Workspace trên đó N được phục hồi sẽ quyết định xem phiên bản nào sẽđược phục hồi và sự quyết định này là do cấu hình của Workspace quy định.
10.11.3 INITIALIZE
Khi gọi phương thức chekin() của N, một Node mới của C sẽ được tạo ra và thêm vào vùng lưu phiên bản của Repository như là Node con của VN. Khi Node mới của C được tạo ra thì sự khởi tạo này cũng giống như việc khởi tạo khi C được tạo ra trên Workspace bằng cách thông thường. Node mới của C không có Version History, do đó C cũng không cần phải là một Node có thể tạo phiên bản.
Phát triển CMS module cho hệ thống Intranet cuả Công ty TMA
Khi gọi phương thức restore của N để phục hồi lại trạng thái VN, Node con C của VN sẽ không được quan tâm, điều đó có nghĩa là Node C hiện tại có trên Workspace sẽ giữ nguyên trạng thái, không bị thay thế bởi Node con C của VN.
10.11.4 COMPUTE
Khi gọi phương thức chekin() của N, một Node mới của C sẽ được tạo ra và thêm vào vùng lưu phiên bản của Repository như là Node con của VN. Khi Node mới của C được tạo ra thì sự khởi tạo này được quy định bởi các hàm khởi tạo được định nghĩa bởi loại Node của C. Node mới của C không có Version History, do đó C cũng không cần phải là một Node có thể tạo phiên bản.
Khi gọi phương thức restore của N để phục hồi lại trạng thái VN, Node con C của VN sẽ không được quan tâm, điều đó có nghĩa là Node C hiện tại có trên Workspace sẽ giữ nguyên trạng thái, không bị thay thế bởi Node con C của VN.
10.11.5 IGNORE
Khi gọi phương thức chekin() của N, không có thông tin nào của C được lưu trong VN.
Khi gọi phương thức restore của N để phục hồi lại trạng thái VN, Node con C của N sẽ vẫn giữ nguyên trạng thái hiện tại.
10.11.6 ABORT
Khi gọi phương thức chek-in của N thì sẽ phát sinh lỗi (ngoại lệ). Điều này cho thấy khi một Node cha có Node con có thuộc tính OnParentVersion có giá trị
Phát triển CMS module cho hệ thống Intranet cuả Công ty TMA
10.12 Ví dụ về một Repository có hỗ trợ tạo phiên bản
Phát triển CMS module cho hệ thống Intranet cuả Công ty TMA
Hình trên mô tả một repository có hỗ trợ versioning và gồm 2 workspace là WS1 và WS2. WS2 chứa node x không có một version history nào trong version storage, do đó nó là nonversionable node
Version storage mô tả các version history, mỗi verion history chứa 3 version của các node 01, 02, và 03.