[prev in list] [next in list] [prev in thread] [next in thread] 

List:       jakarta-commons-dev
Subject:    svn commit: r616742 - in /commons/sandbox/monitoring/trunk: ./ lib/
From:       nicolas () apache ! org
Date:       2008-01-30 12:46:11
Message-ID: 20080130124622.1412D1A9832 () eris ! apache ! org
[Download RAW message or body]

Author: nicolas
Date: Wed Jan 30 04:46:05 2008
New Revision: 616742

URL: http://svn.apache.org/viewvc?rev=616742&view=rev
Log:
- Monitor implementation refactored as a class hierarchy
- Composite gauge/counter with less synchronization requirements
- Implementation classes renamed to expose features
- thread-safety test

Added:
    commons/sandbox/monitoring/trunk/lib/
    commons/sandbox/monitoring/trunk/lib/retrotranslator-runtime-1.2.4.jar   (with \
props)  commons/sandbox/monitoring/trunk/lib/retrotranslator-transformer-1.2.4.jar   \
(with props)  commons/sandbox/monitoring/trunk/src/assembly/
    commons/sandbox/monitoring/trunk/src/assembly/backport.xml   (with props)
    commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/AbstractMonitor.java \
(with props)  commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/AbstractStatValue.java
                
      - copied, changed from r616258, \
commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/SimpleValue.java
  commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/CompositeValuesMonitor.java \
(with props)  commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/CreateValuesOnDemandMonitor.java
                
      - copied, changed from r616258, \
commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/SimpleMonitor.java
  commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/DefaultRepository.java
                
      - copied, changed from r616258, \
commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/RepositoryBase.java
  commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/ThreadSafeCounter.java
                
      - copied, changed from r616258, \
commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/SimpleCounter.java
  commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/ThreadSafeGauge.java
                
      - copied, changed from r616258, \
commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/SimpleGauge.java
  commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/support/
  commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/support/java13/
  commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/support/java13/README
  commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/support/java13/java/
  commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/support/java13/java/lang/
  commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/support/java13/java/lang/_Boolean.java \
(with props)  commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/support/java13/java/lang/_Byte.java \
(with props)  commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/support/java13/java/lang/_Double.java \
(with props)  commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/support/java13/java/lang/_Float.java \
(with props)  commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/support/java13/java/lang/_Integer.java \
(with props)  commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/support/java13/java/lang/_Long.java \
(with props)  commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/support/java13/java/lang/_Short.java \
(with props)  commons/sandbox/monitoring/trunk/src/site/xdoc/tutorial.xml   (with \
props) Removed:
    commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/RepositoryBase.java
  commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/SimpleCounter.java
  commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/SimpleGauge.java
  commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/SimpleMonitor.java
  commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/SimpleValue.java
 Modified:
    commons/sandbox/monitoring/trunk/pom.xml
    commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/Composite.java
  commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/Monitor.java
  commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/Monitoring.java
  commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/Repository.java
  commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/CompositeCounter.java
  commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/CompositeGauge.java
  commons/sandbox/monitoring/trunk/src/site/xdoc/index.xml
    commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/MonitoringTest.java
  commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/impl/SimpleCounterTest.java
  commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/impl/SimpleGaugeTest.java
  commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/reporting/RendererTest.java


Added: commons/sandbox/monitoring/trunk/lib/retrotranslator-runtime-1.2.4.jar
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/lib/retrotranslator-runtime-1.2.4.jar?rev=616742&view=auto
 ==============================================================================
Binary file - no diff available.

Propchange: commons/sandbox/monitoring/trunk/lib/retrotranslator-runtime-1.2.4.jar
------------------------------------------------------------------------------
    svn:mime-type = application/java-archive

Added: commons/sandbox/monitoring/trunk/lib/retrotranslator-transformer-1.2.4.jar
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/lib/retrotranslator-transformer-1.2.4.jar?rev=616742&view=auto
 ==============================================================================
Binary file - no diff available.

Propchange: commons/sandbox/monitoring/trunk/lib/retrotranslator-transformer-1.2.4.jar
                
------------------------------------------------------------------------------
    svn:mime-type = application/java-archive

Modified: commons/sandbox/monitoring/trunk/pom.xml
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/pom.xml?rev=616742&r1=616741&r2=616742&view=diff
 ==============================================================================
--- commons/sandbox/monitoring/trunk/pom.xml (original)
+++ commons/sandbox/monitoring/trunk/pom.xml Wed Jan 30 04:46:05 2008
@@ -1,23 +1,22 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
- 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.
+  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.
 -->
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
+<project xmlns="http://maven.apache.org/POM/4.0.0" \
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" +  \
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0  \
http://maven.apache.org/maven-v4_0_0.xsd">  
   <modelVersion>4.0.0</modelVersion>
@@ -29,7 +28,7 @@
 
   <artifactId>commons-monitoring</artifactId>
   <version>1.0-SNAPSHOT</version>
-  <packaging>bundle</packaging>
+  <packaging>jar</packaging>
   <name>Commons Monitoring (Sandbox)</name>
   <url>http://commons.apache.org/sandbox/monitoring/</url>
   <inceptionYear>2008</inceptionYear>
@@ -43,16 +42,16 @@
     </dependency>
 
     <dependency>
-        <groupId>commons-io</groupId>
-        <artifactId>commons-io</artifactId>
-        <version>1.4</version>
-        <scope>test</scope>
+      <groupId>commons-io</groupId>
+      <artifactId>commons-io</artifactId>
+      <version>1.4</version>
+      <scope>test</scope>
     </dependency>
     <dependency>
-        <groupId>commons-lang</groupId>
-        <artifactId>commons-lang</artifactId>
-        <version>2.3</version>
-        <scope>test</scope>
+      <groupId>commons-lang</groupId>
+      <artifactId>commons-lang</artifactId>
+      <version>2.3</version>
+      <scope>test</scope>
     </dependency>
   </dependencies>
 
@@ -74,6 +73,7 @@
 
   <build>
     <plugins>
+      <!-- TODO : investigate OSGi support
       <plugin>
         <groupId>org.apache.felix</groupId>
         <artifactId>maven-bundle-plugin</artifactId>
@@ -86,6 +86,98 @@
             <Export-Package>org.apache.commons.monitoring;version=${project.version}</Export-Package>
  </instructions>
         </configuration>
