package com.mossle.bpm.proxy;
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.impl.cfg.ProcessEngineConfigurationImpl;
import org.activiti.spring.ProcessEngineFactoryBean;
import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.FactoryBean;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
public class ProxyProcessEngineFactoryBean implements InitializingBean,
DisposableBean, FactoryBean<ProcessEngine>, ApplicationContextAware {
private ProxyProcessEngine proxyProcessEngine = new ProxyProcessEngine();
private ProcessEngineConfigurationImpl processEngineConfiguration;
private ApplicationContext applicationContext;
private boolean enabled = true;
public void afterPropertiesSet() throws Exception {
if (!enabled) {
return;
}
ProcessEngineFactoryBean processEngineFactoryBean = new ProcessEngineFactoryBean();
processEngineFactoryBean
.setProcessEngineConfiguration(processEngineConfiguration);
processEngineFactoryBean.setApplicationContext(applicationContext);
ProcessEngine processEngine = processEngineFactoryBean.getObject();
proxyProcessEngine.setProcessEngine(processEngine);
}
public void destroy() throws Exception {
proxyProcessEngine.close();
}
public ProcessEngine getObject() {
return proxyProcessEngine;
}
public Class<ProcessEngine> getObjectType() {
return ProcessEngine.class;
}
public boolean isSingleton() {
return true;
}
public void setEnabled(boolean enabled) {
this.enabled = enabled;
}
public void setProcessEngineConfiguration(
ProcessEngineConfigurationImpl processEngineConfiguration) {
this.processEngineConfiguration = processEngineConfiguration;
}
public void setApplicationContext(ApplicationContext applicationContext) {
this.applicationContext = applicationContext;
}
}