/*
* JBoss, Home of Professional Open Source
* Copyright 2009 Red Hat Inc. and/or its affiliates and other
* contributors as indicated by the @author tags. All rights reserved.
* See the copyright.txt in the distribution for a full listing of
* individual contributors.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.infinispan.context;
import org.infinispan.container.entries.gmu.InternalGMUCacheEntry;
import org.infinispan.container.versioning.EntryVersion;
import org.infinispan.container.versioning.VersionGenerator;
import org.infinispan.remoting.transport.Address;
import java.util.Map;
import java.util.Set;
/**
* A context that contains information pertaining to a given invocation. These contexts typically have the lifespan of
* a single invocation.
*
* @author Manik Surtani (<a href="mailto:manik@jboss.org">manik@jboss.org</a>)
* @author Mircea.Markus@jboss.com
* @author Pedro Ruivo
* @author Sebastiano Peluso
* @since 4.0
*/
public interface InvocationContext extends EntryLookup, FlagContainer, Cloneable {
/**
* Returns true if the call was originated locally, false if it is the result of a remote rpc.
*/
boolean isOriginLocal();
/**
* Get the origin of the command, or null if the command originated locally
* @return
*/
Address getOrigin();
/**
* Returns true if this call is performed in the context of an transaction, false otherwise.
*/
boolean isInTxScope();
/**
* Returns the in behalf of which locks will be aquired.
*/
Object getLockOwner();
/**
* Indicates whether the call requires a {@link java.util.concurrent.Future}
* as return type.
*
* @return true if the call requires a {@link java.util.concurrent.Future}
* as return type, false otherwise
*/
boolean isUseFutureReturnType();
/**
* Sets whether the call requires a {@link java.util.concurrent.Future}
* as return type.
*
* @param useFutureReturnType boolean indicating whether a {@link java.util.concurrent.Future}
* will be needed.
*/
void setUseFutureReturnType(boolean useFutureReturnType);
/**
* Clones the invocation context.
*
* @return A cloned instance of this invocation context instance
*/
InvocationContext clone();
/**
* Returns the set of keys that are locked for writing.
*/
Set<Object> getLockedKeys();
void clearLockedKeys();
/**
* Returns the class loader associated with this invocation
*
* @return a class loader instance or null if no class loader was
* specifically associated
*/
ClassLoader getClassLoader();
/**
* Sets the class loader associated for this invocation
*
* @param classLoader
*/
void setClassLoader(ClassLoader classLoader);
/**
* Tracks the given key as locked by this invocation context.
*/
void addLockedKey(Object key);
/**
* Returns true if the lock being tested is already held in the current scope, false otherwise.
*
* @param key lock to test
*/
boolean hasLockedKey(Object key);
/**
<<<<<<< HEAD
* add the key to a map between key and {@link InternalGMUCacheEntry}. This entry has all the information needed to calculate
* the new transaction version. This is a temporary map and should be clear before (or after) each command
*
* @param entry the entry read
*/
void addKeyReadInCommand(Object key, InternalGMUCacheEntry entry);
/**
* clears the map between key and internal gmu entry
*/
void clearKeyReadInCommand();
/**
* @return all the key read since last clear
*/
Map<Object, InternalGMUCacheEntry> getKeysReadInCommand();
/**
* @param versionGenerator the version generator
* @return the maximum {@link EntryVersion} to read
*/
EntryVersion calculateVersionToRead(VersionGenerator versionGenerator);
/**
* sets the version to read
*
* @param entryVersion the version to read
*/
void setVersionToRead(EntryVersion entryVersion);
/**
* @return true if it has already read from this node
*/
boolean hasAlreadyReadOnThisNode();
/**
* @param value true or false if it has already read from this node
*/
void setAlreadyReadOnThisNode(boolean value);
/**
* sets the replication protocol to be used by the command
*
* @param protocolId the protocol ID
*/
void setProtocolId(String protocolId);
/**
* returns the protocol ID to be used by the command
*
* @return the protocol ID to be used by the command
*/
String getProtocolId();
}