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