+      </plugin>
+      -->
+      <plugin>
+        <artifactId>maven-jar-plugin</artifactId>
+        <version>2.2</version>
+        <configuration>
+          <excludes>
+            <!-- exclude classes required by backport version -->
+            <exclude>org/apache/commons/monitoring/support/java13/**</exclude>
+          </excludes>
+        </configuration>
+      </plugin>
+
+      <plugin>
+        <artifactId>maven-antrun-plugin</artifactId>
+        <version>1.1</version>
+        <executions>
+          <execution>
+            <id>backport</id>
+            <phase>package</phase>
+            <goals>
+              <goal>run</goal>
+            </goals>
+            <configuration>
+              <tasks>
+                <mkdir dir="${basedir}/target/backport" />
+                <java classname="net.sf.retrotranslator.transformer.Retrotranslator" \
failonerror="true"> +                  <classpath>
+                    <path refid="maven.plugin.classpath" />
+                    <path refid="maven.compile.classpath" />
+                  </classpath>
+                  <arg value="-smart" />
+                  <arg value="-srcdir" />
+                  <arg value="${basedir}/target/classes" />
+                  <arg value="-destdir" />
+                  <arg value="${basedir}/target/backport" />
+                  <arg value="-target" />
+                  <arg value="1.3" />
+                  <arg value="-backport" />
+                  <arg
+                    \
value="java.util.concurrent:edu.emory.mathcs.backport.java.util.concurrent; +  \
java.lang.System.nanoTime:edu.emory.mathcs.backport.java.util.concurrent.helpers.Utils.nanoTime;
 +  java.lang.StringBuilder:java.lang.StringBuffer;
+  org.apache.commons.monitoring.support.java13;" />
+                </java>
+              </tasks>
+            </configuration>
+          </execution>
+        </executions>
+        <dependencies>
+          <dependency>
+            <groupId>net.sf.retrotranslator</groupId>
+            <artifactId>retrotranslator-transformer</artifactId>
+            <version>1.2.4</version>
+            <scope>system</scope> <!-- not deployed on central yet -->
+            <systemPath>
+                  ${basedir}/lib/retrotranslator-transformer-1.2.4.jar
+                </systemPath>
+          </dependency>
+          <dependency>
+            <groupId>net.sf.retrotranslator</groupId>
+            <artifactId>retrotranslator-runtime</artifactId>
+            <version>1.2.4</version>
+            <scope>system</scope>
+            <systemPath>
+                  ${basedir}/lib/retrotranslator-runtime-1.2.4.jar
+                </systemPath>
+          </dependency>
+          <dependency>
+            <groupId>backport-util-concurrent</groupId>
+            <artifactId>backport-util-concurrent</artifactId>
+            <version>3.1</version>
+          </dependency>
+        </dependencies>
+      </plugin>
+      <plugin>
+        <artifactId>maven-assembly-plugin</artifactId>
+        <version>2.2-beta-1</version>
+        <executions>
+          <execution>
+            <id>backport</id>
+            <phase>package</phase>
+            <goals>
+              <goal>attached</goal>
+            </goals>
+            <configuration>
+              <descriptors>
+                <descriptor>src/assembly/backport.xml</descriptor>
+              </descriptors>
+            </configuration>
+          </execution>
+        </executions>
       </plugin>
     </plugins>
   </build>

Added: commons/sandbox/monitoring/trunk/src/assembly/backport.xml
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/assembly/backport.xml?rev=616742&view=auto
 ==============================================================================
--- commons/sandbox/monitoring/trunk/src/assembly/backport.xml (added)
+++ commons/sandbox/monitoring/trunk/src/assembly/backport.xml Wed Jan 30 04:46:05 \
2008 @@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  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.
+-->
+
+<assembly xmlns="http://maven.apache.org/POM/4.0.0"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
+                        http://maven.apache.org/xsd/assembly-1.0.0.xsd">
+
+    <id>backport</id>
+    <formats>
+        <format>jar</format>
+    </formats>
+    <includeBaseDirectory>false</includeBaseDirectory>
+    <fileSets>
+        <fileSet>
+            <directory>target/backport</directory>
+            <outputDirectory></outputDirectory>
+            <includes>
+                <include>**/*</include>
+            </includes>
+        </fileSet>
+        <fileSet>
+            <directory>src/main/resources</directory>
+            <outputDirectory></outputDirectory>
+        </fileSet>
+    </fileSets>
+
+</assembly>
\ No newline at end of file

Propchange: commons/sandbox/monitoring/trunk/src/assembly/backport.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: commons/sandbox/monitoring/trunk/src/assembly/backport.xml
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: commons/sandbox/monitoring/trunk/src/assembly/backport.xml
------------------------------------------------------------------------------
    svn:mime-type = text/xml

Modified: commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/Composite.java
                
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/Composite.java?rev=616742&r1=616741&r2=616742&view=diff
 ==============================================================================
--- commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/Composite.java \
                (original)
