You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mesos.apache.org by be...@apache.org on 2013/08/06 08:08:38 UTC

[12/13] git commit: Refactored ZooKeeperState.java into AbstractState.java.

Refactored ZooKeeperState.java into AbstractState.java.

Review: https://reviews.apache.org/r/12441


Project: http://git-wip-us.apache.org/repos/asf/mesos/repo
Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/7e6da6d5
Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/7e6da6d5
Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/7e6da6d5

Branch: refs/heads/master
Commit: 7e6da6d521774712e63c95a7cf5faa4ff496c6c9
Parents: f51cf44
Author: Benjamin Hindman <be...@gmail.com>
Authored: Tue Jul 9 07:43:07 2013 -0700
Committer: Benjamin Hindman <be...@gmail.com>
Committed: Mon Aug 5 23:08:04 2013 -0700

----------------------------------------------------------------------
 src/Makefile.am                                 |  14 +-
 .../org_apache_mesos_state_AbstractState.cpp    | 770 +++++++++++++++++++
 .../org_apache_mesos_state_ZooKeeperState.cpp   | 748 +-----------------
 .../org/apache/mesos/state/AbstractState.java   | 239 ++++++
 .../org/apache/mesos/state/ZooKeeperState.java  | 216 +-----
 5 files changed, 1021 insertions(+), 966 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mesos/blob/7e6da6d5/src/Makefile.am
----------------------------------------------------------------------
diff --git a/src/Makefile.am b/src/Makefile.am
index e4c3d06..33ef056 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -445,6 +445,7 @@ MESOS_JAR_SOURCE =							\
 	$(srcdir)/java/src/org/apache/mesos/MesosSchedulerDriver.java	\
 	$(srcdir)/java/src/org/apache/mesos/SchedulerDriver.java	\
 	$(srcdir)/java/src/org/apache/mesos/Scheduler.java		\
+	$(srcdir)/java/src/org/apache/mesos/state/AbstractState.java	\
 	$(srcdir)/java/src/org/apache/mesos/state/InMemoryState.java	\
 	$(srcdir)/java/src/org/apache/mesos/state/State.java		\
 	$(srcdir)/java/src/org/apache/mesos/state/Variable.java		\
@@ -520,6 +521,7 @@ libjava_la_SOURCES =							\
 	java/jni/org_apache_mesos_Log.cpp				\
 	java/jni/org_apache_mesos_MesosSchedulerDriver.cpp		\
 	java/jni/org_apache_mesos_MesosExecutorDriver.cpp		\
+	java/jni/org_apache_mesos_state_AbstractState.cpp		\
 	java/jni/org_apache_mesos_state_Variable.cpp			\
 	java/jni/org_apache_mesos_state_ZooKeeperState.cpp		\
 	jvm/jvm.cpp							\
@@ -557,15 +559,11 @@ nodist_libjava_la_SOURCES =						\
 	java/jni/org_apache_mesos_MesosSchedulerDriver.h		\
 	java/jni/org_apache_mesos_MesosExecutorDriver.h			\
 	java/jni/org_apache_mesos_Log.h					\
+	java/jni/org_apache_mesos_state_AbstractState.h			\
 	java/jni/org_apache_mesos_state_Variable.h			\
 	java/jni/org_apache_mesos_state_ZooKeeperState.h
 
-BUILT_SOURCES += java/jni/org_apache_mesos_MesosSchedulerDriver.h	\
-	java/jni/org_apache_mesos_MesosExecutorDriver.h			\
-	java/jni/org_apache_mesos_Log.h					\
-	java/jni/org_apache_mesos_state_Variable.h			\
-	java/jni/org_apache_mesos_state_ZooKeeperState.h
-
+BUILT_SOURCES += $(nodist_libjava_la_SOURCES)
 
 java/jni/org_apache_mesos_MesosSchedulerDriver.h: $(MESOS_JAR)
 	$(JAVA_HOME)/bin/javah -d java/jni -classpath			\
@@ -581,6 +579,10 @@ java/jni/org_apache_mesos_Log.h: $(MESOS_JAR)
 	$(JAVA_HOME)/bin/javah -d java/jni -classpath			\
           $(PROTOBUF_JAR):java/classes org.apache.mesos.Log
 
+java/jni/org_apache_mesos_state_AbstractState.h: $(MESOS_JAR)
+	$(JAVA_HOME)/bin/javah -d java/jni -classpath		\
+          $(PROTOBUF_JAR):java/classes org.apache.mesos.state.AbstractState
+
 java/jni/org_apache_mesos_state_Variable.h: $(MESOS_JAR)
 	$(JAVA_HOME)/bin/javah -d java/jni -classpath			\
           $(PROTOBUF_JAR):java/classes org.apache.mesos.state.Variable

http://git-wip-us.apache.org/repos/asf/mesos/blob/7e6da6d5/src/java/jni/org_apache_mesos_state_AbstractState.cpp
----------------------------------------------------------------------
diff --git a/src/java/jni/org_apache_mesos_state_AbstractState.cpp b/src/java/jni/org_apache_mesos_state_AbstractState.cpp
new file mode 100644
index 0000000..2ee0b1b
--- /dev/null
+++ b/src/java/jni/org_apache_mesos_state_AbstractState.cpp
@@ -0,0 +1,770 @@
+#include <jni.h>
+
+#include <string>
+#include <vector>
+
+#include <process/future.hpp>
+
+#include <stout/duration.hpp>
+
+#include "state/leveldb.hpp"
+#include "state/state.hpp"
+
+#include "construct.hpp"
+#include "convert.hpp"
+
+using namespace mesos::internal::state;
+
+using process::Future;
+
+using std::string;
+using std::vector;
+
+extern "C" {
+
+/*
+ * Class:     org_apache_mesos_state_AbstractState
+ * Method:    finalize
+ * Signature: ()V
+ */
+JNIEXPORT void JNICALL Java_org_apache_mesos_state_AbstractState_finalize
+  (JNIEnv* env, jobject thiz)
+{
+  jclass clazz = env->GetObjectClass(thiz);
+
+  jfieldID __state = env->GetFieldID(clazz, "__state", "J");
+
+  State* state = (State*) env->GetLongField(thiz, __state);
+
+  delete state;
+
+  jfieldID __storage = env->GetFieldID(clazz, "__storage", "J");
+
+  Storage* storage = (Storage*) env->GetLongField(thiz, __storage);
+
+  delete storage;
+}
+
+
+/*
+ * Class:     org_apache_mesos_state_AbstractState
+ * Method:    __fetch
+ * Signature: (Ljava/lang/String;)J
+ */
+JNIEXPORT jlong JNICALL Java_org_apache_mesos_state_AbstractState__1_1fetch
+  (JNIEnv* env, jobject thiz, jstring jname)
+{
+  string name = construct<string>(env, jname);
+
+  jclass clazz = env->GetObjectClass(thiz);
+
+  jfieldID __state = env->GetFieldID(clazz, "__state", "J");
+
+  State* state = (State*) env->GetLongField(thiz, __state);
+
+  Future<Variable>* future = new Future<Variable>(state->fetch(name));
+
+  return (jlong) future;
+}
+
+
+/*
+ * Class:     org_apache_mesos_state_AbstractState
+ * Method:    __fetch_cancel
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_apache_mesos_state_AbstractState__1_1fetch_1cancel
+  (JNIEnv* env, jobject thiz, jlong jfuture)
+{
+  Future<Variable>* future = (Future<Variable>*) jfuture;
+
+  if (!future->isDiscarded()) {
+    future->discard();
+    return (jboolean) future->isDiscarded();
+  }
+
+  return (jboolean) true;
+}
+
+
+/*
+ * Class:     org_apache_mesos_state_AbstractState
+ * Method:    __fetch_is_cancelled
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_apache_mesos_state_AbstractState__1_1fetch_1is_1cancelled
+  (JNIEnv* env, jobject thiz, jlong jfuture)
+{
+  Future<Variable>* future = (Future<Variable>*) jfuture;
+
+  return (jboolean) future->isDiscarded();
+}
+
+
+/*
+ * Class:     org_apache_mesos_state_AbstractState
+ * Method:    __fetch_is_done
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_apache_mesos_state_AbstractState__1_1fetch_1is_1done
+  (JNIEnv* env, jobject thiz, jlong jfuture)
+{
+  Future<Variable>* future = (Future<Variable>*) jfuture;
+
+  return (jboolean) !future->isPending();
+}
+
+
+/*
+ * Class:     org_apache_mesos_state_AbstractState
+ * Method:    __fetch_get
+ * Signature: (J)Lorg/apache/mesos/state/Variable;
+ */
+JNIEXPORT jobject JNICALL Java_org_apache_mesos_state_AbstractState__1_1fetch_1get
+  (JNIEnv* env, jobject thiz, jlong jfuture)
+{
+  Future<Variable>* future = (Future<Variable>*) jfuture;
+
+  future->await();
+
+  if (future->isFailed()) {
+    jclass clazz = env->FindClass("java/util/concurrent/ExecutionException");
+    env->ThrowNew(clazz, future->failure().c_str());
+    return NULL;
+  } else if (future->isDiscarded()) {
+    jclass clazz = env->FindClass("java/util/concurrent/CancellationException");
+    env->ThrowNew(clazz, "Future was discarded");
+    return NULL;
+  }
+
+  CHECK(future->isReady());
+
+  Variable* variable = new Variable(future->get());
+
+  // Variable variable = new Variable();
+  jclass clazz = env->FindClass("org/apache/mesos/state/Variable");
+
+  jmethodID _init_ = env->GetMethodID(clazz, "<init>", "()V");
+  jobject jvariable = env->NewObject(clazz, _init_);
+
+  jfieldID __variable = env->GetFieldID(clazz, "__variable", "J");
+  env->SetLongField(jvariable, __variable, (jlong) variable);
+
+  return jvariable;
+}
+
+
+/*
+ * Class:     org_apache_mesos_state_AbstractState
+ * Method:    __fetch_get_timeout
+ * Signature: (JJLjava/util/concurrent/TimeUnit;)Lorg/apache/mesos/state/Variable;
+ */
+JNIEXPORT jobject JNICALL Java_org_apache_mesos_state_AbstractState__1_1fetch_1get_1timeout
+  (JNIEnv* env, jobject thiz, jlong jfuture, jlong jtimeout, jobject junit)
+{
+  Future<Variable>* future = (Future<Variable>*) jfuture;
+
+  jclass clazz = env->GetObjectClass(junit);
+
+  // long seconds = unit.toSeconds(time);
+  jmethodID toSeconds = env->GetMethodID(clazz, "toSeconds", "(J)J");
+
+  jlong jseconds = env->CallLongMethod(junit, toSeconds, jtimeout);
+
+  Seconds seconds(jseconds);
+
+  if (future->await(seconds)) {
+    if (future->isFailed()) {
+      clazz = env->FindClass("java/util/concurrent/ExecutionException");
+      env->ThrowNew(clazz, future->failure().c_str());
+      return NULL;
+    } else if (future->isDiscarded()) {
+      clazz = env->FindClass("java/util/concurrent/CancellationException");
+      env->ThrowNew(clazz, "Future was discarded");
+      return NULL;
+    }
+
+    CHECK(future->isReady());
+    Variable* variable = new Variable(future->get());
+
+    // Variable variable = new Variable();
+    clazz = env->FindClass("org/apache/mesos/state/Variable");
+
+    jmethodID _init_ = env->GetMethodID(clazz, "<init>", "()V");
+    jobject jvariable = env->NewObject(clazz, _init_);
+
+    jfieldID __variable = env->GetFieldID(clazz, "__variable", "J");
+    env->SetLongField(jvariable, __variable, (jlong) variable);
+
+    return jvariable;
+  }
+
+  clazz = env->FindClass("java/util/concurrent/TimeoutException");
+  env->ThrowNew(clazz, "Failed to wait for future within timeout");
+
+  return NULL;
+}
+
+
+/*
+ * Class:     org_apache_mesos_state_AbstractState
+ * Method:    __fetch_finalize
+ * Signature: (J)V
+ */
+JNIEXPORT void JNICALL Java_org_apache_mesos_state_AbstractState__1_1fetch_1finalize
+  (JNIEnv* env, jobject thiz, jlong jfuture)
+{
+  Future<Variable>* future = (Future<Variable>*) jfuture;
+
+  delete future;
+}
+
+
+/*
+ * Class:     org_apache_mesos_state_AbstractState
+ * Method:    __store
+ * Signature: (Lorg/apache/mesos/state/Variable;)J
+ */
+JNIEXPORT jlong JNICALL Java_org_apache_mesos_state_AbstractState__1_1store
+  (JNIEnv* env, jobject thiz, jobject jvariable)
+{
+  jclass clazz = env->GetObjectClass(jvariable);
+
+  jfieldID __variable = env->GetFieldID(clazz, "__variable", "J");
+
+  Variable* variable = (Variable*) env->GetLongField(jvariable, __variable);
+
+  clazz = env->GetObjectClass(thiz);
+
+  jfieldID __state = env->GetFieldID(clazz, "__state", "J");
+
+  State* state = (State*) env->GetLongField(thiz, __state);
+
+  Future<Option<Variable> >* future =
+    new Future<Option<Variable> >(state->store(*variable));
+
+  return (jlong) future;
+}
+
+
+/*
+ * Class:     org_apache_mesos_state_AbstractState
+ * Method:    __store_cancel
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_apache_mesos_state_AbstractState__1_1store_1cancel
+  (JNIEnv* env, jobject thiz, jlong jfuture)
+{
+  Future<Option<Variable> >* future = (Future<Option<Variable> >*) jfuture;
+
+  if (!future->isDiscarded()) {
+    future->discard();
+    return (jboolean) future->isDiscarded();
+  }
+
+  return (jboolean) true;
+}
+
+
+/*
+ * Class:     org_apache_mesos_state_AbstractState
+ * Method:    __store_is_cancelled
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_apache_mesos_state_AbstractState__1_1store_1is_1cancelled
+  (JNIEnv* env, jobject thiz, jlong jfuture)
+{
+  Future<Option<Variable> >* future = (Future<Option<Variable> >*) jfuture;
+
+  return (jboolean) future->isDiscarded();
+}
+
+
+/*
+ * Class:     org_apache_mesos_state_AbstractState
+ * Method:    __store_is_done
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_apache_mesos_state_AbstractState__1_1store_1is_1done
+  (JNIEnv* env, jobject thiz, jlong jfuture)
+{
+  Future<Option<Variable> >* future = (Future<Option<Variable> >*) jfuture;
+
+  return (jboolean) !future->isPending();
+}
+
+
+/*
+ * Class:     org_apache_mesos_state_AbstractState
+ * Method:    __store_get
+ * Signature: (J)Lorg/apache/mesos/state/Variable;
+ */
+JNIEXPORT jobject JNICALL Java_org_apache_mesos_state_AbstractState__1_1store_1get
+  (JNIEnv* env, jobject thiz, jlong jfuture)
+{
+  Future<Option<Variable> >* future = (Future<Option<Variable> >*) jfuture;
+
+  future->await();
+
+  if (future->isFailed()) {
+    jclass clazz = env->FindClass("java/util/concurrent/ExecutionException");
+    env->ThrowNew(clazz, future->failure().c_str());
+    return NULL;
+  } else if (future->isDiscarded()) {
+    jclass clazz = env->FindClass("java/util/concurrent/CancellationException");
+    env->ThrowNew(clazz, "Future was discarded");
+    return NULL;
+  }
+
+  CHECK(future->isReady());
+
+  if (future->get().isSome()) {
+    Variable* variable = new Variable(future->get().get());
+
+    // Variable variable = new Variable();
+    jclass clazz = env->FindClass("org/apache/mesos/state/Variable");
+
+    jmethodID _init_ = env->GetMethodID(clazz, "<init>", "()V");
+    jobject jvariable = env->NewObject(clazz, _init_);
+
+    jfieldID __variable = env->GetFieldID(clazz, "__variable", "J");
+    env->SetLongField(jvariable, __variable, (jlong) variable);
+
+    return jvariable;
+  }
+
+  return NULL;
+}
+
+
+/*
+ * Class:     org_apache_mesos_state_AbstractState
+ * Method:    __store_get_timeout
+ * Signature: (JJLjava/util/concurrent/TimeUnit;)Lorg/apache/mesos/state/Variable;
+ */
+JNIEXPORT jobject JNICALL Java_org_apache_mesos_state_AbstractState__1_1store_1get_1timeout
+  (JNIEnv* env, jobject thiz, jlong jfuture, jlong jtimeout, jobject junit)
+{
+  Future<Option<Variable> >* future = (Future<Option<Variable> >*) jfuture;
+
+  jclass clazz = env->GetObjectClass(junit);
+
+  // long seconds = unit.toSeconds(time);
+  jmethodID toSeconds = env->GetMethodID(clazz, "toSeconds", "(J)J");
+
+  jlong jseconds = env->CallLongMethod(junit, toSeconds, jtimeout);
+
+  Seconds seconds(jseconds);
+
+  if (future->await(seconds)) {
+    if (future->isFailed()) {
+      clazz = env->FindClass("java/util/concurrent/ExecutionException");
+      env->ThrowNew(clazz, future->failure().c_str());
+      return NULL;
+    } else if (future->isDiscarded()) {
+      clazz = env->FindClass("java/util/concurrent/CancellationException");
+      env->ThrowNew(clazz, "Future was discarded");
+      return NULL;
+    }
+
+    CHECK(future->isReady());
+
+    if (future->get().isSome()) {
+      Variable* variable = new Variable(future->get().get());
+
+      // Variable variable = new Variable();
+      clazz = env->FindClass("org/apache/mesos/state/Variable");
+
+      jmethodID _init_ = env->GetMethodID(clazz, "<init>", "()V");
+      jobject jvariable = env->NewObject(clazz, _init_);
+
+      jfieldID __variable = env->GetFieldID(clazz, "__variable", "J");
+      env->SetLongField(jvariable, __variable, (jlong) variable);
+
+      return jvariable;
+    }
+
+    return NULL;
+  }
+
+  clazz = env->FindClass("java/util/concurrent/TimeoutException");
+  env->ThrowNew(clazz, "Failed to wait for future within timeout");
+
+  return NULL;
+}
+
+
+/*
+ * Class:     org_apache_mesos_state_AbstractState
+ * Method:    __store_finalize
+ * Signature: (J)V
+ */
+JNIEXPORT void JNICALL Java_org_apache_mesos_state_AbstractState__1_1store_1finalize
+  (JNIEnv* env, jobject thiz, jlong jfuture)
+{
+  Future<Option<Variable> >* future = (Future<Option<Variable> >*) jfuture;
+
+  delete future;
+}
+
+
+/*
+ * Class:     org_apache_mesos_state_AbstractState
+ * Method:    __expunge
+ * Signature: (Lorg/apache/mesos/state/Variable;)J
+ */
+JNIEXPORT jlong JNICALL Java_org_apache_mesos_state_AbstractState__1_1expunge
+  (JNIEnv* env, jobject thiz, jobject jvariable)
+{
+  jclass clazz = env->GetObjectClass(jvariable);
+
+  jfieldID __variable = env->GetFieldID(clazz, "__variable", "J");
+
+  Variable* variable = (Variable*) env->GetLongField(jvariable, __variable);
+
+  clazz = env->GetObjectClass(thiz);
+
+  jfieldID __state = env->GetFieldID(clazz, "__state", "J");
+
+  State* state = (State*) env->GetLongField(thiz, __state);
+
+  Future<bool>* future = new Future<bool>(state->expunge(*variable));
+
+  return (jlong) future;
+}
+
+
+/*
+ * Class:     org_apache_mesos_state_AbstractState
+ * Method:    __expunge_cancel
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_apache_mesos_state_AbstractState__1_1expunge_1cancel
+  (JNIEnv* env, jobject thiz, jlong jfuture)
+{
+  Future<bool>* future = (Future<bool>*) jfuture;
+
+  if (!future->isDiscarded()) {
+    future->discard();
+    return (jboolean) future->isDiscarded();
+  }
+
+  return (jboolean) true;
+}
+
+
+/*
+ * Class:     org_apache_mesos_state_AbstractState
+ * Method:    __expunge_is_cancelled
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_apache_mesos_state_AbstractState__1_1expunge_1is_1cancelled
+  (JNIEnv* env, jobject thiz, jlong jfuture)
+{
+  Future<bool>* future = (Future<bool>*) jfuture;
+
+  return (jboolean) future->isDiscarded();
+}
+
+
+/*
+ * Class:     org_apache_mesos_state_AbstractState
+ * Method:    __expunge_is_done
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_apache_mesos_state_AbstractState__1_1expunge_1is_1done
+  (JNIEnv* env, jobject thiz, jlong jfuture)
+{
+  Future<bool>* future = (Future<bool>*) jfuture;
+
+  return (jboolean) !future->isPending();
+}
+
+
+/*
+ * Class:     org_apache_mesos_state_AbstractState
+ * Method:    __expunge_get
+ * Signature: (J)Ljava/lang/Boolean;
+ */
+JNIEXPORT jobject JNICALL Java_org_apache_mesos_state_AbstractState__1_1expunge_1get
+  (JNIEnv* env, jobject thiz, jlong jfuture)
+{
+  Future<bool>* future = (Future<bool>*) jfuture;
+
+  future->await();
+
+  if (future->isFailed()) {
+    jclass clazz = env->FindClass("java/util/concurrent/ExecutionException");
+    env->ThrowNew(clazz, future->failure().c_str());
+    return NULL;
+  } else if (future->isDiscarded()) {
+    jclass clazz = env->FindClass("java/util/concurrent/CancellationException");
+    env->ThrowNew(clazz, "Future was discarded");
+    return NULL;
+  }
+
+  CHECK(future->isReady());
+
+  if (future->get()) {
+    jclass clazz = env->FindClass("java/lang/Boolean");
+    return env->GetStaticObjectField(
+        clazz, env->GetStaticFieldID(clazz, "TRUE", "Ljava/lang/Boolean;"));
+  }
+
+  jclass clazz = env->FindClass("java/lang/Boolean");
+  return env->GetStaticObjectField(
+      clazz, env->GetStaticFieldID(clazz, "FALSE", "Ljava/lang/Boolean;"));
+}
+
+
+/*
+ * Class:     org_apache_mesos_state_AbstractState
+ * Method:    __expunge_get_timeout
+ * Signature: (JJLjava/util/concurrent/TimeUnit;)Ljava/lang/Boolean;
+ */
+JNIEXPORT jobject JNICALL Java_org_apache_mesos_state_AbstractState__1_1expunge_1get_1timeout
+  (JNIEnv* env, jobject thiz, jlong jfuture, jlong jtimeout, jobject junit)
+{
+  Future<bool>* future = (Future<bool>*) jfuture;
+
+  jclass clazz = env->GetObjectClass(junit);
+
+  // long seconds = unit.toSeconds(time);
+  jmethodID toSeconds = env->GetMethodID(clazz, "toSeconds", "(J)J");
+
+  jlong jseconds = env->CallLongMethod(junit, toSeconds, jtimeout);
+
+  Seconds seconds(jseconds);
+
+  if (future->await(seconds)) {
+    if (future->isFailed()) {
+      clazz = env->FindClass("java/util/concurrent/ExecutionException");
+      env->ThrowNew(clazz, future->failure().c_str());
+      return NULL;
+    } else if (future->isDiscarded()) {
+      clazz = env->FindClass("java/util/concurrent/CancellationException");
+      env->ThrowNew(clazz, "Future was discarded");
+      return NULL;
+    }
+
+    CHECK(future->isReady());
+
+    if (future->get()) {
+      jclass clazz = env->FindClass("java/lang/Boolean");
+      return env->GetStaticObjectField(
+          clazz, env->GetStaticFieldID(clazz, "TRUE", "Ljava/lang/Boolean;"));
+    }
+
+    jclass clazz = env->FindClass("java/lang/Boolean");
+    return env->GetStaticObjectField(
+        clazz, env->GetStaticFieldID(clazz, "FALSE", "Ljava/lang/Boolean;"));
+  }
+
+  clazz = env->FindClass("java/util/concurrent/TimeoutException");
+  env->ThrowNew(clazz, "Failed to wait for future within timeout");
+
+  return NULL;
+}
+
+
+/*
+ * Class:     org_apache_mesos_state_AbstractState
+ * Method:    __expunge_finalize
+ * Signature: (J)V
+ */
+JNIEXPORT void JNICALL Java_org_apache_mesos_state_AbstractState__1_1expunge_1finalize
+  (JNIEnv* env, jobject thiz, jlong jfuture)
+{
+  Future<bool>* future = (Future<bool>*) jfuture;
+
+  delete future;
+}
+
+
+/*
+ * Class:     org_apache_mesos_state_AbstractState
+ * Method:    __names
+ * Signature: ()J
+ */
+JNIEXPORT jlong JNICALL Java_org_apache_mesos_state_AbstractState__1_1names
+  (JNIEnv* env, jobject thiz)
+{
+  jclass clazz = env->GetObjectClass(thiz);
+
+  jfieldID __state = env->GetFieldID(clazz, "__state", "J");
+
+  State* state = (State*) env->GetLongField(thiz, __state);
+
+  Future<vector<string> >* future =
+    new Future<vector<string> >(state->names());
+
+  return (jlong) future;
+}
+
+
+/*
+ * Class:     org_apache_mesos_state_AbstractState
+ * Method:    __names_cancel
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_apache_mesos_state_AbstractState__1_1names_1cancel
+  (JNIEnv* env, jobject thiz, jlong jfuture)
+{
+  Future<vector<string> >* future = (Future<vector<string> >*) jfuture;
+
+  if (!future->isDiscarded()) {
+    future->discard();
+    return (jboolean) future->isDiscarded();
+  }
+
+  return (jboolean) true;
+}
+
+/*
+ * Class:     org_apache_mesos_state_AbstractState
+ * Method:    __names_is_cancelled
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_apache_mesos_state_AbstractState__1_1names_1is_1cancelled
+  (JNIEnv* env, jobject thiz, jlong jfuture)
+{
+  Future<vector<string> >* future = (Future<vector<string> >*) jfuture;
+
+  return (jboolean) future->isDiscarded();
+}
+
+
+/*
+ * Class:     org_apache_mesos_state_AbstractState
+ * Method:    __names_is_done
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_apache_mesos_state_AbstractState__1_1names_1is_1done
+  (JNIEnv* env, jobject thiz, jlong jfuture)
+{
+  Future<vector<string> >* future = (Future<vector<string> >*) jfuture;
+
+  return (jboolean) !future->isPending();
+}
+
+
+/*
+ * Class:     org_apache_mesos_state_AbstractState
+ * Method:    __names_get
+ * Signature: (J)Ljava/util/Iterator;
+ */
+JNIEXPORT jobject JNICALL Java_org_apache_mesos_state_AbstractState__1_1names_1get
+  (JNIEnv* env, jobject thiz, jlong jfuture)
+{
+  Future<vector<string> >* future = (Future<vector<string> >*) jfuture;
+
+  future->await();
+
+  if (future->isFailed()) {
+    jclass clazz = env->FindClass("java/util/concurrent/ExecutionException");
+    env->ThrowNew(clazz, future->failure().c_str());
+    return NULL;
+  } else if (future->isDiscarded()) {
+    jclass clazz = env->FindClass("java/util/concurrent/CancellationException");
+    env->ThrowNew(clazz, "Future was discarded");
+    return NULL;
+  }
+
+  CHECK(future->isReady());
+
+  // List names = new ArrayList();
+  jclass clazz = env->FindClass("java/util/ArrayList");
+
+  jmethodID _init_ = env->GetMethodID(clazz, "<init>", "()V");
+  jobject jnames = env->NewObject(clazz, _init_);
+
+  jmethodID add = env->GetMethodID(clazz, "add", "(Ljava/lang/Object;)Z");
+
+  foreach (const string& name, future->get()) {
+    jobject jname = convert<string>(env, name);
+    env->CallBooleanMethod(jnames, add, jname);
+  }
+
+  // Iterator iterator = jnames.iterator();
+  jmethodID iterator =
+    env->GetMethodID(clazz, "iterator", "()Ljava/util/Iterator;");
+  jobject jiterator = env->CallObjectMethod(jnames, iterator);
+
+  return jiterator;
+}
+
+
+/*
+ * Class:     org_apache_mesos_state_AbstractState
+ * Method:    __names_get_timeout
+ * Signature: (JJLjava/util/concurrent/TimeUnit;)Ljava/util/Iterator;
+ */
+JNIEXPORT jobject JNICALL Java_org_apache_mesos_state_AbstractState__1_1names_1get_1timeout
+  (JNIEnv* env, jobject thiz, jlong jfuture, jlong jtimeout, jobject junit)
+{
+  Future<vector<string> >* future = (Future<vector<string> >*) jfuture;
+
+  jclass clazz = env->GetObjectClass(junit);
+
+  // long seconds = unit.toSeconds(time);
+  jmethodID toSeconds = env->GetMethodID(clazz, "toSeconds", "(J)J");
+
+  jlong jseconds = env->CallLongMethod(junit, toSeconds, jtimeout);
+
+  Seconds seconds(jseconds);
+
+  if (future->await(seconds)) {
+    if (future->isFailed()) {
+      clazz = env->FindClass("java/util/concurrent/ExecutionException");
+      env->ThrowNew(clazz, future->failure().c_str());
+      return NULL;
+    } else if (future->isDiscarded()) {
+      clazz = env->FindClass("java/util/concurrent/CancellationException");
+      env->ThrowNew(clazz, "Future was discarded");
+      return NULL;
+    }
+
+    CHECK(future->isReady());
+
+    // List names = new ArrayList();
+    clazz = env->FindClass("java/util/ArrayList");
+
+    jmethodID _init_ = env->GetMethodID(clazz, "<init>", "()V");
+    jobject jnames = env->NewObject(clazz, _init_);
+
+    jmethodID add = env->GetMethodID(clazz, "add", "(Ljava/lang/Object;)Z");
+
+    foreach (const string& name, future->get()) {
+      jobject jname = convert<string>(env, name);
+      env->CallBooleanMethod(jnames, add, jname);
+    }
+
+    // Iterator iterator = jnames.iterator();
+    jmethodID iterator =
+      env->GetMethodID(clazz, "iterator", "()Ljava/util/Iterator;");
+    jobject jiterator = env->CallObjectMethod(jnames, iterator);
+
+    return jiterator;
+  }
+
+  clazz = env->FindClass("java/util/concurrent/TimeoutException");
+  env->ThrowNew(clazz, "Failed to wait for future within timeout");
+
+  return NULL;
+}
+
+
+/*
+ * Class:     org_apache_mesos_state_AbstractState
+ * Method:    __names_finalize
+ * Signature: (J)V
+ */
+JNIEXPORT void JNICALL Java_org_apache_mesos_state_AbstractState__1_1names_1finalize
+  (JNIEnv* env, jobject thiz, jlong jfuture)
+{
+  Future<vector<string> >* future = (Future<vector<string> >*) jfuture;
+
+  delete future;
+}
+
+} // extern "C" {

http://git-wip-us.apache.org/repos/asf/mesos/blob/7e6da6d5/src/java/jni/org_apache_mesos_state_ZooKeeperState.cpp
----------------------------------------------------------------------
diff --git a/src/java/jni/org_apache_mesos_state_ZooKeeperState.cpp b/src/java/jni/org_apache_mesos_state_ZooKeeperState.cpp
index 84174d5..41f974e 100644
--- a/src/java/jni/org_apache_mesos_state_ZooKeeperState.cpp
+++ b/src/java/jni/org_apache_mesos_state_ZooKeeperState.cpp
@@ -55,6 +55,8 @@ JNIEXPORT void JNICALL Java_org_apache_mesos_state_ZooKeeperState_initialize__Lj
 
   clazz = env->GetObjectClass(thiz);
 
+  clazz = env->GetSuperclass(clazz);
+
   jfieldID __storage = env->GetFieldID(clazz, "__storage", "J");
   env->SetLongField(thiz, __storage, (jlong) storage);
 
@@ -124,750 +126,4 @@ JNIEXPORT void JNICALL Java_org_apache_mesos_state_ZooKeeperState_initialize__Lj
   env->SetLongField(thiz, __state, (jlong) state);
 }
 
-
-/*
- * Class:     org_apache_mesos_state_ZooKeeperState
- * Method:    finalize
- * Signature: ()V
- */
-JNIEXPORT void JNICALL Java_org_apache_mesos_state_ZooKeeperState_finalize
-  (JNIEnv* env, jobject thiz)
-{
-  jclass clazz = env->GetObjectClass(thiz);
-
-  jfieldID __state = env->GetFieldID(clazz, "__state", "J");
-
-  State* state = (State*) env->GetLongField(thiz, __state);
-
-  delete state;
-
-  jfieldID __storage = env->GetFieldID(clazz, "__storage", "J");
-
-  Storage* storage = (Storage*) env->GetLongField(thiz, __storage);
-
-  delete storage;
-}
-
-
-/*
- * Class:     org_apache_mesos_state_ZooKeeperState
- * Method:    __fetch
- * Signature: (Ljava/lang/String;)J
- */
-JNIEXPORT jlong JNICALL Java_org_apache_mesos_state_ZooKeeperState__1_1fetch
-  (JNIEnv* env, jobject thiz, jstring jname)
-{
-  string name = construct<string>(env, jname);
-
-  jclass clazz = env->GetObjectClass(thiz);
-
-  jfieldID __state = env->GetFieldID(clazz, "__state", "J");
-
-  State* state = (State*) env->GetLongField(thiz, __state);
-
-  Future<Variable>* future = new Future<Variable>(state->fetch(name));
-
-  return (jlong) future;
-}
-
-
-/*
- * Class:     org_apache_mesos_state_ZooKeeperState
- * Method:    __fetch_cancel
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_apache_mesos_state_ZooKeeperState__1_1fetch_1cancel
-  (JNIEnv* env, jobject thiz, jlong jfuture)
-{
-  Future<Variable>* future = (Future<Variable>*) jfuture;
-
-  if (!future->isDiscarded()) {
-    future->discard();
-    return (jboolean) future->isDiscarded();
-  }
-
-  return (jboolean) true;
-}
-
-
-/*
- * Class:     org_apache_mesos_state_ZooKeeperState
- * Method:    __fetch_is_cancelled
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_apache_mesos_state_ZooKeeperState__1_1fetch_1is_1cancelled
-  (JNIEnv* env, jobject thiz, jlong jfuture)
-{
-  Future<Variable>* future = (Future<Variable>*) jfuture;
-
-  return (jboolean) future->isDiscarded();
-}
-
-
-/*
- * Class:     org_apache_mesos_state_ZooKeeperState
- * Method:    __fetch_is_done
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_apache_mesos_state_ZooKeeperState__1_1fetch_1is_1done
-  (JNIEnv* env, jobject thiz, jlong jfuture)
-{
-  Future<Variable>* future = (Future<Variable>*) jfuture;
-
-  return (jboolean) !future->isPending();
-}
-
-
-/*
- * Class:     org_apache_mesos_state_ZooKeeperState
- * Method:    __fetch_get
- * Signature: (J)Lorg/apache/mesos/state/Variable;
- */
-JNIEXPORT jobject JNICALL Java_org_apache_mesos_state_ZooKeeperState__1_1fetch_1get
-  (JNIEnv* env, jobject thiz, jlong jfuture)
-{
-  Future<Variable>* future = (Future<Variable>*) jfuture;
-
-  future->await();
-
-  if (future->isFailed()) {
-    jclass clazz = env->FindClass("java/util/concurrent/ExecutionException");
-    env->ThrowNew(clazz, future->failure().c_str());
-    return NULL;
-  } else if (future->isDiscarded()) {
-    jclass clazz = env->FindClass("java/util/concurrent/CancellationException");
-    env->ThrowNew(clazz, "Future was discarded");
-    return NULL;
-  }
-
-  CHECK(future->isReady());
-
-  Variable* variable = new Variable(future->get());
-
-  // Variable variable = new Variable();
-  jclass clazz = env->FindClass("org/apache/mesos/state/Variable");
-
-  jmethodID _init_ = env->GetMethodID(clazz, "<init>", "()V");
-  jobject jvariable = env->NewObject(clazz, _init_);
-
-  jfieldID __variable = env->GetFieldID(clazz, "__variable", "J");
-  env->SetLongField(jvariable, __variable, (jlong) variable);
-
-  return jvariable;
-}
-
-
-/*
- * Class:     org_apache_mesos_state_ZooKeeperState
- * Method:    __fetch_get_timeout
- * Signature: (JJLjava/util/concurrent/TimeUnit;)Lorg/apache/mesos/state/Variable;
- */
-JNIEXPORT jobject JNICALL Java_org_apache_mesos_state_ZooKeeperState__1_1fetch_1get_1timeout
-  (JNIEnv* env, jobject thiz, jlong jfuture, jlong jtimeout, jobject junit)
-{
-  Future<Variable>* future = (Future<Variable>*) jfuture;
-
-  jclass clazz = env->GetObjectClass(junit);
-
-  // long seconds = unit.toSeconds(time);
-  jmethodID toSeconds = env->GetMethodID(clazz, "toSeconds", "(J)J");
-
-  jlong jseconds = env->CallLongMethod(junit, toSeconds, jtimeout);
-
-  Seconds seconds(jseconds);
-
-  if (future->await(seconds)) {
-    if (future->isFailed()) {
-      clazz = env->FindClass("java/util/concurrent/ExecutionException");
-      env->ThrowNew(clazz, future->failure().c_str());
-      return NULL;
-    } else if (future->isDiscarded()) {
-      clazz = env->FindClass("java/util/concurrent/CancellationException");
-      env->ThrowNew(clazz, "Future was discarded");
-      return NULL;
-    }
-
-    CHECK(future->isReady());
-    Variable* variable = new Variable(future->get());
-
-    // Variable variable = new Variable();
-    clazz = env->FindClass("org/apache/mesos/state/Variable");
-
-    jmethodID _init_ = env->GetMethodID(clazz, "<init>", "()V");
-    jobject jvariable = env->NewObject(clazz, _init_);
-
-    jfieldID __variable = env->GetFieldID(clazz, "__variable", "J");
-    env->SetLongField(jvariable, __variable, (jlong) variable);
-
-    return jvariable;
-  }
-
-  clazz = env->FindClass("java/util/concurrent/TimeoutException");
-  env->ThrowNew(clazz, "Failed to wait for future within timeout");
-
-  return NULL;
-}
-
-
-/*
- * Class:     org_apache_mesos_state_ZooKeeperState
- * Method:    __fetch_finalize
- * Signature: (J)V
- */
-JNIEXPORT void JNICALL Java_org_apache_mesos_state_ZooKeeperState__1_1fetch_1finalize
-  (JNIEnv* env, jobject thiz, jlong jfuture)
-{
-  Future<Variable>* future = (Future<Variable>*) jfuture;
-
-  delete future;
-}
-
-
-/*
- * Class:     org_apache_mesos_state_ZooKeeperState
- * Method:    __store
- * Signature: (Lorg/apache/mesos/state/Variable;)J
- */
-JNIEXPORT jlong JNICALL Java_org_apache_mesos_state_ZooKeeperState__1_1store
-  (JNIEnv* env, jobject thiz, jobject jvariable)
-{
-  jclass clazz = env->GetObjectClass(jvariable);
-
-  jfieldID __variable = env->GetFieldID(clazz, "__variable", "J");
-
-  Variable* variable = (Variable*) env->GetLongField(jvariable, __variable);
-
-  clazz = env->GetObjectClass(thiz);
-
-  jfieldID __state = env->GetFieldID(clazz, "__state", "J");
-
-  State* state = (State*) env->GetLongField(thiz, __state);
-
-  Future<Option<Variable> >* future =
-    new Future<Option<Variable> >(state->store(*variable));
-
-  return (jlong) future;
-}
-
-
-/*
- * Class:     org_apache_mesos_state_ZooKeeperState
- * Method:    __store_cancel
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_apache_mesos_state_ZooKeeperState__1_1store_1cancel
-  (JNIEnv* env, jobject thiz, jlong jfuture)
-{
-  Future<Option<Variable> >* future = (Future<Option<Variable> >*) jfuture;
-
-  if (!future->isDiscarded()) {
-    future->discard();
-    return (jboolean) future->isDiscarded();
-  }
-
-  return (jboolean) true;
-}
-
-
-/*
- * Class:     org_apache_mesos_state_ZooKeeperState
- * Method:    __store_is_cancelled
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_apache_mesos_state_ZooKeeperState__1_1store_1is_1cancelled
-  (JNIEnv* env, jobject thiz, jlong jfuture)
-{
-  Future<Option<Variable> >* future = (Future<Option<Variable> >*) jfuture;
-
-  return (jboolean) future->isDiscarded();
-}
-
-
-/*
- * Class:     org_apache_mesos_state_ZooKeeperState
- * Method:    __store_is_done
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_apache_mesos_state_ZooKeeperState__1_1store_1is_1done
-  (JNIEnv* env, jobject thiz, jlong jfuture)
-{
-  Future<Option<Variable> >* future = (Future<Option<Variable> >*) jfuture;
-
-  return (jboolean) !future->isPending();
-}
-
-
-/*
- * Class:     org_apache_mesos_state_ZooKeeperState
- * Method:    __store_get
- * Signature: (J)Lorg/apache/mesos/state/Variable;
- */
-JNIEXPORT jobject JNICALL Java_org_apache_mesos_state_ZooKeeperState__1_1store_1get
-  (JNIEnv* env, jobject thiz, jlong jfuture)
-{
-  Future<Option<Variable> >* future = (Future<Option<Variable> >*) jfuture;
-
-  future->await();
-
-  if (future->isFailed()) {
-    jclass clazz = env->FindClass("java/util/concurrent/ExecutionException");
-    env->ThrowNew(clazz, future->failure().c_str());
-    return NULL;
-  } else if (future->isDiscarded()) {
-    jclass clazz = env->FindClass("java/util/concurrent/CancellationException");
-    env->ThrowNew(clazz, "Future was discarded");
-    return NULL;
-  }
-
-  CHECK(future->isReady());
-
-  if (future->get().isSome()) {
-    Variable* variable = new Variable(future->get().get());
-
-    // Variable variable = new Variable();
-    jclass clazz = env->FindClass("org/apache/mesos/state/Variable");
-
-    jmethodID _init_ = env->GetMethodID(clazz, "<init>", "()V");
-    jobject jvariable = env->NewObject(clazz, _init_);
-
-    jfieldID __variable = env->GetFieldID(clazz, "__variable", "J");
-    env->SetLongField(jvariable, __variable, (jlong) variable);
-
-    return jvariable;
-  }
-
-  return NULL;
-}
-
-
-/*
- * Class:     org_apache_mesos_state_ZooKeeperState
- * Method:    __store_get_timeout
- * Signature: (JJLjava/util/concurrent/TimeUnit;)Lorg/apache/mesos/state/Variable;
- */
-JNIEXPORT jobject JNICALL Java_org_apache_mesos_state_ZooKeeperState__1_1store_1get_1timeout
-  (JNIEnv* env, jobject thiz, jlong jfuture, jlong jtimeout, jobject junit)
-{
-  Future<Option<Variable> >* future = (Future<Option<Variable> >*) jfuture;
-
-  jclass clazz = env->GetObjectClass(junit);
-
-  // long seconds = unit.toSeconds(time);
-  jmethodID toSeconds = env->GetMethodID(clazz, "toSeconds", "(J)J");
-
-  jlong jseconds = env->CallLongMethod(junit, toSeconds, jtimeout);
-
-  Seconds seconds(jseconds);
-
-  if (future->await(seconds)) {
-    if (future->isFailed()) {
-      clazz = env->FindClass("java/util/concurrent/ExecutionException");
-      env->ThrowNew(clazz, future->failure().c_str());
-      return NULL;
-    } else if (future->isDiscarded()) {
-      clazz = env->FindClass("java/util/concurrent/CancellationException");
-      env->ThrowNew(clazz, "Future was discarded");
-      return NULL;
-    }
-
-    CHECK(future->isReady());
-
-    if (future->get().isSome()) {
-      Variable* variable = new Variable(future->get().get());
-
-      // Variable variable = new Variable();
-      clazz = env->FindClass("org/apache/mesos/state/Variable");
-
-      jmethodID _init_ = env->GetMethodID(clazz, "<init>", "()V");
-      jobject jvariable = env->NewObject(clazz, _init_);
-
-      jfieldID __variable = env->GetFieldID(clazz, "__variable", "J");
-      env->SetLongField(jvariable, __variable, (jlong) variable);
-
-      return jvariable;
-    }
-
-    return NULL;
-  }
-
-  clazz = env->FindClass("java/util/concurrent/TimeoutException");
-  env->ThrowNew(clazz, "Failed to wait for future within timeout");
-
-  return NULL;
-}
-
-
-/*
- * Class:     org_apache_mesos_state_ZooKeeperState
- * Method:    __store_finalize
- * Signature: (J)V
- */
-JNIEXPORT void JNICALL Java_org_apache_mesos_state_ZooKeeperState__1_1store_1finalize
-  (JNIEnv* env, jobject thiz, jlong jfuture)
-{
-  Future<Option<Variable> >* future = (Future<Option<Variable> >*) jfuture;
-
-  delete future;
-}
-
-
-/*
- * Class:     org_apache_mesos_state_ZooKeeperState
- * Method:    __expunge
- * Signature: (Lorg/apache/mesos/state/Variable;)J
- */
-JNIEXPORT jlong JNICALL Java_org_apache_mesos_state_ZooKeeperState__1_1expunge
-  (JNIEnv* env, jobject thiz, jobject jvariable)
-{
-  jclass clazz = env->GetObjectClass(jvariable);
-
-  jfieldID __variable = env->GetFieldID(clazz, "__variable", "J");
-
-  Variable* variable = (Variable*) env->GetLongField(jvariable, __variable);
-
-  clazz = env->GetObjectClass(thiz);
-
-  jfieldID __state = env->GetFieldID(clazz, "__state", "J");
-
-  State* state = (State*) env->GetLongField(thiz, __state);
-
-  Future<bool>* future = new Future<bool>(state->expunge(*variable));
-
-  return (jlong) future;
-}
-
-
-/*
- * Class:     org_apache_mesos_state_ZooKeeperState
- * Method:    __expunge_cancel
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_apache_mesos_state_ZooKeeperState__1_1expunge_1cancel
-  (JNIEnv* env, jobject thiz, jlong jfuture)
-{
-  Future<bool>* future = (Future<bool>*) jfuture;
-
-  if (!future->isDiscarded()) {
-    future->discard();
-    return (jboolean) future->isDiscarded();
-  }
-
-  return (jboolean) true;
-}
-
-
-/*
- * Class:     org_apache_mesos_state_ZooKeeperState
- * Method:    __expunge_is_cancelled
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_apache_mesos_state_ZooKeeperState__1_1expunge_1is_1cancelled
-  (JNIEnv* env, jobject thiz, jlong jfuture)
-{
-  Future<bool>* future = (Future<bool>*) jfuture;
-
-  return (jboolean) future->isDiscarded();
-}
-
-
-/*
- * Class:     org_apache_mesos_state_ZooKeeperState
- * Method:    __expunge_is_done
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_apache_mesos_state_ZooKeeperState__1_1expunge_1is_1done
-  (JNIEnv* env, jobject thiz, jlong jfuture)
-{
-  Future<bool>* future = (Future<bool>*) jfuture;
-
-  return (jboolean) !future->isPending();
-}
-
-
-/*
- * Class:     org_apache_mesos_state_ZooKeeperState
- * Method:    __expunge_get
- * Signature: (J)Ljava/lang/Boolean;
- */
-JNIEXPORT jobject JNICALL Java_org_apache_mesos_state_ZooKeeperState__1_1expunge_1get
-  (JNIEnv* env, jobject thiz, jlong jfuture)
-{
-  Future<bool>* future = (Future<bool>*) jfuture;
-
-  future->await();
-
-  if (future->isFailed()) {
-    jclass clazz = env->FindClass("java/util/concurrent/ExecutionException");
-    env->ThrowNew(clazz, future->failure().c_str());
-    return NULL;
-  } else if (future->isDiscarded()) {
-    jclass clazz = env->FindClass("java/util/concurrent/CancellationException");
-    env->ThrowNew(clazz, "Future was discarded");
-    return NULL;
-  }
-
-  CHECK(future->isReady());
-
-  if (future->get()) {
-    jclass clazz = env->FindClass("java/lang/Boolean");
-    return env->GetStaticObjectField(
-        clazz, env->GetStaticFieldID(clazz, "TRUE", "Ljava/lang/Boolean;"));
-  }
-
-  jclass clazz = env->FindClass("java/lang/Boolean");
-  return env->GetStaticObjectField(
-      clazz, env->GetStaticFieldID(clazz, "FALSE", "Ljava/lang/Boolean;"));
-}
-
-
-/*
- * Class:     org_apache_mesos_state_ZooKeeperState
- * Method:    __expunge_get_timeout
- * Signature: (JJLjava/util/concurrent/TimeUnit;)Ljava/lang/Boolean;
- */
-JNIEXPORT jobject JNICALL Java_org_apache_mesos_state_ZooKeeperState__1_1expunge_1get_1timeout
-  (JNIEnv* env, jobject thiz, jlong jfuture, jlong jtimeout, jobject junit)
-{
-  Future<bool>* future = (Future<bool>*) jfuture;
-
-  jclass clazz = env->GetObjectClass(junit);
-
-  // long seconds = unit.toSeconds(time);
-  jmethodID toSeconds = env->GetMethodID(clazz, "toSeconds", "(J)J");
-
-  jlong jseconds = env->CallLongMethod(junit, toSeconds, jtimeout);
-
-  Seconds seconds(jseconds);
-
-  if (future->await(seconds)) {
-    if (future->isFailed()) {
-      clazz = env->FindClass("java/util/concurrent/ExecutionException");
-      env->ThrowNew(clazz, future->failure().c_str());
-      return NULL;
-    } else if (future->isDiscarded()) {
-      clazz = env->FindClass("java/util/concurrent/CancellationException");
-      env->ThrowNew(clazz, "Future was discarded");
-      return NULL;
-    }
-
-    CHECK(future->isReady());
-
-    if (future->get()) {
-      jclass clazz = env->FindClass("java/lang/Boolean");
-      return env->GetStaticObjectField(
-          clazz, env->GetStaticFieldID(clazz, "TRUE", "Ljava/lang/Boolean;"));
-    }
-
-    jclass clazz = env->FindClass("java/lang/Boolean");
-    return env->GetStaticObjectField(
-        clazz, env->GetStaticFieldID(clazz, "FALSE", "Ljava/lang/Boolean;"));
-  }
-
-  clazz = env->FindClass("java/util/concurrent/TimeoutException");
-  env->ThrowNew(clazz, "Failed to wait for future within timeout");
-
-  return NULL;
-}
-
-
-/*
- * Class:     org_apache_mesos_state_ZooKeeperState
- * Method:    __expunge_finalize
- * Signature: (J)V
- */
-JNIEXPORT void JNICALL Java_org_apache_mesos_state_ZooKeeperState__1_1expunge_1finalize
-  (JNIEnv* env, jobject thiz, jlong jfuture)
-{
-  Future<bool>* future = (Future<bool>*) jfuture;
-
-  delete future;
-}
-
-
-/*
- * Class:     org_apache_mesos_state_ZooKeeperState
- * Method:    __names
- * Signature: ()J
- */
-JNIEXPORT jlong JNICALL Java_org_apache_mesos_state_ZooKeeperState__1_1names
-  (JNIEnv* env, jobject thiz)
-{
-  jclass clazz = env->GetObjectClass(thiz);
-
-  jfieldID __state = env->GetFieldID(clazz, "__state", "J");
-
-  State* state = (State*) env->GetLongField(thiz, __state);
-
-  Future<vector<string> >* future =
-    new Future<vector<string> >(state->names());
-
-  return (jlong) future;
-}
-
-
-/*
- * Class:     org_apache_mesos_state_ZooKeeperState
- * Method:    __names_cancel
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_apache_mesos_state_ZooKeeperState__1_1names_1cancel
-  (JNIEnv* env, jobject thiz, jlong jfuture)
-{
-  Future<vector<string> >* future = (Future<vector<string> >*) jfuture;
-
-  if (!future->isDiscarded()) {
-    future->discard();
-    return (jboolean) future->isDiscarded();
-  }
-
-  return (jboolean) true;
-}
-
-/*
- * Class:     org_apache_mesos_state_ZooKeeperState
- * Method:    __names_is_cancelled
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_apache_mesos_state_ZooKeeperState__1_1names_1is_1cancelled
-  (JNIEnv* env, jobject thiz, jlong jfuture)
-{
-  Future<vector<string> >* future = (Future<vector<string> >*) jfuture;
-
-  return (jboolean) future->isDiscarded();
-}
-
-
-/*
- * Class:     org_apache_mesos_state_ZooKeeperState
- * Method:    __names_is_done
- * Signature: (J)Z
- */
-JNIEXPORT jboolean JNICALL Java_org_apache_mesos_state_ZooKeeperState__1_1names_1is_1done
-  (JNIEnv* env, jobject thiz, jlong jfuture)
-{
-  Future<vector<string> >* future = (Future<vector<string> >*) jfuture;
-
-  return (jboolean) !future->isPending();
-}
-
-
-/*
- * Class:     org_apache_mesos_state_ZooKeeperState
- * Method:    __names_get
- * Signature: (J)Ljava/util/Iterator;
- */
-JNIEXPORT jobject JNICALL Java_org_apache_mesos_state_ZooKeeperState__1_1names_1get
-  (JNIEnv* env, jobject thiz, jlong jfuture)
-{
-  Future<vector<string> >* future = (Future<vector<string> >*) jfuture;
-
-  future->await();
-
-  if (future->isFailed()) {
-    jclass clazz = env->FindClass("java/util/concurrent/ExecutionException");
-    env->ThrowNew(clazz, future->failure().c_str());
-    return NULL;
-  } else if (future->isDiscarded()) {
-    jclass clazz = env->FindClass("java/util/concurrent/CancellationException");
-    env->ThrowNew(clazz, "Future was discarded");
-    return NULL;
-  }
-
-  CHECK(future->isReady());
-
-  // List names = new ArrayList();
-  jclass clazz = env->FindClass("java/util/ArrayList");
-
-  jmethodID _init_ = env->GetMethodID(clazz, "<init>", "()V");
-  jobject jnames = env->NewObject(clazz, _init_);
-
-  jmethodID add = env->GetMethodID(clazz, "add", "(Ljava/lang/Object;)Z");
-
-  foreach (const string& name, future->get()) {
-    jobject jname = convert<string>(env, name);
-    env->CallBooleanMethod(jnames, add, jname);
-  }
-
-  // Iterator iterator = jnames.iterator();
-  jmethodID iterator =
-    env->GetMethodID(clazz, "iterator", "()Ljava/util/Iterator;");
-  jobject jiterator = env->CallObjectMethod(jnames, iterator);
-
-  return jiterator;
-}
-
-
-/*
- * Class:     org_apache_mesos_state_ZooKeeperState
- * Method:    __names_get_timeout
- * Signature: (JJLjava/util/concurrent/TimeUnit;)Ljava/util/Iterator;
- */
-JNIEXPORT jobject JNICALL Java_org_apache_mesos_state_ZooKeeperState__1_1names_1get_1timeout
-  (JNIEnv* env, jobject thiz, jlong jfuture, jlong jtimeout, jobject junit)
-{
-  Future<vector<string> >* future = (Future<vector<string> >*) jfuture;
-
-  jclass clazz = env->GetObjectClass(junit);
-
-  // long seconds = unit.toSeconds(time);
-  jmethodID toSeconds = env->GetMethodID(clazz, "toSeconds", "(J)J");
-
-  jlong jseconds = env->CallLongMethod(junit, toSeconds, jtimeout);
-
-  Seconds seconds(jseconds);
-
-  if (future->await(seconds)) {
-    if (future->isFailed()) {
-      clazz = env->FindClass("java/util/concurrent/ExecutionException");
-      env->ThrowNew(clazz, future->failure().c_str());
-      return NULL;
-    } else if (future->isDiscarded()) {
-      clazz = env->FindClass("java/util/concurrent/CancellationException");
-      env->ThrowNew(clazz, "Future was discarded");
-      return NULL;
-    }
-
-    CHECK(future->isReady());
-
-    // List names = new ArrayList();
-    clazz = env->FindClass("java/util/ArrayList");
-
-    jmethodID _init_ = env->GetMethodID(clazz, "<init>", "()V");
-    jobject jnames = env->NewObject(clazz, _init_);
-
-    jmethodID add = env->GetMethodID(clazz, "add", "(Ljava/lang/Object;)Z");
-
-    foreach (const string& name, future->get()) {
-      jobject jname = convert<string>(env, name);
-      env->CallBooleanMethod(jnames, add, jname);
-    }
-
-    // Iterator iterator = jnames.iterator();
-    jmethodID iterator =
-      env->GetMethodID(clazz, "iterator", "()Ljava/util/Iterator;");
-    jobject jiterator = env->CallObjectMethod(jnames, iterator);
-
-    return jiterator;
-  }
-
-  clazz = env->FindClass("java/util/concurrent/TimeoutException");
-  env->ThrowNew(clazz, "Failed to wait for future within timeout");
-
-  return NULL;
-}
-
-
-/*
- * Class:     org_apache_mesos_state_ZooKeeperState
- * Method:    __names_finalize
- * Signature: (J)V
- */
-JNIEXPORT void JNICALL Java_org_apache_mesos_state_ZooKeeperState__1_1names_1finalize
-  (JNIEnv* env, jobject thiz, jlong jfuture)
-{
-  Future<vector<string> >* future = (Future<vector<string> >*) jfuture;
-
-  delete future;
-}
-
 } // extern "C" {

http://git-wip-us.apache.org/repos/asf/mesos/blob/7e6da6d5/src/java/src/org/apache/mesos/state/AbstractState.java
----------------------------------------------------------------------
diff --git a/src/java/src/org/apache/mesos/state/AbstractState.java b/src/java/src/org/apache/mesos/state/AbstractState.java
new file mode 100644
index 0000000..774b217
--- /dev/null
+++ b/src/java/src/org/apache/mesos/state/AbstractState.java
@@ -0,0 +1,239 @@
+/**
+ * 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 org.apache.mesos.state;
+
+import java.util.Iterator;
+
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.Future;
+import java.util.concurrent.TimeoutException;
+import java.util.concurrent.TimeUnit;
+
+import org.apache.mesos.MesosNativeLibrary;
+
+/**
+ * Abstract implementation of State that provides operations on
+ * futures to make concrete classes easier to create.
+ */
+public abstract class AbstractState implements State {
+  static {
+    MesosNativeLibrary.load();
+  }
+
+  @Override
+  public Future<Variable> fetch(final String name) {
+    final long future = __fetch(name); // Asynchronously start the operation.
+    return new Future<Variable>() {
+      @Override
+      public boolean cancel(boolean mayInterruptIfRunning) {
+        if (mayInterruptIfRunning) {
+          return __fetch_cancel(future);
+        }
+        return false; // Should not interrupt and already running (or finished).
+      }
+
+      @Override
+      public boolean isCancelled() {
+        return __fetch_is_cancelled(future);
+      }
+
+      @Override
+      public boolean isDone() {
+        return __fetch_is_done(future);
+      }
+
+      @Override
+      public Variable get() throws InterruptedException, ExecutionException {
+        return __fetch_get(future);
+      }
+
+      @Override
+      public Variable get(long timeout, TimeUnit unit)
+        throws InterruptedException, ExecutionException, TimeoutException {
+        return __fetch_get_timeout(future, timeout, unit);
+      }
+
+      @Override
+      protected void finalize() {
+        __fetch_finalize(future);
+      }
+    };
+  }
+
+  @Override
+  public Future<Variable> store(Variable variable) {
+    final long future = __store(variable); // Asynchronously start the operation.
+    return new Future<Variable>() {
+      @Override
+      public boolean cancel(boolean mayInterruptIfRunning) {
+        if (mayInterruptIfRunning) {
+          return __store_cancel(future);
+        }
+        return false; // Should not interrupt and already running (or finished).
+      }
+
+      @Override
+      public boolean isCancelled() {
+        return __store_is_cancelled(future);
+      }
+
+      @Override
+      public boolean isDone() {
+        return __store_is_done(future);
+      }
+
+      @Override
+      public Variable get() throws InterruptedException, ExecutionException {
+        return __store_get(future);
+      }
+
+      @Override
+      public Variable get(long timeout, TimeUnit unit)
+        throws InterruptedException, ExecutionException, TimeoutException {
+        return __store_get_timeout(future, timeout, unit);
+      }
+
+      @Override
+      protected void finalize() {
+        __store_finalize(future);
+      }
+    };
+  }
+
+  @Override
+  public Future<Boolean> expunge(Variable variable) {
+    final long future = __expunge(variable); // Asynchronously start the operation.
+    return new Future<Boolean>() {
+      @Override
+      public boolean cancel(boolean mayInterruptIfRunning) {
+        if (mayInterruptIfRunning) {
+          return __expunge_cancel(future);
+        }
+        return false; // Should not interrupt and already running (or finished).
+      }
+
+      @Override
+      public boolean isCancelled() {
+        return __expunge_is_cancelled(future);
+      }
+
+      @Override
+      public boolean isDone() {
+        return __expunge_is_done(future);
+      }
+
+      @Override
+      public Boolean get() throws InterruptedException, ExecutionException {
+        return __expunge_get(future);
+      }
+
+      @Override
+      public Boolean get(long timeout, TimeUnit unit)
+        throws InterruptedException, ExecutionException, TimeoutException {
+        return __expunge_get_timeout(future, timeout, unit);
+      }
+
+      @Override
+      protected void finalize() {
+        __expunge_finalize(future);
+      }
+    };
+  }
+
+  public Future<Iterator<String>> names() {
+    final long future = __names(); // Asynchronously start the operation.
+    return new Future<Iterator<String>>() {
+      @Override
+      public boolean cancel(boolean mayInterruptIfRunning) {
+        if (mayInterruptIfRunning) {
+          return __names_cancel(future);
+        }
+        return false; // Should not interrupt and already running (or finished).
+      }
+
+      @Override
+      public boolean isCancelled() {
+        return __names_is_cancelled(future);
+      }
+
+      @Override
+      public boolean isDone() {
+        return __names_is_done(future);
+      }
+
+      @Override
+      public Iterator<String> get() throws InterruptedException, ExecutionException {
+        return __names_get(future);
+      }
+
+      @Override
+      public Iterator<String> get(long timeout, TimeUnit unit)
+        throws InterruptedException, ExecutionException, TimeoutException {
+        return __names_get_timeout(future, timeout, unit);
+      }
+
+      @Override
+      protected void finalize() {
+        __names_finalize(future);
+      }
+    };
+  }
+
+  protected native void finalize();
+
+  // Native implementations of 'fetch', 'store', 'expunge', and 'names'.
+  private native long __fetch(String name);
+  private native boolean __fetch_cancel(long future);
+  private native boolean __fetch_is_cancelled(long future);
+  private native boolean __fetch_is_done(long future);
+  private native Variable __fetch_get(long future);
+  private native Variable __fetch_get_timeout(
+      long future, long timeout, TimeUnit unit);
+  private native void __fetch_finalize(long future);
+
+  private native long __store(Variable variable);
+  private native boolean __store_cancel(long future);
+  private native boolean __store_is_cancelled(long future);
+  private native boolean __store_is_done(long future);
+  private native Variable __store_get(long future);
+  private native Variable __store_get_timeout(
+      long future, long timeout, TimeUnit unit);
+  private native void __store_finalize(long future);
+
+  private native long __expunge(Variable variable);
+  private native boolean __expunge_cancel(long future);
+  private native boolean __expunge_is_cancelled(long future);
+  private native boolean __expunge_is_done(long future);
+  private native Boolean __expunge_get(long future);
+  private native Boolean __expunge_get_timeout(
+      long future, long timeout, TimeUnit unit);
+  private native void __expunge_finalize(long future);
+
+  private native long __names();
+  private native boolean __names_cancel(long future);
+  private native boolean __names_is_cancelled(long future);
+  private native boolean __names_is_done(long future);
+  private native Iterator<String> __names_get(long future);
+  private native Iterator<String> __names_get_timeout(
+      long future, long timeout, TimeUnit unit);
+  private native void __names_finalize(long future);
+
+  private long __storage;
+  private long __state;
+}

http://git-wip-us.apache.org/repos/asf/mesos/blob/7e6da6d5/src/java/src/org/apache/mesos/state/ZooKeeperState.java
----------------------------------------------------------------------
diff --git a/src/java/src/org/apache/mesos/state/ZooKeeperState.java b/src/java/src/org/apache/mesos/state/ZooKeeperState.java
index 999d593..f3d939f 100644
--- a/src/java/src/org/apache/mesos/state/ZooKeeperState.java
+++ b/src/java/src/org/apache/mesos/state/ZooKeeperState.java
@@ -18,26 +18,15 @@
 
 package org.apache.mesos.state;
 
-import java.util.Iterator;
-
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.Future;
-import java.util.concurrent.TimeoutException;
 import java.util.concurrent.TimeUnit;
 
-import org.apache.mesos.MesosNativeLibrary;
-
 /**
  * Implementation of State that uses ZooKeeper to store
  * variables/values. Note that this means the values associated with
  * variables can not be more than 1 MB (actually slightly less since
  * we store some bookkeeping information).
  */
-public class ZooKeeperState implements State {
-  static {
-    MesosNativeLibrary.load();
-  }
-
+public class ZooKeeperState extends AbstractState {
   /**
    * Constructs a new instance of ZooKeeperState.
    *
@@ -72,165 +61,6 @@ public class ZooKeeperState implements State {
     initialize(servers, timeout, unit, znode, scheme, credentials);
   }
 
-  @Override
-  public Future<Variable> fetch(final String name) {
-    final long future = __fetch(name); // Asynchronously start the operation.
-    return new Future<Variable>() {
-      @Override
-      public boolean cancel(boolean mayInterruptIfRunning) {
-        if (mayInterruptIfRunning) {
-          return __fetch_cancel(future);
-        }
-        return false; // Should not interrupt and already running (or finished).
-      }
-
-      @Override
-      public boolean isCancelled() {
-        return __fetch_is_cancelled(future);
-      }
-
-      @Override
-      public boolean isDone() {
-        return __fetch_is_done(future);
-      }
-
-      @Override
-      public Variable get() throws InterruptedException, ExecutionException {
-        return __fetch_get(future);
-      }
-
-      @Override
-      public Variable get(long timeout, TimeUnit unit)
-        throws InterruptedException, ExecutionException, TimeoutException {
-        return __fetch_get_timeout(future, timeout, unit);
-      }
-
-      @Override
-      protected void finalize() {
-        __fetch_finalize(future);
-      }
-    };
-  }
-
-  @Override
-  public Future<Variable> store(Variable variable) {
-    final long future = __store(variable); // Asynchronously start the operation.
-    return new Future<Variable>() {
-      @Override
-      public boolean cancel(boolean mayInterruptIfRunning) {
-        if (mayInterruptIfRunning) {
-          return __store_cancel(future);
-        }
-        return false; // Should not interrupt and already running (or finished).
-      }
-
-      @Override
-      public boolean isCancelled() {
-        return __store_is_cancelled(future);
-      }
-
-      @Override
-      public boolean isDone() {
-        return __store_is_done(future);
-      }
-
-      @Override
-      public Variable get() throws InterruptedException, ExecutionException {
-        return __store_get(future);
-      }
-
-      @Override
-      public Variable get(long timeout, TimeUnit unit)
-        throws InterruptedException, ExecutionException, TimeoutException {
-        return __store_get_timeout(future, timeout, unit);
-      }
-
-      @Override
-      protected void finalize() {
-        __store_finalize(future);
-      }
-    };
-  }
-
-  @Override
-  public Future<Boolean> expunge(Variable variable) {
-    final long future = __expunge(variable); // Asynchronously start the operation.
-    return new Future<Boolean>() {
-      @Override
-      public boolean cancel(boolean mayInterruptIfRunning) {
-        if (mayInterruptIfRunning) {
-          return __expunge_cancel(future);
-        }
-        return false; // Should not interrupt and already running (or finished).
-      }
-
-      @Override
-      public boolean isCancelled() {
-        return __expunge_is_cancelled(future);
-      }
-
-      @Override
-      public boolean isDone() {
-        return __expunge_is_done(future);
-      }
-
-      @Override
-      public Boolean get() throws InterruptedException, ExecutionException {
-        return __expunge_get(future);
-      }
-
-      @Override
-      public Boolean get(long timeout, TimeUnit unit)
-        throws InterruptedException, ExecutionException, TimeoutException {
-        return __expunge_get_timeout(future, timeout, unit);
-      }
-
-      @Override
-      protected void finalize() {
-        __expunge_finalize(future);
-      }
-    };
-  }
-
-  public Future<Iterator<String>> names() {
-    final long future = __names(); // Asynchronously start the operation.
-    return new Future<Iterator<String>>() {
-      @Override
-      public boolean cancel(boolean mayInterruptIfRunning) {
-        if (mayInterruptIfRunning) {
-          return __names_cancel(future);
-        }
-        return false; // Should not interrupt and already running (or finished).
-      }
-
-      @Override
-      public boolean isCancelled() {
-        return __names_is_cancelled(future);
-      }
-
-      @Override
-      public boolean isDone() {
-        return __names_is_done(future);
-      }
-
-      @Override
-      public Iterator<String> get() throws InterruptedException, ExecutionException {
-        return __names_get(future);
-      }
-
-      @Override
-      public Iterator<String> get(long timeout, TimeUnit unit)
-        throws InterruptedException, ExecutionException, TimeoutException {
-        return __names_get_timeout(future, timeout, unit);
-      }
-
-      @Override
-      protected void finalize() {
-        __names_finalize(future);
-      }
-    };
-  }
-
   protected native void initialize(String servers,
                                    long timeout,
                                    TimeUnit unit,
@@ -242,46 +72,4 @@ public class ZooKeeperState implements State {
                                    String znode,
                                    String scheme,
                                    byte[] credentials);
-
-  protected native void finalize();
-
-  // Native implementations of 'fetch', 'store', 'expunge', and 'names'.
-  private native long __fetch(String name);
-  private native boolean __fetch_cancel(long future);
-  private native boolean __fetch_is_cancelled(long future);
-  private native boolean __fetch_is_done(long future);
-  private native Variable __fetch_get(long future);
-  private native Variable __fetch_get_timeout(
-      long future, long timeout, TimeUnit unit);
-  private native void __fetch_finalize(long future);
-
-  private native long __store(Variable variable);
-  private native boolean __store_cancel(long future);
-  private native boolean __store_is_cancelled(long future);
-  private native boolean __store_is_done(long future);
-  private native Variable __store_get(long future);
-  private native Variable __store_get_timeout(
-      long future, long timeout, TimeUnit unit);
-  private native void __store_finalize(long future);
-
-  private native long __expunge(Variable variable);
-  private native boolean __expunge_cancel(long future);
-  private native boolean __expunge_is_cancelled(long future);
-  private native boolean __expunge_is_done(long future);
-  private native Boolean __expunge_get(long future);
-  private native Boolean __expunge_get_timeout(
-      long future, long timeout, TimeUnit unit);
-  private native void __expunge_finalize(long future);
-
-  private native long __names();
-  private native boolean __names_cancel(long future);
-  private native boolean __names_is_cancelled(long future);
-  private native boolean __names_is_done(long future);
-  private native Iterator<String> __names_get(long future);
-  private native Iterator<String> __names_get_timeout(
-      long future, long timeout, TimeUnit unit);
-  private native void __names_finalize(long future);
-
-  private long __storage;
-  private long __state;
-};
+}