All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.infinispan.commands.RemoteCommandsFactory Maven / Gradle / Ivy

There is a newer version: 9.1.7.Final
Show newest version
package org.infinispan.commands;

import java.util.Map;

import org.infinispan.commands.control.LockControlCommand;
import org.infinispan.commands.functional.ReadWriteKeyCommand;
import org.infinispan.commands.functional.ReadWriteKeyValueCommand;
import org.infinispan.commands.functional.ReadWriteManyCommand;
import org.infinispan.commands.functional.ReadWriteManyEntriesCommand;
import org.infinispan.commands.functional.WriteOnlyKeyCommand;
import org.infinispan.commands.functional.WriteOnlyKeyValueCommand;
import org.infinispan.commands.functional.WriteOnlyManyCommand;
import org.infinispan.commands.functional.WriteOnlyManyEntriesCommand;
import org.infinispan.commands.module.ModuleCommandFactory;
import org.infinispan.commands.read.DistributedExecuteCommand;
import org.infinispan.commands.read.GetCacheEntryCommand;
import org.infinispan.commands.read.GetKeyValueCommand;
import org.infinispan.commands.read.MapCombineCommand;
import org.infinispan.commands.read.ReduceCommand;
import org.infinispan.commands.remote.CacheRpcCommand;
import org.infinispan.commands.remote.ClusteredGetAllCommand;
import org.infinispan.commands.remote.ClusteredGetCommand;
import org.infinispan.commands.remote.GetKeysInGroupCommand;
import org.infinispan.commands.remote.MultipleRpcCommand;
import org.infinispan.commands.remote.SingleRpcCommand;
import org.infinispan.commands.remote.recovery.CompleteTransactionCommand;
import org.infinispan.commands.remote.recovery.GetInDoubtTransactionsCommand;
import org.infinispan.commands.remote.recovery.GetInDoubtTxInfoCommand;
import org.infinispan.commands.remote.recovery.TxCompletionNotificationCommand;
import org.infinispan.commands.tx.CommitCommand;
import org.infinispan.commands.tx.PrepareCommand;
import org.infinispan.commands.tx.RollbackCommand;
import org.infinispan.commands.tx.VersionedCommitCommand;
import org.infinispan.commands.tx.VersionedPrepareCommand;
import org.infinispan.commands.tx.totalorder.TotalOrderCommitCommand;
import org.infinispan.commands.tx.totalorder.TotalOrderNonVersionedPrepareCommand;
import org.infinispan.commands.tx.totalorder.TotalOrderRollbackCommand;
import org.infinispan.commands.tx.totalorder.TotalOrderVersionedCommitCommand;
import org.infinispan.commands.tx.totalorder.TotalOrderVersionedPrepareCommand;
import org.infinispan.commands.write.ApplyDeltaCommand;
import org.infinispan.commands.write.ClearCommand;
import org.infinispan.commands.write.InvalidateCommand;
import org.infinispan.commands.write.InvalidateL1Command;
import org.infinispan.commands.write.PutKeyValueCommand;
import org.infinispan.commands.write.PutMapCommand;
import org.infinispan.commands.write.RemoveCommand;
import org.infinispan.commands.write.RemoveExpiredCommand;
import org.infinispan.commands.write.ReplaceCommand;
import org.infinispan.commons.CacheException;
import org.infinispan.factories.GlobalComponentRegistry;
import org.infinispan.factories.KnownComponentNames;
import org.infinispan.factories.annotations.ComponentName;
import org.infinispan.factories.annotations.Inject;
import org.infinispan.factories.scopes.Scope;
import org.infinispan.factories.scopes.Scopes;
import org.infinispan.iteration.impl.EntryRequestCommand;
import org.infinispan.iteration.impl.EntryResponseCommand;
import org.infinispan.manager.EmbeddedCacheManager;
import org.infinispan.manager.impl.ReplicableCommandManagerFunction;
import org.infinispan.manager.impl.ReplicableCommandRunnable;
import org.infinispan.statetransfer.StateRequestCommand;
import org.infinispan.statetransfer.StateResponseCommand;
import org.infinispan.stream.impl.StreamRequestCommand;
import org.infinispan.stream.impl.StreamResponseCommand;
import org.infinispan.stream.impl.StreamSegmentResponseCommand;
import org.infinispan.topology.CacheTopologyControlCommand;
import org.infinispan.xsite.SingleXSiteRpcCommand;
import org.infinispan.xsite.XSiteAdminCommand;
import org.infinispan.xsite.statetransfer.XSiteStatePushCommand;
import org.infinispan.xsite.statetransfer.XSiteStateTransferControlCommand;

