Remove ThreadLocal nonsense.
Patch by: bobv
Review by: rjrjr
Review at http://gwt-code-reviews.appspot.com/892801
git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@8807 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/user/test/com/google/gwt/requestfactory/client/EditorTest.java b/user/test/com/google/gwt/requestfactory/client/EditorTest.java
index 1e3581d..1631bd8 100644
--- a/user/test/com/google/gwt/requestfactory/client/EditorTest.java
+++ b/user/test/com/google/gwt/requestfactory/client/EditorTest.java
@@ -17,7 +17,7 @@
import com.google.gwt.core.client.GWT;
import com.google.gwt.core.client.Scheduler;
-import com.google.gwt.core.client.Scheduler.ScheduledCommand;
+import com.google.gwt.core.client.Scheduler.RepeatingCommand;
import com.google.gwt.editor.client.Editor;
import com.google.gwt.editor.client.EditorDelegate;
import com.google.gwt.editor.client.EditorError;
@@ -164,15 +164,19 @@
request.fire(new Receiver<SimpleFooProxy>() {
public void onSuccess(SimpleFooProxy response,
Set<SyncResult> syncResults) {
- // EventBus notifications occurr after the onSuccess()
- Scheduler.get().scheduleDeferred(new ScheduledCommand() {
- public void execute() {
- assertEquals("updated", editor.userName.getValue());
- assertEquals("newBar",
- editor.barEditor().userName.getValue());
- finishTestAndReset();
+ // EventBus notifications occur after the onSuccess()
+ Scheduler.get().scheduleFixedDelay(new RepeatingCommand() {
+ public boolean execute() {
+ if ("updated".equals(editor.userName.getValue())) {
+ assertEquals("updated", editor.userName.getValue());
+ assertEquals("newBar",
+ editor.barEditor().userName.getValue());
+ finishTestAndReset();
+ return false;
+ }
+ return true;
}
- });
+ }, 50);
}
});
}
diff --git a/user/test/com/google/gwt/requestfactory/server/SimpleBar.java b/user/test/com/google/gwt/requestfactory/server/SimpleBar.java
index e8edad5..6794388 100644
--- a/user/test/com/google/gwt/requestfactory/server/SimpleBar.java
+++ b/user/test/com/google/gwt/requestfactory/server/SimpleBar.java
@@ -26,26 +26,10 @@
* Domain object for SimpleFooRequest.
*/
public class SimpleBar {
-
/**
- * This is an ugly hack.
+ * DO NOT USE THIS UGLY HACK DIRECTLY! Call {@link #get} instead.
*/
- static ThreadLocal<SimpleBar> singleton = new ThreadLocal<SimpleBar>() {
- @Override
- protected SimpleBar initialValue() {
- SimpleBar value = null;
- HttpServletRequest req = RequestFactoryServlet.getThreadLocalRequest();
- // May be in a JRE test case
- if (req != null) {
- value = (SimpleBar) req.getSession().getAttribute(
- SimpleBar.class.getCanonicalName());
- }
- if (value == null) {
- value = reset();
- }
- return value;
- }
- };
+ private static SimpleBar jreTestSingleton = new SimpleBar();
private static Long nextId = 1L;
@@ -54,7 +38,7 @@
}
public static List<SimpleBar> findAll() {
- return Collections.singletonList(singleton.get());
+ return Collections.singletonList(get());
}
public static SimpleBar findSimpleBar(Long id) {
@@ -62,19 +46,40 @@
}
public static SimpleBar findSimpleBarById(Long id) {
- singleton.get().setId(id);
- return singleton.get();
+ get().setId(id);
+ return get();
+ }
+
+ public static synchronized SimpleBar get() {
+ HttpServletRequest req = RequestFactoryServlet.getThreadLocalRequest();
+ if (req == null) {
+ // May be in a JRE test case, use the the singleton
+ return jreTestSingleton;
+ } else {
+ /*
+ * This will not behave entirely correctly unless we have a servlet filter
+ * that doesn't allow any requests to be processed unless they're
+ * associated with an existing session.
+ */
+ SimpleBar value = (SimpleBar) req.getSession().getAttribute(
+ SimpleBar.class.getCanonicalName());
+ if (value == null) {
+ value = reset();
+ }
+ return value;
+ }
}
public static SimpleBar getSingleton() {
- return singleton.get();
+ return get();
}
- public static SimpleBar reset() {
+ public static synchronized SimpleBar reset() {
SimpleBar instance = new SimpleBar();
- singleton.set(instance);
HttpServletRequest req = RequestFactoryServlet.getThreadLocalRequest();
- if (req != null) {
+ if (req == null) {
+ jreTestSingleton = instance;
+ } else {
req.getSession().setAttribute(SimpleBar.class.getCanonicalName(),
instance);
}
@@ -107,7 +112,7 @@
public void persist() {
setId(nextId++);
- singleton.get().setUserName(userName);
+ get().setUserName(userName);
}
public SimpleBar persistAndReturnSelf() {
diff --git a/user/test/com/google/gwt/requestfactory/server/SimpleFoo.java b/user/test/com/google/gwt/requestfactory/server/SimpleFoo.java
index d06ac09..4b25282 100644
--- a/user/test/com/google/gwt/requestfactory/server/SimpleFoo.java
+++ b/user/test/com/google/gwt/requestfactory/server/SimpleFoo.java
@@ -31,26 +31,10 @@
* Domain object for SimpleFooRequest.
*/
public class SimpleFoo {
-
/**
- * This is an ugly hack.
+ * DO NOT USE THIS UGLY HACK DIRECTLY! Call {@link #get} instead.
*/
- static ThreadLocal<SimpleFoo> singleton = new ThreadLocal<SimpleFoo>() {
- @Override
- protected SimpleFoo initialValue() {
- SimpleFoo value = null;
- HttpServletRequest req = RequestFactoryServlet.getThreadLocalRequest();
- // May be in a JRE test case
- if (req != null) {
- value = (SimpleFoo) req.getSession().getAttribute(
- SimpleFoo.class.getCanonicalName());
- }
- if (value == null) {
- value = reset();
- }
- return value;
- }
- };
+ private static SimpleFoo jreTestSingleton = new SimpleFoo();
private static Long nextId = 1L;
@@ -59,7 +43,7 @@
}
public static List<SimpleFoo> findAll() {
- return Collections.singletonList(singleton.get());
+ return Collections.singletonList(get());
}
public static SimpleFoo findSimpleFoo(Long id) {
@@ -67,19 +51,40 @@
}
public static SimpleFoo findSimpleFooById(Long id) {
- singleton.get().setId(id);
- return singleton.get();
+ get().setId(id);
+ return get();
+ }
+
+ public static synchronized SimpleFoo get() {
+ HttpServletRequest req = RequestFactoryServlet.getThreadLocalRequest();
+ if (req == null) {
+ // May be in a JRE test case, use the singleton
+ return jreTestSingleton;
+ } else {
+ /*
+ * This will not behave entirely correctly unless we have a servlet filter
+ * that doesn't allow any requests to be processed unless they're
+ * associated with an existing session.
+ */
+ SimpleFoo value = (SimpleFoo) req.getSession().getAttribute(
+ SimpleFoo.class.getCanonicalName());
+ if (value == null) {
+ value = reset();
+ }
+ return value;
+ }
}
public static SimpleFoo getSingleton() {
- return singleton.get();
+ return get();
}
- public static SimpleFoo reset() {
+ public static synchronized SimpleFoo reset() {
SimpleFoo instance = new SimpleFoo();
- singleton.set(instance);
HttpServletRequest req = RequestFactoryServlet.getThreadLocalRequest();
- if (req != null) {
+ if (req == null) {
+ jreTestSingleton = instance;
+ } else {
req.getSession().setAttribute(SimpleFoo.class.getCanonicalName(),
instance);
}
@@ -141,7 +146,7 @@
}
public Long countSimpleFooWithUserNameSideEffect() {
- singleton.get().setUserName(userName);
+ get().setUserName(userName);
return 1L;
}