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

com.gemstone.gemfire.cache.execute.Function Maven / Gradle / Ivy

There is a newer version: 2.0-BETA
Show newest version
/*
 * Copyright (c) 2010-2015 Pivotal Software, Inc. All rights reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License"); you
 * may not use this file except in compliance with the License. You
 * may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
 * implied. See the License for the specific language governing
 * permissions and limitations under the License. See accompanying
 * LICENSE file.
 */
package com.gemstone.gemfire.cache.execute;

import com.gemstone.gemfire.cache.Region;
import com.gemstone.gemfire.lang.Identifiable;

/**
 * Defines the interface a user defined function implements.
 * {@link 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 {@link Region} while some may just
 * be read operations.
 * Consider extending {@link 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 {@link #getId()} to return a non-null identifier * and register your function using {@link FunctionService#registerFunction(Function)} or the cache.xml function element. * * @see FunctionAdapter * @see FunctionService * * @author Yogesh Mahajan * @author Mitch Thomas * * @since 6.0 */ public interface Function extends Identifiable { /** * Specifies whether the function sends results while executing. * The method returns false if no result is expected.
*

* If {@link Function#hasResult()} returns false, * {@link ResultCollector#getResult()} throws {@link FunctionException}. *

*

* If {@link Function#hasResult()} returns true, * {@link ResultCollector#getResult()} blocks and waits for the * result of function execution *

* * @return whether this function returns a Result back to the caller. * @since 6.0 */ public boolean hasResult(); /** * 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 {@link Execution}. * The context provided to this function is the one which was built using {@linkplain 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 {@link RegionFunctionContext}. * * @param context as created by {@link Execution} * @since 6.0 */ public void execute(FunctionContext context); /** * Return a unique function identifier, used to register the function * with {@link FunctionService} * * @return string identifying this function * @since 6.0 */ public String getId(); /** *

Return true to indicate to GemFire the method * requires optimization for writing the targeted {@link FunctionService#onRegion(com.gemstone.gemfire.cache.Region)} and any * associated {@linkplain Execution#withFilter(java.util.Set) routing objects}.

* *

Returning false will optimize for read behavior on the targeted * {@link FunctionService#onRegion(com.gemstone.gemfire.cache.Region)} and any * associated {@linkplain Execution#withFilter(java.util.Set) routing objects}.

* *

This method is only consulted when Region passed to * FunctionService#onRegion(com.gemstone.gemfire.cache.Region) is a partitioned region *

* * @return false if the function is read only, otherwise returns true * @since 6.0 * @see FunctionService */ public boolean optimizeForWrite(); /** * Specifies whether the function is eligible for re-execution (in case of * failure). * * @return whether the function is eligible for re-execution. * @see RegionFunctionContext#isPossibleDuplicate() * * @since 6.5 */ public boolean isHA(); }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy