感謝のプログラミング 10000時間

たどり着いた結果(さき)は、感謝でした。

Java Managed Bean

<スポンサーリンク>

JBoss関連の情報を調べていたので、断片的な情報をまとめてみる。
メモのようなものなので、あまりカッコイイ記事ではないけれど。しかもなんか古いし(笑)


MBeanとは、ManagedBeanの略。
MBeanはJavaBeansと似た構造のJavaのクラスで、setterやgetter、operationと呼ばれるメソッドを持つ。

MBeanはMBeanServerによって、メモリにロードされて一括管理される。

Wewbサーバやデータソースといったサービスは、JBossではすべてMBeanとしてプラグインされている。
JBossにMBeanを追加する場合は、プログラマはMBeanを実装し、アーカイブにまとめてデプロイするだけでよい。

jmx-consoleというJBossに標準で装備されている管理コンソールを使うことで、JBoss上のMBeamをブラウズしたり、オペレーションを実行することができる。

MBeanを動かすのに必要なのは2つ。
・MBeanの機能を実装したクラス
・MBeanの機能として公開するメソッドを定義したインターフェース
である。

public interface HogeMBean {
	public String sayHello();
}

のような、~MBeanというインターフェースを作って、それをimplementsする。

public class Hoge implements HogeMBean {
	public String sayHello() {
		return "hello";
	}
}

ここで作ったMBeanをJBossにデプロイするためには、SARファイルにまとめる必要がある。
SARというのはService Archiveの略で、これはJBoss独自の仕様である(Java EEの仕様ではない)

SARファイル内には、META-INF/jboss-service.xmlというファイルが必要となる。
ここにMBeanを登録することで、JBossがMBeanを認識するようになる。

SARファイルの構造はこんな感じ。

hoge.sar
 |
 ----META-INF
 |      |
 |       ----MANIFEST.MF
 |      |
 |       ----jboss-service.xml     
 |
 |---package
 |     |
 |     ----Hoge.class

見づらくてすまん。

jboss-service.xmlはこんな感じで書く。

<?xml version="1.0" encoding="UTF-8"?>
<service>
  <mbean code="fuga.Hoge" name="Hoge:name=HogeHoge" />
</service>

ちなみに、(古いけど)JBoss3では、Tomcatもjbossweb-tomcat.sarというSARファイルとしてJBossに組み込まれている。
TomcatではWebコンテナの設定はserver.xmlに書くが、JBoss-Tomcatではその代わりにjboss-service.xmlに書く。


なお、SARやWARファイルを作るには、javaのSDKに付属しているjarコマンドを使う。

アーカイブを作る:
jar cf <作るアーカイブ名> <アーカイブ対象のディレクトリ>

アーカイブを解凍する:
jar xf <解凍対象のアーカイブ名>

ちなみに、*-service.xmlというサービス記述子(例:hoge-service.xml)もホットデプロイが可能で、ここにlibに配置したJARファイルのパスを書くこともできる。

JBossのdeployディレクトリ以下にwarファイルを配置する場合、WARアーカイブ名がコンテキストルートになる。
sample.warファイルをデプロイしたら、そのコンテキストルートはsampleとなる。

データソース設定ファイルもdeployディレクトリ以下に置く。
ひな形は、%JBOSS_HOME%\docs\examples\jca\ディレクトリにある、*-ds.xmlというファイル。
これらを修正して、deploy以下に置くと、データソースがJNDIに登録される。


JMXというのは、Java Management Extensionsの略である。
JMXはネットワーク上に分散した機器やソフトウェアをリモートから監視するためのJavaの規格のこと。