You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by ni...@apache.org on 2009/04/03 16:31:25 UTC
svn commit: r761693 - in
/commons/sandbox/monitoring/branches/modules/core/src:
main/java/org/apache/commons/monitoring/repositories/HOMTRepositoryDecorator.java
test/java/org/apache/commons/monitoring/repositories/HistoryOfMyThreadTest.java
Author: nicolas
Date: Fri Apr 3 14:31:25 2009
New Revision: 761693
URL: http://svn.apache.org/viewvc?rev=761693&view=rev
Log:
fix ThreadLocal cleanup thanks to Julien
Modified:
commons/sandbox/monitoring/branches/modules/core/src/main/java/org/apache/commons/monitoring/repositories/HOMTRepositoryDecorator.java
commons/sandbox/monitoring/branches/modules/core/src/test/java/org/apache/commons/monitoring/repositories/HistoryOfMyThreadTest.java
Modified: commons/sandbox/monitoring/branches/modules/core/src/main/java/org/apache/commons/monitoring/repositories/HOMTRepositoryDecorator.java
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/branches/modules/core/src/main/java/org/apache/commons/monitoring/repositories/HOMTRepositoryDecorator.java?rev=761693&r1=761692&r2=761693&view=diff
==============================================================================
--- commons/sandbox/monitoring/branches/modules/core/src/main/java/org/apache/commons/monitoring/repositories/HOMTRepositoryDecorator.java (original)
+++ commons/sandbox/monitoring/branches/modules/core/src/main/java/org/apache/commons/monitoring/repositories/HOMTRepositoryDecorator.java Fri Apr 3 14:31:25 2009
@@ -32,12 +32,19 @@
*/
public class HOMTRepositoryDecorator
extends RepositoryDecorator
- implements Repository
+ implements Repository, HistoryOfMyThread.Listener
{
private ThreadLocal<HistoryOfMyThread> history = new ThreadLocal<HistoryOfMyThread>();
private Collection<HistoryOfMyThread.Listener> listeners = new CopyOnWriteArrayList<HistoryOfMyThread.Listener>();
+ public HOMTRepositoryDecorator()
+ {
+ super();
+ // Act myself as a listener to force cleanup of the ThreadLocal
+ addListener( this );
+ }
+
public void addListener( HistoryOfMyThread.Listener listener )
{
listeners.add( listener );
@@ -71,4 +78,9 @@
}
return myThread;
}
+
+ public void onHistoryEnd( HistoryOfMyThread myThread, long elapsedTime )
+ {
+ history.remove();
+ }
}
Modified: commons/sandbox/monitoring/branches/modules/core/src/test/java/org/apache/commons/monitoring/repositories/HistoryOfMyThreadTest.java
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/branches/modules/core/src/test/java/org/apache/commons/monitoring/repositories/HistoryOfMyThreadTest.java?rev=761693&r1=761692&r2=761693&view=diff
==============================================================================
--- commons/sandbox/monitoring/branches/modules/core/src/test/java/org/apache/commons/monitoring/repositories/HistoryOfMyThreadTest.java (original)
+++ commons/sandbox/monitoring/branches/modules/core/src/test/java/org/apache/commons/monitoring/repositories/HistoryOfMyThreadTest.java Fri Apr 3 14:31:25 2009
@@ -4,6 +4,7 @@
import junit.framework.TestCase;
+import org.apache.commons.monitoring.Repository;
import org.apache.commons.monitoring.StopWatch;
import org.apache.commons.monitoring.stopwatches.HistoryOfMyThread;
@@ -40,6 +41,29 @@
assertEquals( s3, history.get( 2 ) );
}
+ public void testThreadLocalCleanUp()
+ throws Exception
+ {
+ HOMTRepositoryDecorator repository = new HOMTRepositoryDecorator();
+ repository.decorate( new DefaultRepository() );
+ repository.addListener( this );
+
+ run( repository );
+ run( repository );
+ run( repository );
+ }
+
+ private void run( Repository repository )
+ {
+ StopWatch s1 = repository.start( repository.getMonitor( "test0" ) );
+ s1.stop();
+
+ assertNotNull( historyOfMyThread );
+ List<StopWatch> history = historyOfMyThread.history();
+ assertEquals( 1, history.size() );
+ assertEquals( s1, history.get( 0 ) );
+ }
+
/**
* {@inheritDoc}
*