![JAR search and dependency download from the Maven repository](/logo.png)
org.infinispan.server.resp.commands.tx.WATCH Maven / Gradle / Ivy
Show all versions of infinispan-server-resp Show documentation
package org.infinispan.server.resp.commands.tx;
import java.io.ObjectInput;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Set;
import java.util.concurrent.CompletionStage;
import java.util.concurrent.atomic.AtomicBoolean;
import org.infinispan.AdvancedCache;
import org.infinispan.commons.marshall.AdvancedExternalizer;
import org.infinispan.commons.marshall.exts.NoStateExternalizer;
import org.infinispan.commons.util.Util;
import org.infinispan.commons.util.concurrent.CompletableFutures;
import org.infinispan.metadata.Metadata;
import org.infinispan.notifications.Listener;
import org.infinispan.notifications.cachelistener.annotation.CacheEntryCreated;
import org.infinispan.notifications.cachelistener.annotation.CacheEntryExpired;
import org.infinispan.notifications.cachelistener.annotation.CacheEntryModified;
import org.infinispan.notifications.cachelistener.annotation.CacheEntryRemoved;
import org.infinispan.notifications.cachelistener.event.CacheEntryEvent;
import org.infinispan.notifications.cachelistener.filter.CacheEventConverter;
import org.infinispan.notifications.cachelistener.filter.CacheEventFilter;
import org.infinispan.notifications.cachelistener.filter.EventType;
import org.infinispan.server.resp.ExternalizerIds;
import org.infinispan.server.resp.Resp3Handler;
import org.infinispan.server.resp.RespCommand;
import org.infinispan.server.resp.RespErrorUtil;
import org.infinispan.server.resp.RespRequestHandler;
import org.infinispan.server.resp.commands.Resp3Command;
import org.infinispan.server.resp.commands.TransactionResp3Command;
import org.infinispan.server.resp.filter.EventListenerKeysFilter;
import org.infinispan.server.resp.meta.ClientMetadata;
import org.infinispan.server.resp.serialization.Resp3Response;
import org.infinispan.server.resp.tx.RespTransactionHandler;
import io.netty.channel.ChannelHandlerContext;
import io.netty.util.AttributeKey;
/**
* `WATCH key [key ...]
` command.
*
* Installs a clustered listener to watch for the given key
s. The listener receives events for creation,
* updates, and expiration.
*
* The watch instance is local to a single {@link ChannelHandlerContext}. To remove the listeners, the same context
* needs to execute the operation. There is no way to remove a single specific watcher. All listeners deregister during
* an {@link EXEC}, {@link UNWATCH}, DISCARD, transaction abort, or closed channel.
*
* Since a listener is bound to a single connection, this ensures that another client does not affect each other's
* transactions safeguards.
*
* @since 15.0
* @see perform(Resp3Handler handler, ChannelHandlerContext ctx, List arguments) {
AdvancedCache cache = handler.cache();
byte[][] keys = arguments.toArray(Util.EMPTY_BYTE_ARRAY_ARRAY);
TxKeysListener listener = new TxKeysListener(keys.length);
CacheEventFilter