2009-06-18 70 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。