2009-06-18 10 views
8

私は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()という保護されたメソッドを提供します。

+0

「自動的に」?アプリケーションサーバーの起動時にサービスが "開始"しないのですか? JMXコンソールが起動していると言われると、どのような振る舞いがそれを信じられませんか? – duffymo

+0

start()メソッドの中にいくつかのロギングコードがありますが、実行されていません。私はクラスのコンストラクタにいくつかのロギングコードを持っており、その出力を見ることができますが、それだけです。 – nozebacle

答えて

6

問題は、私は私の問題への解決策を見つけた

を解決しました。私はstart()、stop()、destroy()、create()メソッドをオーバーライドしていました。それにもかかわらず、抽象クラスServiceMBeanSupportを拡張するので、メソッドstartService()、stopService()などをオーバーライドする必要があります。

私のコードをstart()メソッドからstartService今はすべてが必要に応じて動作しています。依存関係が満たされるとすぐにサービスが開始され、メソッドstartService()が実行されます。

私は、MBeanのライフサイクルにはcreate()、start()、stop()、destroy()を呼び出す必要がありますが、抽象クラスServiceMBeanSupportの実装では、サイクル。それにもかかわらず、プログラマーがライフサイクルに参加できるように、* Service()という保護されたメソッドを提供します。私にとって

2

それがストップを定義する助けとのMBeanインタフェースのメソッドを起動します。

public interface MyServiceMBean { 
    ... 

    // Lifecycle callbacks 
    void start() throws Exception; 
    void stop(); 
} 

利点は、あなたがServiceMBeanオーデルのServiceMBeanSupportを拡張する必要がないことです。

関連する問題