サーバーが起動されるたびに自動的に起動されるJBossサービスを構築しようとしています。
私のサービスには次のクラス構造があります。
public interface CumbiaXPMServiceMBean extends org.jboss.system.ServiceMBean
public class CumbiaXPMService extends org.jboss.system.ServiceMBeanSupport implements CumbiaXPMServiceMBean
また、サービス用に次の設定ファイル(jboss-service.xml)があります。
<server>
<mbean code="uniandes.cumbia.xpm.jboss.CumbiaXPMService"
name="jcumbia:service=JCumbiaEngine">
<depends>jcumbia:service=cumbiaConsole</depends>
<attribute name="LocationInCumbia" attributeClass="java.lang.String">XPMEngine</attribute>
</mbean>
</server>
私の質問は、このサービスを自動的に開始するにはどうすればよいですか?
JBossがロードプロセスの一部としてメソッドstart()を呼び出すことを期待していましたが、そうではありません。start()メソッドに多くのlogginコードがありますが、出力が表示されません。
ただし、JMXConsoleを使用してMBeanステータスを確認すると、その状態(StateString)は「開始済み」です。
問題が解決しました
私は自分の問題の解決策を見つけました。start()、stop()、destroy()、create()の各メソッドをオーバーライドしていました。それでも、抽象クラスServiceMBeanSupportを拡張しているので、メソッドstartService()、stopService()などをオーバーライドする必要があります。
コードをメソッドstart()からメソッドstartService()に移動したところ、すべてが必要に応じて動作しています。依存関係が満たされるとすぐに、サービスが開始され、メソッドstartService()が実行されます。
結論は次のとおりです。MBeanのライフサイクルにはcreate()、start()、stop()、destroy()の呼び出しが含まれますが、抽象クラスServiceMBeanSupportの実装ではこれらのメソッドを使用してライフサイクルを処理します。それでも、プログラマーがライフサイクルに参加できるようにするために、保護されたメソッド* Service()を提供します。