Session locks are a way to ensure that only one session at a time
can access a particular resource. For example, you can use a session lock
to ensure that only one session is allowed to update a certain topic.
Session locks are a mechanism managed by the Diffusion™ server to coordinate access to
shared resources among multiple sessions.
A session can acquire a lock, identified by a lock name (chosen by you to suit
your application). Once a session acquires a lock,
no other session can acquire the same lock.
Acquiring a lock does not automatically change anything else about a session. Locks
are not linked to topics or permissions, except through your application's logic.
It is up to you
to design a suitable locking scheme and ensure your application
implements it. For example, if you want to implement exclusive updating of a topic
using a session lock, you must make sure that each session always acquires the lock
and uses a lock constraint created from the lock when updating the topic.
By default, a lock is released when the session owning it closes. Alternatively, when acquiring a lock, a session can specify that the
lock will be released if connection to the server is lost. This is done using a scope parameter.
A session can also
explicitly release a lock.
Acquiring a lock
Session locks are established on demand. There is no separate operation to create or destroy
a named lock.
If a session attempts to acquire a lock that is not assigned, the server assigns it immediately to the session.
If a session attempts to acquire a lock that is already assigned, the server will record that
the session is waiting to acquire it. When a lock is released and multiple sessions are waiting to acquire it, the server will arbitrarily assign it to one of the waiting sessions.
A session can request a lock with these parameters:
- Lock name
- A name for the lock.
- Lock scope (optional)
The scope of the lock.
By default, the scope is UNLOCK_ON_SESSION_LOSS, meaning
that the lock will be released when the session is closed.
If the scope is set to UNLOCK_ON_CONNECTION_LOSS, the lock
will be released when the session loses its current connection to the server.