2012-05-13 3 views
1

배경 : 웹 사이트 디자인에서 컨텐츠 관리를 위해 Apache Sling, Jackrabbit 및 Jetty를 포함한 서비스 혼합을 채택하려고 생각했습니다. 이 시점에서 DAV를 사용하여 JCR 컨텐츠 저장소에 액세스하는 모바일 컨텐츠 작성 플랫폼을 만드는 것이 가능할 것이라고 생각합니다. JCR 2.0 (JSR-283)의 버전 관리 문제로 인해 궁금한 점이 있는데, HTTP를 통해 JCR 버전 관리 작업을 수행하는 방법이 궁금합니다.DAV를 통해 JCR 노드 버전 지정 - howto?

자세한 내용 : 내가 생각하는 바를 section 15 of JSR-283, served up in HTML format from Adobe.이라고 생각합니다. 해당 섹션에서 JSR-283은 JCR 노드의 버전 관리 개념을 제공합니다.

JSR-283 호환 릴리스 Jackrabbit에서 that there's a VersionManager API을 이해합니다. 이는 API를 통해 JCR (JSR-283) 버전 관리 작업을 수행하는 방법을 설명하는 데 사용됩니다. 그렇다면 어떻게 DAA를 통해 버전 관리 작업을 수행 할 수 있습니까?

나 자신을 위해 그 대답을하고 싶습니다.하지만 어디서부터 시작해야할지조차 모르겠습니다.

버전 체크 인/체크 아웃 작업이 HTTP 요청으로 변환되는 방법을 설명하는 JSR-283의 다른 부분이 있습니까? 그것은 단순한 DAV 속성의 문제입니까? 저도 마크에 가깝습니까?

/피어 검토 필요, 롤

+0

처럼, 어떻게 노드 '체크인'및 '체크 아웃'작업/HTTP 요청을 DAV 번역 할 것인가? (및 'checkpoint'작업도 마찬가지로) –

+0

WebDAV에 대한 자세한 내용은 RFC 3253에서 WebDAV에 대한 Versioning Extensions를 정의하고 있음을 알 수 있습니다. [...] –

+0

JCR 버전 관리 프레임 워크는 'mix : versionable' JCR mixin 노드 유형 ([Jackrabbit Wiki] (http://wiki.apache.org/jackrabbit/mix%3Aversionable))을 중심으로 효과적으로 작동한다는 것을 알고 있습니다. 따라서 노드가 'mix : versionable'유형으로 생성 된 경우 WebDAV API로 캡슐화 될 수있는 기존의 WebDAV'checkin' 및'checkout' 연산이 아마도 그럴 것이라고 예상 할 수 있습니다. 버전 관리가 가능한 노드에서 JCR 체크 인/체크 아웃 작업을 수행합니다. 그것은 내가 생각하기에, 많은 질문에 대답 할 것입니다. [...] –

답변

0

I는 JCR 버전 관리 프레임 워크를 효과적으로 혼합 주위를 선회 이해 : JCR 믹스 인 노드 유형 버전 지정 (잭 래빗 위키). 따라서 노드가 mix : versionable 유형으로 생성 된 경우 WebDAV API로 캡슐화 될 수있는 기존 WebDAV 체크인 및 체크 아웃 작업이 JCR 체크인/체크 아웃 작업을 수행하는 방법 일 것이라고 추정합니다 버전 관리가 가능한 노드에서. 그 질문의 상당 부분에 대답 할 것이라고 가정합니다.

JCR 체크 포인트 작업에 정확한 DAV 칭찬이 표시되지 않지만 설명서에 설명 된대로 체크 인 후에 체크 인하면됩니다. DAV를 통해 에뮬레이션하기에 충분하므로 JCR 작업을 보완합니다. 이 문서가 최근 업데이트이지만

http://jackrabbit.apache.org/JCR_Webdav_Protocol.doc

: - (아파치 잭 래빗 JCR_Webdav_Protocol.doc)가 잭 래빗 웹 사이트의 WebDAV 메소드 호출과 잭 래빗 JCR API 호출 간의 매핑을 설명하는 문서가 있습니다

1

2006 년 3 월 29 일 첫 걸음을 내딛는 것이 도움이된다는 것을 알았습니다.

Word 및 Wireshark를 사용하여 Jackrabbit 기본 저장소에 대해 Microsoft Office 2010 세션을 추적했습니다. 다음 쉘 스크립트 종류는 * nix에서 curl과 libreoffice를 사용하여 동일한 동작을 실행합니다.


Word에서 행동에 DELETE, 업로드, VERSION-CONTROL 문서 WebDAV를 호출이 실행되는 선행을 볼 수 있듯이.

찾아보기 디렉토리는 Internet Explorer 인스턴스의 URL을 엽니 다.

Microsoft Word에서 문서 속성 (PROPFIND)을 검색 한 다음 문서를 열어 (GET) 잠급니다. 또한 유니 코드 문자 세트의 사적 사용 범위 (UTF-8).

Microsoft Word에서 문서를 저장하면 Win32CreationTime, Win32LastModifiedTime 및 Win32LastAccessTime 스탬프를 포함하도록 문서 노드의 속성 (PROPPCH)을 업로드 (PUT)하고 업데이트합니다.

Word에서 문서를 닫으면 UNLOCK을 사용하여 승인 된 잠금이 해제됩니다.

CHECKIN 문서가 수동으로 다시 실행되어 버전 수명주기가 완료됩니다.

버전 트리 보고서는 WebDAV에서도 얻을 수 있습니다.

#!/bin/sh 

# Delete document 
curl -A Microsoft-WebDAV-MiniRedir/6.1.7601 -X DELETE -v http://localhost:7001/repository/default/test.docx 

# Upload document 
curl -A Microsoft-WebDAV-MiniRedir/6.1.7601 -X PUT -v http://localhost:7001/repository/default/test.docx --data-binary "@test.docx" 

# Version-Control document 
curl -A Microsoft-WebDAV-MiniRedir/6.1.7601 -X VERSION-CONTROL -v http://localhost:7001/repository/default/test.docx 

# Checkout document 
curl -A Microsoft-WebDAV-MiniRedir/6.1.7601 -X CHECKOUT -v http://localhost:7001/repository/default/test.docx 

# Browse directory 
curl -A "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko" -X GET -v http://localhost:7001/repository/default/ 

# Open document in Word 
curl -A Microsoft-WebDAV-MiniRedir/6.1.7601 -X PROPFIND -v http://localhost:7001/repository/default/test.docx | xmllint --format - 
curl -A Microsoft-WebDAV-MiniRedir/6.1.7601 -X GET -v http://localhost:7001/repository/default/test.docx -O 
curl -A Microsoft-WebDAV-MiniRedir/6.1.7601 -X PROPFIND -v http://localhost:7001/repository/default/test.docx%EE%B3%B0 
cat > LOCK_document.xml <<EOF 
<?xml version="1.0" encoding="utf-8" ?> 
<D:lockinfo xmlns:D="DAV:"> 
    <D:lockscope> 
    <D:exclusive/> 
    </D:lockscope> 
    <D:locktype> 
    <D:write/> 
    </D:locktype> 
    <D:owner> 
    <D:href>WINDOWSDOMAIN\USER</D:href> 
    </D:owner> 
</D:lockinfo> 
EOF 
curl -A Microsoft-WebDAV-MiniRedir/6.1.7601 -X LOCK -v http://localhost:7001/repository/default/test.docx --data "@LOCK_document.xml" | xmllint --format - | tee LOCK_document.txt 
export LOCK_token=$(grep opaquelocktoken LOCK_document.txt | sed 's/^.*opaquelocktoken:/<opaquelocktoken:/' | sed 's/<\/D:href>.*$/>/') 

curl -A "Microsoft Office Existence Discovery" -X HEAD -v http://localhost:7001/repository/default/test.docx 
curl -A Microsoft-WebDAV-MiniRedir/6.1.7601 -X OPTIONS -v http://localhost:7001/ -H "translate: f" 

# Edit document in Word 
libreoffice test.docx 

# Save document in Word 
curl -A Microsoft-WebDAV-MiniRedir/6.1.7601 -X HEAD -v http://localhost:7001/repository/default/test.docx 
curl -A Microsoft-WebDAV-MiniRedir/6.1.7601 -X PUT -v http://localhost:7001/repository/default/test.docx -H "If: (${LOCK_token})" --data-binary "@test.docx" 
cat > PROPPATCH_document.xml <<EOF 
<?xml version="1.0" encoding="utf-8" ?> 
<D:propertyupdate xmlns:D="DAV:" xmlns:Z="urn:schemas-microsoft-com:"> 
    <D:set> 
    <D:prop> 
     <Z:Win32CreationTime>Mon, 09 Mar 2015 15:24:36 GMT</Z:Win32CreationTime> 
     <Z:Win32LastAccessTime>Mon, 16 Mar 2015 13:22:40 GMT</Z:Win32LastAccessTime> 
     <Z:Win32LastModifiedTime>Mon, 16 Mar 2015 13:22:40 GMT</Z:Win32LastModifiedTime> 
    </D:prop> 
    </D:set> 
</D:propertyupdate> 
EOF 
curl -A Microsoft-WebDAV-MiniRedir/6.1.7601 -X PROPPATCH -v http://localhost:7001/repository/default/test.docx -H "If: (${LOCK_token})" --data "@PROPPATCH_document.xml" | xmllint --format - 

# Close document in Word 
curl -A "Microsoft Office Existence Discovery" -X HEAD -v http://localhost:7001/repository/default/test.docx 
curl -A Microsoft-WebDAV-MiniRedir/6.1.7601 -X UNLOCK -v http://localhost:7001/repository/default/test.docx -H "Lock-Token: ${LOCK_token}" 

# Checkin document 
curl -A Microsoft-WebDAV-MiniRedir/6.1.7601 -X CHECKIN -v http://localhost:7001/repository/default/test.docx 

# Version tree report on document 
cat > REPORT_version-tree.xml <<EOF 
<?xml version="1.0" encoding="utf-8" ?> 
<D:version-tree xmlns:D="DAV:"> 
<D:prop> 
    <D:version-name/> 
</D:prop> 
</D:version-tree> 
EOF 
curl -A Microsoft-WebDAV-MiniRedir/6.1.7601 -X REPORT -v http://localhost:7001/repository/default/test.docx --data "@REPORT_version-tree.xml" | xmllint --format - 

Jackrabbit의 자동 버전 기능에는 문제가있어 아직 구현되지 않았습니다.

https://issues.apache.org/jira/browse/JCR-1348

#<!-- 
# see http://www.webdav.org/specs/rfc3253.html#PROPERTY_auto-version 
#  <D:auto-version>checkout-checkin</D:auto-version> 
#  <D:auto-version>checkout-unlocked-checkin</D:auto-version> 
#  <D:auto-version>checkout</D:auto-version> 
#  <D:auto-version>locked-checkout</D:auto-version> 
#--> 
cat > PROPPATCH_auto-version.xml <<EOF 
<?xml version="1.0" encoding="utf-8" ?> 
<D:propertyupdate xmlns:D="DAV:"> 
    <D:set> 
    <D:prop> 
     <D:auto-version>checkout-checkin</D:auto-version> 
    </D:prop> 
    </D:set> 
</D:propertyupdate> 
EOF 
curl -A Microsoft-WebDAV-MiniRedir/6.1.7601 -X PROPPATCH -v http://localhost:7001/repository/default/test.docx -H "If: (${LOCK_token})" --data "@PROPPATCH_auto-version.xml" | xmllint --format -