@FunctionalInterface public interface Function<T> extends Identifiable<String>
Function
s can be of different
types. Some can have results while others need not return any result. Some functions require
writing in the targeted Region
while some may just be read operations.
Even though this interface extends Serializable, functions will only be serialized if they are
not registered. For best performance it is recommended that you implement getId()
to
return a non-null identifier and register your function using FunctionService.registerFunction(Function)
or the cache.xml function
element.
Modifier and Type | Method and Description |
---|---|
void |
execute(FunctionContext<T> context)
The method which contains the logic to be executed.
|
default String |
getId()
Return a unique function identifier, used to register the function with
FunctionService |
default Collection<ResourcePermission> |
getRequiredPermissions(String regionName)
Returns the list of ResourcePermission this function requires.
|
default Collection<ResourcePermission> |
getRequiredPermissions(String regionName,
Object args)
Returns the list of ResourcePermission this function requires.
|
default boolean |
hasResult()
Specifies whether the function sends results while executing.
|
default boolean |
isHA()
Specifies whether the function is eligible for re-execution (in case of failure).
|
default boolean |
optimizeForWrite()
Return true to indicate to GemFire the method requires optimization for writing the targeted
FunctionService.onRegion(org.apache.geode.cache.Region) and any associated routing objects. |
exists, find, remove
default boolean hasResult()
If this method returns false, ResultCollector.getResult()
throws
FunctionException
.
If this method returns true, ResultCollector.getResult()
blocks and
waits for the result of function execution
void execute(FunctionContext<T> context)
Execution
. The context
provided to this function is the one which was built using Execution. The contexts
can be data dependent or data-independent so user should check to see if the context provided
in parameter is instance of RegionFunctionContext
.context
- as created by Execution
default String getId()
FunctionService
getId
in interface Identifiable<String>
default boolean optimizeForWrite()
Return true to indicate to GemFire the method requires optimization for writing the targeted
FunctionService.onRegion(org.apache.geode.cache.Region)
and any associated routing objects.
Returning false will optimize for read behavior on the targeted FunctionService.onRegion(org.apache.geode.cache.Region)
and any associated routing objects.
This method is only consulted when Region passed to FunctionService#onRegion(org.apache.geode.cache.Region) is a partitioned region
FunctionService
default boolean isHA()
FunctionContext.isPossibleDuplicate()
default Collection<ResourcePermission> getRequiredPermissions(String regionName)
By default, functions require DATA:WRITE permission. If your function requires other permissions, you will need to override this method.
Please be as specific as possible when you set the required permissions for your function e.g. if your function reads from a region, it would be good to include the region name in your permission. It's better to return "DATA:READ:regionName" as the required permission other than "DATA:READ", because the latter means only users with read permission on ALL regions can execute your function.
All the permissions returned from this method will be ANDed together.
regionName
- the region this function will be executed on. The regionName is optional and
will only be present when the function is executed by an onRegion() executor. In other
cases,
it will be null. This method returns permissions appropriate to the context, independent
of the
presence of the regionName parameter.ResourcePermission
s indicating the permissions required to
execute the function.default Collection<ResourcePermission> getRequiredPermissions(String regionName, Object args)
By default, functions require DATA:WRITE permission. If your function requires other permissions, you will need to override this method.
Please be as specific as possible when you set the required permissions for your function e.g. if your function reads from a region, it would be good to include the region name in your permission. It's better to return "DATA:READ:regionName" as the required permission other than "DATA:READ", because the latter means only users with read permission on ALL regions can execute your function.
All the permissions returned from this method will be ANDed together.
regionName
- the region this function will be executed on. The regionName is optional and
will only be present when the function is executed by an onRegion() executor. In other
cases,
it will be null. This method returns permissions appropriate to the context, independent
of the
presence of the regionName parameter.args
- the arguments to the function.ResourcePermission
s indicating the permissions required to
execute the function.