package org.activiti.spring.components.config.java.impl;
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.impl.cfg.ProcessEngineConfigurationImpl;
import org.activiti.spring.ProcessEngineFactoryBean;
import org.activiti.spring.SpringProcessEngineConfiguration;
import org.activiti.spring.components.config.java.ActivitiConfigurer;
import org.springframework.context.ApplicationContext;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.util.Assert;
import javax.sql.DataSource;
/**
* @author Josh Long
*/
public class DefaultActivitiConfigurer implements ActivitiConfigurer {
private DataSource dataSource;
private PlatformTransactionManager platformTransactionManager;
private ApplicationContext applicationContext;
public DefaultActivitiConfigurer(ApplicationContext context, DataSource d) {
setup(context, d);
}
public ApplicationContext applicationContext() {
return this.applicationContext;
}
private void setup(ApplicationContext context, DataSource d) {
this.applicationContext = context;
Assert.notNull(d, "the dataSource can't be null");
if (d instanceof TransactionAwareDataSourceProxy) {
this.dataSource = d;
} else {
TransactionAwareDataSourceProxy transactionAwareDataSourceProxy =
new TransactionAwareDataSourceProxy(d);
transactionAwareDataSourceProxy.afterPropertiesSet();
this.dataSource = transactionAwareDataSourceProxy;
}
this.platformTransactionManager = new DataSourceTransactionManager(d);
}
public DataSource dataSource() {
return this.dataSource;
}
public PlatformTransactionManager platformTransactionManager() {
return this.platformTransactionManager;
}
public ProcessEngineConfigurationImpl processEngineConfiguration() {
SpringProcessEngineConfiguration springProcessEngineConfiguration = new SpringProcessEngineConfiguration();
springProcessEngineConfiguration.setDatabaseSchemaUpdate(SpringProcessEngineConfiguration.DB_SCHEMA_UPDATE_CREATE);
springProcessEngineConfiguration.setTransactionManager(platformTransactionManager());
springProcessEngineConfiguration.setJobExecutorActivate(false);
springProcessEngineConfiguration.setDataSource(dataSource());
return springProcessEngineConfiguration;
}
public ProcessEngine processEngine() throws Exception {
ProcessEngineFactoryBean processEngineFactoryBean = new ProcessEngineFactoryBean();
processEngineFactoryBean.setApplicationContext(this.applicationContext());
processEngineFactoryBean.setProcessEngineConfiguration(processEngineConfiguration());
return processEngineFactoryBean.getObject();
}
}