私はJBossサービスをビルドしようとしていますが、これはサーバが起動されるたびに自動的に起動する必要があります。JBossサービス(MBean)を自動的に起動する
私は私のサービスのための以下のクラス構造を持っている:
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()メソッドでたくさんのログを取得していますが、出力。
しかし、JMXConsoleを使用してMBeanステータスを調べると、そのState(StateString)は 'Started'になります。
問題は、私は私の問題への解決策を見つけた
を解決しました。私はstart()、stop()、destroy()、create()メソッドをオーバーライドしていました。それにもかかわらず、抽象クラスServiceMBeanSupportを拡張するので、メソッドstartService()、stopService()などをオーバーライドする必要があります。
私のコードをstart()メソッドからstartService今はすべてが必要に応じて動作しています。依存関係が満たされるとすぐにサービスが開始され、メソッドstartService()が実行されます。
私は、MBeanのライフサイクルにはcreate()、start()、stop()、destroy()を呼び出す必要がありますが、抽象クラスServiceMBeanSupportの実装では、サイクル。それにもかかわらず、プログラマーがライフサイクルに参加できるように、* Service()という保護されたメソッドを提供します。
「自動的に」?アプリケーションサーバーの起動時にサービスが "開始"しないのですか? JMXコンソールが起動していると言われると、どのような振る舞いがそれを信じられませんか? – duffymo
start()メソッドの中にいくつかのロギングコードがありますが、実行されていません。私はクラスのコンストラクタにいくつかのロギングコードを持っており、その出力を見ることができますが、それだけです。 – nozebacle