01: package org.jgroups.blocks;
02:
03: import org.jgroups.ChannelException;
04:
05: /**
06: * <code>LockManager</code> represents generic lock manager that allows
07: * obtaining and releasing locks on objects.
08: *
09: * @author Roman Rokytskyy (rrokytskyy@acm.org)
10: * @author Robert Schaffar-Taurok (robert@fusion.at)
11: * @version $Id: LockManager.java,v 1.2 2005/06/08 15:56:54 publicnmi Exp $
12: */
13: public interface LockManager {
14:
15: /**
16: * Obtain lock on <code>obj</code> for specified <code>owner</code>.
17: * Implementation should try to obtain lock few times within the
18: * specified timeout.
19: *
20: * @param obj obj to lock, usually not full object but object's ID.
21: * @param owner object identifying entity that will own the lock.
22: * @param timeout maximum time that we grant to obtain a lock.
23: *
24: * @throws LockNotGrantedException if lock is not granted within
25: * specified period.
26: *
27: * @throws ClassCastException if <code>obj</code> and/or
28: * <code>owner</code> is not of type that implementation expects to get
29: * (for example, when distributed lock manager obtains non-serializable
30: * <code>obj</code> or <code>owner</code>).
31: *
32: * @throws ChannelException if something bad happened to communication
33: * channel.
34: */
35: void lock(Object obj, Object owner, int timeout)
36: throws LockNotGrantedException, ClassCastException,
37: ChannelException;
38:
39: /**
40: * Release lock on <code>obj</code> owned by specified <code>owner</code>.
41: *
42: * since 2.2.9 this method is only a wrapper for
43: * unlock(Object lockId, Object owner, boolean releaseMultiLocked).
44: * Use that with releaseMultiLocked set to true if you want to be able to
45: * release multiple locked locks (for example after a merge)
46: *
47: * @param obj obj to lock, usually not full object but object's ID.
48: * @param owner object identifying entity that will own the lock.
49: *
50: * @throws LockOwnerMismatchException if lock is owned by another object.
51: *
52: * @throws ClassCastException if <code>obj</code> and/or
53: * <code>owner</code> is not of type that implementation expects to get
54: * (for example, when distributed lock manager obtains non-serializable
55: * <code>obj</code> or <code>owner</code>).
56: *
57: * @throws ChannelException if something bad happened to communication
58: * channel.
59: */
60: void unlock(Object obj, Object owner)
61: throws LockNotReleasedException, ClassCastException,
62: ChannelException;
63:
64: /**
65: * Release lock on <code>obj</code> owned by specified <code>owner</code>.
66: *
67: * @param obj obj to lock, usually not full object but object's ID.
68: * @param owner object identifying entity that will own the lock.
69: * @param releaseMultiLocked force unlocking of the lock if the local
70: * lockManager owns the lock even if another lockManager owns the same lock
71: *
72: * @throws LockOwnerMismatchException if lock is owned by another object.
73: *
74: * @throws ClassCastException if <code>obj</code> and/or
75: * <code>owner</code> is not of type that implementation expects to get
76: * (for example, when distributed lock manager obtains non-serializable
77: * <code>obj</code> or <code>owner</code>).
78: *
79: * @throws ChannelException if something bad happened to communication
80: * channel.
81: *
82: * @throws LockMultiLockedException if the lock was unlocked, but another
83: * node already held the lock
84: */
85: void unlock(Object obj, Object owner, boolean releaseMultiLocked)
86: throws LockNotReleasedException, ClassCastException,
87: ChannelException, LockMultiLockedException;
88:
89: }
|