aboutsummaryrefslogtreecommitdiff
path: root/src/clojure/contrib/jmx
diff options
context:
space:
mode:
Diffstat (limited to 'src/clojure/contrib/jmx')
-rw-r--r--src/clojure/contrib/jmx/Bean.clj35
-rw-r--r--src/clojure/contrib/jmx/client.clj95
-rw-r--r--src/clojure/contrib/jmx/data.clj104
-rw-r--r--src/clojure/contrib/jmx/server.clj18
4 files changed, 0 insertions, 252 deletions
diff --git a/src/clojure/contrib/jmx/Bean.clj b/src/clojure/contrib/jmx/Bean.clj
deleted file mode 100644
index cae67d21..00000000
--- a/src/clojure/contrib/jmx/Bean.clj
+++ /dev/null
@@ -1,35 +0,0 @@
-(ns clojure.contrib.jmx.Bean
- (:gen-class
- :implements [javax.management.DynamicMBean]
- :init init
- :state state
- :constructors {[Object] []})
- (:require [clojure.contrib.jmx :as jmx])
- (:import [javax.management DynamicMBean MBeanInfo AttributeList]))
-
-(defn -init [derefable]
- [[] derefable])
-
-; TODO: rest of the arguments, as needed
-(defn generate-mbean-info [clj-bean]
- (MBeanInfo. (.. clj-bean getClass getName) ; class name
- "Clojure Dynamic MBean" ; description
- (jmx/map->attribute-infos @(.state clj-bean)) ; attributes
- nil ; constructors
- nil ; operations
- nil)) ; notifications
-
-(defn -getMBeanInfo
- [this]
- (generate-mbean-info this))
-
-(defn -getAttribute
- [this attr]
- (@(.state this) (keyword attr)))
-
-(defn -getAttributes
- [this attrs]
- (let [result (AttributeList.)]
- (doseq [attr attrs]
- (.add result (.getAttribute this attr)))
- result)) \ No newline at end of file
diff --git a/src/clojure/contrib/jmx/client.clj b/src/clojure/contrib/jmx/client.clj
deleted file mode 100644
index 7af947d1..00000000
--- a/src/clojure/contrib/jmx/client.clj
+++ /dev/null
@@ -1,95 +0,0 @@
-;; JMX client APIs for Clojure
-;; docs in clojure/contrib/jmx.clj!!
-
-;; by Stuart Halloway
-
-;; Copyright (c) Stuart Halloway, 2009. All rights reserved. The use
-;; and distribution terms for this software are covered by the Eclipse
-;; Public License 1.0 (http://opensource.org/licenses/eclipse-1.0.php)
-;; which can be found in the file epl-v10.html at the root of this
-;; distribution. By using this software in any fashion, you are
-;; agreeing to be bound by the terms of this license. You must not
-;; remove this notice, or any other, from this software.
-
-
-(in-ns 'clojure.contrib.jmx)
-
-; TODO: needs an integration test
-; TODO: why full package needed for JMXConnectorFactory?
-(defmacro with-connection
- "Execute body with JMX connection specified by opts (:port)."
- [opts & body]
- `(with-open [connector# (javax.management.remote.JMXConnectorFactory/connect
- (JMXServiceURL. (jmx-url ~opts)) {})]
- (binding [*connection* (.getMBeanServerConnection connector#)]
- ~@body)))
-
-(defn mbean-info [n]
- (.getMBeanInfo *connection* (as-object-name n)))
-
-(defn raw-read
- "Read an mbean property. Returns low-level Java object model for composites, tabulars, etc.
- Most callers should use read."
- [n attr]
- (.getAttribute *connection* (as-object-name n) (as-str attr)))
-
-(defvar read
- (comp jmx->clj raw-read)
- "Read an mbean property.")
-
-(defvar read-exceptions
- [UnsupportedOperationException
- InternalError
- java.io.NotSerializableException
- java.lang.ClassNotFoundException
- javax.management.AttributeNotFoundException]
- "Exceptions that might be thrown if you try to read an unsupported attribute.
- by testing agains jconsole and Tomcat. This is dreadful and ad-hoc but I did not
- want to swallow all exceptions.")
-
-(defn read-supported
- "Calls read to read an mbean property, *returning* unsupported operation exceptions instead of throwing them.
- Used to keep mbean from blowing up. Note that some terribly-behaved mbeans use java.lang.InternalError to
- indicate an unsupported operation!"
- [n attr]
- (try
- (read n attr)
- (catch Throwable t
- (let [cause (root-cause t)]
- (if (some #(instance? % cause) read-exceptions)
- cause
- (throw t))))))
-
-(defn write! [n attr value]
- (.setAttribute
- *connection*
- (as-object-name n)
- (Attribute. (as-str attr) value)))
-
-(defn attribute-info
- "Get the MBeanAttributeInfo for an attribute"
- [object-name attr-name]
- (filter #(= (as-str attr-name) (.getName %))
- (.getAttributes (mbean-info object-name))))
-
-(defn readable?
- "Is attribute readable?"
- [n attr]
- (.isReadable () (mbean-info n)))
-
-(defn operations
- "All oeprations available on an MBean."
- [n]
- (.getOperations (mbean-info n)))
-
-(defn operation
- "The MBeanOperationInfo for operation op on mbean n. Used for invoke."
- [n op]
- (first (filter #(= (-> % .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))))
-
-
diff --git a/src/clojure/contrib/jmx/data.clj b/src/clojure/contrib/jmx/data.clj
deleted file mode 100644
index 3a4c5275..00000000
--- a/src/clojure/contrib/jmx/data.clj
+++ /dev/null
@@ -1,104 +0,0 @@
-;; Conversions between JMX data structures and idiomatic Clojure
-;; docs in clojure/contrib/jmx.clj!!
-
-;; by Stuart Halloway
-
-;; Copyright (c) Stuart Halloway, 2009. All rights reserved. The use
-;; and distribution terms for this software are covered by the Eclipse
-;; Public License 1.0 (http://opensource.org/licenses/eclipse-1.0.php)
-;; which can be found in the file epl-v10.html at the root of this
-;; distribution. By using this software in any fashion, you are
-;; agreeing to be bound by the terms of this license. You must not
-;; remove this notice, or any other, from this software.
-
-
-(in-ns 'clojure.contrib.jmx)
-
-(declare jmx->clj)
-
-(defn jmx-url
- "Build a JMX URL from options."
- ([] (jmx-url {}))
- ([overrides]
- (let [opts (merge {:host "localhost", :port "3000"} overrides)]
- (format "service:jmx:rmi:///jndi/rmi://%s:%s/jmxrmi" (opts :host) (opts :port)))))
-
-(defmulti as-object-name
- "Interpret an object as a JMX ObjectName."
- { :arglists '([string-or-name]) }
- class)
-(defmethod as-object-name String [n] (ObjectName. n))
-(defmethod as-object-name ObjectName [n] n)
-
-(defn composite-data->map [cd]
- (into {}
- (map (fn [attr] [(keyword attr) (jmx->clj (.get cd attr))])
- (.. cd getCompositeType keySet))))
-
-(defn maybe-keywordize
- "Convert a string key to a keyword, leaving other types alone. Used to
- simplify keys in the tabular data API."
- [s]
- (if (string? s) (keyword s) s))
-
-(defn maybe-atomize
- "Convert a list of length 1 into its contents, leaving other things alone.
- Used to simplify keys in the tabular data API."
- [k]
- (if (and (instance? java.util.List k)
- (= 1 (count k)))
- (first k)
- k))
-
-(defvar simplify-tabular-data-key
- (comp maybe-keywordize maybe-atomize))
-
-(defn tabular-data->map [td]
- (into {}
- ; the need for into-array here was a surprise, and may not
- ; work for all examples. Are keys always arrays?
- (map (fn [k]
- [(simplify-tabular-data-key k) (jmx->clj (.get td (into-array k)))])
- (.keySet td))))
-
-(defmulti jmx->clj
- "Coerce JMX data structures into Clojure data.
- Handles CompositeData, TabularData, maps, and atoms."
- { :argslists '([jmx-data-structure]) }
- (fn [x]
- (cond
- (instance? javax.management.openmbean.CompositeData x) :composite
- (instance? javax.management.openmbean.TabularData x) :tabular
- (instance? clojure.lang.Associative x) :map
- :default :default)))
-(defmethod jmx->clj :composite [c] (composite-data->map c))
-(defmethod jmx->clj :tabular [t] (tabular-data->map t))
-(defmethod jmx->clj :map [m] (into {} (zipmap (keys m) (map jmx->clj (vals m)))))
-(defmethod jmx->clj :default [obj] obj)
-
-(def guess-attribute-map
- {"java.lang.Integer" "int"
- "java.lang.Boolean" "boolean"
- "java.lang.Long" "long"
- })
-
-(defn guess-attribute-typename
- "Guess the attribute typename for MBeanAttributeInfo based on the attribute value."
- [value]
- (let [classname (.getName (class value))]
- (get guess-attribute-map classname classname)))
-
-(defn build-attribute-info
- "Construct an MBeanAttributeInfo. Normally called with a key/value pair from a Clojure map."
- ([attr-name attr-value]
- (build-attribute-info
- (as-str attr-name)
- (guess-attribute-typename attr-value)
- (as-str attr-name) true false false))
- ([name type desc readable? writable? is?] (MBeanAttributeInfo. name type desc readable? writable? is? )))
-
-(defn map->attribute-infos
- "Construct an MBeanAttributeInfo[] from a Clojure associative."
- [attr-map]
- (into-array (map (fn [[attr-name value]] (build-attribute-info attr-name value))
- attr-map)))
diff --git a/src/clojure/contrib/jmx/server.clj b/src/clojure/contrib/jmx/server.clj
deleted file mode 100644
index c92fcf81..00000000
--- a/src/clojure/contrib/jmx/server.clj
+++ /dev/null
@@ -1,18 +0,0 @@
-;; JMX server APIs for Clojure
-;; docs in clojure/contrib/jmx.clj!!
-
-;; by Stuart Halloway
-
-;; Copyright (c) Stuart Halloway, 2009. All rights reserved. The use
-;; and distribution terms for this software are covered by the Eclipse
-;; Public License 1.0 (http://opensource.org/licenses/eclipse-1.0.php)
-;; which can be found in the file epl-v10.html at the root of this
-;; distribution. By using this software in any fashion, you are
-;; agreeing to be bound by the terms of this license. You must not
-;; remove this notice, or any other, from this software.
-
-(in-ns 'clojure.contrib.jmx)
-
-(defn register-mbean [mbean mbean-name]
- (.registerMBean *connection* mbean (as-object-name mbean-name)))
-