Interface SessionLockListener

All Superinterfaces:
Serializable

public interface SessionLockListener extends Serializable
Listener that is notified when a Vaadin session lock is acquired and released, enabling observation of session-lock contention (for example to publish lock wait and hold-time metrics).

All Vaadin server-side work for a single session is serialized behind one lock, so the time a thread blocks acquiring it and the time it holds it are key performance signals. Callbacks are delivered for the outermost acquisition only (reentrant re-locks are not reported), and the three callbacks for a single hold are delivered on the same thread in the order lockRequested(com.vaadin.flow.server.SessionLockEvent), lockAcquired(com.vaadin.flow.server.SessionLockEvent), lockReleased(com.vaadin.flow.server.SessionLockEvent), so a listener can record the start time in a ThreadLocal on lockRequested, derive the wait time on lockAcquired, and the hold time on lockReleased.

When several listeners are registered, lockRequested(com.vaadin.flow.server.SessionLockEvent) and lockAcquired(com.vaadin.flow.server.SessionLockEvent) are delivered in registration order while lockReleased(com.vaadin.flow.server.SessionLockEvent) is delivered in reverse registration order, so the callbacks nest like try/finally blocks: a listener registered later sees its lockReleased run before that of a listener registered earlier.

Implementations must be fast and non-blocking: callbacks run on the request/access thread directly around the lock operation. Exceptions thrown from a callback are logged and suppressed so they cannot disrupt session locking.

Register via VaadinService.addSessionLockListener(SessionLockListener), typically from a VaadinServiceInitListener. Listeners registered after a session's lock has already been created are still honoured.

Since:
25.2
See Also:
  • Method Summary

    Modifier and Type
    Method
    Description
    default void
    Invoked on the locking thread immediately after it has acquired the session lock for an outermost acquisition.
    default void
    Invoked on the locking thread immediately after the outermost lock hold has been released (the lock's hold count reached zero).
    default void
    Invoked on the locking thread immediately before it attempts to acquire the session lock for an outermost (non-reentrant) acquisition.
  • Method Details

    • lockRequested

      default void lockRequested(SessionLockEvent event)
      Invoked on the locking thread immediately before it attempts to acquire the session lock for an outermost (non-reentrant) acquisition. The thread may block between this callback and lockAcquired(com.vaadin.flow.server.SessionLockEvent); the elapsed time is the lock wait time. For a non-blocking acquisition (tryLock) this is delivered together with lockAcquired(com.vaadin.flow.server.SessionLockEvent) only when the lock was actually taken, so the reported wait time is effectively zero.
      Parameters:
      event - the session lock event
    • lockAcquired

      default void lockAcquired(SessionLockEvent event)
      Invoked on the locking thread immediately after it has acquired the session lock for an outermost acquisition.
      Parameters:
      event - the session lock event
    • lockReleased

      default void lockReleased(SessionLockEvent event)
      Invoked on the locking thread immediately after the outermost lock hold has been released (the lock's hold count reached zero). The time since lockAcquired(com.vaadin.flow.server.SessionLockEvent) is the lock hold time.
      Parameters:
      event - the session lock event