package app.activemq; import org.apache.activemq.broker.BrokerService; import org.apache.activemq.xbean.XBeanBrokerService; import org.springframework.beans.factory.DisposableBean; import org.springframework.beans.factory.FactoryBean; import org.springframework.beans.factory.InitializingBean; /** * Enable to start ActiveMQ in a thread. * Slaves of JDBC master-slave brokers * are not blocking the server startup * (waiting to obtain database lock) */ public class ThreadBrokerFactory implements FactoryBean, InitializingBean, DisposableBean { private static final Log LOG = LogFactory.getLog(ThreadBrokerFactory.class); // --------------------------------------- // Spring Beans private XBeanBrokerService brokerService; // --------------------------------------- class BrokerThread extends Thread { public void run() { try { log.info("Start init brokerService"); brokerService.start(); log.info("End init brokerService"); } catch (Exception e) { log.error("Init brokerService error : ", e); } } } @Override public Object getObject() throws Exception { return brokerService; } @Override public Class getObjectType() { return BrokerService.class; } @Override public boolean isSingleton() { return true; } @Override public void afterPropertiesSet() throws Exception { new BrokerThread().start(); } @Override public void destroy() throws Exception { if (brokerService != null) brokerService.stop(); } /*************************************************************************** * Generated code **************************************************************************/ public XBeanBrokerService getBrokerService() { return brokerService; } public void setBrokerService(XBeanBrokerService brokerService) { this.brokerService = brokerService; } }