提交 d423c36f 编写于 作者: J Josh Long

cleanup

上级 727dd594
......@@ -154,6 +154,36 @@
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-rest</artifactId>
<!-- Excluding these in favour of the Spring Boot dependencies -->
<!--<exclusions>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
</exclusion>
</exclusions>-->
<optional>true</optional>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
......@@ -179,6 +209,13 @@
<optional>true</optional>
<!-- Having it on the classpath will enable JPA + Activiti, but it is not mandatory -->
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
<version>${spring.boot.version}</version>
<optional>true</optional>
<!-- Having it on the classpath will enable JPA + Activiti, but it is not mandatory -->
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
......
......@@ -10,9 +10,25 @@ import org.springframework.boot.context.properties.ConfigurationProperties;
public class ActivitiProperties {
private boolean checkProcessDefinitions;
private boolean restApiEnabled;
private String deploymentName;
public boolean isRestApiEnabled() {
return restApiEnabled;
}
public void setRestApiEnabled(boolean restApiEnabled) {
this.restApiEnabled = restApiEnabled;
}
public boolean isJpaEnabled() {
return jpaEnabled;
}
public void setJpaEnabled(boolean jpaEnabled) {
this.jpaEnabled = jpaEnabled;
}
private String databaseSchemaUpdate = "true" ;
private String databaseSchema;
......@@ -21,7 +37,27 @@ public class ActivitiProperties {
private String processDefinitionLocationSuffix = "**.bpmn20.xml";
private boolean jpa = true; // true by default
private String restApiMapping = "/api/";
public String getRestApiMapping() {
return restApiMapping;
}
public void setRestApiMapping(String restApiMapping) {
this.restApiMapping = restApiMapping;
}
public String getRestApiServletName() {
return restApiServletName;
}
public void setRestApiServletName(String restApiServletName) {
this.restApiServletName = restApiServletName;
}
private String restApiServletName = "activitiRestApi";
private boolean jpaEnabled = true; // true by default
public boolean isCheckProcessDefinitions() {
return checkProcessDefinitions;
......@@ -73,11 +109,4 @@ public class ActivitiProperties {
this.processDefinitionLocationSuffix = processDefinitionLocationSuffix;
}
public boolean isJpa() {
return jpa;
}
public void setJpa(boolean jpa) {
this.jpa = jpa;
}
}
......@@ -16,18 +16,22 @@
package org.activiti.spring.boot;
import org.activiti.engine.*;
import org.activiti.rest.service.application.ActivitiRestServicesApplication;
import org.activiti.spring.ProcessEngineFactoryBean;
import org.activiti.spring.SpringJobExecutor;
import org.activiti.spring.SpringProcessEngineConfiguration;
import org.restlet.ext.servlet.ServerServlet;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.condition.*;
import org.springframework.boot.context.embedded.ServletRegistrationBean;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.Resource;
import org.springframework.core.io.support.ResourcePatternResolver;
import org.springframework.core.task.SimpleAsyncTaskExecutor;
import org.springframework.core.task.TaskExecutor;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.util.StringUtils;
......@@ -159,13 +163,44 @@ public class ProcessEngineAutoConfiguration {
return super.identityServiceBean(processEngine);
}
@Bean
@ConditionalOnMissingBean
public PlatformTransactionManager transactionManager(DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
@Bean
@ConditionalOnMissingBean
public TaskExecutor taskExecutor() {
return new SimpleAsyncTaskExecutor();
}
}
/*
@ConditionalOnExpression("${spring.activiti.restApiEnabled:true}")
@Configuration
@ConditionalOnClass({ActivitiRestServicesApplication.class,
ServletRegistrationBean.class, ServerServlet.class})
public static class RestServiceAutoConfiguration {
@Autowired
private ActivitiProperties activitiProperties;
@Bean
public ServletRegistrationBean activitiRestRegistration() {
ServerServlet servlet = new ServerServlet();
ServletRegistrationBean registration = new ServletRegistrationBean(servlet,
this.activitiProperties.getRestApiMapping());
registration.addInitParameter("org.restlet.application", "org.activiti.rest.service.application.ActivitiRestServicesApplication");
registration.setName(this.activitiProperties.getRestApiServletName());
return null;
}
}
/*
@Configuration
@ConditionalOnClass({EntityManagerFactory.class})
public static class JpaAutoConfiguration {
......@@ -191,209 +226,6 @@ public class ProcessEngineAutoConfiguration {
};
}
}
*/
/**
* This installs the Activiti REST endpoints. The REST endpoints can be used to
* query the running workflow engine.
*//*
@Configuration
@ConditionalOnClass({ServletRegistrationBean.class, ServerServlet.class})
public static class RestServiceAutoConfiguration {
@Bean
ServletRegistrationBean activitiRestRegistration(
@Value("${spring.activiti.rest.mapping:activiti-rest}") String name,
@Value("${spring.activiti.rest.mapping:'/activiti*/
/*'}") String mapping) {
ServerServlet servlet = new ServerServlet();
ServletRegistrationBean registration = new ServletRegistrationBean(servlet, mapping);
registration.addInitParameter("org.restlet.application", "org.activiti.rest.service.application.ActivitiRestServicesApplication");
registration.setName(name);
return registration;
}
}
*/
}*/
}
/*
@Configuration
class ActivitiConfiguration {
@Autowired(required = false)
private List<TaskExecutor> executors;
@Autowired(required = false)
private List<ActivitiConfigurer> activitiConfigurers;
@Autowired(required = false)
private Map<String, DataSource> dataSources;
@Autowired(required = false)
private List<PlatformTransactionManager> platformTransactionManagers;
@Autowired(required = false)
private List<SpringJobExecutor> springJobExecutors;
@Bean
public SpringProcessEngineConfiguration springProcessEngineConfiguration(
) {
ActivitiConfigurer configurer = activitiConfigurer(activitiConfigurers);
List<Resource> processDefinitionResources = new ArrayList<Resource>();
configurer.processDefinitionResources(processDefinitionResources);
SpringProcessEngineConfiguration engine = new SpringProcessEngineConfiguration();
if (!processDefinitionResources.isEmpty()) {
engine.setDeploymentResources(processDefinitionResources
.toArray(new Resource[processDefinitionResources.size()]));
}
DataSource dataSource = dataSource(configurer, dataSources);
engine.setDataSource(dataSource);
engine.setTransactionManager(platformTransactionManager(dataSource));
engine.setJobExecutor(springJobExecutor());
engine.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE);
configurer.postProcessSpringProcessEngineConfiguration(engine);
return engine;
}
@Bean
public ProcessEngineFactoryBean processEngine(SpringProcessEngineConfiguration springProcessEngineConfiguration) {
ProcessEngineFactoryBean processEngineFactoryBean = new ProcessEngineFactoryBean();
processEngineFactoryBean.setProcessEngineConfiguration(springProcessEngineConfiguration);
return processEngineFactoryBean;
}
@Bean
public RuntimeService runtimeService(ProcessEngine processEngine) {
return processEngine.getRuntimeService();
}
@Bean
public RepositoryService repositoryService(ProcessEngine processEngine) {
return processEngine.getRepositoryService();
}
@Bean
public TaskService taskService(ProcessEngine processEngine) {
return processEngine.getTaskService();
}
@Bean
public HistoryService historyService(ProcessEngine processEngine) {
return processEngine.getHistoryService();
}
@Bean
public ManagementService managementService(ProcessEngine processEngine) {
return processEngine.getManagementService();
}
@Bean
public FormService formService(ProcessEngine processEngine) {
return processEngine.getFormService();
}
@Bean
public IdentityService identityService(ProcessEngine processEngine) {
return processEngine.getIdentityService();
}
*/
/*
* @Bean public static ProcessScopeBeanFactoryPostProcessor processScope() {
* return new ProcessScopeBeanFactoryPostProcessor(); }
*
* @Bean public SharedProcessInstanceFactoryBean
* processInstanceFactoryBean(SharedProcessInstanceHolder
* sharedProcessInstanceHolder) { return new
* SharedProcessInstanceFactoryBean(sharedProcessInstanceHolder); }
*
* @Bean public SharedProcessInstanceHolder processScopeContextHolder() {
* return new SharedProcessInstanceHolder(); }
*//*
*/
/* protected PlatformTransactionManager platformTransactionManager(final DataSource dataSource) {
return first(this.platformTransactionManagers,
new ObjectFactory<PlatformTransactionManager>() {
@Override
public PlatformTransactionManager getObject() throws BeansException {
return new DataSourceTransactionManager(dataSource);
}
});
}*//*
protected SpringJobExecutor springJobExecutor() {
return first(this.springJobExecutors,
new ObjectFactory<SpringJobExecutor>() {
@Override
public SpringJobExecutor getObject() throws BeansException {
TaskExecutor taskExecutor = first(executors,
new ObjectFactory<TaskExecutor>() {
@Override
public TaskExecutor getObject() throws BeansException {
return new SyncTaskExecutor();
}
});
return new SpringJobExecutor(taskExecutor);
}
});
}
protected ActivitiConfigurer activitiConfigurer(final List<ActivitiConfigurer> activitiConfigurers) {
return new ActivitiConfigurer() {
@Override
public void processDefinitionResources(List<Resource> resourceList) {
List<Resource> resources = new ArrayList<Resource>();
// lets first see if any exist in the default place:
Resource defaultClassPathResourceMatcher = new ClassPathResource("classpath:/processes*/
/**bpmn20.xml");
if (defaultClassPathResourceMatcher.exists()) {
resources.add(defaultClassPathResourceMatcher);
}
if (activitiConfigurers != null && !activitiConfigurers.isEmpty()) {
for (ActivitiConfigurer ac : activitiConfigurers) {
ac.processDefinitionResources(resources);
}
}
resourceList.addAll(resources);
}
@Override public void postProcessSpringProcessEngineConfiguration(SpringProcessEngineConfiguration springProcessEngineConfiguration) {
if (activitiConfigurers != null) {
for (ActivitiConfigurer configurer : activitiConfigurers) {
configurer.postProcessSpringProcessEngineConfiguration(springProcessEngineConfiguration);
}
}
}
};
}
private static <T> T first(List<T> tList, ObjectFactory<T> tObjectFactory) {
T rt;
if (tList != null && !tList.isEmpty()) {
rt = tList.iterator().next();
} else {
rt = tObjectFactory.getObject();
}
return rt;
}
}
*/
......@@ -4,11 +4,12 @@ import org.activiti.engine.ProcessEngine;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.repository.ProcessDefinition;
import org.apache.commons.dbcp.BasicDataSource;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
......@@ -20,7 +21,9 @@ import org.springframework.transaction.PlatformTransactionManager;
import javax.sql.DataSource;
import java.util.List;
public class TestAutoConfiguration {
public class TestProcessEngineAutoConfiguration {
private ConfigurableApplicationContext applicationContext;
@Configuration
@EnableAutoConfiguration
......@@ -48,20 +51,31 @@ public class TestAutoConfiguration {
}
}
@Test
public void testProcessEngine() throws Exception {
ProcessEngine processEngine = applicationContext.getBean(ProcessEngine.class);
Assert.assertNotNull("the processEngine should not be null!", processEngine);
}
private ConfigurableApplicationContext applicationContext;
@After
public void close() {
this.applicationContext.close();
}
@Test
public void testRunsWithRestApis() {
System.setProperty("spring.activiti.restApiEnabled", "true");
this.applicationContext = SpringApplication.run(SimpleDataSourceConfiguration.class);
// do RestTemplate or something
}
@Test
public void testRunsWithoutRestApis() {
System.setProperty("spring.activiti.restApiEnabled", "false");
this.applicationContext = SpringApplication.run(SimpleDataSourceConfiguration.class);
}
@Before
public void setUp() {
this.applicationContext = new SpringApplicationBuilder(SimpleDataSourceConfiguration.class)
.web(false)
.run();
}
@Test
......@@ -77,6 +91,4 @@ public class TestAutoConfiguration {
ProcessDefinition processDefinition = processDefinitionList.iterator().next();
Assert.assertEquals(processDefinition.getKey(), "waiter");
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册