jbpm Runtime strategy
총 3가지가 있는데 디폴트는 Singleton이다
성능테스트시에 was 쪽에 병목 현상이 일어나서 확인해본결과 아래의 내용대로 실행전략을 잘짜야겠다는 생각을 했다.
성능테스트를 위해 Per request로 모두 수정하여 테스트를 진행하였다.
Singleton stratege
KieSession 및 TaskService의 단일 인스턴스를 유지 합니다. 동기화로 인해서 성능이 저하되어 있긴 하지만 Thread safe하고 엑세스를 동기화 합니다. 아래와 같은 특징을 제공합니다.
- RuntimeEngine 및 taskService의 단일 인스턴스.
- 간단한 디자인과 컴팩트.
- 동기화 액세스 하는 프로세스 엔진중 괜챃음
- 하나의 KieSession instance의 모든 상태 object를 알수 있다.
- RuntimeManager간에 사용되는 KieSession의 ID 추적은 같은 세션을 사용합니다. 아래 설정의 임시위치에 이 ID가 저장이 됩니다.
- jbpm.data.dir
- jboss.server.data.dir
- java.io.tmpdir
Per request strategy
모든 요청에 대해 RuntimeEngine의 새로운 객체를 제공합니다. 요청이 완료되면 RuntimeEngine이 영구적으로 제거 됩니다.
KieSession 정보가 DB에서 제거됨.
아래와 같은 특징을 제공합니다모든 요청에 대해 완전히 격리된 프로세스 엔진 및 태스트 서비스를 운영함.
높은 부하에 대한 적합
KieSession 요청의 수명 시간 동안 만 사용할 수 있음.
Per process instance strategy
KieSession과 ProecssInstance사이의 엄격환 관계를 유지합니다. 이 전력은 최대의 성능 및 가장 유연한 접근 방식을 제공.
아래와 같은 특징을 제공합니다.
- ProcessInstance에 대해 동일한 KieSession을 제공하는것을 보장한다
- ProcessInstance는 모든 프로세스 인스턴스 완료/중단 시 KieSession의 라이프 사이클을 병합
- 프로세스 인스턴스는 해당 데이터에 액세스 할 수 있습니다.
- Context instance 허용
- EmptyContext 나 null : 사용가능한 프로세스 인스턴스 ID가 없다
- ProcessInstanceIDContext : 프로세스 인스턴스가 생성된 후 사용
- CorrelationKeyContext - 프로세스 InstanceID의 키를 대신해서 사용