+++ commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/Composite.java \
Wed Jan 30 04:46:05 2008 @@ -28,11 +28,6 @@
 public interface Composite<T>
 {
     /**
-     * @return the primary instance
-     */
-    T getPrimary();
-
-    /**
      * @return an (unmodifiable) collection of secondary instances
      */
     Collection<T> getSecondary();

Modified: commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/Monitor.java
                
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/Monitor.java?rev=616742&r1=616741&r2=616742&view=diff
 ==============================================================================
--- commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/Monitor.java \
                (original)
+++ commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/Monitor.java \
Wed Jan 30 04:46:05 2008 @@ -61,18 +61,24 @@
     Key getKey();
 
     /**
+     * Get a Counter
+     *
      * @param role a unique identifier for a Counter in the monitor
      * @return the Counter
      */
     Counter getCounter( String role );
 
     /**
+     * Get a Gauge
+     *
      * @param role a unique identifier for a Gauge in the monitor
      * @return the Gauge
      */
     Gauge getGauge( String role );
 
     /**
+     * Retrieve a StatValue.
+     *
      * @param role a unique identifier for a StatValue in the monitor
      * @return the StatValue
      */
@@ -82,18 +88,6 @@
      * Reset all StatValues (don't remove them)
      */
     void reset();
-
-    /**
-     * Register a StatValue to the monitor with the specified role. If the
-     * monitor already had a StatValue for the specified role, the registration
-     * is rejected and the method returns <code>false</code>
-     *
-     * @param value the StatValue
-     * @param role the StatValue role in the monitor.
-     * @return <code>false</code> if there is already a StatValue for this
-     * role in the monitor.
-     */
-    boolean setValue( StatValue value, String role );
 
     /**
      * Identifier class for Monitors

Modified: commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/Monitoring.java
                
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/main/java/org/a \
pache/commons/monitoring/Monitoring.java?rev=616742&r1=616741&r2=616742&view=diff \
                ==============================================================================
                
--- commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/Monitoring.java \
                (original)
+++ commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/Monitoring.java \
Wed Jan 30 04:46:05 2008 @@ -17,7 +17,7 @@
 
 package org.apache.commons.monitoring;
 
-import org.apache.commons.monitoring.impl.RepositoryBase;
+import org.apache.commons.monitoring.impl.DefaultRepository;
 
 /**
  * Utility class for simpified application instrumentation
@@ -31,7 +31,7 @@
         super();
     }
 
-    private static Repository repository = new RepositoryBase();
+    private static Repository repository = new DefaultRepository();
 
     public static Monitor getMonitor( String name, String category, String subsystem \
)  {

Modified: commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/Repository.java
                
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/main/java/org/a \
pache/commons/monitoring/Repository.java?rev=616742&r1=616741&r2=616742&view=diff \
                ==============================================================================
                
--- commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/Repository.java \
                (original)
+++ commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/Repository.java \
Wed Jan 30 04:46:05 2008 @@ -65,4 +65,32 @@
      */
     void reset();
 
+    /**
+     * @param listener listener to get registered
+     */
+    void addListener( Listener listener );
+
+    /**
+     *
+     * @param listener listener to get deregistered
+     */
+    void removeListener( Listener listener );
+
+    /**
+     * Listener interface to get notified on repository events
+     *
+     * @author <a href="mailto:nicolas@apache.org">Nicolas De Loof</a>
+     */
+    static interface Listener
+    {
+        /**
+         * A monitor has just been created. Can be used to add custom StatValues or
+         * to register StatValue.Listener for all monitors that declare the same \
category or +         * subsystem.
+         *
+         * @param monitor
+         */
+        void newMonitorInstance( Monitor monitor );
+    }
+
 }

Added: commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/AbstractMonitor.java
                
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/AbstractMonitor.java?rev=616742&view=auto
 ==============================================================================
--- commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/AbstractMonitor.java \
                (added)
+++ commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/AbstractMonitor.java \
Wed Jan 30 04:46:05 2008 @@ -0,0 +1,101 @@
+/*
+ * 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.impl;
+
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+
+import org.apache.commons.monitoring.Monitor;
+import org.apache.commons.monitoring.StatValue;
+
+/**
+ * Abstract {@link Monitor} implementation with implementation fo base methods
+ *
+ * @author <a href="mailto:nicolas@apache.org">Nicolas De Loof</a>
+ */
+public abstract class AbstractMonitor implements Monitor
+{
+
+    protected final ConcurrentMap<String, StatValue> values;
+    protected final Key key;
+
+    /**
+     * Constructor
+     * @param name monitor name
+     * @param category monitor (technical) category
+     * @param subsystem monitor (functional) subsystem
+     */
+    public AbstractMonitor( String name, String category, String subsystem )
+    {
+        this( new Key( name, category, subsystem ) );
+    }
+
+    /**
+     * Constructor
+     * @param key the monitor identifier
+     */
+    public AbstractMonitor( Key key )
+    {
+        super();
+        this.key = key;
+        this.values = new ConcurrentHashMap<String, StatValue>();
+    }
+
+
+    /**
+     * {@inheritDoc}
+     */
+    public Key getKey()
+    {
+        return key;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public StatValue getValue( String role )
+    {
+        return values.get( role );
+    }
+
+    /**
+     * Register the StatValue for the role, if none was registered before
+     * @param value
+     * @param role
+     * @return the value registered, or a previously existing one
+     */
+    public <T extends StatValue> T register( T value, String role )
+    {
+        value.setMonitor( this );
+        value.setRole( role );
+        T previous = (T) values.putIfAbsent( role, value );
+        return previous != null ? previous : value;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public void reset()
+    {
+        for ( StatValue value : values.values() )
+        {
+            value.reset();
+        }
+    }
+
+}
\ No newline at end of file

Propchange: commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/AbstractMonitor.java
                
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/AbstractMonitor.java
                
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/AbstractMonitor.java
                
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Copied: commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/AbstractStatValue.java \
(from r616258, commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/SimpleValue.java)
                
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/main/java/org/a \
pache/commons/monitoring/impl/AbstractStatValue.java?p2=commons/sandbox/monitoring/tru \
nk/src/main/java/org/apache/commons/monitoring/impl/AbstractStatValue.java&p1=commons/ \
sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/SimpleValue.java&r1=616258&r2=616742&rev=616742&view=diff
 ==============================================================================
--- commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/SimpleValue.java \
                (original)
+++ commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/AbstractStatValue.java \
Wed Jan 30 04:46:05 2008 @@ -29,7 +29,7 @@
  *
  * @author <a href="mailto:nicolas@apache.org">Nicolas De Loof</a>
  */
-public abstract class SimpleValue
+public abstract class AbstractStatValue
        implements StatValue
 {
     private Monitor monitor;

Modified: commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/CompositeCounter.java
                
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/main/java/org/a \
pache/commons/monitoring/impl/CompositeCounter.java?rev=616742&r1=616741&r2=616742&view=diff
 ==============================================================================
--- commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/CompositeCounter.java \
                (original)
+++ commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/CompositeCounter.java \
Wed Jan 30 04:46:05 2008 @@ -23,8 +23,6 @@
 
 import org.apache.commons.monitoring.Composite;
 import org.apache.commons.monitoring.Counter;
-import org.apache.commons.monitoring.Monitor;
-import org.apache.commons.monitoring.StatValue.Listener;
 
 /**
  * A composite implementation of {@link Counter} that delegates to a primary
@@ -36,26 +34,18 @@
  *
  * @author <a href="mailto:nicolas@apache.org">Nicolas De Loof</a>
  */
-public class CompositeCounter implements Counter, Composite<Counter>
+public class CompositeCounter extends ThreadSafeCounter implements \
Composite<Counter>  {
-    private Counter primary;
-
     private Collection<Counter> secondary;
 
-    public Counter getPrimary()
-    {
-        return primary;
-    }
-
     public Collection<Counter> getSecondary()
     {
         return Collections.unmodifiableCollection( secondary );
     }
 
-    public CompositeCounter( Counter primary )
+    public CompositeCounter()
     {
         super();
-        this.primary = primary;
         this.secondary = new CopyOnWriteArrayList<Counter>();
     }
 
@@ -71,7 +61,7 @@
 
     public void add( long delta )
     {
-        primary.add( delta );
+        super.add( delta );
         for ( Counter counter : secondary )
         {
             counter.add( delta );
@@ -80,88 +70,11 @@
 
     public void set( long l )
     {
-        primary.set( l );
+        super.set( l );
         for ( Counter counter : secondary )
         {
             counter.set( l );
         }
     }
-
-    public long get()
-    {
-        return primary.get();
-    }
-
-    public int getHits()
-    {
-        return primary.getHits();
-    }
-
-    public long getMax()
-    {
-        return primary.getMax();
-    }
-
-    public double getMean()
-    {
-        return primary.getMean();
-    }
-
-    public long getMin()
-    {
-        return primary.getMin();
-    }
-
-    public double getStandardDeviation()
-    {
-        return primary.getStandardDeviation();
-    }
-
-    public long getSum()
-    {
-        return primary.getSum();
-    }
-
-    public String getUnit()
-    {
-        return primary.getUnit();
-    }
-
-    public void reset()
-    {
-        primary.reset();
-    }
-
-    public Monitor getMonitor()
-    {
-        return primary.getMonitor();
-    }
-
-    public String getRole()
-    {
-        return primary.getRole();
-    }
-
-    public void setMonitor( Monitor monitor )
-    {
-        primary.setMonitor( monitor );
-    }
-
-    public void setRole( String role )
-    {
-        primary.setRole( role );
-    }
-
-    public void addListener( Listener listener )
-    {
-        primary.addListener( listener );
-    }
-
-    public void removeListener( Listener listener )
-    {
-        primary.removeListener( listener );
-    }
-
-
 
 }

Modified: commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/CompositeGauge.java
                
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/main/java/org/a \
pache/commons/monitoring/impl/CompositeGauge.java?rev=616742&r1=616741&r2=616742&view=diff
 ==============================================================================
--- commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/CompositeGauge.java \
                (original)
+++ commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/CompositeGauge.java \
Wed Jan 30 04:46:05 2008 @@ -19,12 +19,10 @@
 
 import java.util.Collection;
 import java.util.Collections;
-import java.util.concurrent.CopyOnWriteArrayList;
+import java.util.LinkedList;
 
-import org.apache.commons.monitoring.Counter;
+import org.apache.commons.monitoring.Composite;
 import org.apache.commons.monitoring.Gauge;
-import org.apache.commons.monitoring.Monitor;
-import org.apache.commons.monitoring.StatValue.Listener;
 
 /**
  * A composite implementation of {@link Gauge} that delegates to a primary
@@ -36,139 +34,70 @@
  *
  * @author <a href="mailto:nicolas@apache.org">Nicolas De Loof</a>
  */
-public class CompositeGauge implements Gauge
+public class CompositeGauge extends ThreadSafeGauge implements Composite<Gauge>
 {
-    private Gauge primary;
-
     private Collection<Gauge> secondary;
 
-    public Gauge getPrimary()
-    {
-        return primary;
-    }
-
     public Collection<Gauge> getSecondary()
     {
         return Collections.unmodifiableCollection( secondary );
     }
 
-    public CompositeGauge( Gauge primary )
+    public CompositeGauge()
     {
         super();
-        this.primary = primary;
-        this.secondary = new CopyOnWriteArrayList<Gauge>();
+        this.secondary = new LinkedList<Gauge>();
     }
 
     public synchronized void addSecondary( Gauge gauge )
     {
-        gauge.set( primary.get() );
+        gauge.set( get() );
         secondary.add( gauge );
     }
 
-    public void removeSecondary( Gauge gauge )
+    public synchronized void removeSecondary( Gauge gauge )
     {
         secondary.remove( gauge );
     }
 
-    public synchronized void increment()
+    @Override
+    protected synchronized long threadSafeIncrement()
     {
-        primary.increment();
         for ( Gauge gauge : secondary )
         {
             gauge.increment();
         }
+        return super.threadSafeIncrement();
     }
 
-    public void add( long delta )
+    @Override
+    protected synchronized long threadSafeDecrement()
     {
-        primary.add( delta );
         for ( Gauge gauge : secondary )
         {
-            gauge.add( delta );
+            gauge.decrement();
         }
+        return super.threadSafeDecrement();
     }
 
-    public synchronized void decrement()
+    @Override
+    protected synchronized long trheadSageAdd( long delta )
     {
-        primary.decrement();
         for ( Gauge gauge : secondary )
         {
-            gauge.increment();
+            gauge.add( delta );
         }
+        return super.trheadSageAdd( delta );
     }
 
-    public synchronized void set( long l )
+
+    @Override
+    protected synchronized void threadSafeSet( long value )
     {
-        primary.set( l );
         for ( Gauge gauge : secondary )
         {
-            gauge.set( l );
+            gauge.set( value );
         }
+        super.threadSafeSet( value );
     }
-
-    public long get()
-    {
-        return primary.get();
-    }
-
-    public long getMax()
-    {
-        return primary.getMax();
-    }
-
-    public double getMean()
-    {
-        return primary.getMean();
-    }
-
-    public long getMin()
-    {
-        return primary.getMin();
-    }
-
-    public double getStandardDeviation()
-    {
-        return primary.getStandardDeviation();
-    }
-
-    public String getUnit()
-    {
-        return primary.getUnit();
-    }
-
-    public void reset()
-    {
-        primary.reset();
-    }
-
-    public Monitor getMonitor()
-    {
-        return primary.getMonitor();
-    }
-
-    public String getRole()
-    {
-        return primary.getRole();
-    }
-
-    public void setMonitor( Monitor monitor )
-    {
-        primary.setMonitor( monitor );
-    }
-
-    public void setRole( String role )
-    {
-        primary.setRole( role );
-    }
-
-    public void addListener( Listener listener )
-    {
-        primary.addListener( listener );
-    }
-
-    public void removeListener( Listener listener )
-    {
-        primary.removeListener( listener );
-    }
-
 }

Added: commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/CompositeValuesMonitor.java
                
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/CompositeValuesMonitor.java?rev=616742&view=auto
 ==============================================================================
--- commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/CompositeValuesMonitor.java \
                (added)
+++ commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/CompositeValuesMonitor.java \
Wed Jan 30 04:46:05 2008 @@ -0,0 +1,53 @@
+/*
+ * 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.impl;
+
+import org.apache.commons.monitoring.Counter;
+import org.apache.commons.monitoring.Gauge;
+
+/**
+ * A Monitor implementation that creates {@link Composite} Gauges and Counters.
+ *
+ * @author <a href="mailto:nicolas@apache.org">Nicolas De Loof</a>
+ */
+public class CompositeValuesMonitor extends CreateValuesOnDemandMonitor
+{
+
+    public CompositeValuesMonitor( Key key )
+    {
+        super( key );
+    }
+
+    public CompositeValuesMonitor( String name, String category, String subsystem )
+    {
+        super( name, category, subsystem );
+    }
+
+    @Override
+    protected Counter newCounterInstance()
+    {
+        return new CompositeCounter();
+    }
+
+    @Override
+    protected Gauge newGaugeInstance()
+    {
+        return new CompositeGauge();
+    }
+
+}

Propchange: commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/CompositeValuesMonitor.java
                
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/CompositeValuesMonitor.java
                
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/CompositeValuesMonitor.java
                
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Copied: commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/CreateValuesOnDemandMonitor.java \
(from r616258, commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/SimpleMonitor.java)
                
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/main/java/org/a \
pache/commons/monitoring/impl/CreateValuesOnDemandMonitor.java?p2=commons/sandbox/moni \
toring/trunk/src/main/java/org/apache/commons/monitoring/impl/CreateValuesOnDemandMoni \
tor.java&p1=commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/SimpleMonitor.java&r1=616258&r2=616742&rev=616742&view=diff
 ==============================================================================
--- commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/SimpleMonitor.java \
                (original)
+++ commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/CreateValuesOnDemandMonitor.java \
Wed Jan 30 04:46:05 2008 @@ -17,71 +17,71 @@
 
 package org.apache.commons.monitoring.impl;
 
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentMap;
-
 import org.apache.commons.monitoring.Counter;
 import org.apache.commons.monitoring.Gauge;
 import org.apache.commons.monitoring.Monitor;
-import org.apache.commons.monitoring.StatValue;
 
 /**
- * Simple implementation of the {@link Monitor} interface.
+ * implementation of the {@link Monitor} interface that creates StatValues on
+ * demand. The application can request for Counters/Gauges without having to
+ * handle instantiation of monitors with all required StatValues pre-registered.
  *
  * @author <a href="mailto:nicolas@apache.org">Nicolas De Loof</a>
  */
-public class SimpleMonitor
-    implements Monitor
+public class CreateValuesOnDemandMonitor
+    extends AbstractMonitor
 {
-    private final ConcurrentMap<String, StatValue> values;
-
-    private final Key key;
 
-    public SimpleMonitor( String name, String category, String subsystem )
+    public CreateValuesOnDemandMonitor( Key key )
     {
-        this( new Key( name, category, subsystem ) );
+        super( key );
     }
 
-    public SimpleMonitor( Key key )
+    public CreateValuesOnDemandMonitor( String name, String category, String \
subsystem )  {
-        super();
-        this.key = key;
-        this.values = new ConcurrentHashMap<String, StatValue>();
+        super( name, category, subsystem );
     }
 
+    /**
+     * Retrieve a Counter or create a new one for the role
+     */
     public Counter getCounter( String role )
     {
-        return (Counter) getValue( role );
-    }
-
-    public Gauge getGauge( String role )
-    {
-        return (Gauge) getValue( role );
-    }
-
-    public Key getKey()
-    {
-        return key;
+        Counter counter = (Counter) getValue( role );
+        if ( counter != null )
+        {
+            return counter;
+        }
+        return register( newCounterInstance(), role );
     }
 
-    public StatValue getValue( String role )
+    /**
+     * Create a new Counter instance
+     */
+    protected Counter newCounterInstance()
     {
-        return values.get( role );
+        return new ThreadSafeCounter();
     }
 
-    public boolean setValue( StatValue value, String role )
+    /**
+     * Retrieve a Gauge or create a new one for the role
+     */
+    public Gauge getGauge( String role )
     {
-        value.setMonitor( this );
-        value.setRole( role );
-        return values.putIfAbsent( role, value ) != null;
+        Gauge gauge = (Gauge) getValue( role );
+        if ( gauge != null )
+        {
+            return gauge;
+        }
+        return register( newGaugeInstance(), role );
     }
 
-    public void reset()
+    /**
+     * Create a new Gauge instance
+     */
+    protected Gauge newGaugeInstance()
     {
-        for ( StatValue value : values.values() )
-        {
-            value.reset();
-        }
+        return new ThreadSafeGauge();
     }
 
 }

Copied: commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/DefaultRepository.java \
(from r616258, commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/RepositoryBase.java)
                
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/main/java/org/a \
pache/commons/monitoring/impl/DefaultRepository.java?p2=commons/sandbox/monitoring/tru \
nk/src/main/java/org/apache/commons/monitoring/impl/DefaultRepository.java&p1=commons/ \
sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/RepositoryBase.java&r1=616258&r2=616742&rev=616742&view=diff
 ==============================================================================
--- commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/RepositoryBase.java \
                (original)
+++ commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/DefaultRepository.java \
Wed Jan 30 04:46:05 2008 @@ -21,26 +21,40 @@
 import java.util.Collections;
 import java.util.HashSet;
 import java.util.LinkedList;
+import java.util.List;
 import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentMap;
+import java.util.concurrent.CopyOnWriteArrayList;
 
 import org.apache.commons.monitoring.Monitor;
 import org.apache.commons.monitoring.Repository;
 import org.apache.commons.monitoring.Monitor.Key;
 
-public class RepositoryBase
+public class DefaultRepository
     implements Repository
 {
 
     public final ConcurrentMap<Monitor.Key, Monitor> monitors;
 
-    public RepositoryBase()
+    private List<Listener> listeners = new CopyOnWriteArrayList<Listener>();
+
+    public DefaultRepository()
     {
         super();
         this.monitors = new ConcurrentHashMap<Monitor.Key, Monitor>( 50 );
     }
 
+    public void addListener( Listener listener )
+    {
+        listeners.add( listener );
+    }
+
+    public void removeListener( Listener listener )
+    {
+        listeners.remove( listener );
+    }
+
     public Monitor getMonitor( String name )
     {
         return getMonitor( name, null, null );
@@ -78,6 +92,10 @@
         if ( monitor == null )
         {
             monitor = newMonitorInstance( key );
+            for ( Listener listener : listeners )
+            {
+                listener.newMonitorInstance( monitor );
+            }
             Monitor previous = monitors.putIfAbsent( key, monitor );
             if ( previous != null )
             {
@@ -90,9 +108,7 @@
     protected Monitor newMonitorInstance( Monitor.Key key )
     {
         Monitor monitor;
-        monitor = new SimpleMonitor( key );
-        monitor.setValue( new CompositeCounter( new SimpleCounter() ), \
                Monitor.PERFORMANCES );
-        monitor.setValue( new CompositeGauge( new SimpleGauge() ), \
Monitor.CONCURRENCY ); +        monitor = new CreateValuesOnDemandMonitor( key );
         return monitor;
     }
 

Copied: commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/ThreadSafeCounter.java \
(from r616258, commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/SimpleCounter.java)
                
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/main/java/org/a \
pache/commons/monitoring/impl/ThreadSafeCounter.java?p2=commons/sandbox/monitoring/tru \
nk/src/main/java/org/apache/commons/monitoring/impl/ThreadSafeCounter.java&p1=commons/ \
sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/SimpleCounter.java&r1=616258&r2=616742&rev=616742&view=diff
 ==============================================================================
--- commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/SimpleCounter.java \
                (original)
+++ commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/ThreadSafeCounter.java \
Wed Jan 30 04:46:05 2008 @@ -18,10 +18,15 @@
 package org.apache.commons.monitoring.impl;
 
 import org.apache.commons.monitoring.Counter;
-import org.apache.commons.monitoring.Monitor;
 
-public class SimpleCounter
-    extends SimpleValue
+/**
+ * Thread-safe implementation of <code>Counter</code>, based on
+ * synchronized methods.
+ *
+ * @author <a href="mailto:nicolas@apache.org">Nicolas De Loof</a>
+ */
+public class ThreadSafeCounter
+    extends AbstractStatValue
     implements Counter
 {
     private long value;

Copied: commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/ThreadSafeGauge.java \
(from r616258, commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/SimpleGauge.java)
                
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/main/java/org/a \
pache/commons/monitoring/impl/ThreadSafeGauge.java?p2=commons/sandbox/monitoring/trunk \
/src/main/java/org/apache/commons/monitoring/impl/ThreadSafeGauge.java&p1=commons/sand \
box/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/SimpleGauge.java&r1=616258&r2=616742&rev=616742&view=diff
 ==============================================================================
--- commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/SimpleGauge.java \
                (original)
+++ commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/ThreadSafeGauge.java \
Wed Jan 30 04:46:05 2008 @@ -18,16 +18,18 @@
 package org.apache.commons.monitoring.impl;
 
 import org.apache.commons.monitoring.Gauge;
-import org.apache.commons.monitoring.Monitor;
 
 /**
- * Simple implementation of a Gauge. Maintains a total of (value * time) on each
- * gauge increment/decrement to compute the mean value.
+ * Thread-safe implementation of <code>Gauge</code>, based on
+ * synchronized methods.
+ * <p>
+ * Maintains a sum of (value * time) on each gauge increment/decrement operation to
+ * compute the mean value.
  *
  * @author <a href="mailto:nicolas@apache.org">Nicolas De Loof</a>
  */
-public class SimpleGauge
-    extends SimpleValue
+public class ThreadSafeGauge
+    extends AbstractStatValue
     implements Gauge
 {
     private long value;
@@ -52,41 +54,50 @@
 
     public void increment()
     {
-        long l;
-        synchronized ( this )
-        {
-            computeSums();
-            l = ++value;
-            computeStats( l );
-        }
+        long l = threadSafeIncrement();
         notifyValueChanged( l );
     }
 
-    public void add( long delta )
+    protected synchronized long threadSafeIncrement()
     {
         long l;
-        synchronized ( this )
-        {
-            computeSums();
-            value += delta;
-            l = value;
-            computeStats( value );
-        }
+        computeSums();
+        l = ++value;
+        computeStats( l );
+        return l;
+    }
+
+    public void add( long delta )
+    {
+        long l = trheadSageAdd( delta );
         notifyValueChanged( l );
     }
 
-    public void decrement()
+    protected synchronized long trheadSageAdd( long delta )
     {
         long l;
-        synchronized ( this )
-        {
-            computeSums();
-            l = --value;
-            computeStats( l );
-        }
+        computeSums();
+        value += delta;
+        l = value;
+        computeStats( value );
+        return l;
+    }
+
+    public void decrement()
+    {
+        long l = threadSafeDecrement();;
         notifyValueChanged( l );
     }
 
+    protected synchronized long threadSafeDecrement()
+    {
+        long l;
+        computeSums();
+        l = --value;
+        computeStats( l );
+        return l;
+    }
+
     protected void computeSums()
     {
         long now = nanoTime();
@@ -133,7 +144,13 @@
         return value;
     }
 
-    public synchronized void set( long l )
+    public void set( long l )
+    {
+        threadSafeSet( l );
+        notifyValueChanged( l );
+    }
+
+    protected synchronized void threadSafeSet( long l )
     {
         computeSums();
         value = l;

Added: commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/support/java13/README
                
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/support/java13/README?rev=616742&view=auto
 ==============================================================================
--- commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/support/java13/README \
                (added)
+++ commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/support/java13/README \
Wed Jan 30 04:46:05 2008 @@ -0,0 +1,13 @@
+runtime classes required by backport version to run on Java 1.3 / 1.4
+
+Commons-monitoring uses Java 5 for :
+ * compile-time constructs (autoboxing, for loops, generics) that can be safely \
retrotranslated + * java.util.concurrent package, available on java 1.3/1.4 as \
backport-util-concurrent +
+Retrotranslor is used to translate Java5 compiled code to java 1.3 class file \
format. Some java5 methods +introduced during java5 compilation needs to get \
backported. This package contains such code. It is not +intended to backport all \
Java5 runtime to java 1.3, only to provide code required for commons-monitoring +to \
run on java 1.3 : +
+ * primitive autoboxing gets compiled to <Wrapper>.valueOf( primitive )
+ * ...
\ No newline at end of file

Added: commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/support/java13/java/lang/_Boolean.java
                
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/main/java/org/a \
pache/commons/monitoring/support/java13/java/lang/_Boolean.java?rev=616742&view=auto \
                ==============================================================================
                
--- commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/support/java13/java/lang/_Boolean.java \
                (added)
+++ commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/support/java13/java/lang/_Boolean.java \
Wed Jan 30 04:46:05 2008 @@ -0,0 +1,29 @@
+/*
+ * 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.support.java13.java.lang;
+
+/**
+ * @author <a href="mailto:nicolas.deloof@gmail.com">Nicolas De Loof</a>
+ */
+public class _Boolean
+{
+    public static Boolean valueOf( boolean b )
+    {
+        return new Boolean( b );
+    }
+}

Propchange: commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/support/java13/java/lang/_Boolean.java
                
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/support/java13/java/lang/_Boolean.java
                
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/support/java13/java/lang/_Boolean.java
                
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/support/java13/java/lang/_Byte.java
                
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/main/java/org/a \
pache/commons/monitoring/support/java13/java/lang/_Byte.java?rev=616742&view=auto \
                ==============================================================================
                
--- commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/support/java13/java/lang/_Byte.java \
                (added)
+++ commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/support/java13/java/lang/_Byte.java \
Wed Jan 30 04:46:05 2008 @@ -0,0 +1,29 @@
+/*
+ * 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.support.java13.java.lang;
+
+/**
+ * @author <a href="mailto:nicolas.deloof@gmail.com">Nicolas De Loof</a>
+ */
+public class _Byte
+{
+    public static Byte valueOf( byte b )
+    {
+        return new Byte( b );
+    }
+}

Propchange: commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/support/java13/java/lang/_Byte.java
                
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/support/java13/java/lang/_Byte.java
                
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/support/java13/java/lang/_Byte.java
                
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/support/java13/java/lang/_Double.java
                
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/main/java/org/a \
pache/commons/monitoring/support/java13/java/lang/_Double.java?rev=616742&view=auto \
                ==============================================================================
                
--- commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/support/java13/java/lang/_Double.java \
                (added)
+++ commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/support/java13/java/lang/_Double.java \
Wed Jan 30 04:46:05 2008 @@ -0,0 +1,29 @@
+/*
+ * 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.support.java13.java.lang;
+
+/**
+ * @author <a href="mailto:nicolas.deloof@gmail.com">Nicolas De Loof</a>
+ */
+public class _Double
+{
+    public static Double valueOf( double d )
+    {
+        return new Double( d );
+    }
+}

Propchange: commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/support/java13/java/lang/_Double.java
                
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/support/java13/java/lang/_Double.java
                
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/support/java13/java/lang/_Double.java
                
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/support/java13/java/lang/_Float.java
                
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/main/java/org/a \
pache/commons/monitoring/support/java13/java/lang/_Float.java?rev=616742&view=auto \
                ==============================================================================
                
--- commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/support/java13/java/lang/_Float.java \
                (added)
+++ commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/support/java13/java/lang/_Float.java \
Wed Jan 30 04:46:05 2008 @@ -0,0 +1,29 @@
+/*
+ * 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.support.java13.java.lang;
+
+/**
+ * @author <a href="mailto:nicolas.deloof@gmail.com">Nicolas De Loof</a>
+ */
+public class _Float
+{
+    public static Float valueOf( float f )
+    {
+        return new Float( f );
+    }
+}

Propchange: commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/support/java13/java/lang/_Float.java
                
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/support/java13/java/lang/_Float.java
                
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/support/java13/java/lang/_Float.java
                
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/support/java13/java/lang/_Integer.java
                
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/main/java/org/a \
pache/commons/monitoring/support/java13/java/lang/_Integer.java?rev=616742&view=auto \
                ==============================================================================
                
--- commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/support/java13/java/lang/_Integer.java \
                (added)
+++ commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/support/java13/java/lang/_Integer.java \
Wed Jan 30 04:46:05 2008 @@ -0,0 +1,29 @@
+/*
+ * 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.support.java13.java.lang;
+
+/**
+ * @author <a href="mailto:nicolas.deloof@gmail.com">Nicolas De Loof</a>
+ */
+public class _Integer
+{
+    public static Integer valueOf( int i )
+    {
+        return new Integer( i );
+    }
+}

Propchange: commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/support/java13/java/lang/_Integer.java
                
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/support/java13/java/lang/_Integer.java
                
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/support/java13/java/lang/_Integer.java
                
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/support/java13/java/lang/_Long.java
                
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/main/java/org/a \
pache/commons/monitoring/support/java13/java/lang/_Long.java?rev=616742&view=auto \
                ==============================================================================
                
--- commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/support/java13/java/lang/_Long.java \
                (added)
+++ commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/support/java13/java/lang/_Long.java \
Wed Jan 30 04:46:05 2008 @@ -0,0 +1,29 @@
+/*
+ * 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.support.java13.java.lang;
+
+/**
+ * @author <a href="mailto:nicolas.deloof@gmail.com">Nicolas De Loof</a>
+ */
+public class _Long
+{
+    public static Long valueOf( long l )
+    {
+        return new Long( l );
+    }
+}

Propchange: commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/support/java13/java/lang/_Long.java
                
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/support/java13/java/lang/_Long.java
                
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/support/java13/java/lang/_Long.java
                
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/support/java13/java/lang/_Short.java
                
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/main/java/org/a \
pache/commons/monitoring/support/java13/java/lang/_Short.java?rev=616742&view=auto \
                ==============================================================================
                
--- commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/support/java13/java/lang/_Short.java \
                (added)
+++ commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/support/java13/java/lang/_Short.java \
Wed Jan 30 04:46:05 2008 @@ -0,0 +1,29 @@
+/*
+ * 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.support.java13.java.lang;
+
+/**
+ * @author <a href="mailto:nicolas.deloof@gmail.com">Nicolas De Loof</a>
+ */
+public class _Short
+{
+    public static Short valueOf( short s )
+    {
+        return new Short( s );
+    }
+}

Propchange: commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/support/java13/java/lang/_Short.java
                
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/support/java13/java/lang/_Short.java
                
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/support/java13/java/lang/_Short.java
                
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: commons/sandbox/monitoring/trunk/src/site/xdoc/index.xml
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/site/xdoc/index.xml?rev=616742&r1=616741&r2=616742&view=diff
 ==============================================================================
--- commons/sandbox/monitoring/trunk/src/site/xdoc/index.xml (original)
+++ commons/sandbox/monitoring/trunk/src/site/xdoc/index.xml Wed Jan 30 04:46:05 2008
@@ -32,27 +32,6 @@
       </p>
     </section>
 
-    <section name="Concepts">
-      <p>
-        A <b>Monitor</b> defines a control point in the application. It can be \
                associated to a resource,
-        a code fragment or anything relevant for the application. The monitor is \
                unique and retrieved from
-        a <b>Repository</b>. It is identified by a name, a category (technical \
                description of the application
-        component) and a subsystem (functional description).
-      </p>
-      <p>
-        The monitor maintains a set of StatValues, that can be either \
                <b>Counter</b>s or <b>Gauge</b>s. A
-        Counter will get incremented any time the application does its work and \
                expose the result to
-        the monitoring backbone (byte received, lines processed, ...). A Gauge \
                allows the application to
-        expose how a resource is used (active connections). Each StatValue is \
                identified by a ROLE in the
-        monitor.
-      </p>
-      <p>
-        Commons Monitoring provides Helpers to instrument application, for example \
                to monitor web application
-        Request or JDBC operations, so that in many case you don't have to know \
                commons-monitoring API to
-        get basic instrumentation on your application.
-      </p>
-    </section>
-
   </body>
 
 </document>

Added: commons/sandbox/monitoring/trunk/src/site/xdoc/tutorial.xml
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/site/xdoc/tutorial.xml?rev=616742&view=auto
 ==============================================================================
--- commons/sandbox/monitoring/trunk/src/site/xdoc/tutorial.xml (added)
+++ commons/sandbox/monitoring/trunk/src/site/xdoc/tutorial.xml Wed Jan 30 04:46:05 \
2008 @@ -0,0 +1,95 @@
+<?xml version="1.0"?>
+<!--
+ 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.
+-->
+
+<document>
+
+<properties>
+    <title>Commons Monitoring tutorial</title>
+  </properties>
+
+  <body>
+
+    <section name="Quick introduction">
+      <p>
+        The <b>Monitoring</b> class is a convenience utility class to make \
application instrumentation +        as simple as possible. To monitor application \
performance, simply do : +        <pre>
+        public void myMethodToGetMonitored()
+        {
+            StopWatch stopWatch = Monitoring.start( "MyClass.myMethod" );
+            try
+            {
+                // Do something that takes time and requires monitoring
+            }
+            finally
+            {
+                stopWatch.stop();
+            }
+        }
+        </pre>
+        The StopWatch class will compute the time elapsed during code execution and \
report it to the +        monitor "MyClass.myMethod".
+      </p>
+    </section>
+    <section name="Instrumentation">
+      <p>
+        A <b>Monitor</b> defines a control point in the application. It can be \
associated to a resource, +        a code fragment or anything relevant for the \
application. The monitor is unique and retrieved from +        a <b>Repository</b>. \
It is identified by a name, a category (technical description of the application +    \
component) and a subsystem (functional description). In the previous code sample, \
only a name was set +        as category and subsystem are optional. We recommend to \
use them to create monitors as this is a +        convenient and powerfull way to \
group and sort monitors and associated statistics. +      </p>
+      <p>
+        The monitor maintains a set of StatValues, that can be either \
<b>Counters</b> or <b>Gauges</b>. +        <ul>
+          <li>A Counter will get incremented any time the application does its work \
and expose the result to +          the monitoring backbone : byte received, lines \
processed...</li> +          <li>A Gauge allows the application to expose how a \
resource is used : active connections...</li> +        </ul>
+        Each StatValue is identified by a ROLE in the monitor. Default roles are \
defined for PERFORMANCES and +        CONCURRENCY (threads running same code), and \
you can register Counters/Gauges for custom roles to monitor +        anything that \
is relevant for your application (bytes processed, message payload, account balance \
...)  : +        <pre>
+            Monitor monitor = repository.getMonitor( "SoapEndpoint.process", "soap" \
); +
+            // Process a SOAP message
+            monitor.getCounter( "bytes" ).add( SOAPMessage.getSize() );
+        </pre>
+      </p>
+      <p>
+        Commons Monitoring provides Helpers to instrument application, for example \
to monitor web application +        Request or JDBC operations, so that in many case \
you don't have to know commons-monitoring API to +        get basic instrumentation \
on your application. +      </p>
+    </section>
+    <section name="Repporting">
+      <p>
+        You can retrieve statistical datas from your monitors and StatValues to \
build reports. You can +        programatically acces the repository and iterate on \
monitors to build a custom output, or rely +        on Commons Monitoring provided \
<b>Renderers</b> that support common output formats (XML, TXT, JSON). +      </p>
+      <p>
+        When used in a webapp, Commons Monitoring provides a simple web UI.
+        TODO...
+      </p>
+    </section>
+
+  </body>
+
+</document>

Propchange: commons/sandbox/monitoring/trunk/src/site/xdoc/tutorial.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: commons/sandbox/monitoring/trunk/src/site/xdoc/tutorial.xml
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: commons/sandbox/monitoring/trunk/src/site/xdoc/tutorial.xml
------------------------------------------------------------------------------
    svn:mime-type = text/xml

Modified: commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/MonitoringTest.java
                
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/test/java/org/a \
pache/commons/monitoring/MonitoringTest.java?rev=616742&r1=616741&r2=616742&view=diff \
                ==============================================================================
                
--- commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/MonitoringTest.java \
                (original)
+++ commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/MonitoringTest.java \
Wed Jan 30 04:46:05 2008 @@ -17,9 +17,13 @@
 
 package org.apache.commons.monitoring;
 
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.TimeUnit;
+
 import junit.framework.TestCase;
 
-import org.apache.commons.monitoring.impl.RepositoryBase;
+import org.apache.commons.monitoring.impl.DefaultRepository;
 
 /**
  * @author <a href="mailto:nicolas@apache.org">Nicolas De Loof</a>
@@ -27,10 +31,11 @@
 public class MonitoringTest
     extends TestCase
 {
-    public void testMonitoring()
+
+    public void testConcurrencyMonitoring()
         throws Exception
     {
-        Monitoring.setRepository( new RepositoryBase() );
+        Monitoring.setRepository( new DefaultRepository() );
 
         StopWatch stopWatch1 = Monitoring.start( "MonitoringTest.testMonitoring", \
                "test", "utils" );
         StopWatch stopWatch2 = Monitoring.start( "MonitoringTest.testMonitoring", \
"test", "utils" ); @@ -45,10 +50,51 @@
         assertEquals( 0, concurrency.get() );
     }
 
-    public void testListeners()
+    public void testThreadSafety()
+        throws Exception
+    {
+        int threads = 50;
+        final int loops = 10000;
+
+        Monitoring.setRepository( new DefaultRepository() );
+
+        ExecutorService pool = Executors.newFixedThreadPool( threads );
+        for ( int i = 0; i < threads; i++ )
+        {
+            pool.execute( new Runnable()
+            {
+                public void run()
+                {
+                    for ( int i = 0; i < loops; i++ )
+                    {
+                        Monitor monitor = Monitoring.getMonitor( \
"MonitoringTest.testMultiThreading", "test", "utils" ); +                        \
monitor.getCounter( "COUNTER" ).add( 1 ); +                        monitor.getGauge( \
"GAUGE" ).increment(); +                    }
+                    try
+                    {
+                        Thread.sleep( (long) ( Math.random() * 100 ) );
+                    }
+                    catch ( InterruptedException e )
+                    {
+                        // ignore
+                    }
+                }
+            } );
+        }
+        pool.shutdown();
+        pool.awaitTermination( 30, TimeUnit.SECONDS );
+
+        Monitor monitor = Monitoring.getMonitor( \
"MonitoringTest.testMultiThreading", "test", "utils" ); +        assertEquals( \
threads * loops, monitor.getCounter( "COUNTER" ).getHits() ); +        assertEquals( \
threads * loops, monitor.getCounter( "COUNTER" ).get() ); +        assertEquals( \
threads * loops, monitor.getGauge( "GAUGE" ).get() ); +    }
+
+    public void testCounterListeners()
         throws Exception
     {
-        Repository repository = new RepositoryBase();
+        Repository repository = new DefaultRepository();
         final Monitor monitor = repository.getMonitor( \
"MonitoringTest.testMonitoring", "test", "utils" );  Counter counter = \
monitor.getCounter( Monitor.PERFORMANCES );  

Modified: commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/impl/SimpleCounterTest.java
                
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/test/java/org/a \
pache/commons/monitoring/impl/SimpleCounterTest.java?rev=616742&r1=616741&r2=616742&view=diff
 ==============================================================================
--- commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/impl/SimpleCounterTest.java \
                (original)
+++ commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/impl/SimpleCounterTest.java \
Wed Jan 30 04:46:05 2008 @@ -28,7 +28,7 @@
     public void testValue()
         throws Exception
     {
-        Counter counter = new SimpleCounter();
+        Counter counter = new ThreadSafeCounter();
 
         counter.set( 1 );
         assertEquals( 1, counter.getMin() );

Modified: commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/impl/SimpleGaugeTest.java
                
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/test/java/org/a \
pache/commons/monitoring/impl/SimpleGaugeTest.java?rev=616742&r1=616741&r2=616742&view=diff
 ==============================================================================
--- commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/impl/SimpleGaugeTest.java \
                (original)
+++ commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/impl/SimpleGaugeTest.java \
Wed Jan 30 04:46:05 2008 @@ -29,7 +29,7 @@
     public void testValue()
         throws Exception
     {
-        Gauge gauge = new SimpleGauge();
+        Gauge gauge = new ThreadSafeGauge();
 
         gauge.set( 1 );
         assertEquals( 1, gauge.getMin() );
@@ -85,7 +85,7 @@
     }
 
     private class MockTimeGauge
-        extends SimpleGauge
+        extends ThreadSafeGauge
     {
         @Override
         protected long nanoTime()

Modified: commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/reporting/RendererTest.java
                
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/test/java/org/a \
pache/commons/monitoring/reporting/RendererTest.java?rev=616742&r1=616741&r2=616742&view=diff
 ==============================================================================
--- commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/reporting/RendererTest.java \
                (original)
+++ commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/reporting/RendererTest.java \
Wed Jan 30 04:46:05 2008 @@ -28,9 +28,7 @@
 import org.apache.commons.io.IOUtils;
 import org.apache.commons.lang.StringUtils;
 import org.apache.commons.monitoring.Monitor;
-import org.apache.commons.monitoring.impl.SimpleCounter;
-import org.apache.commons.monitoring.impl.SimpleGauge;
-import org.apache.commons.monitoring.impl.SimpleMonitor;
+import org.apache.commons.monitoring.impl.CreateValuesOnDemandMonitor;
 
 public class RendererTest
     extends TestCase
@@ -42,15 +40,13 @@
         throws Exception
     {
         monitors = new LinkedList<Monitor>();
-        Monitor m1 = new SimpleMonitor( "JsonRendererTest.setUp", "test", \
                "reporting" );
-        m1.setValue( new SimpleCounter(), Monitor.PERFORMANCES );
-        m1.setValue( new SimpleGauge(), Monitor.CONCURRENCY );
+        Monitor m1 = new CreateValuesOnDemandMonitor( "JsonRendererTest.setUp", \
"test", "reporting" );  m1.getCounter( Monitor.PERFORMANCES ).add( 10 );
+        m1.getGauge( Monitor.CONCURRENCY );
         monitors.add( m1 );
 
-        Monitor m2 = new SimpleMonitor( "TestCase", "test", "junit" );
-        m2.setValue( new SimpleCounter(), Monitor.PERFORMANCES );
-        m2.setValue( new SimpleGauge(), Monitor.CONCURRENCY );
+        Monitor m2 = new CreateValuesOnDemandMonitor( "TestCase", "test", "junit" );
+        m2.getCounter( Monitor.PERFORMANCES );
         m2.getGauge( Monitor.CONCURRENCY ).increment();
         monitors.add( m2 );
     }


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic