uEngine6 기반 프로젝트 만들기
먼저, uEngine-default 프로젝트를 복제한다:
git clone https://github.com/uengine-oss/uEngine6-bpm
복제한 uEngine-default 프로젝트를 해당 사이트의 프로젝트 명으로 전환한다:
mv uEngine6-default someproject
cd someproject
pom.xml 내의 프로젝트에 대한 설명 정보도 바꿔 준다:
<groupId>com.company</groupId>
<artifactId>bpm-project</artifactId>
그런다음 빌드를 실시한다:
mvn spring-boot:run
설정 변경과 커스터마이징
WebConfig.java
package org.uengine.five;
...
@EnableWebMvc
@Configuration
public class WebConfig extends org.uengine.social.uEngine6WebConfig {
/**
* Uncomment and implement if you want to change default storage
*/
// @Bean
// @Override
// public Storage storage() {
// CLOBStorage storage = new CLOBStorage();
// storage.setDataSource(dataSource());
// storage.setTableName("bpm_def");
//
// return storage;
// }
/**
* Uncomment and add ActivityFilters like following example
*/
// @Bean
// public ActivityFilter exampleActivityFilter1() {
// return new ExampleActivityFilter1();
// }
//
// @Bean
// public ActivityFilter exampleActivityFilter2() {
// return new ExampleActivityFilter2();
// }
//
/**
* Uncomment and return an implementation of ProcessInstance. default is JPAProcessInstance
*/
// @Bean
// @Scope("prototype")
// @Override
// public ProcessInstance processInstance(ProcessDefinition procDefinition, String instanceId, Map options) throws Exception {
// return new CustomProcessInstance(procDefinition, instanceId, options);
// }
/**
* Uncomment and return an real datasource not the H2
*/
@Bean
public DataSource dataSource() {
//In classpath from spring-boot-starter-web
final Properties pool = new Properties();
pool.put("driverClassName", "com.mysql.jdbc.Driver");
pool.put("url", "jdbc:mysql://localhost:3306/uengine?useUnicode=true&characterEncoding=UTF8&useOldAliasMetadataBehavior=true");
pool.put("username", "root");
pool.put("password", "");
pool.put("minIdle", 1);
try {
return new org.apache.tomcat.jdbc.pool.DataSourceFactory().createDataSource(pool);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
위의 예제는 각각 저장 매체, 액티비티 필터 설치, 접속데이터베이스 (기본은 H2 DB) 변경에 대한 샘플이다.
- 예를 들어, 저장매체를 변경한다면,
@Bean
@Override
public Storage storage() {
AmazonS3Storage storage = new AmazonS3Storage();
storage.setAmazonS3Bucket("bucketName");
storage.setAwsAccessKey(ACCESS_KEY);
storage.setAwsSecretAccessKey(SECRET);
return storage;
}
- 사용할 수 있는 저장매체로는 LocalFileStorage, AmazonS3Storage, CouchbaseStorage 등을 사용할 수 있고, 직접 구현하여 CLOB 기반 저장소, git 버전관리 기반 저장소 등을 만들어 쓰면 된다.
- 액티비티 필터는 하나 이상을 선언해서 쓰면 된다, 호출 순서는 Spring에서 알아서 정할 것이기 때문에 (리플랙션으로) 잘 모르겠다. (헐) :
@Bean
public ActivityFilter exampleActivityFilter1() {
return new ExampleActivityFilter1();
}
@Bean
public ActivityFilter exampleActivityFilter2() {
return new ExampleActivityFilter2();
}
- 액티비티 필터가 뭐하는 거냐고 묻는다면 모든 프로세스와 액티비티 실행시 거쳐가는 리스너의 개념으로 (프로세스 실행에 제약을 줄 수 있는 권한은 없으므로 어째보면 정확히 필터는 아니고 리스너에 가깝다. 처음에 네이밍을 잘못했네 이사람아..)
package org.uengine.kernel;
/**
* @author Jinyoung Jang
*/
public interface ActivityFilter extends java.io.Serializable{
//run-time
void beforeExecute(Activity activity, ProcessInstance instance) throws Exception;
void afterExecute(Activity activity, ProcessInstance instance) throws Exception;
void afterComplete(Activity activity, ProcessInstance instance) throws Exception;
void onPropertyChange(Activity activity, ProcessInstance instance, String propertyName, Object changedValue) throws Exception;
//deploy time
void onDeploy(ProcessDefinition definition) throws Exception;
}