10. To phiê nb n( Versionin g)
10.4 Phiê nB nC Bn (Base Version)
Các Node có cùng m t UUID trên các Workspace khác nhau đ c xem nh là các phiên b n khác nhau c a cùng m t đ i t ng Node trên Repository và các th hi n này có cùng m t Version History. Tuy nhiên, trên Version History có th có nhi u phiên b n khác nhau và m i th hi n c a đ i t ng Node có th ch n cho riêng mình m t phiên b n c b n khác nhau.
Phiên b n c b n c a m t th hi n dùng đ làm phiên b n tr c m c đ nh c a m t phiên b n m i c a th hi n đó đ c t o ra trên Version History.
10.5 Kh i T o M t Version History
Khi m t Node có th t o ra phiên b n (Versionable Node) đ c t o ra trên Repository thì khi đó m t Version History c ng đ c t o ra cho Node. Lúc m i t o ra thì Version History ch có m t Node có ki u nt:versionHistory và m t Node
con có ki u nt:version đóng vai trị là Root Version.
Ví d : xét tr ng h p m t Node N đ c t o ra nh sau.
• Node M là Node cha c a Node N và t o ra Node N b ng cách g i ph ng th c M.addNode(“N”).
Phát tri n CMS module cho h th ng Intranet cu Cơng ty TMA
• Tr c khi đ c l u l i (g i đ n ph ng th c save) thì Node N đ c gán thêm lo i Node ph mixin:versionable b ng cách g i ph ng thúc N.addMixin(“mix:versionable”).
• Khi g i đ n ph ng th c save c a N thì m t Version History m i s đ c t đ ng t o ra cho Node N. i u đó có ngh a là m t Node m i có ki u nt:versionHistory VH s đ c t o ra trên Repository và Node VH này có m t Node con có ki u nt:version V0 g i là jcr:rootVersion và Node con này chính là Root Version.
• Root Version này không ch a tr ng thái nào c a Node mà nó ch ch a thông tin v lo i Node và UUID thơng qua các thu c tính jcr:frozenPrimaryType, jcr:frozenMixinType, jcr:frozenUUID c a nó. • Giá tr c a thu c tính jcr:versionHistory (thu c tính này có ki u
REFERENCE) c a N đ c gán b ng v i UUID c a VH. i u này cho phép N có th gi tham chi u đ n Version History c a nó.
• Giá tr c a thu c tính jcr:baseVersion (thu c tính này có ki u REFERENCE) c a N đ c gán b ng v i UUID c a V0. i u này cho. phép N có th gi tham chi u đ n Base Version c a nó.
• Thu c tính jcr:isCheckedOut c a N đ c gán giá tr true.
10.6 T o Phiên B n M i C a M t Node
t o ra m t phiên b n m i c a Node l u trong Version History, c n g i đ n ph ng th c N.checkin, khi đó s phát sinh m t lo t các s ki n sau.
• M t Node m i V có ki u nt:version s đ c t o ra và thêm vào làm Node con c a Node VH (Node đ i di n cho Version History c a N trên Repository và đ c tham chi u đ n b i thu c tính jcr:versionHistory c a N).
Phát tri n CMS module cho h th ng Intranet cu Cơng ty TMA
• Base Version B c a N (Node đ c tham chi u đ n b i thu c tính jcr:baseVersion c a N) đ c thay đ i b ng cách thêm vào thu c tính jcr:successor và thu c tính này gi tham chi u đ n V v a m i đ c thêm vào.
• Thu c tính jcr:baseVersion c a N đ c thay đ i đ tham chi u đ n V. • Thu c tính jcr:isCheckedOut c a N đ c gán giá tr false.
• Tr ng thái c a N đ c l u l i trong V b ng cách l u l i nh ng thông tin c a các Node con và thu c tính c a N tu thu c vào thu c tính OnParentVersion c a các Node con và thu c tính con này.
• Các thu c tính jcr:primaryType, jcr:mixinTypes và jcr:uuid c a N đ c l u l i trong V nh ng đ c đ i tên thành jcr:frozenPrimaryType, jcr:frozenMixinTypes và jcr:frozenUUID đ tránh s trùng tên v i nh ng thu c tính jcr:primaryType, jcr:mixinTypes và jcr:uuid c a V.
• V đ c gán m t tên, thông th ng tên này d a trên tên c a Node tr c đó c a V.
• N u nhãn c a phiên b n (Version Label) đ c h tr khi check-in thì nhãn này s đ c thêm vào nh là m t giá tr c a thu c tính đa tr jcr:versionLabels.
10.7 Ph c H i L i Tr ng Thái Tr c ó C a Node
ph c h i l i tr ng thái tr c đó c a Node N đ c l u trong các phiên b n c a nó, ch ng h n xét m t phiên b n có tên “x.y” (ta g i Node t ng ng v i phiên b n này là V), c n ph i g i ph ng th c N.restore(“x.y”). Khi đó, các s ki n sau s di n ra.
Phát tri n CMS module cho h th ng Intranet cu Cơng ty TMA
• Các Node con và thu c tính c a N s thay đ i, b xoá b hay đ c thêm vào tùy thu c vào b n sao c a các Node con và thu c tính con này trên V và tu thu c vào thu c tính OnParentVersion c a t ng thành ph n con này.
• Thu c tính jcr:baseVersion c a N đ c thay đ i đ tham chi u t i V. • Thu c tính jcr:isCheckedOut c a N đ c thay đ i thành giá tr false.
10.8 Checkout
Thu c tính jcr:isCheckedOut c a m t Node N đ c s d ng đ xác đnh tr ng thái c a Base Version hi n t i c a Node N là có gi ng v i tr ng thái hi n t i c a N trên Repository hay khơng. S d có chuy n này do trong quá trình thao tác thì nh ng thay đ i trên Node ch có ý ngh a là thay đ i t m th i và nh ng thay đ i t m th i này s đ c l u vào Repository khi s thay đ i đó đ c l u th t s xu ng Repository(vi c l u này có th thơng qua nhi u cách khác nhau). Thu c tính này có giá tr true có ngh a là 2 tr ng thái này khơng gi ng nhau và n u có giá tr false thì có ngh a là 2 tr ng thái này gi ng nhau. Tr ng thái này đ c xác đnh thông qua ph ng th c N.chekout.
10.9 Update
Ph ng th c Node.update(String srcWorkspace, boolean shallow ) s d ng trong tr ng h p repository không h tr versioning. Node g i ph ng th c này s ánh x tr ng thái c a nó sang các node t ng ng trong srcWorkspace.
Phát tri n CMS module cho h th ng Intranet cu Công ty TMA
10.10 Các Node Có Th T o Phiên B n Trên Repository
JCR quy đnh m t Node có th t o ra phiên b n c a nó trên Repository khi và ch khi nó s h u ki u Node ph mixin:versionable. Nh ng mô t v ki u Node ph này đ c th hi n d i đây : NodeTypeName mix:versionable Supertypes mix:referenceable IsMixin true PropertyDef Name jcr:versionHistory Type REFERENCE ValueConstraint "nt:versionHistory" DefaultValue null AutoCreate true Mandatory true OnParentVersion COPY ReadOnly true PrimaryItem false Multiple false PropertyDef Name jcr:baseVersion Type REFERENCE ValueConstraint "nt:version" DefaultValue null
Phát tri n CMS module cho h th ng Intranet cu Công ty TMA AutoCreate true Mandatory true OnParentVersion IGNORE ReadOnly true PrimaryItem false Multiple false PropertyDef Name jcr:isCheckedOut Type BOOLEAN ValueConstraint null DefaultValue "true" AutoCreate true Mandatory true OnParentVersion IGNORE ReadOnly true PrimaryItem false Multiple false
C ng c n l u ý là ki u Node ph mixin:versionable là ki u con c a ki u mix:referenceable do đó nh ng Node có ki u mixin:versionable c ng có UUID. Thêm vào đó, Node có ki u mixin:versionable cịn có thêm các thu c tính jcr:versionHistory, jcr:baseVersion và jcr:isCheckedOut.
Thu c tính jcr:versionHistory có ki u thu c tính là REFERENCE dùng đ tham chi u đ n m t Version History b ng cách l u UUID c a Version History Node nh là giá tr c a thu c tính. Version History này dùng đ l u nh ng phiên b n c a Node.
Phát tri n CMS module cho h th ng Intranet cu Cơng ty TMA
jcr:baseVersion có ki u thu c tính là REFERENCE dùng đ tham chi u đ n m t phiên b n trên Version History (Version History này có tham chi u đ c l u trong thu c tính jcr:versionHistory) b ng cách l u UUID c a Version Node. Version Node này chính là phiên b n c b n (Base Version) c a Node.
jcr:isCheckedOut có ki u thu c tính là BOOLEAN dùng đ l u tr ng thái c a Node và phiên b n v i gi tr false cho bi t tr ng thái hi n t i là check-in và true cho bi t tr ng thái hi n t i l check-out.
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 • VERSION
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 FORBIDDEN / ABORT thì Node cha đó s khơng đ c quy n check-in.
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.
11. L ng Nghe S Ki n Trên Repository (Observation)
JCR quy đnh các Repository c p đ 2 có th cung c p c ch đ các ng d ng s d ng Repository có th nh n bi t và qu n lý các s ki n đ c t o ra khi có s thay đ i x y ra trên Repository.
ng d ng có th đ ng ký v i Repository nh ng s ki n nào mà nó mu n qu n lý c ng nh nh ng s ki n nào nó khơng mu n x y ra trên Repository thông qua vi c đ ng ký m t đ i t ng đ nh n các s ki n này (Listener), nh ng đ i t ng này ph i hi n th c hóa giao di n javax.jcr.observation.EventListener hay giao di n javax.jcr.observation.VetoableEventListener. Khi m t s ki n đ c t o ra, Repository g i đ n ph ng th c onEvent c a đ i t ng nh n s ki n đ ng ký v i Repository và đ i s c a ph ng th c này là đ i t ng có ki u Event dùng đ ch a nh ng thông tin v s ki n v a đ c phát sinh.
11.1 Phát sinh s ki n
M t s ki n đ c phát sinh hay đ c kích ho t (Fired) khi có s thay đ i x y ra và s thay đ i này đ c c p nh t lên Repository. C ng c n nh c l i là có nh ng thay đ i ch x y ra t m th i và nh ng thay đ i t m th i này ch đ c c p nh t th c s lên Repository khi g i đ n ph ng th c save c a đ i t ng thay đ i t m th i.
Phát tri n CMS module cho h th ng Intranet cu Công ty TMA
S ki n s không đ c phát sinh khi nh ng thay đ i t m th i x y ra mà ch a đ c l u xu ng Repository. i v i nh ng ph ng th c mà khi th c hi n ph ng th c đó, n i dung c a Repository b thay đ i ngay l p t c (ch ng h n nh ng ph ng th c Workspace.copy hay Workspace.move) thì s ki n s đ c t o ra. Thông tin v s ki n đ c phát sinh có th tìm th y thơng qua các ph ng th c đ c khai báo trong giao di n javax.jcr.observation.Event.
11.2 Các lo i s ki n
M i lo i s ki n phát sinh có m t giá tr ki u long đ i di n và các giá tr này là các h ng s đ c đnh ngh a tr c trong giao di n javax.jcr.observation.EventType
javax.jcr.observation.EventType long ITEM_ADDED long ITEM_CHANGED long ITEM_REMOVED long ITEM_VERSIONED long ITEM_RESTORED long LABEL_ADDED long LABEL_REMOVED long ITEM_LOCKED long ITEM_UNLOCKED long LOCK_EXPIRED
Phát tri n CMS module cho h th ng Intranet cu Công ty TMA
Các lo i s ki n này có th phân thành các nhóm sau
• Nhóm s ki n liên quan đ n nh ng thay đ i trên các Item c a Repository, bao g m: ITEM_ADDED, ITEM_REMOVED, ITEM_CHANGED.
• Nhóm s ki n liên quan đ n vi c qu n lý phiên b n trên Repository, bao g m: ITEM_VERSIONED, ITEM_RESTORED, LABEL_ADDED, LABEL_REMOVED.
• Nhóm s ki n liên quan đ n vi c qu n lý khoá (Locking) trên Repository, bao g m: ITEM_LOCKED, ITEM_UNLOCKED, LOCK_EXPIRED .
11.3 i t ng l ng nghe và x lý s ki n