Автоматический запуск службы JBoss (MBean)

Я пытаюсь создать службу 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() много кода входа в систему, но я не видел никакого вывода.

Однако, когда я смотрю на статус MBean с помощью JMXConsole, его состояние (StateString) — «Запущено».

Проблема решена

Я нашел решение своей проблемы. Я переопределял методы start(), stop(), destroy() и create(); тем не менее, поскольку я расширяю абстрактный класс ServiceMBeanSupport, мне следует переопределить методы startService(), stopService() и т. д.

Я просто переместил свой код из метода start() в метод startService() и теперь все ведет себя так, как мне нужно: как только его зависимости выполняются, мой сервис запускается и выполняется метод startService().

Я думаю, вывод таков: хотя жизненный цикл MBean включает в себя вызовы create(), start(), stop() и destroy(), реализация абстрактного класса ServiceMBeanSupport использует эти методы для управления жизненным циклом. Тем не менее он предоставляет защищенные методы *Service(), позволяющие программисту участвовать в жизненном цикле.


person nozebacle    schedule 18.06.2009    source источник
comment
автоматически? Разве служба не запускается при запуске сервера приложений? Если консоль JMX говорит, что она запущена, какое поведение заставляет вас поверить, что это не так?   -  person duffymo    schedule 18.06.2009
comment
У меня есть код регистрации внутри метода start(), но он не выполняется. У меня есть некоторый код регистрации в конструкторе класса, и я могу видеть его вывод, но это все.   -  person nozebacle    schedule 18.06.2009


Ответы (2)


Проблема решена

Я нашел решение своей проблемы. Я переопределял методы start(), stop(), destroy() и create(); тем не менее, поскольку я расширяю абстрактный класс ServiceMBeanSupport, мне следует переопределить методы startService(), stopService() и т. д.

Я просто переместил свой код из метода start() в метод startService() и теперь все ведет себя так, как мне нужно: как только его зависимости выполняются, мой сервис запускается и выполняется метод startService().

Я думаю, вывод таков: хотя жизненный цикл MBean включает в себя вызовы create(), start(), stop() и destroy(), реализация абстрактного класса ServiceMBeanSupport использует эти методы для управления жизненным циклом. Тем не менее он предоставляет защищенные методы *Service(), позволяющие программисту участвовать в жизненном цикле.

person nozebacle    schedule 18.06.2009

Мне помогло определение методов остановки и запуска в интерфейсе MBean:

public interface MyServiceMBean {
    ...

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

Преимущество заключается в том, что вам не нужно расширять ServiceMBean или ServiceMBeanSupport.

person Roland Schneider    schedule 01.04.2011