我正在尝试构建一个应该在每次启动服务器时自动启动的 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() 方法中有很多登录代码,但我没有看到任何输出。
但是,当我使用 JMXConsole 查看 MBean 状态时,它的状态 (StateString) 是“已启动”。
问题解决了
我找到了解决我的问题的方法。我重写了方法 start()、stop()、destroy() 和 create();尽管如此,由于我正在扩展抽象类 ServiceMBeanSupport,我应该重写方法 startService()、stopService() 等。
我刚刚将我的代码从方法 start() 移动到方法 startService(),现在一切都按照我的需要运行:只要它的依赖关系得到满足,我的服务就会启动并执行 startService() 方法。
我认为结论是:虽然 MBean 的生命周期涉及调用 create()、start()、stop() 和 destroy(),但抽象类 ServiceMBeanSupport 的实现使用这些方法来处理生命周期。然而,它提供了受保护的方法 *Service() 以允许程序员参与生命周期。