You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tapestry.apache.org by hl...@apache.org on 2010/07/11 21:06:02 UTC
svn commit: r963128 - in /tapestry/tapestry5/trunk/tapestry-ioc/src:
main/java/org/apache/tapestry5/ioc/internal/services/
main/java/org/apache/tapestry5/ioc/services/
test/java/org/apache/tapestry5/ioc/internal/services/
Author: hlship
Date: Sun Jul 11 19:06:02 2010
New Revision: 963128
URL: http://svn.apache.org/viewvc?rev=963128&view=rev
Log:
TAP5-1197: Add an exists() method to PerThreadValue
Modified:
tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/services/PerthreadManagerImpl.java
tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/services/PerThreadValue.java
tapestry/tapestry5/trunk/tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/services/PerthreadManagerImplTest.java
Modified: tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/services/PerthreadManagerImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/services/PerthreadManagerImpl.java?rev=963128&r1=963127&r2=963128&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/services/PerthreadManagerImpl.java (original)
+++ tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/services/PerthreadManagerImpl.java Sun Jul 11 19:06:02 2010
@@ -121,7 +121,7 @@ public class PerthreadManagerImpl implem
lock.lock();
// Discard the per-thread map of values.
-
+
holder.remove();
}
finally
@@ -141,6 +141,8 @@ public class PerthreadManagerImpl implem
return getPerthreadMap().get(key);
}
+ private static Object NULL_VALUE = new Object();
+
public <T> PerThreadValue<T> createValue(final Object key)
{
return new PerThreadValue<T>()
@@ -148,12 +150,24 @@ public class PerthreadManagerImpl implem
@SuppressWarnings("unchecked")
public T get()
{
- return (T) PerthreadManagerImpl.this.get(key);
+ Object storedValue = PerthreadManagerImpl.this.get(key);
+
+ if (storedValue == NULL_VALUE)
+ return null;
+
+ return (T) storedValue;
+ }
+
+ public T set(T newValue)
+ {
+ put(key, newValue == null ? NULL_VALUE : newValue);
+
+ return newValue;
}
- public void set(T newValue)
+ public boolean exists()
{
- put(key, newValue);
+ return getPerthreadMap().containsKey(key);
}
};
}
Modified: tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/services/PerThreadValue.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/services/PerThreadValue.java?rev=963128&r1=963127&r2=963128&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/services/PerThreadValue.java (original)
+++ tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/services/PerThreadValue.java Sun Jul 11 19:06:02 2010
@@ -21,9 +21,12 @@ package org.apache.tapestry5.ioc.service
*/
public interface PerThreadValue<T>
{
+ /** Is a value stored (even null)? */
+ boolean exists();
+
/** Reads the current per-thread value, or returns null if no value has been stored. */
T get();
- /** Sets the current per-thread value. */
- void set(T newValue);
+ /** Sets the current per-thread value, then returns that value. */
+ T set(T newValue);
}
Modified: tapestry/tapestry5/trunk/tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/services/PerthreadManagerImplTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/services/PerthreadManagerImplTest.java?rev=963128&r1=963127&r2=963128&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/services/PerthreadManagerImplTest.java (original)
+++ tapestry/tapestry5/trunk/tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/services/PerthreadManagerImplTest.java Sun Jul 11 19:06:02 2010
@@ -129,12 +129,28 @@ public class PerthreadManagerImplTest ex
PerThreadValue<Object> v = m.createValue(key);
+ assertFalse(v.exists());
assertNull(m.get(key));
assertNull(v.get());
v.set(value);
+ assertTrue(v.exists());
assertSame(m.get(key), value);
assertSame(v.get(), value);
}
+
+ @Test
+ public void per_thread_null()
+ {
+ PerthreadManagerImpl m = new PerthreadManagerImpl(null);
+
+ PerThreadValue<Object> v = m.createValue(new Object());
+
+ v.set(null);
+
+ assertTrue(v.exists());
+
+ assertNull(v.get());
+ }
}