JBossにMBeanを乗せてJMXでアクセス
JBossにMBeanを乗っけて、それをJMXからアクセスするにはどうしたらよいのかしら?と調べました。
sar(Service Archive)形式でデプロイすればよい模様だということは分かったので、とりあえず適当に作って乗せてみる。
JBossはEAP6.1.0をコミュニティのところからダウンロードしました。
JBoss Application Server Downloads - JBoss Community
英語でよく分かんないけれど、とりあえずここのサイトでそれっぽいことをやってるのを発見。
How to create a Service Archieve SAR file in JBoss AS7 « JBoss
つまるところ、
- XXXXMBeanという名前のinterfaceを作る。
- XXXXという名前のclassを作って、interfaceをimplementsする。
- META-INF/jboss-service.xmlにclassとnameを書く。
だけやって、デプロイすれば良さそうということでやったらそのままできました。
// MBean interface public interface CounterMBean { int getCount(); void increment(); } // MBean public class Counter implements CounterMBean { private AtomicInteger counter = new AtomicInteger(0); @Override public int getCount() { return counter.get(); } @Override public void increment() { counter.incrementAndGet(); } }
<?xml version="1.0" encoding="UTF-8"?> <server xmlns="urn:jboss:service:7.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:jboss:service:7.0 jboss-service_7_0.xsd"> <mbean code="com.github.chanko.mbean.Counter" name="com.github.chanko:service=Counter"> </mbean> </server>
ソースコードはコチラ。
chanko/chanko-mbean at master · nobrooklyn/chanko · GitHub
JConsoleで開くとちゃんと出てきて、属性の読み取りと、メソッドの実行ができて、ちゃんとカウントアップしていきました。
インタフェース名の末尾はMBeanじゃないとダメみたい。
これだけでじゃあ何ができるのかって、別にカウントアップするだけの話なのですれども、例えば色んなアプリケーションからこいつを突っついてグローバルな変数みたいな扱い方ができるので、何かの統計を取ったり、何かのフラグに使ったりって使い方ができるのかなぁと思います。
ちなみにJBossは何もしなくても、Servletのリクエスト回数とかの統計を取ることができますので、そんなのをわざわざ作る必要はないのでご注意を。