From 049453c8255ff8802913c412ab0b00e8f64eaed0 Mon Sep 17 00:00:00 2001 From: Andy Fingerhut Date: Sun, 28 Oct 2012 21:51:01 -0700 Subject: [PATCH] JMX-9: Eliminate several uses of reflection in java.jmx --- src/main/clojure/clojure/java/jmx.clj | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/src/main/clojure/clojure/java/jmx.clj b/src/main/clojure/clojure/java/jmx.clj index 59394ad..53094d0 100644 --- a/src/main/clojure/clojure/java/jmx.clj +++ b/src/main/clojure/clojure/java/jmx.clj @@ -76,12 +76,14 @@ (:import [clojure.lang Associative] java.lang.management.ManagementFactory [javax.management Attribute AttributeList DynamicMBean MBeanInfo - ObjectName RuntimeMBeanException MBeanAttributeInfo] + ObjectName RuntimeMBeanException MBeanAttributeInfo MBeanServer + MBeanFeatureInfo MBeanOperationInfo MBeanParameterInfo] [javax.management.remote JMXConnectorFactory JMXServiceURL])) (def ^{:dynamic true :doc "The connection to be used for JMX ops. Defaults to the local process." - :skip-wiki true} + :skip-wiki true + :tag javax.management.MBeanServerConnection} *connection* (ManagementFactory/getPlatformMBeanServer)) @@ -95,7 +97,7 @@ (format "service:jmx:rmi:///jndi/rmi://%s:%s/%s" (opts :host) (opts :port) (opts :jndi-path))))) (defprotocol CoercionImpl - (as-object-name [_])) + (^javax.management.ObjectName as-object-name [_])) (extend-protocol CoercionImpl String @@ -190,7 +192,7 @@ (binding [*connection* (.getMBeanServerConnection connector#)] ~@body)))) -(defn ^{:skip-wiki true} mbean-info [n] +(defn ^MBeanInfo ^{:skip-wiki true} mbean-info [n] (.getMBeanInfo *connection* (as-object-name n))) (defn ^{:skip-wiki true} raw-read @@ -200,7 +202,7 @@ [n attrs] (if (sequential? attrs) (into {} - (map (fn [attr] [(keyword (.getName attr)) (.getValue attr)]) + (map (fn [^Attribute attr] [(keyword (.getName attr)) (.getValue attr)]) (.getAttributes *connection* (as-object-name n) (into-array (map name attrs))))) @@ -232,7 +234,7 @@ (defn ^{:skip-wiki true} attribute-info "Get the MBeanAttributeInfo for an attribute." [object-name attr-name] - (filter #(= (name attr-name) (.getName %)) + (filter #(= (name attr-name) (.getName ^MBeanFeatureInfo %)) (.getAttributes (mbean-info object-name)))) (defn readable? @@ -245,21 +247,21 @@ [n] (.getOperations (mbean-info n))) -(defn- operation +(defn- ^MBeanOperationInfo operation "The MBeanOperationInfo for operation op on mbean n. Used by invoke." [n op] - (first (filter #(= (-> % .getName keyword) op) (operations n)))) + (first (filter #(= (-> ^MBeanOperationInfo % .getName keyword) op) (operations n)))) (defn- op-param-types "The parameter types (as class name strings) for operation op on n. Used for invoke." [n op] - (map #(-> % .getType) (.getSignature (operation n op)))) + (map #(-> ^MBeanParameterInfo % .getType) (.getSignature (operation n op)))) (defn register-mbean "Register an mbean with the current *connection*." [mbean mbean-name] - (.registerMBean *connection* mbean (as-object-name mbean-name))) + (.registerMBean ^MBeanServer *connection* mbean (as-object-name mbean-name))) (defn mbean-names "Finds all MBeans matching a name on the current *connection*." @@ -269,13 +271,13 @@ (defn attribute-names "All attribute names available on an MBean." [n] - (doall (map #(-> % .getName keyword) + (doall (map #(-> ^MBeanFeatureInfo % .getName keyword) (.getAttributes (mbean-info n))))) (defn operation-names "All operation names available on an MBean." [n] - (doall (map #(-> % .getName keyword) (operations n)))) + (doall (map #(-> ^MBeanOperationInfo % .getName keyword) (operations n)))) (defn invoke-signature "Invoke an operation an an MBean. You must also supply -- 1.8.0