第8章 JBoss EAP MBean サービス
管理対象 Bean (単に MBean と呼ばれることもあります) は、依存関係インジェクションで作成された JavaBean の型です。MBean サービスは JBoss EAP サーバーの中心的な要素です。
8.1. JBoss MBean Service の記述
JBoss サービスに依存するカスタム MBean サービスを記述するには、サービスインターフェースメソッドパターンが必要です。JBoss MBean のサービスインターフェースメソッドパターンは create
、start
、stop
、および destroy
が実行可能である場合に MBean サービスに通知する複数のライフサイクル操作で構成されます。
以下の方法を使用すると依存関係の状態を管理できます。
- MBean で特定のメソッドを呼び出したい場合は、これらのメソッドを MBean インターフェースで宣言します。この方法では、MBean 実装で JBoss 固有クラスの依存関係を回避できます。
-
JBoss 固有クラスの依存関係を気にしない場合は、MBean インターフェースで
ServiceMBean
インターフェースおよびServiceMBeanSupport
クラスを拡張できます。ServiceMBeanSupport
クラスは create、start、および stop などのサービスライフサイクルメソッドの実装を提供します。start()
イベントなどの特定のイベントを処理するには、ServiceMBeanSupport
クラスによって提供されるstartService()
メソッドをオーバーライドする必要があります。
8.1.1. 標準の MBean の例
本項では、サービスアーカイブ (.sar
) で一緒にパッケージ化される 2 つの MBean 例の開発について説明します。
ConfigServiceMBean
インターフェースは start
、getTimeout
、および stop
などの特定のメソッドを宣言し、JBoss 固有のクラスを使用せずに MBean に対して start
、hold
、および stop
を実行します。ConfigService
クラスは ConfigServiceMBean
インターフェースを実装した後、このインターフェース内で使用されたメソッドを実装します。
PlainThread
クラスは ServiceMBeanSupport
クラスを拡張し、PlainThreadMBean
インターフェースを実装します。PlainThread
はスレッドを開始し、ConfigServiceMBean.getTimeout()
を使用してスレッドのスリープ時間を決定します。
MBean サービスの例
package org.jboss.example.mbean.support; public interface ConfigServiceMBean { int getTimeout(); void start(); void stop(); } package org.jboss.example.mbean.support; public class ConfigService implements ConfigServiceMBean { int timeout; @Override public int getTimeout() { return timeout; } @Override public void start() { //Create a random number between 3000 and 6000 milliseconds timeout = (int)Math.round(Math.random() * 3000) + 3000; System.out.println("Random timeout set to " + timeout + " seconds"); } @Override public void stop() { timeout = 0; } } package org.jboss.example.mbean.support; import org.jboss.system.ServiceMBean; public interface PlainThreadMBean extends ServiceMBean { void setConfigService(ConfigServiceMBean configServiceMBean); } package org.jboss.example.mbean.support; import org.jboss.system.ServiceMBeanSupport; public class PlainThread extends ServiceMBeanSupport implements PlainThreadMBean { private ConfigServiceMBean configService; private Thread thread; private volatile boolean done; @Override public void setConfigService(ConfigServiceMBean configService) { this.configService = configService; } @Override protected void startService() throws Exception { System.out.println("Starting Plain Thread MBean"); done = false; thread = new Thread(new Runnable() { @Override public void run() { try { while (!done) { System.out.println("Sleeping...."); Thread.sleep(configService.getTimeout()); System.out.println("Slept!"); } } catch (InterruptedException e) { Thread.currentThread().interrupt(); } } }); thread.start(); } @Override protected void stopService() throws Exception { System.out.println("Stopping Plain Thread MBean"); done = true; } }
jboss-service.xml
記述子は、inject
タグを使用して ConfigService
クラスが PlainThread
クラスにインジェクトされる方法を示します。inject
タグは PlainThreadMBean
と ConfigServiceMBean
間の依存関係を確立し、PlainThreadMBean
が簡単に ConfigServiceMBean
を使用できるようにします。
JBoss-service.xml
サービス記述子
<server xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:jboss:service:7.0 jboss-service_7_0.xsd" xmlns="urn:jboss:service:7.0"> <mbean code="org.jboss.example.mbean.support.ConfigService" name="jboss.support:name=ConfigBean"/> <mbean code="org.jboss.example.mbean.support.PlainThread" name="jboss.support:name=ThreadBean"> <attribute name="configService"> <inject bean="jboss.support:name=ConfigBean"/> </attribute> </mbean> </server>
MBean の例を記述した後、クラスと jboss-service.xml
記述子をサービスアーカイブ (.sar
) の META-INF
でパッケージ化できます。
8.2. JBoss MBean サービスのデプロイ
管理対象ドメインでのサンプル MBean のデプロイおよびテスト
管理対象ドメインでサンプル MBean (ServiceMBeanTest.sar
) をデプロイするには、以下のコマンドを使用します。
deploy ~/Desktop/ServiceMBeanTest.sar --all-server-groups
スタンドアロンサーバーでのサンプル MBean のデプロイおよびテスト
スタンドアロンサーバーでサンプル MBean (ServiceMBeanTest.sar
) をビルドおよびデプロイするには、以下のコマンドを使用します。
deploy ~/Desktop/ServiceMBeanTest.sar
サンプル MBean のデプロイ解除
サンプル MBean をデプロイ解除するには、以下のコマンドを使用します。
ServiceMBeanTest.sar のデプロイ解除