org.jgroups.protocols

## Class Locking

- java.lang.Object
- - org.jgroups.stack.Protocol
  - - org.jgroups.protocols.Locking

Direct Known Subclasses:
  CENTRAL_LOCK, PEER_LOCK

    public abstract class Locking
    extends Protocol

Base locking protocol, handling most of the protocol communication with other instances. To use distributed locking, `LockService` is placed on a channel. LockService talks to a subclass of Locking via events.

Since:
  2.12
Author:
  Bela Ban
See Also:
  `CENTRAL_LOCK`, `PEER_LOCK`

### Nested Class Summary

Nested Classes
`protected class` `Locking.ClientCondition`
`protected class` `Locking.ClientLock`
`static class` `Locking.LockingHeader`
`protected static class` `Locking.Request`
`protected class` `Locking.ServerCondition`
`protected class` `Locking.ServerLock` Server side queue for handling of lock requests (lock, release).
`protected static class` `Locking.Type`

### Field Summary

Fields
`protected boolean` `bypass_bundling`
`protected java.util.Map<java.lang.String,java.util.Map<Owner,Locking.ClientLock>>` `client_locks`
`protected Address` `local_addr`
`protected java.util.Set<LockNotification>` `lock_listeners`
`protected java.util.concurrent.ConcurrentMap<java.lang.String,Locking.ServerLock>` `server_locks`
`protected View` `view`

### Fields inherited from class org.jgroups.stack.Protocol

`down_prot, ergonomics, id, log, name, stack, stats, up_prot`

### Constructor Summary

Constructors
Constructor and Description
`Locking()`

### Method Summary

Methods
`void` `addLockListener(LockNotification listener)`
`protected Locking.ClientLock` `createLock(java.lang.String lock_name)`
`java.lang.Object` `down(Event evt)` An event is to be sent down the stack.
`java.lang.String` `getAddress()`
`boolean` `getBypassBundling()`
`protected Locking.ClientLock` `getLock(java.lang.String name)`
`protected Locking.ClientLock` `getLock(java.lang.String name, boolean create_if_absent)`
`protected Locking.ClientLock` `getLock(java.lang.String name, Owner owner, boolean create_if_absent)`
`protected Owner` `getOwner()`
`java.lang.String` `getView()`
`protected void` `handleAwaitRequest(java.lang.String lock_name, Owner owner)`
`protected void` `handleCreateAwaitingRequest(java.lang.String lock_name, Owner owner)`
`protected void` `handleCreateLockRequest(java.lang.String lock_name, Owner owner)`
`protected void` `handleDeleteAwaitingRequest(java.lang.String lock_name, Owner owner)`
`protected void` `handleDeleteAwaitRequest(java.lang.String lock_name, Owner owner)`
`protected void` `handleDeleteLockRequest(java.lang.String lock_name)`
`protected void` `handleLockDeniedResponse(java.lang.String lock_name, Owner owner)`
`protected void` `handleLockGrantedResponse(java.lang.String lock_name, Owner owner, Address sender)`
`protected void` `handleLockRequest(Locking.Request req)`
`protected void` `handleSignalRequest(Locking.Request req)`
`protected void` `handleSignalResponse(java.lang.String lock_name, Owner owner)`
`protected void` `handleView(View view)`
`protected void` `notifyAwaited(java.lang.String lock_name, Owner owner)`
`protected void` `notifyAwaiting(java.lang.String lock_name, Owner owner)`
`protected void` `notifyLockCreated(java.lang.String lock_name)`
`protected void` `notifyLockDeleted(java.lang.String lock_name)`
`protected void` `notifyLocked(java.lang.String lock_name, Owner owner)`
`protected void` `notifyUnlocked(java.lang.String lock_name, Owner owner)`
`java.lang.String` `printLocks()`
`protected void` `removeClientLock(java.lang.String lock_name, Owner owner)`
`void` `removeLockListener(LockNotification listener)`
`protected abstract void` `sendAwaitConditionRequest(java.lang.String lock_name, Owner owner)`
`protected abstract void` `sendDeleteAwaitConditionRequest(java.lang.String lock_name, Owner owner)`
`protected abstract void` `sendGrantLockRequest(java.lang.String lock_name, Owner owner, long timeout, boolean is_trylock)`
`protected void` `sendLockResponse(Locking.Type type, Owner dest, java.lang.String lock_name)`
`protected abstract void` `sendReleaseLockRequest(java.lang.String lock_name, Owner owner)`
`protected void` `sendRequest(Address dest, Locking.Type type, java.lang.String lock_name, Owner owner, long timeout, boolean is_trylock)`
`protected abstract void` `sendSignalConditionRequest(java.lang.String lock_name, boolean all)`
`protected void` `sendSignalResponse(Owner dest, java.lang.String lock_name)`
`void` `setBypassBundling(boolean bypass_bundling)`
`void` `unlockAll()`
`java.lang.Object` `up(Event evt)` An event was received from the layer below.

### Methods inherited from class org.jgroups.stack.Protocol

`destroy, downThreadEnabled, dumpStats, enableStats, getConfigurableObjects, getDownProtocol, getId, getLevel, getName, getProperties, getProtocolStack, getSocketFactory, getThreadFactory, getTransport, getUpProtocol, getValue, init, isErgonomics, printStats, providedDownServices, providedUpServices, requiredDownServices, requiredUpServices, resetStats, setDownProtocol, setErgonomics, setId, setLevel, setProperties, setPropertiesInternal, setProperty, setProtocolStack, setSocketFactory, setUpProtocol, setValue, setValues, start, statsEnabled, stop, upThreadEnabled`

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

### Field Detail

#### bypass_bundling

    protected boolean bypass_bundling

