Class RequestContext

java.lang.Object
com.loomcache.server.context.RequestContext

public final class RequestContext extends Object
Request context propagation using Java 25 ScopedValues.

ScopedValues replace ThreadLocal for virtual thread-friendly, immutable context propagation. Unlike ThreadLocal, ScopedValues: - Are immutable: values are captured, not mutated - Isolate across virtual thread boundaries automatically - Work seamlessly with structured concurrency - Avoid the complexity of manual cleanup

This class provides context for distributed cache operations: - Correlation ID: tracks requests across multiple servers - Node ID: identifies the server handling the request - Client address: identifies the client source - Message type: logs the operation type for audit trails - Client ID: identifies authenticated clients

Usage with try-with-resources

  var context = RequestContext.newScope()
          .correlationId(123L)
          .nodeId("node-1")
          .clientAddress("127.0.0.1:9999")
          .messageType("GET")
          .clientId("user-456");
  context.run(() -> {
      // Within this block, context is accessible via:
      long corrId = RequestContext.correlationId();
      String node = RequestContext.nodeId();
      // ... rest of operation ...
  });
Since:
1.0
See Also:
  • Constructor Details

    • RequestContext

      public RequestContext()
  • Method Details

    • correlationId

      public static @Nullable Long correlationId()
      Get the current correlation ID, or null if not set.
      Returns:
      the correlation ID, or null
    • nodeId

      public static @Nullable String nodeId()
      Get the current node ID, or null if not set.
      Returns:
      the node ID, or null
    • clientAddress

      public static @Nullable String clientAddress()
      Get the current client address, or null if not set.
      Returns:
      the client address, or null
    • messageType

      public static @Nullable String messageType()
      Get the current message type, or null if not set.
      Returns:
      the message type, or null
    • clientId

      public static @Nullable String clientId()
      Get the current client ID, or null if not set.
      Returns:
      the client ID, or null
    • isActive

      public static boolean isActive()
      Check if any context is currently set.
    • newScope

      public static RequestContext.ContextScope newScope()
      Create a new scope builder for setting context values.
      Returns:
      a new builder