package org.cad.interruptus.core; import org.springframework.beans.factory.DisposableBean; import org.springframework.beans.factory.FactoryBean; import com.espertech.esper.client.EPServiceProvider; import com.espertech.esper.client.Configuration; import com.espertech.esper.client.EPServiceProviderManager; import com.espertech.esperio.amqp.AMQPSource; import org.springframework.beans.factory.InitializingBean; public class EsperServiceProviderFactoryBean implements FactoryBean<EPServiceProvider>, InitializingBean, DisposableBean { EPServiceProvider serviceProvider; @Override public EPServiceProvider getObject() { if (serviceProvider != null) { return serviceProvider; } final Configuration config = createConfiguration(); final EPServiceProvider service = createServiceProvider(config); service.initialize(); serviceProvider = service; return service; } @Override public Class<?> getObjectType() { return EPServiceProvider.class; } @Override public boolean isSingleton() { return true; } @Override public void destroy() { if (serviceProvider == null) { return; } serviceProvider.destroy(); } @Override public void afterPropertiesSet() { } protected Configuration createConfiguration() { final Configuration config = new Configuration(); config.addImport(AMQPSource.class.getPackage().getName() + ".*"); return config; } protected EPServiceProvider createServiceProvider(final Configuration config) { return EPServiceProviderManager.getDefaultProvider(config); } }