You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by kl...@apache.org on 2016/05/06 21:41:01 UTC
[30/37] incubator-geode git commit: GEODE-641: Adding default methods
to the Function interface
GEODE-641: Adding default methods to the Function interface
Adding default methods to Function so that Function is now a functional
interface and lambda expressions can be used for functions.
Project: http://git-wip-us.apache.org/repos/asf/incubator-geode/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-geode/commit/15a2a29d
Tree: http://git-wip-us.apache.org/repos/asf/incubator-geode/tree/15a2a29d
Diff: http://git-wip-us.apache.org/repos/asf/incubator-geode/diff/15a2a29d
Branch: refs/heads/feature/GEODE-1276
Commit: 15a2a29d996c60831ec67bb8f565660950e67a29
Parents: 8fcd9c0
Author: Dan Smith <up...@apache.org>
Authored: Wed Apr 27 17:53:18 2016 -0700
Committer: Dan Smith <up...@apache.org>
Committed: Thu May 5 17:17:01 2016 -0700
----------------------------------------------------------------------
.../gemfire/cache/execute/Function.java | 17 +++-
.../gemfire/cache/execute/FunctionAdapter.java | 87 +-------------------
.../cache/execute/FunctionAdapterJUnitTest.java | 65 +++++++++++++++
3 files changed, 80 insertions(+), 89 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/15a2a29d/geode-core/src/main/java/com/gemstone/gemfire/cache/execute/Function.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/execute/Function.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/execute/Function.java
index 553248e..f32fcad 100755
--- a/geode-core/src/main/java/com/gemstone/gemfire/cache/execute/Function.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/execute/Function.java
@@ -35,6 +35,7 @@ import com.gemstone.gemfire.lang.Identifiable;
*
* @since 6.0
*/
+@FunctionalInterface
public interface Function extends Identifiable<String> {
/**
@@ -53,7 +54,9 @@ public interface Function extends Identifiable<String> {
* @return whether this function returns a Result back to the caller.
* @since 6.0
*/
- public boolean hasResult();
+ public default boolean hasResult() {
+ return true;
+ }
/**
* The method which contains the logic to be executed. This method should be
@@ -75,7 +78,9 @@ public interface Function extends Identifiable<String> {
* @return string identifying this function
* @since 6.0
*/
- public String getId();
+ public default String getId() {
+ return getClass().getCanonicalName();
+ }
/**
* <p>Return true to indicate to GemFire the method
@@ -94,7 +99,9 @@ public interface Function extends Identifiable<String> {
* @since 6.0
* @see FunctionService
*/
- public boolean optimizeForWrite();
+ public default boolean optimizeForWrite() {
+ return false;
+ }
/**
* Specifies whether the function is eligible for re-execution (in case of
@@ -105,6 +112,8 @@ public interface Function extends Identifiable<String> {
*
* @since 6.5
*/
- public boolean isHA();
+ public default boolean isHA() {
+ return true;
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/15a2a29d/geode-core/src/main/java/com/gemstone/gemfire/cache/execute/FunctionAdapter.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/execute/FunctionAdapter.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/execute/FunctionAdapter.java
index c4cfeed..674120c 100755
--- a/geode-core/src/main/java/com/gemstone/gemfire/cache/execute/FunctionAdapter.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/execute/FunctionAdapter.java
@@ -32,92 +32,9 @@ package com.gemstone.gemfire.cache.execute;
*
* @since 6.0
* @see Function
+ * @deprecated Use {@link Function} instead. Function has default
+ * methods that now mimic the behavior of FunctionAdapter.
*
*/
public abstract class FunctionAdapter implements Function {
- /**
- * 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 abstract 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 abstract String getId();
-
- /**
- * Specifies whether the function sends results while executing. The method
- * returns false if no result is expected.<br>
- * <p>
- * If {@link Function#hasResult()} returns false,
- * {@link ResultCollector#getResult()} throws {@link FunctionException}.
- * </p>
- * <p>
- * If {@link Function#hasResult()} returns true,
- * {@link ResultCollector#getResult()} blocks and waits for the result of
- * function execution
- * </p>
- *
- * @return whether this function returns a Result back to the caller.
- * @since 6.0
- */
- public boolean hasResult() {
- return true;
- }
-
- /**
- * <p>
- * 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}
- * .
- * </p>
- *
- * <p>
- * 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}
- * .
- * </p>
- *
- * <p>
- * This method is only consulted when invoked as a
- * {@linkplain FunctionService#onRegion(com.gemstone.gemfire.cache.Region)
- * data dependent function}
- * </p>
- *
- * @return false if the function is read only, otherwise returns true
- * @since 6.0
- * @see FunctionService
- */
- public boolean optimizeForWrite() {
- return false;
- }
-
- /**
- * 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() {
- return true;
- }
}
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/15a2a29d/geode-core/src/test/java/com/gemstone/gemfire/cache/execute/FunctionAdapterJUnitTest.java
----------------------------------------------------------------------
diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/execute/FunctionAdapterJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/execute/FunctionAdapterJUnitTest.java
new file mode 100644
index 0000000..6bb5aeb
--- /dev/null
+++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/execute/FunctionAdapterJUnitTest.java
@@ -0,0 +1,65 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+package com.gemstone.gemfire.cache.execute;
+
+import static org.junit.Assert.*;
+
+import com.gemstone.gemfire.test.junit.categories.UnitTest;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
+
+@Category(UnitTest.class)
+public class FunctionAdapterJUnitTest {
+
+ private FunctionAdapter adapter;
+
+ @Before
+ public void createDefaultAdapter() {
+ adapter = new MyFunctionAdapter();
+ }
+
+ @Test
+ public void optimizeForWriteDefaultsFalse() {
+ assertFalse(adapter.optimizeForWrite());
+ }
+
+ @Test
+ public void idDefaultsToClassName() {
+ assertEquals(MyFunctionAdapter.class.getCanonicalName(), adapter.getId());
+ }
+
+ @Test
+ public void hasResultDefaultsTrue() {
+ assertTrue(adapter.hasResult());
+
+ }
+
+ @Test
+ public void isHADefaultsTrue() {
+ assertTrue(adapter.isHA());
+ }
+
+ private static class MyFunctionAdapter extends FunctionAdapter {
+
+ @Override
+ public void execute(final FunctionContext context) {
+ }
+
+ }
+}