package de.codecentric.mule.configuration;
import org.mule.api.MuleContext;
import org.mule.api.MuleException;
import org.mule.config.spring.SpringXmlConfigurationBuilder;
import org.mule.context.DefaultMuleContextFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationListener;
import org.springframework.context.event.ApplicationContextEvent;
import org.springframework.context.event.ContextClosedEvent;
import org.springframework.context.event.ContextRefreshedEvent;
import org.springframework.context.support.StaticApplicationContext;
/**
* ApplicationListener to startup Mule
*
* @author Dennis Schulte
*/
public class MuleContextInitializer implements ApplicationListener<ApplicationContextEvent> {
private MuleContext muleContext;
private String config = "mule-config.xml";
@Override
public void onApplicationEvent(ApplicationContextEvent event) {
if (event instanceof ContextRefreshedEvent && event.getApplicationContext().getParent() == null) {
startMuleContext(event.getApplicationContext());
} else if (event instanceof ContextClosedEvent) {
stopMuleContext();
}
}
private void startMuleContext(ApplicationContext parent) {
if (muleContext == null) {
DefaultMuleContextFactory muleContextFactory = new DefaultMuleContextFactory();
try {
SpringXmlConfigurationBuilder configBuilder = new SpringXmlConfigurationBuilder(config);
StaticApplicationContext staticApplicationContext = new StaticApplicationContext(parent);
staticApplicationContext.refresh();
configBuilder.setParentContext(staticApplicationContext);
muleContext = muleContextFactory.createMuleContext(configBuilder);
muleContext.start();
} catch (MuleException e) {
throw new RuntimeException(e);
}
}
}
private void stopMuleContext() {
if (muleContext != null) {
muleContext.dispose();
muleContext = null;
}
}
public MuleContext getMuleContext() {
return muleContext;
}
public void setConfig(String config) {
this.config = config;
}
public String getConfig() {
return config;
}
}