org.apache.geode.cache.execute

## Interface Function<T>

- All Superinterfaces:
    Identifiable<java.lang.String>, java.io.Serializable
  All Known Implementing Classes:
    BootstrappingFunction, CreateRegionFunction, FunctionAdapter, RegionSizeFunction, TouchPartitionedRegionEntriesFunction, TouchReplicatedRegionEntriesFunction
  Functional Interface:
    This is a functional interface and can therefore be used as the assignment target for a lambda expression or method reference.

      @FunctionalInterface
      public interface Function<T>
      extends Identifiable<java.lang.String>

  Defines the interface a user defined function implements. `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. Consider extending `FunctionAdapter` which has default values for some of the function attributes.

  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.

  Since:
    GemFire 6.0
  See Also:
    `FunctionAdapter`, `FunctionService`

- - ### Method Summary

    All Methods Instance Methods Abstract Methods Default Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `execute(FunctionContext<T> context)` The method which contains the logic to be executed.
    `default java.lang.String` | `getId()` Return a unique function identifier, used to register the function with `FunctionService`
    `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.

- - ### Method Detail

    - #### hasResult

          default boolean hasResult()

      Specifies whether the function sends results while executing. The method returns false if no result is expected.

      If `hasResult()` returns false, `ResultCollector.getResult()` throws `FunctionException`.

      If `hasResult()` returns true, `ResultCollector.getResult()` blocks and waits for the result of function execution

      Returns:
        whether this function returns a Result back to the caller.
      Since:
        GemFire 6.0

    - #### execute

          void execute(FunctionContext<T> context)

      The method which contains the logic to be executed. This method should be thread safe and may be invoked more than once on a given member for a single `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`.
      Parameters:
        `context` - as created by `Execution`
      Since:
        GemFire 6.0

    - #### getId

          default java.lang.String getId()

      Return a unique function identifier, used to register the function with `FunctionService`
      Specified by:
        `getId` in interface `Identifiable<java.lang.String>`
      Returns:
        string identifying this function
      Since:
        GemFire 6.0

    - #### optimizeForWrite

          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

      Returns:
        false if the function is read only, otherwise returns true
      Since:
        GemFire 6.0
      See Also:
        `FunctionService`

    - #### isHA

          default boolean isHA()

      Specifies whether the function is eligible for re-execution (in case of failure).
      Returns:
        whether the function is eligible for re-execution.
      Since:
        GemFire 6.5
      See Also:
        `FunctionContext.isPossibleDuplicate()`