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