Java bindings - Adding Atomic* support
authorPierre Mauduit <pierre.mauduit@camptocamp.com>
Mon, 30 Jan 2017 16:56:35 +0000 (17:56 +0100)
committerPierre Mauduit <pierre.mauduit@camptocamp.com>
Mon, 30 Jan 2017 17:05:03 +0000 (18:05 +0100)
AtomicIntegers are used to address some concurrency problems in Java, and this
is advised by some metrics libraries like Netflix's servo:

https://github.com/Netflix/servo/wiki#jmx

Unfortunately, the GenericJMXConfValue.java class is not able to get the values
from such types, hence this PR.

I scanned the Java doc for the Java package:
https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/package-summary.html
I think I have not forgotten any types.

Tests: tested at runtime

bindings/java/org/collectd/java/GenericJMXConfValue.java

index 63b7628..6d3d688 100644 (file)
@@ -30,6 +30,8 @@ import java.util.Arrays;
 import java.util.List;
 import java.util.Collection;
 import java.util.Set;
 import java.util.List;
 import java.util.Collection;
 import java.util.Set;
+import java.util.concurrent.atomic.AtomicInteger;
+import java.util.concurrent.atomic.AtomicLong;
 import java.util.Iterator;
 import java.util.ArrayList;
 
 import java.util.Iterator;
 import java.util.ArrayList;
 
@@ -128,6 +130,14 @@ class GenericJMXConfValue
     {
       return (BigInteger.ZERO.add ((BigInteger) obj));
     }
     {
       return (BigInteger.ZERO.add ((BigInteger) obj));
     }
+    else if (obj instanceof AtomicInteger)
+    {
+        return (new Integer(((AtomicInteger) obj).get()));
+    }
+    else if (obj instanceof AtomicLong)
+    {
+        return (new Long(((AtomicLong) obj).get()));
+    }
 
     return (null);
   } /* }}} Number genericObjectToNumber */
 
     return (null);
   } /* }}} Number genericObjectToNumber */