5. Sự sắp xếp các Item con
9.2 Repository có nhiều Workspace và sự tương ứng các node
Trong trườnghợp này,mộtnode trongmộtworkspacecóthểcócácnodetương ứng ( corresponding nodes ) trong các workspace khác và chúng cùng chia sẻ một
UUID. Các node tương ứng này có thể được xem như là thể hiện của cùng một node trênnhiềuworkspacekhácnhau.Tuy nhiêntrongmộtworkspace,khôngtồntại2 node cócùngchungmộtUUID.
Chỉ có các node với kiểu mix:refereneable mới có thể có các node tương ứng trêncácworkspacekhácnhau.
Các node tương ứng này chỉ cần có chung một UUID. Do đó chúng có thể có cácđườngdẫnkhácnhaucũngnhưcácpropertyvàcácnodeconkhácnhau.
Khimộtnodethamchiếumới(referenceablenode)đượctạoratrongworkspace bởi hàmNode.addNode thìnósẽđượcấnđịnhmộtUUIDmớibởihệthống. Muốnmột node có một node tương ứng trong một workspace khác, nó phải được nhân bản ("cloned")từworkspacenguồnđếnworkspaceđíchbằngcáchsửdụngphươngthức:
Workspace.clone(StringsrcAbsPath,StringdestAbsPath,
StringdestWorkspace,booleanshallow) Phương thức này thực hiện nhân bản cây con từ đường dẫn srcAbsPath trong workspace nguồn đến đường dẫn destAbsPath trong workspace đích destWorkspace nếushallow=false,hoặcchỉnhânbảnmộtnodevàpropertycủanónếushallow=rue.
Phương thức clone thực nhân bản cả những node tham chiếu và những node không tham chiếu ( nonreferenceable node ), nhưng chỉ những node tham chiếu mới duytrìmốiquanhệtươngứngcủanógiữacácworkspace.
Bùi Vĩnh Phú 80 Đặng Đình
Vương
PháttriểnCMSmodulechohệthốngIntranetcuảCôngtyTMA
Trong trường hợp các root node trong các workspace có kiểu là mix:referenceable thì chúng phải có chung một UUID. Root node của một workspace sẽtựđộngđượctạorakhiworkspaceđóđượctạo.
Biểuđồsaumôtảmộtrepositorycó2workspace
Hình 22: Repository có nhiều workspace
BùiVĩnhPhú 81 ĐặngĐình
Vương
PháttriểnCMSmodulechohệthốngIntranetcuảCôngtyTMA
Trongbiểuđồtrên,repositorycó2workspacelàWS1vàWS2.Đườngđứtkhúc chỉ ra các node có mối quan hệ tương ứng. Trong mỗi workspace có các node không xuất hiện trên workspace còn lại, các node này có thể là các node tham chiếu nhưng
khôngđượcnhânbảnhaycácnodekhôngthamchiếu.
10. Tạo phiên bản ( Versioning )
Hệ thốngtạophiên bảnđược xâydựngdựa trênnodetham chiếuđã trìnhbàyở trên.
Trong một repository hỗ trợ tạo phiên bản , workspace có thể chứa cả versionable node và nonversionable node. Versionable node có kiểu
là
mix:versionable. Kiểu mix:versionable là kiểu con thừa kế từ kiểu mix:referenceable, dođómộtnodechophéptạophiênbảnthìnólànodethamchiếuvàcómộtUUID.
Khảnăngcóthểtạophiênbảncủanodecónghĩalàtạibấtkỳmộtthờiđiểmcho trước nào đó, trạng thái của node có thể được lưu giữ để phục vụ cho việc phục hồi trong tương lai. Trạng thái lưu lại này được gọi là một version và hành động lưu lại đượcgọilàcheckingin.
Versionlà mộtphầncủaversion history.Trong mộtversionhistory, cácversion hìnhthànhmộtbiểuđồmiêutảmốiquanhệgiữacácversionablenode.
Cácversion historylưutrongversion storage.Có mộtversionstoragetrongmột repository, nólàmột câyconbên dướinode/jcr:versionStorage vàđượclưu trongmỗi workspace.
BùiVĩnhPhú 82 ĐặngĐình
Vương
PháttriểnCMSmodulechohệthốngIntranetcuảCôngtyTMA
Version History được lưu trong Repository như là một Node có kiểu Node là nt:versionHistory vàmộtNodecókiểu lànt:versionsẽđược thêmvàoVersionHistory khi một trong những thể hiện của Node trên các Workspace thực hiện thao tác lưu phiên bản (check-in). Khi đó phiên bản mới của Node sẽ được lưunhư là thành phần tiếp theocủamột haynhiều phiênbảntrước đó(successor). Do đó,Version Historysẽ đượclưunhưlàmộtđồthị.
Hình23: ĐồthịmôtảmộtVersionHistory
Trong đồ thị dùng để lưu Version History trên thì Node VH có kiểu là nt:versionHistory và Vroot, Va, Vb và Vc có kiểu là nt:version. VH là Node cha của cácNodeVroot, Va,VbvàVc;trong khiVa,VblàphiênbảnkếtiếpcủaVroot, tương tựVclàphiênbảnkếtiếpcủaVavàVb.
Bùi Vĩnh Phú 83 Đặng Đình
Vương
PháttriểnCMSmodulechohệthốngIntranetcuảCôngtyTMA
Trên Version History luôn có một Node đóng vai trò như làphiên bản ban đầu (RootVersion Node). Nodenàyđược tạoratựđộng khiVersionHistorymớiđược tạo
ra và đóng vai trò là điểm khởiđầu dùng để duyệt qua hết tất cả các phiên bản khác nằm trên đồ thịbiểu diễn VersionHistory. Trong ví dụ trên thìphiên bản ban đầu của VersionHistoryVHlàVroot.