Client Listeners for Cache Events
What You Will Learn
How to register a @ClientListener on a remote cache to receive asynchronous notifications when entries are created or modified.
Prerequisites
-
Java 17+
-
An Infinispan Server running on
localhost:11222(or Docker/Podman available for Testcontainers)
Start an Infinispan Server with Docker or Podman:
docker run -it --rm -p 11222:11222 -e USER=admin -e PASS=password quay.io/infinispan/server:latest
|
Tip
|
You can replace docker with podman in the command above if you use Podman.
|
|
Tip
|
If no server is running, the tutorial code automatically starts an Infinispan Server using Testcontainers. |
Step 1: Define a Client Listener
Create a class annotated with @ClientListener and add methods annotated with @ClientCacheEntryCreated and @ClientCacheEntryModified:
@ClientListener
public static class MyListener {
StringBuilder logTrack = new StringBuilder();
@ClientCacheEntryCreated
public void entryCreated(ClientCacheEntryCreatedEvent<String> event) {
String logMessage = String.format("Created %s%n", event.getKey());
logTrack.append(logMessage);
System.out.printf(logMessage);
}
@ClientCacheEntryModified
public void entryModified(ClientCacheEntryModifiedEvent<String> event) {
String logMessage = String.format("About to modify %s%n", event.getKey());
logTrack.append(logMessage);
System.out.printf(logMessage);
}
}
After connecting to the server, register the listener on a remote cache with cache.addClientListener(new MyListener()).
Step 2: Trigger Events and Clean Up
Store and update entries to generate events. Always remove listeners when they are no longer needed:
// Store some values
cache.put("key1", "value1");
cache.put("key2", "value2");
cache.put("key1", "newValue");
// Remote events are asynchronous, so allow a short wait before removing
// Remove listener when no longer needed
cache.removeClientListener(listener);
Remote events are asynchronous, so allow a short wait before shutting down.
Step 3: Run the Tutorial
mvn package exec:java
You should see output like:
Created key1 Created key2 About to modify key1
What’s Next
-
Continuous queries for query-based real-time notifications
-
Get started with basic cache operations


