Автоматический запуск службы JBoss (MBean) - PullRequest
8 голосов
/ 18 июня 2009

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

Ответы [ 2 ]

6 голосов
/ 18 июня 2009

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

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

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

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

2 голосов
/ 01 апреля 2011

Для меня это помогло определить методы остановки и запуска в интерфейсе MBean:

public interface MyServiceMBean {
    ...

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

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

...