From 2848477531af3b9f8274d05de5a616b603f70c4c Mon Sep 17 00:00:00 2001 From: Chris Jeris Date: Mon, 4 Jun 2012 10:48:48 -0400 Subject: [PATCH] Change clojure.java.jmx.Bean to yield Attribute objects on .getAttribute method (conforming to java interface), and change bean reading accordingly to unwrap Attribute wrappers. --- src/main/clojure/clojure/java/jmx.clj | 7 +++++-- src/test/clojure/clojure/java/test_jmx.clj | 10 ++++++---- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/src/main/clojure/clojure/java/jmx.clj b/src/main/clojure/clojure/java/jmx.clj index 705bbb8..0a90e3e 100644 --- a/src/main/clojure/clojure/java/jmx.clj +++ b/src/main/clojure/clojure/java/jmx.clj @@ -146,7 +146,10 @@ (into {} (zipmap (keys m) (map objects->data (vals m))))) Object - (objects->data [obj] obj)) + (objects->data [obj] obj) + + javax.management.Attribute + (objects->data [attr] (.getValue attr))) (def ^{:private true} guess-attribute-map {"java.lang.Integer" "int" @@ -315,7 +318,7 @@ nil ; operations nil)) (getAttribute [_ attr] - (@state-ref (keyword attr))) + (Attribute. attr (@state-ref (keyword attr)))) (getAttributes [_ attrs] (let [result (AttributeList.)] (doseq [attr attrs] diff --git a/src/test/clojure/clojure/java/test_jmx.clj b/src/test/clojure/clojure/java/test_jmx.clj index 70143fc..f36d1c7 100644 --- a/src/test/clojure/clojure/java/test_jmx.clj +++ b/src/test/clojure/clojure/java/test_jmx.clj @@ -12,7 +12,7 @@ (ns clojure.java.test-jmx (:import javax.management.openmbean.CompositeDataSupport - [javax.management MBeanAttributeInfo AttributeList] + [javax.management MBeanAttributeInfo Attribute AttributeList] [java.util.logging LogManager Logger]) (:use clojure.test) (:require [clojure.java [jmx :as jmx]])) @@ -169,8 +169,9 @@ (let [state (reftype {:a 1 :b 2}) bean (jmx/create-bean state)] (testing (str "accessing values from a " (class state)) - (are [result expr] (= result expr) - 1 (.getAttribute bean "a")))))) + (are [result expr] (= result expr) + "a" (.getName (.getAttribute bean "a")) + 1 (.getValue (.getAttribute bean "a"))))))) (deftest test-bean-info (let [state (ref {:a 1 :b 2}) @@ -185,7 +186,8 @@ atts (.getAttributes bean (into-array ["r" "d"]))] (are [x y] (= x y) AttributeList (class atts) - [5 4] (seq atts)))) + ["r" "d"] (map (memfn getName) (seq atts)) + [5 4] (map (memfn getValue) (seq atts))))) (def primitive-int? (< (.compareTo (clojure-version) "1.3.0") 0))