Web resources can be locked to ensure that only one user is updating
the resource at a time. Locking helps to prevent the "lost update" problem.
There are two types of lock currently defined by the WebDAV specification:
exclusive locks and shared locks.
Per the specification, a lock indicates that someone is updating the
resource, (hence the lock is a "write lock"), although the specification
notes that the the syntax is extensible, and permits the eventual creation
of locking for other access types.
Shared and Exclusive Locks
The most basic form of lock is an
exclusive lock. This is a
lock where the access right in question is only granted to a single client.
The need for this arbitration results from a desire to avoid having to merge
results. However, there are times when the goal of a lock is not to exclude
others from exercising an access right but rather to provide a mechanism for
principals to indicate that they intend to exercise their access rights.
Shared locks are provided for this case. A shared lock allows
multiple clients to receive a lock. Hence any user with appropriate
access can get the lock.
With shared locks there are two trust sets that affect a resource.
The first trust set is created by access permissions. Principals who are
trusted, for example, may have permission to write to the resource. Among
those who have access permission to write to the resource, the set of
principals who have taken out a shared lock also must trust each other,
creating a (typically) smaller trust set within the access permission write
set.
Lock Compatibility
The following table indicates what happens if a new lock request
is sent to a resource that is already locked:
| Lock Request |
---|
Current Lock | Exclusive Lock | Shared Lock |
---|
None | Success | Sucess |
Shared | Failure | Sucess |
Exclusive | Failure | Failure |
LockMethod
public LockMethod()
Method constructor.
LockMethod
public LockMethod(String path)
Method constructor.
LockMethod
public LockMethod(String path,
String refreshOpaqueToken,
int timeout)
Method constructor.
LockMethod
public LockMethod(String path,
String owner,
int timeout,
boolean isTransaction)
Creates a lock method that can
start a transaction when server supports
them in a
MS like style.
The transacion handle of the started transaction will be returned as the lock token.
To let subsequent requests participate in the transaction add a
Transaction
header with the lock token as value. You will have to enclose it in '<' and '>' just
like ordinary lock tokens.
To either commit or abort the transaction
use
UnlockMethod
.
path
- any path inside Slide's scopeowner
- of this transactiontimeout
- timeout of this transactionisTransaction
- true
when this method is used to starte a transaction
LockMethod
public LockMethod(String path,
String refreshOpaqueToken,
long timeout)
The timeout value MUST NOT be greater than 2^32-1.
Method constructor.
LockMethod
public LockMethod(String path,
String owner,
short scope,
int timeout)
Method constructor.
LockMethod
public LockMethod(String path,
String owner,
short scope,
long timeout)
The timeout value MUST NOT be greater than 2^32-1.
Method constructor.
addRequestHeaders
public void addRequestHeaders(HttpState state,
HttpConnection conn)
throws IOException,
HttpException
Generate additional headers needed by the request.
state
- State tokenconn
- The connection being used for the request.
generateRequestBody
protected String generateRequestBody()
DAV requests that contain a body must override this function to
generate that body.
The default behavior simply returns an empty body.
- generateRequestBody in interface XMLResponseMethodBase
getLockToken
public String getLockToken()
getName
public String getName()
getOwner
public String getOwner()
Return the owner of the lock as reported by the server.
getScope
public short getScope()
getTimeout
public int getTimeout()
get the timeout value.
isRefresh
public boolean isRefresh()
isTypeTransaction
public boolean isTypeTransaction()
parseResponse
public void parseResponse(InputStream input,
HttpState state,
HttpConnection conn)
throws IOException,
HttpException
Parse response.
- parseResponse in interface XMLResponseMethodBase
recycle
public void recycle()
Reset the State of the class to its initial state, so that it can be
used again.
- recycle in interface XMLResponseMethodBase
setOwner
public void setOwner(String owner)
Sets the owner of the lock. This method provides only "basic" owner
information. Thus,
setOwner("Jezebel Lipshitz")
will
produce an
owner
element in the request document like this:
<D:owner>Jezebel Lipshitz</D:owner>
Examples in the Webdav specification suggest that one can use
e-mail addresses, home page URLs, or other information; this
implementation doesn't handle any of that.
setRequestHeader
public void setRequestHeader(String headerName,
String headerValue)
Set a header value, redirecting the special cases of Depth and Time headers
to
setDepth(int)
and
setTimeout
as appropriate.
headerName
- Header nameheaderValue
- Header value
setScope
public void setScope(short scope)
setTimeout
public void setTimeout(int timeout)
Set the timeout value.
setTimeout
public void setTimeout(long timeout)
The timeout value MUST NOT be greater than 2^32-1.
Set the timeout value.
setTypeTransaction
public void setTypeTransaction(boolean typeTransaction)