2009-06-18 68 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()方法中有很多的loggin代碼,但我沒有看到任何代碼輸出。

但是,當我使用JMXConsole查看MBean狀態時,其狀態(StateString)是'Started'。

問題解決了

我找到了解決我的問題。我重寫了方法start(),stop(),destroy()和create();儘管如此,由於我擴展了抽象類ServiceMBeanSupport,我應該重寫方法startService(),stopService()等。

我剛剛將方法start()方法移動到方法startService()和現在一切都按照我的需要行事:只要它的依賴關係滿足了,我的服務就會啓動並執行startService()方法。我認爲結論是:儘管MBean的生命週期涉及調用create(),start(),stop()和destroy(),但抽象類ServiceMBeanSupport的實現使用這些方法來處理生命週期。不過,它提供了受保護的方法* Service(),以便程序員能夠參與生命週期。

+0

「自動」?服務器啓動時服務是否「啓動」?如果JMX控制檯說它已經啓動,那麼什麼行爲會讓你相信它沒有? – duffymo 2009-06-18 01:04:46

回答

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。