clojure.java.jmx

Produce and consume JMX beans from Clojure.

Releases and Dependency Information

Latest stable release: 0.3.3

Leiningen dependency information:

[org.clojure/java.jmx "0.3.3"]

Maven dependency information:

<dependency>
  <groupId>org.clojure</groupId>
  <artifactId>java.jmx</artifactId>
  <version>0.3.3</version>
</dependency>

Usage

Full Documentation

clojure (require '[clojure.java.jmx :as jmx])

What beans do I have?

clojure (jmx/mbean-names "*:*") -> #<HashSet [java.lang:type=MemoryPool,name=CMS Old Gen, java.lang:type=Memory, ...]

What attributes does a bean have?

clojure (jmx/attribute-names "java.lang:type=Memory") -> (:Verbose :ObjectPendingFinalizationCount :HeapMemoryUsage :NonHeapMemoryUsage)

What is the value of an attribute?

clojure (jmx/read "java.lang:type=Memory" :ObjectPendingFinalizationCount) -> 0

Give me all the attributes:

clojure (jmx/mbean "java.lang:type=Memory") -> {:NonHeapMemoryUsage {:used 16674024, :max 138412032, :init 24317952, :committed 24317952}, :HeapMemoryUsage {:used 18619064, :max 85393408, :init 0, :committed 83230720}, :ObjectPendingFinalizationCount 0, :Verbose false}

Find an invoke an operation:

clojure (jmx/operation-names "java.lang:type=Memory") -> (:gc) (jmx/invoke "java.lang:type=Memory" :gc) -> nil

Conneting to another process? Just run any of the above code inside a with-connection:

clojure (jmx/with-connection {:host "localhost", :port 3000} (jmx/mbean "java.lang:type=Memory")) -> {:ObjectPendingFinalizationCount 0, :HeapMemoryUsage ... etc.}

Serve your own beans. Drop a Clojure ref into create-bean to expose read-only attributes for every key/value pair in the ref:

clojure (jmx/register-mbean (jmx/create-bean (ref {:string-attribute "a-string"})) "my.namespace:name=Value")}

Developer Information

Building

  1. Clone the repo
  2. Make sure you have maven installed
  3. Run the maven build: mvn install will produce a JAR file in the target directory, and run all tests with the most recently-released build of Clojure.

License

Copyright © Stuart Halloway

Licensed under the EPL. (See the file epl.html.)