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/21 17:56:09 UTC
svn commit: r966287 - 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: Wed Jul 21 15:56:08 2010
New Revision: 966287
URL: http://svn.apache.org/viewvc?rev=966287&view=rev
Log:
Add methods run() and invoke() to PerThreadManager
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/PerthreadManager.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=966287&r1=966286&r2=966287&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 Wed Jul 21 15:56:08 2010
@@ -19,6 +19,7 @@ import java.util.Map;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
+import org.apache.tapestry5.ioc.Invokable;
import org.apache.tapestry5.ioc.internal.util.CollectionFactory;
import org.apache.tapestry5.ioc.internal.util.DummyLock;
import org.apache.tapestry5.ioc.internal.util.InternalUtils;
@@ -189,4 +190,29 @@ public class PerthreadManagerImpl implem
return createValue(InternalUtils.nextUUID());
}
+ public void run(Runnable runnable)
+ {
+ assert runnable != null;
+
+ try
+ {
+ runnable.run();
+ }
+ finally
+ {
+ cleanup();
+ }
+ }
+
+ public <T> T invoke(Invokable<T> invokable)
+ {
+ try
+ {
+ return invokable.invoke();
+ }
+ finally
+ {
+ cleanup();
+ }
+ }
}
Modified: tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/services/PerthreadManager.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/services/PerthreadManager.java?rev=966287&r1=966286&r2=966287&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/services/PerthreadManager.java (original)
+++ tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/services/PerthreadManager.java Wed Jul 21 15:56:08 2010
@@ -14,6 +14,8 @@
package org.apache.tapestry5.ioc.services;
+import org.apache.tapestry5.ioc.Invokable;
+
/**
* Manages per-thread data, and provides a way for listeners to know when such data should be cleaned up. Typically,
* data is cleaned up at the end of the request (in a web application). Tapestry IoC has any number of objects that need
@@ -63,4 +65,16 @@ public interface PerthreadManager
* @since 5.2.0
*/
<T> PerThreadValue<T> createValue();
+
+ /**
+ * Invokes {@link Runnable#run()}, providing a try...finally to {@linkplain #cleanup() cleanup} after.
+ *
+ * @since 5.2.0
+ */
+ void run(Runnable runnable);
+
+ /**
+ * Returns the result from the invocation, providing a try...finally to {@linkplain #cleanup() cleanup} after.
+ */
+ <T> T invoke(Invokable<T> invokable);
}
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=966287&r1=966286&r2=966287&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 Wed Jul 21 15:56:08 2010
@@ -14,6 +14,7 @@
package org.apache.tapestry5.ioc.internal.services;
+import org.apache.tapestry5.ioc.Invokable;
import org.apache.tapestry5.ioc.services.PerThreadValue;
import org.apache.tapestry5.ioc.services.ThreadCleanupListener;
import org.apache.tapestry5.ioc.test.IOCTestCase;
@@ -175,4 +176,41 @@ public class PerthreadManagerImplTest ex
assertNull(v.get());
}
+
+ @Test
+ public void run_performs_cleanup()
+ {
+ final PerthreadManagerImpl m = new PerthreadManagerImpl(null);
+
+ m.run(new Runnable()
+ {
+ public void run()
+ {
+ m.put("foo", "bar");
+ }
+ });
+
+ assertNull(m.get("foo"));
+ }
+
+ @Test
+ public void invoke_performs_cleanup()
+ {
+ final PerthreadManagerImpl m = new PerthreadManagerImpl(null);
+
+ String actual = m.invoke(new Invokable<String>()
+ {
+ public String invoke()
+ {
+ m.put("foo", "bar");
+
+ return "baz";
+ }
+ });
+
+ assertEquals(actual, "baz");
+
+ assertNull(m.get("foo"));
+
+ }
}