/**
 * Specifically used to create un-initialized {@link org.infinispan.commands.ReplicableCommand}s from a byte stream.
 * This is a {@link Scopes#GLOBAL} component and doesn't have knowledge of initializing a command by injecting
 * cache-specific components into it.
 * 

* Usually a second step to unmarshalling a command from a byte stream (after * creating an un-initialized version using this factory) is to pass the command though {@link CommandsFactory#initializeReplicableCommand(ReplicableCommand,boolean)}. * * @see CommandsFactory#initializeReplicableCommand(ReplicableCommand,boolean) * @author Manik Surtani * @author [email protected] * @since 4.0 */ @Scope(Scopes.GLOBAL) public class RemoteCommandsFactory { EmbeddedCacheManager cacheManager; GlobalComponentRegistry registry; Map commandFactories; @Inject public void inject(EmbeddedCacheManager cacheManager, GlobalComponentRegistry registry, @ComponentName(KnownComponentNames.MODULE_COMMAND_FACTORIES) Map commandFactories) { this.cacheManager = cacheManager; this.registry = registry; this.commandFactories = commandFactories; } /** * Creates an un-initialized command. Un-initialized in the sense that parameters will be set, but any components * specific to the cache in question will not be set. *

* You would typically set these parameters using {@link CommandsFactory#initializeReplicableCommand(ReplicableCommand,boolean)} *

* * * @param id id of the command * @param parameters parameters to set * @param type type of the command * @return a replicable command */ public ReplicableCommand fromStream(byte id, Object[] parameters, byte type) { ReplicableCommand command; if (type == 0) { switch (id) { case PutKeyValueCommand.COMMAND_ID: command = new PutKeyValueCommand(); break; case PutMapCommand.COMMAND_ID: command = new PutMapCommand(); break; case RemoveCommand.COMMAND_ID: command = new RemoveCommand(); break; case ReplaceCommand.COMMAND_ID: command = new ReplaceCommand(); break; case GetKeyValueCommand.COMMAND_ID: command = new GetKeyValueCommand(); break; case ClearCommand.COMMAND_ID: command = new ClearCommand(); break; case InvalidateCommand.COMMAND_ID: command = new InvalidateCommand(); break; case InvalidateL1Command.COMMAND_ID: command = new InvalidateL1Command(); break; case ApplyDeltaCommand.COMMAND_ID: command = new ApplyDeltaCommand(); break; case CacheTopologyControlCommand.COMMAND_ID: command = new CacheTopologyControlCommand(); break; case GetKeysInGroupCommand.COMMAND_ID: command = new GetKeysInGroupCommand(); break; case GetCacheEntryCommand.COMMAND_ID: command = new GetCacheEntryCommand(); break; case ReadWriteKeyCommand.COMMAND_ID: command = new ReadWriteKeyCommand<>(); break; case ReadWriteKeyValueCommand.COMMAND_ID: command = new ReadWriteKeyValueCommand<>(); break; case ReadWriteManyCommand.COMMAND_ID: command = new ReadWriteManyCommand<>(); break; case ReadWriteManyEntriesCommand.COMMAND_ID: command = new ReadWriteManyEntriesCommand<>(); break; case WriteOnlyKeyCommand.COMMAND_ID: command = new WriteOnlyKeyCommand<>(); break; case WriteOnlyKeyValueCommand.COMMAND_ID: command = new WriteOnlyKeyValueCommand<>(); break; case WriteOnlyManyCommand.COMMAND_ID: command = new WriteOnlyManyCommand<>(); break; case WriteOnlyManyEntriesCommand.COMMAND_ID: command = new WriteOnlyManyEntriesCommand<>(); break; case RemoveExpiredCommand.COMMAND_ID: command = new RemoveExpiredCommand(); break; case ReplicableCommandRunnable.COMMAND_ID: command = new ReplicableCommandRunnable(); break; case ReplicableCommandManagerFunction.COMMAND_ID: command = new ReplicableCommandManagerFunction(); break; default: throw new CacheException("Unknown command id " + id + "!"); } } else { ModuleCommandFactory mcf = commandFactories.get(id); if (mcf != null) return mcf.fromStream(id, parameters); else throw new CacheException("Unknown command id " + id + "!"); } return command; } /** * Resolve an {@link CacheRpcCommand} from the stream. * * @param id id of the command * @param parameters parameters to be set * @param type type of command (whether internal or user defined) * @param cacheName cache name at which this command is directed * @return an instance of {@link CacheRpcCommand} */ public CacheRpcCommand fromStream(byte id, Object[] parameters, byte type, String cacheName) { CacheRpcCommand command; if (type == 0) { switch (id) { case LockControlCommand.COMMAND_ID: command = new LockControlCommand(cacheName); break; case PrepareCommand.COMMAND_ID: command = new PrepareCommand(cacheName); break; case VersionedPrepareCommand.COMMAND_ID: command = new VersionedPrepareCommand(cacheName); break; case TotalOrderNonVersionedPrepareCommand.COMMAND_ID: command = new TotalOrderNonVersionedPrepareCommand(cacheName); break; case TotalOrderVersionedPrepareCommand.COMMAND_ID: command = new TotalOrderVersionedPrepareCommand(cacheName); break; case CommitCommand.COMMAND_ID: command = new CommitCommand(cacheName); break; case VersionedCommitCommand.COMMAND_ID: command = new VersionedCommitCommand(cacheName); break; case TotalOrderCommitCommand.COMMAND_ID: command = new TotalOrderCommitCommand(cacheName); break; case TotalOrderVersionedCommitCommand.COMMAND_ID: command = new TotalOrderVersionedCommitCommand(cacheName); break; case RollbackCommand.COMMAND_ID: command = new RollbackCommand(cacheName); break; case TotalOrderRollbackCommand.COMMAND_ID: command = new TotalOrderRollbackCommand(cacheName); break; case MultipleRpcCommand.COMMAND_ID: command = new MultipleRpcCommand(cacheName); break; case SingleRpcCommand.COMMAND_ID: command = new SingleRpcCommand(cacheName); break; case ClusteredGetCommand.COMMAND_ID: command = new ClusteredGetCommand(cacheName); break; case StateRequestCommand.COMMAND_ID: command = new StateRequestCommand(cacheName); break; case StateResponseCommand.COMMAND_ID: command = new StateResponseCommand(cacheName); break; case RemoveCacheCommand.COMMAND_ID: command = new RemoveCacheCommand(cacheName, cacheManager); break; case TxCompletionNotificationCommand.COMMAND_ID: command = new TxCompletionNotificationCommand(cacheName); break; case GetInDoubtTransactionsCommand.COMMAND_ID: command = new GetInDoubtTransactionsCommand(cacheName); break; case MapCombineCommand.COMMAND_ID: command = new MapCombineCommand(cacheName); break; case ReduceCommand.COMMAND_ID: command = new ReduceCommand(cacheName); break; case DistributedExecuteCommand.COMMAND_ID: command = new DistributedExecuteCommand(cacheName); break; case GetInDoubtTxInfoCommand.COMMAND_ID: command = new GetInDoubtTxInfoCommand(cacheName); break; case CompleteTransactionCommand.COMMAND_ID: command = new CompleteTransactionCommand(cacheName); break; case CreateCacheCommand.COMMAND_ID: command = new CreateCacheCommand(cacheName); break; case XSiteAdminCommand.COMMAND_ID: command = new XSiteAdminCommand(cacheName); break; case CancelCommand.COMMAND_ID: command = new CancelCommand(cacheName); break; case XSiteStateTransferControlCommand.COMMAND_ID: command = new XSiteStateTransferControlCommand(cacheName); break; case XSiteStatePushCommand.COMMAND_ID: command = new XSiteStatePushCommand(cacheName); break; case SingleXSiteRpcCommand.COMMAND_ID: command = new SingleXSiteRpcCommand(cacheName); break; case EntryRequestCommand.COMMAND_ID: command = new EntryRequestCommand(cacheName); break; case EntryResponseCommand.COMMAND_ID: command = new EntryResponseCommand(cacheName); break; case ClusteredGetAllCommand.COMMAND_ID: command = new ClusteredGetAllCommand(cacheName); break; case StreamRequestCommand.COMMAND_ID: command = new StreamRequestCommand(cacheName); break; case StreamSegmentResponseCommand.COMMAND_ID: command = new StreamSegmentResponseCommand<>(cacheName); break; case StreamResponseCommand.COMMAND_ID: command = new StreamResponseCommand(cacheName); break; default: throw new CacheException("Unknown command id " + id + "!"); } } else { ModuleCommandFactory mcf = commandFactories.get(id); if (mcf != null) return mcf.fromStream(id, parameters, cacheName); else throw new CacheException("Unknown command id " + id + "!"); } return command; } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy