210 likes | 284 Views
Using the Web for Document Versioning: An Implementation Report for DeltaV. James J. Hunt, Jürgen Reuter. Department of Computer Science Universität Karlsruhe. Task. Starting Point: client/server versioning system client/server communication via proprietary protocol over Java-RMI Task:
E N D
Using the Web forDocument Versioning:An Implementation Reportfor DeltaV James J. Hunt, Jürgen Reuter Department of Computer Science Universität Karlsruhe
Task • Starting Point: • client/server versioning system • client/server communication via proprietary protocol over Java-RMI • Task: • replace Java-RMI with DeltaV standard
DeltaV Protocol • Protocol Design Goals: • support most common versioning models • provide versioning for Web and DAV clients in standardized fashion • ensure backwards compatibility to versioning-unaware Web and DAV clients • Protocol Implementation: • as extension of DAV, which itself extends HTTP
Scope • implement early 04.5 draft of DeltaV • focus on version control • do not consider configuration management • focus on client-managed workspaces
Implementation Details • coded in Java • code size: • core HTTP server: 16720 lines • attributed file system: 5357 lines • DAV implementation: >8500 lines • DeltaV implementation: >10000 lines
DeltaV vs. RCE:Common Ground • use checkin/checkout model • organize revisions as ancestral graph • require unique initial revision • provide storage space for meta data
Working Resources vs. Templatesin a checkin/checkout model • DeltaV Working Resource: • server-side modifiable copy of existing version • holds working resource properties • RCE Template: • placeholder for new revision in archive; modifiable copy of previous revision in user's file system space • holds pre-initialized revision attributes
Version Properties vs. Attributes • Trivial mapping: • DAV:Author <-> REV_AUTHOR • DAV:Comment <-> REV_DESCRIPTION • Needs date format conversion: • DAV:creationdate <-> REV_DATE_IN • DAV:getlastmodified <-> REV_TIMESTAMP
Version Properties vs. Attributes:Version Tree Navigation • DAV:successor-set property: • no designated line of development • includes revisions only, use DAV:working-resource-id-set to get working resources • RCE's REV_NEXT, REV_BRANCHES attribute: • tracks current line of development with REV_NEXT • includes revisions and templates
Version Properties vs. Attributes • Problem: • no DeltaV equivalent for RCE's ARCH_USERS, ARCH_COMMENT_LEADER attributes • Solution: • use user-defined resource properties • Drawback: • client-specific use, interoperability problems when incompatible clients share same server
XML Confusion • DAV, DeltaV: • make heavy use of XML • use XML namespaces • specify DTD syntax informally • do not consider namespaces in DTD • do not support XML validation
XML Confusion • problems: • unclear how to specify namespaces in DTD • namespaces do not seem to be supported by validating parser • many people tend to disregard XML validation • limited expressiveness of DTD • prospect: • maybe XML schemata are more appropriate
Conclusion • applicability of DeltaV on RCE proven • provided feedback for development of DeltaV • issues left (mostly DAV issues) • DeltaV ongoing effort • various implementations underway (e.g. Apache) • ultimate test still pending: run our client/server against someone else's server/client
Duplicate Use of XML Elements • DAV: • <!ELEMENT set (prop) > • DeltaV: • <!ELEMENT set (label-name)>
Limited Expressiveness <!ELEMENT auto-checkout ANY> ANY value: A sequence of elements with at most one DAV:unlocked-update element and at most one DAV:locked-update element. <!ELEMENT unlocked-update EMPTY> <!ELEMENT locked-update EMPTY>
Limited Expressiveness <!ELEMENT auto-checkout (unlocked-update | locked-update)* > <!ELEMENT unlocked-update EMPTY> <!ELEMENT locked-update EMPTY>
Marshalling PROPFIND /foo.java HTTP/1.1 Content-Length: 0 HTTP/1.1 207 Multi-Status Content-Type: text/xml Content-Length: 1418 DAV: 1,2 <?xml version="1.0"?> <A:multistatus xmlns:A="DAV:"> <A:response> <A:href>http://Rom.ira.uka.de:4711/foo.java</A:href> <A:propstat> <A:prop xmlns:B="RCE:"> <A:auto-version>F</A:auto-version> <A:working-resource-id-set /> <B:access-list>reuter(RWX),jjh(RW)</B:access-list> ... <A:revision-set> <A:href>http://Rom.ira.uka.de:4711/xkr1.1</A:href> <A:href>http://Rom.ira.uka.de:4711/xkr1.2</A:href> </A:revision-set> </A:prop> <A:status>HTTP/1.0 200 OK</A:status> </A:propstat> </A:response> </A:multistatus>