package org.activiti.explorer.conf;
|
|
import java.sql.Driver;
|
import java.util.ArrayList;
|
import java.util.List;
|
|
import javax.sql.DataSource;
|
|
import org.activiti.engine.FormService;
|
import org.activiti.engine.HistoryService;
|
import org.activiti.engine.IdentityService;
|
import org.activiti.engine.ManagementService;
|
import org.activiti.engine.ProcessEngine;
|
import org.activiti.engine.RepositoryService;
|
import org.activiti.engine.RuntimeService;
|
import org.activiti.engine.TaskService;
|
import org.activiti.engine.form.AbstractFormType;
|
import org.activiti.engine.impl.cfg.ProcessEngineConfigurationImpl;
|
import org.activiti.explorer.form.MonthFormType;
|
import org.activiti.explorer.form.ProcessDefinitionFormType;
|
import org.activiti.explorer.form.UserFormType;
|
import org.activiti.spring.ProcessEngineFactoryBean;
|
import org.activiti.spring.SpringProcessEngineConfiguration;
|
import org.apache.commons.lang3.StringUtils;
|
import org.slf4j.Logger;
|
import org.slf4j.LoggerFactory;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Configuration;
|
import org.springframework.core.env.Environment;
|
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
|
import org.springframework.jdbc.datasource.SimpleDriverDataSource;
|
import org.springframework.transaction.PlatformTransactionManager;
|
|
@Configuration
|
public class ActivitiEngineConfiguration {
|
|
private final Logger log = LoggerFactory.getLogger(ActivitiEngineConfiguration.class);
|
|
@Autowired
|
protected Environment environment;
|
|
@Bean
|
public DataSource dataSource() {
|
SimpleDriverDataSource ds = new SimpleDriverDataSource();
|
|
try {
|
@SuppressWarnings("unchecked")
|
Class<? extends Driver> driverClass = (Class<? extends Driver>) Class.forName(environment.getProperty("jdbc.driver", "org.h2.Driver"));
|
ds.setDriverClass(driverClass);
|
|
} catch (Exception e) {
|
log.error("Error loading driver class", e);
|
}
|
|
// Connection settings
|
ds.setUrl(environment.getProperty("jdbc.url", "jdbc:h2:mem:activiti;DB_CLOSE_DELAY=1000"));
|
ds.setUsername(environment.getProperty("jdbc.username", "sa"));
|
ds.setPassword(environment.getProperty("jdbc.password", ""));
|
|
return ds;
|
}
|
|
@Bean(name = "transactionManager")
|
public PlatformTransactionManager annotationDrivenTransactionManager() {
|
DataSourceTransactionManager transactionManager = new DataSourceTransactionManager();
|
transactionManager.setDataSource(dataSource());
|
return transactionManager;
|
}
|
|
@Bean(name="processEngineFactoryBean")
|
public ProcessEngineFactoryBean processEngineFactoryBean() {
|
ProcessEngineFactoryBean factoryBean = new ProcessEngineFactoryBean();
|
factoryBean.setProcessEngineConfiguration(processEngineConfiguration());
|
return factoryBean;
|
}
|
|
@Bean(name="processEngine")
|
public ProcessEngine processEngine() {
|
// Safe to call the getObject() on the @Bean annotated processEngineFactoryBean(), will be
|
// the fully initialized object instanced from the factory and will NOT be created more than once
|
try {
|
return processEngineFactoryBean().getObject();
|
} catch (Exception e) {
|
throw new RuntimeException(e);
|
}
|
}
|
|
@Bean(name="processEngineConfiguration")
|
public ProcessEngineConfigurationImpl processEngineConfiguration() {
|
SpringProcessEngineConfiguration processEngineConfiguration = new SpringProcessEngineConfiguration();
|
processEngineConfiguration.setDataSource(dataSource());
|
processEngineConfiguration.setDatabaseSchemaUpdate(environment.getProperty("engine.schema.update", "true"));
|
processEngineConfiguration.setTransactionManager(annotationDrivenTransactionManager());
|
processEngineConfiguration.setJobExecutorActivate(Boolean.valueOf(
|
environment.getProperty("engine.activate.jobexecutor", "false")));
|
processEngineConfiguration.setAsyncExecutorEnabled(Boolean.valueOf(
|
environment.getProperty("engine.asyncexecutor.enabled", "true")));
|
processEngineConfiguration.setAsyncExecutorActivate(Boolean.valueOf(
|
environment.getProperty("engine.asyncexecutor.activate", "true")));
|
processEngineConfiguration.setHistory(environment.getProperty("engine.history.level", "full"));
|
|
String mailEnabled = environment.getProperty("engine.email.enabled");
|
if ("true".equals(mailEnabled)) {
|
processEngineConfiguration.setMailServerHost(environment.getProperty("engine.email.host"));
|
int emailPort = 1025;
|
String emailPortProperty = environment.getProperty("engine.email.port");
|
if (StringUtils.isNotEmpty(emailPortProperty)) {
|
emailPort = Integer.valueOf(emailPortProperty);
|
}
|
processEngineConfiguration.setMailServerPort(emailPort);
|
String emailUsernameProperty = environment.getProperty("engine.email.username");
|
if (StringUtils.isNotEmpty(emailUsernameProperty)) {
|
processEngineConfiguration.setMailServerUsername(emailUsernameProperty);
|
}
|
|
String emailPasswordProperty = environment.getProperty("engine.email.password");
|
if (StringUtils.isNotEmpty(emailPasswordProperty)) {
|
processEngineConfiguration.setMailServerPassword(emailPasswordProperty);
|
}
|
}
|
|
List<AbstractFormType> formTypes = new ArrayList<AbstractFormType>();
|
formTypes.add(new UserFormType());
|
formTypes.add(new ProcessDefinitionFormType());
|
formTypes.add(new MonthFormType());
|
processEngineConfiguration.setCustomFormTypes(formTypes);
|
|
return processEngineConfiguration;
|
}
|
|
@Bean
|
public RepositoryService repositoryService() {
|
return processEngine().getRepositoryService();
|
}
|
|
@Bean
|
public RuntimeService runtimeService() {
|
return processEngine().getRuntimeService();
|
}
|
|
@Bean
|
public TaskService taskService() {
|
return processEngine().getTaskService();
|
}
|
|
@Bean
|
public HistoryService historyService() {
|
return processEngine().getHistoryService();
|
}
|
|
@Bean
|
public FormService formService() {
|
return processEngine().getFormService();
|
}
|
|
@Bean
|
public IdentityService identityService() {
|
return processEngine().getIdentityService();
|
}
|
|
@Bean
|
public ManagementService managementService() {
|
return processEngine().getManagementService();
|
}
|
}
|