minimize

事業拡大のため、新しい仲間を募集しています。
→詳しくはこちら

JBossでは、MBeanというものを使うことが出来ます。
MBeanを使うと、HTTPなどを通してJavaのロジックを呼び出す事が出来ます。
他にも、cron(Windowsのタスクスケジューラ)のように
一定時間毎に特定の処理を実行することも可能になります。

なお、JDK5ではMBeanなどを含めたJMX(Java Management Extensions)が標準採用になっています。

sarファイルの作成

MBeanを使うには、sarファイルを作成する必要があります。
詳しくは「アプリケーションファイル構成」のページを参考にして下さい。

ここでは、以下のような jboss-service.xml を作成することにします。
MBeanを一つだけ持つシンプルな構成です。

<server>
  <mbean code="org.limy.mbean.Hello"
    name="jboss.test:service=Hello">
  </mbean>
</server>

MBeanの作成

MBeanは、EJBなどと同じように
MBeanも実体とインターフェイスが別々に定義されています。
今回では、HelloMBean がインターフェイス、
Hello がそれを実装したクラスになります。
インターフェイス名は、「MBean名 + MBean」で統一するのが決まり事のようです。

インターフェイスは ServiceMBean の派生インターフェイス、
MBeanクラスは ServiceMBeanSupport の派生クラスである必要があります。
今回の例では

public interface HelloMBean extends ServiceMBean;
public class Hello extends ServiceMBeanSupport implements HelloMBean;

のようになります。

MBeanクラス、MBeanインターフェイス共に
必ず定義しなければいけないメソッド等はありません。
両方を空定義にしても、登録のみは行うことが出来ます。

当然実際に使用するときには、何らかのメソッドを定義することになります。
可視性を public にして、あらゆるメソッドを定義する事が出来ます。
ただし、メソッド名は一定の決め事を守る必要があります。

要素(Attribute)

getXXX / setXXX というメソッド名にします。
通常のJavaBeanクラスと同じです。

操作(Operation)

任意のメソッド名(ただし先頭はget/set以外)を付ける事が出来ます。

デプロイと確認

sarファイルをデプロイすることによって、MBeanが登録されます。
確認はJBossのJMXコンソール画面から行います。
URLは以下の通りです。

http://localhost:8080/jmx-console

ここに、登録されたMBeanが表示されているはずです。
MBean登録名の : の前方はカテゴリ名として認識されます。
今回の例で言うと「jboss.test」となります。
コンソール画面では、MBeanがカテゴリ毎に表示されます。

スケジューラの作成

JBossには、スケジューリング管理されたMBeanを使うことが出来ます。
具体的には、Scheduler というMBeanが用意されているのでこれを使います。

<mbean code="org.jboss.varia.scheduler.Scheduler"
  name="jboss.docs.chap10:service=Scheduler">
  <attribute name="StartAtStartup">true</attribute>
  <attribute name="SchedulableClass">org.jboss.chap10.ex2.ExSchedulable</attribute>
  <attribute name="SchedulableArguments">TheName,123456789</attribute>
  <attribute name="SchedulableArgumentTypes">java.lang.String,long</attribute>
  <attribute name="InitialStartDate">NOW</attribute>
  <attribute name="SchedulePeriod">60000</attribute>
  <attribute name="InitialRepetitions">-1</attribute>
</mbean>

各要素の意味は以下の通りです。

StartAtStartup

デプロイ時にタスクをスタートさせる場合は true にします。
false にした場合、MBeanの startSchedule メソッドを手動で呼び出す必要があります。

SchedulableClass

タスクに使用するクラスを指定します。
このクラスは、Schedulable インターフェイスを実装している必要があります。
このインターフェイスには以下のメソッドが定義されています。

public void perform(Date now, long remainingRepetitions);

タスククラスでは、このメソッドを実装する必要があります。

SchedulableArguments

タスククラスのインスタンスを初期化するときに呼び出す
コンストラクタの引数値をカンマ区切りで記述します。

SchedulableArgumentTypes

コンストラクタの引数型をカンマ区切りで記述します。
完全限定クラス名もしくはプリミティブ型名を使用できます。

InitialStartDate

タスクを開始する日付を記述します。
NOW と記述すれば、デプロイ後すぐにタスクを開始します。

SchedulePeriod

タスクが呼び出される間隔をミリ秒単位で指定します。

InitialRepetitions

タスクを呼び出す最大回数を指定します。
-1 を指定すると、タスクは無制限に呼び出されます。