#### local_addr

    protected Address local_addr

#### view

    protected View view

#### server_locks

    protected final java.util.concurrent.ConcurrentMap<java.lang.String,Locking.ServerLock> server_locks

#### client_locks

    protected final java.util.Map<java.lang.String,java.util.Map<Owner,Locking.ClientLock>> client_locks

#### lock_listeners

    protected final java.util.Set<LockNotification> lock_listeners

### Constructor Detail

#### Locking

    public Locking()

### Method Detail

#### getBypassBundling

    public boolean getBypassBundling()

#### setBypassBundling

    public void setBypassBundling(boolean bypass_bundling)

#### addLockListener

    public void addLockListener(LockNotification listener)

#### removeLockListener

    public void removeLockListener(LockNotification listener)

#### getAddress

    public java.lang.String getAddress()

#### getView

    public java.lang.String getView()

#### down

    public java.lang.Object down(Event evt)

Description copied from class: `Protocol`
An event is to be sent down the stack. The layer may want to examine its type and perform some action on it, depending on the event's type. If the event is a message MSG, then the layer may need to add a header to it (or do nothing at all) before sending it down the stack using `down_prot.down()`. In case of a GET_ADDRESS event (which tries to retrieve the stack's address from one of the bottom layers), the layer may need to send a new response event back up the stack using `up_prot.up()`.

Overrides:
  `down` in class `Protocol`

#### up

    public java.lang.Object up(Event evt)

Description copied from class: `Protocol`
An event was received from the layer below. Usually the current layer will want to examine the event type and - depending on its type - perform some computation (e.g. removing headers from a MSG event type, or updating the internal membership list when receiving a VIEW_CHANGE event). Finally the event is either a) discarded, or b) an event is sent down the stack using `down_prot.down()` or c) the event (or another event) is sent up the stack using `up_prot.up()`.

Overrides:
  `up` in class `Protocol`

#### getLock

    protected Locking.ClientLock getLock(java.lang.String name)

#### getLock

    protected Locking.ClientLock getLock(java.lang.String name,
                             boolean create_if_absent)

#### unlockAll

    public void unlockAll()

#### printLocks

    public java.lang.String printLocks()

#### handleView

    protected void handleView(View view)

#### createLock

    protected Locking.ClientLock createLock(java.lang.String lock_name)

#### getOwner

    protected Owner getOwner()

#### sendGrantLockRequest

    protected abstract void sendGrantLockRequest(java.lang.String lock_name,
                            Owner owner,
                            long timeout,
                            boolean is_trylock)

#### sendReleaseLockRequest

    protected abstract void sendReleaseLockRequest(java.lang.String lock_name,
                              Owner owner)

#### sendAwaitConditionRequest

    protected abstract void sendAwaitConditionRequest(java.lang.String lock_name,
                                 Owner owner)

#### sendSignalConditionRequest

    protected abstract void sendSignalConditionRequest(java.lang.String lock_name,
                                  boolean all)

#### sendDeleteAwaitConditionRequest

    protected abstract void sendDeleteAwaitConditionRequest(java.lang.String lock_name,
                                       Owner owner)

#### sendRequest

    protected void sendRequest(Address dest,
                   Locking.Type type,
                   java.lang.String lock_name,
                   Owner owner,
                   long timeout,
                   boolean is_trylock)

#### sendLockResponse

    protected void sendLockResponse(Locking.Type type,
                        Owner dest,
                        java.lang.String lock_name)

#### sendSignalResponse

    protected void sendSignalResponse(Owner dest,
                          java.lang.String lock_name)

#### handleLockRequest

    protected void handleLockRequest(Locking.Request req)

#### handleLockGrantedResponse

    protected void handleLockGrantedResponse(java.lang.String lock_name,
                                 Owner owner,
                                 Address sender)

#### handleLockDeniedResponse

    protected void handleLockDeniedResponse(java.lang.String lock_name,
                                Owner owner)

#### handleAwaitRequest

    protected void handleAwaitRequest(java.lang.String lock_name,
                          Owner owner)

#### handleDeleteAwaitRequest

    protected void handleDeleteAwaitRequest(java.lang.String lock_name,
                                Owner owner)

#### handleSignalResponse

    protected void handleSignalResponse(java.lang.String lock_name,
                            Owner owner)

#### handleSignalRequest

    protected void handleSignalRequest(Locking.Request req)

#### handleCreateLockRequest

    protected void handleCreateLockRequest(java.lang.String lock_name,
                               Owner owner)

#### handleDeleteLockRequest

    protected void handleDeleteLockRequest(java.lang.String lock_name)

#### handleCreateAwaitingRequest

    protected void handleCreateAwaitingRequest(java.lang.String lock_name,
                                   Owner owner)

#### handleDeleteAwaitingRequest

    protected void handleDeleteAwaitingRequest(java.lang.String lock_name,
                                   Owner owner)

#### getLock

    protected Locking.ClientLock getLock(java.lang.String name,
                             Owner owner,
                             boolean create_if_absent)

#### removeClientLock

    protected void removeClientLock(java.lang.String lock_name,
                        Owner owner)

#### notifyLockCreated

    protected void notifyLockCreated(java.lang.String lock_name)

#### notifyLockDeleted

    protected void notifyLockDeleted(java.lang.String lock_name)

#### notifyLocked

    protected void notifyLocked(java.lang.String lock_name,
                    Owner owner)

#### notifyUnlocked

    protected void notifyUnlocked(java.lang.String lock_name,
                      Owner owner)

#### notifyAwaiting

    protected void notifyAwaiting(java.lang.String lock_name,
                      Owner owner)

#### notifyAwaited

    protected void notifyAwaited(java.lang.String lock_name,
                     Owner owner)