自动启动JBoss服务(MBean)

时间:2009-06-18 01:00:24

标签: java jboss service java-ee mbeans

我正在尝试构建一个应该在每次启动服务器时自动启动的JBoss服务。

我的服务有以下类结构:

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)是“已启动”。

解决了问题

我找到了解决问题的方法。我重写了方法start(),stop(),destroy()和create();尽管如此,因为我正在扩展抽象类ServiceMBeanSupport,所以我应该重写方法startService(),stopService()等。

我只是将我的代码从方法start()移动到方法startService(),现在一切都按照我的需要运行:只要满足其依赖关系,我的服务就会启动并执行方法startService()。

我认为结论是:虽然MBean的生命周期涉及调用create(),start(),stop()和destroy(),但抽象类ServiceMBeanSupport的实现使用这些方法来处理生命周期。然而,它提供了受保护的方法* Service(),以允许程序员参与生命周期。

2 个答案:

答案 0 :(得分:6)

解决了问题

我找到了解决问题的方法。我重写了方法start(),stop(),destroy()和create();尽管如此,因为我正在扩展抽象类ServiceMBeanSupport,所以我应该重写方法startService(),stopService()等。

我只是将我的代码从方法start()移动到方法startService(),现在一切都按照我的需要运行:只要满足其依赖关系,我的服务就会启动并执行方法startService()。

我认为结论是:虽然MBean的生命周期涉及调用create(),start(),stop()和destroy(),但抽象类ServiceMBeanSupport的实现使用这些方法来处理生命周期。然而,它提供了受保护的方法* Service(),以允许程序员参与生命周期。

答案 1 :(得分:2)

对我来说,它帮助在MBean接口中定义了stop和start方法:

public interface MyServiceMBean {
    ...

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

优点是您不必扩展ServiceMBean或ServiceMBeanSupport。