package org.infinispan.remoting.transport; import java.util.Collection; import java.util.List; import java.util.Map; import java.util.Set; import java.util.concurrent.CompletableFuture; import org.infinispan.commands.ReplicableCommand; import org.infinispan.remoting.inboundhandler.DeliverOrder; import org.infinispan.remoting.responses.Response; import org.infinispan.remoting.rpc.ResponseFilter; import org.infinispan.remoting.rpc.ResponseMode; import org.infinispan.util.logging.Log; import org.infinispan.xsite.XSiteBackup; import org.infinispan.xsite.XSiteReplicateCommand; /** * Designed to be overwrite. * * @author Pedro Ruivo * @since 6.0 */ public abstract class AbstractDelegatingTransport implements Transport { protected final Transport actual; protected AbstractDelegatingTransport(Transport actual) { this.actual = actual; } @Override public Map<Address, Response> invokeRemotely(Collection<Address> recipients, ReplicableCommand rpcCommand, ResponseMode mode, long timeout, ResponseFilter responseFilter, DeliverOrder deliverOrder, boolean anycast) throws Exception { beforeInvokeRemotely(rpcCommand); Map<Address, Response> result = actual.invokeRemotely(recipients, rpcCommand, mode, timeout, responseFilter, deliverOrder, anycast); return afterInvokeRemotely(rpcCommand, result); } @Override public Map<Address, Response> invokeRemotely(Map<Address, ReplicableCommand> rpcCommands, ResponseMode mode, long timeout, boolean usePriorityQueue, ResponseFilter responseFilter, boolean totalOrder, boolean anycast) throws Exception { return actual.invokeRemotely(rpcCommands, mode, timeout, usePriorityQueue, responseFilter, totalOrder, anycast); } @Override public Map<Address, Response> invokeRemotely(Map<Address, ReplicableCommand> rpcCommands, ResponseMode mode, long timeout, ResponseFilter responseFilter, DeliverOrder deliverOrder, boolean anycast) throws Exception { return actual.invokeRemotely(rpcCommands, mode, timeout, responseFilter, deliverOrder, anycast); } @Override public CompletableFuture<Map<Address, Response>> invokeRemotelyAsync(Collection<Address> recipients, ReplicableCommand rpcCommand, ResponseMode mode, long timeout, ResponseFilter responseFilter, DeliverOrder deliverOrder, boolean anycast) throws Exception { return actual.invokeRemotelyAsync(recipients, rpcCommand, mode, timeout, responseFilter, deliverOrder, anycast); } @Override public void sendTo(Address destination, ReplicableCommand rpcCommand, DeliverOrder deliverOrder) throws Exception { actual.sendTo(destination, rpcCommand, deliverOrder); } @Override public void sendToMany(Collection<Address> destinations, ReplicableCommand rpcCommand, DeliverOrder deliverOrder) throws Exception { actual.sendToMany(destinations, rpcCommand, deliverOrder); } @Override public BackupResponse backupRemotely(Collection<XSiteBackup> backups, XSiteReplicateCommand rpcCommand) throws Exception { beforeBackupRemotely(rpcCommand); BackupResponse response = actual.backupRemotely(backups, rpcCommand); return afterBackupRemotely(rpcCommand, response); } @Override public boolean isCoordinator() { return actual.isCoordinator(); } @Override public Address getCoordinator() { return actual.getCoordinator(); } @Override public Address getAddress() { return actual.getAddress(); } @Override public List<Address> getPhysicalAddresses() { return actual.getPhysicalAddresses(); } @Override public List<Address> getMembers() { return actual.getMembers(); } @Override public boolean isMulticastCapable() { return actual.isMulticastCapable(); } @Override public void start() { actual.start(); } @Override public void stop() { actual.stop(); } @Override public int getViewId() { return actual.getViewId(); } @Override public CompletableFuture<Void> withView(int expectedViewId) { return actual.withView(expectedViewId); } @Override public void waitForView(int viewId) throws InterruptedException { actual.waitForView(viewId); } @Override public void checkTotalOrderSupported() { actual.checkTotalOrderSupported(); } @Override public Log getLog() { return actual.getLog(); } public Transport getDelegate() { return actual; } /** * method invoked before a remote invocation. * * @param command the command to be invoked remotely */ protected void beforeInvokeRemotely(ReplicableCommand command) { //no-op by default } /** * method invoked after a successful remote invocation. * * @param command the command invoked remotely. * @param responseMap can be null if not response is expected. * @return the new response map */ protected Map<Address, Response> afterInvokeRemotely(ReplicableCommand command, Map<Address, Response> responseMap) { return responseMap; } /** * method invoked before a backup remote invocation. * * @param command the command to be invoked remotely */ protected void beforeBackupRemotely(XSiteReplicateCommand command) { //no-op by default } /** * method invoked after a successful backup remote invocation. * * @param command the command invoked remotely. * @param response can be null if not response is expected. * @return the new response map */ protected BackupResponse afterBackupRemotely(ReplicableCommand command, BackupResponse response) { return response; } @Override public Set<String> getSitesView() { return actual.getSitesView(); } }