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/01/28 14:50:53 UTC
svn commit: r738486 - in /commons/sandbox/monitoring/branches/modules:
core/src/main/java/org/apache/commons/monitoring/repositories/ reporting/
reporting/src/main/java/org/apache/commons/monitoring/reporting/
reporting/src/test/java/org/apache/commons...
Author: nicolas
Date: Wed Jan 28 13:50:53 2009
New Revision: 738486
URL: http://svn.apache.org/viewvc?rev=738486&view=rev
Log:
Use java.util.concurrent for PeriodicLogger (was java.util.Timer)
Added:
commons/sandbox/monitoring/branches/modules/reporting/src/test/java/org/apache/commons/monitoring/reporting/AbstractPeriodicLoggerTest.java
Removed:
commons/sandbox/monitoring/branches/modules/src/assembly/
Modified:
commons/sandbox/monitoring/branches/modules/core/src/main/java/org/apache/commons/monitoring/repositories/ObservableRepository.java
commons/sandbox/monitoring/branches/modules/reporting/pom.xml
commons/sandbox/monitoring/branches/modules/reporting/src/main/java/org/apache/commons/monitoring/reporting/AbstractPeriodicLogger.java
Modified: commons/sandbox/monitoring/branches/modules/core/src/main/java/org/apache/commons/monitoring/repositories/ObservableRepository.java
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/branches/modules/core/src/main/java/org/apache/commons/monitoring/repositories/ObservableRepository.java?rev=738486&r1=738485&r2=738486&view=diff
==============================================================================
--- commons/sandbox/monitoring/branches/modules/core/src/main/java/org/apache/commons/monitoring/repositories/ObservableRepository.java (original)
+++ commons/sandbox/monitoring/branches/modules/core/src/main/java/org/apache/commons/monitoring/repositories/ObservableRepository.java Wed Jan 28 13:50:53 2009
@@ -21,6 +21,7 @@
import java.util.concurrent.CopyOnWriteArrayList;
import org.apache.commons.monitoring.Monitor;
+import org.apache.commons.monitoring.Repository;
/**
* Implements <tt>Observale</tt> pattern on the repository
@@ -31,6 +32,7 @@
*/
public abstract class ObservableRepository
extends AbstractRepository
+ implements Repository.Observable
{
protected List<Listener> listeners;
Modified: commons/sandbox/monitoring/branches/modules/reporting/pom.xml
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/branches/modules/reporting/pom.xml?rev=738486&r1=738485&r2=738486&view=diff
==============================================================================
--- commons/sandbox/monitoring/branches/modules/reporting/pom.xml (original)
+++ commons/sandbox/monitoring/branches/modules/reporting/pom.xml Wed Jan 28 13:50:53 2009
@@ -12,5 +12,11 @@
<artifactId>commons-monitoring</artifactId>
<version>${project.version}</version>
</dependency>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>4.5</version>
+ <scope>test</scope>
+ </dependency>
</dependencies>
</project>
\ No newline at end of file
Modified: commons/sandbox/monitoring/branches/modules/reporting/src/main/java/org/apache/commons/monitoring/reporting/AbstractPeriodicLogger.java
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/branches/modules/reporting/src/main/java/org/apache/commons/monitoring/reporting/AbstractPeriodicLogger.java?rev=738486&r1=738485&r2=738486&view=diff
==============================================================================
--- commons/sandbox/monitoring/branches/modules/reporting/src/main/java/org/apache/commons/monitoring/reporting/AbstractPeriodicLogger.java (original)
+++ commons/sandbox/monitoring/branches/modules/reporting/src/main/java/org/apache/commons/monitoring/reporting/AbstractPeriodicLogger.java Wed Jan 28 13:50:53 2009
@@ -17,8 +17,9 @@
package org.apache.commons.monitoring.reporting;
-import java.util.Timer;
-import java.util.TimerTask;
+import java.util.concurrent.Executors;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.TimeUnit;
import org.apache.commons.monitoring.Repository;
import org.apache.commons.monitoring.repositories.ObserverRepository;
@@ -29,10 +30,9 @@
* @author <a href="mailto:nicolas@apache.org">Nicolas De Loof</a>
*/
public abstract class AbstractPeriodicLogger
- extends TimerTask
{
/** The timer that handles the period */
- private Timer timer;
+ private ScheduledExecutorService scheduler;
/** The observed repository */
private Repository.Observable repository;
@@ -50,14 +50,21 @@
public AbstractPeriodicLogger( int period, Repository.Observable repository )
{
this.repository = repository;
- this.timer = new Timer();
this.period = period;
+ this.scheduler = Executors.newSingleThreadScheduledExecutor();
}
public void init()
{
observeRepositoryForPeriod();
- timer.scheduleAtFixedRate( this, period, period );
+ scheduler.scheduleAtFixedRate( new Runnable()
+ {
+ public void run()
+ {
+ Repository observed = observeRepositoryForPeriod();
+ log( observed );
+ }
+ }, period, period, TimeUnit.MILLISECONDS );
}
private Repository observeRepositoryForPeriod()
@@ -73,26 +80,14 @@
public void stop()
{
- timer.cancel();
- }
-
- /**
- * {@inheritDoc}
- *
- * @see java.util.TimerTask#run()
- */
- @Override
- public void run()
- {
+ scheduler.shutdown();
try
{
- Repository observedPeriod = observeRepositoryForPeriod();
- log( observedPeriod );
+ scheduler.awaitTermination( 100, TimeUnit.MILLISECONDS );
}
- catch ( Throwable t )
+ catch ( InterruptedException e )
{
- // catch any exception, as throwing it will stop the timer
- handleError( t );
+ // Can be ignored, we are stopping anyway;
}
}
@@ -102,25 +97,4 @@
* @param observeRepositoryForPeriod
*/
protected abstract void log( Repository repositoryForPeriod );
-
- /**
- * Warn when logging the repository failed.
- * <p>
- * This method is expected to be override by user to avoid System.err outputs and use the application logging
- * strategy.
- *
- * @param t error during logging
- */
- protected void handleError( Throwable t )
- {
- System.err.println( "Failure to log observed repository : " + t.getMessage() );
- }
-
- /**
- * @return the SecondaryRepository active for the current period.
- */
- protected Repository getRepositoryForActivePeriod()
- {
- return this.secondary;
- }
}
Added: commons/sandbox/monitoring/branches/modules/reporting/src/test/java/org/apache/commons/monitoring/reporting/AbstractPeriodicLoggerTest.java
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/branches/modules/reporting/src/test/java/org/apache/commons/monitoring/reporting/AbstractPeriodicLoggerTest.java?rev=738486&view=auto
==============================================================================
--- commons/sandbox/monitoring/branches/modules/reporting/src/test/java/org/apache/commons/monitoring/reporting/AbstractPeriodicLoggerTest.java (added)
+++ commons/sandbox/monitoring/branches/modules/reporting/src/test/java/org/apache/commons/monitoring/reporting/AbstractPeriodicLoggerTest.java Wed Jan 28 13:50:53 2009
@@ -0,0 +1,48 @@
+/*
+ * 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.commons.monitoring.reporting;
+
+import static org.junit.Assert.assertTrue;
+
+import org.apache.commons.monitoring.Repository;
+import org.apache.commons.monitoring.repositories.DefaultRepository;
+import org.junit.Test;
+
+/**
+ * @author <a href="mailto:nicolas@apache.org">Nicolas De Loof</a>
+ */
+public class AbstractPeriodicLoggerTest
+{
+ private int count = 0;
+
+ @Test
+ public void schedule()
+ throws Exception
+ {
+ AbstractPeriodicLogger logger = new AbstractPeriodicLogger( 10, new DefaultRepository() ) {
+ protected void log( Repository repositoryForPeriod )
+ {
+ count++;
+ }
+ };
+ logger.init();
+ Thread.sleep( 110 );
+ logger.stop();
+ assertTrue( count >= 10 );
+ }
+}