我試圖構建一個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(),以便程序員能夠參與生命週期。
「自動」?服務器啓動時服務是否「啓動」?如果JMX控制檯說它已經啓動,那麼什麼行爲會讓你相信它沒有? – duffymo 2009-06-18 01:04:46