
예외 유형을 분류할 수 있는 두가지 기본 그룹
시스템 예외
응용 프로그램 기반의 문제
어플리케이션이 예상대로 작동하지 않아서 그것을 블루프리즘이 인식할 때 발생한다.
비즈니스 예외
규칙 기반의 문제로 블루프리즘이 데이터에 반응 할 때 발생한다.
예외로 표시된 항목은 완료되기 전에 사람이 검토해야함.
블루 프리즘 솔루션을 설계할 때 예외 탈출경로도 고려해야함.
포괄적인 예외 처리르 조치를 마련한다는 것은 오류가 발생하여도 프로세스가 계속 실행 될 수 있음을 의미한다.
예외처리를 잘하기 위해서는 오류가 발생할 가능성이 있는 시점을 식별하고, 발생시 처리 방법을 아는 것이 중요함.
예외처리를 프로세스 다이어그램 및 비즈니스 객체에 구축할 수 있다.
예외처리를 하지 않을 시
프로세스는 메인 페이지로 이동하고 예외로 인해서 세션이 종료된다.
이를 예외 버블링 이라고 한다.
예외가 발생할 때 예외 버블링을 관리하고, 세션을 계속 진행할 수 있도록 하기 위한
첫 번째 단계 = 프로세스 솔루션에 복구 모드를 만들어 넣기.
이 때 필요한 주요 요소는 복구 스테이지와 회복 스테이지이며, 둘이 함께 작동하여 예외를 복구하고 프로세스를 계속 진행하게 만든다.
일련의 경주에서 경쟁자의 평균 점수 계산 프로세스
step1.) 새 비즈니스 객체 생성 및 데이터 항목 및 계산 스테이지 설정
숫자 데이터 유형의 데이터 항목 3개 생성
2개의 경주 점수 데이터 항목과 경주 횟수를 위한 데이터항목
Race Score1 = 10 , Race Score2 = 15 , Number of Races = 0
Number of Races의 초기값을 0으로 해둔 이유는 의도적으로 예외를 발생시키게 하기 위함.
계산 스테이지에서 숫자 값을 0으로 나누면 인식 불가 > 예외발생 (자바랑 동일)

step2.) 데이터 항목 내의 값을 사용하는 계산 논리 생성
두 경기의 점수를 더하고 결과를 Number of Races로 나눈다.
Average Score이름의 데이터항목도 추가하여 평균을 계산
Calculation Stage 추가

step3.) 데이터 항목 중 하나에 실행할 수 없는 값을 입력하여 강제 예외발생
실행하면 아래와 같은 Error 발생

step4.) 객체 다이어그램에 복구 스테이지 및 회복 스테이지를 추가하여 예외처리
예외를 포착하는 복구로직 만들기
Recover Stage (복구 스테이지)추가 > Resume Stage(회복 스테이지) 추가
복구 스테이지는 들어오는 연결이 존재하지 않는다. 예외가 발생한다.("happy path"의 일부가 아님)
두 번째 종료 스테이지 추가 후 실행

예외 처리가 프로세스 솔루션에 구축되지 않은 경우 프로세스가 구성된 방식에 의한 예외나,
프로세스에서 사용하는 응용 프로그램 성능에 의한 예외는 모두 내부 예외로 분류된다.
내부 예외가 발생하면 내부 오류 메시지 창이 나타나고 예외에 대한 세부정보를 제공한다.
오류를 식별하기 어려운 경우를 대비해 예외 스테이지를 프로세스 솔루션 전반에 걸쳐서 포함시킬 수 있다.
예외 스테이지는 예외에 대한 간결하고 의미있는 정보를 포함할 수 있는 기능을 제공한다.

이 정보는 프로세스를 통해 처리 된 후 세션 로그를 통해 확인할 수 있다.
Racer Score 비즈니스 객체
step1.) 액션 다이어그램 내에서 예외 스테이지를 사용하여 예외를 발생시키는 방법
1.1 액션 다이어 그램에 Decision Stage(결정 스테이지) 추가
1.2 Number of Races 데이터 항목 값이 0 보다 큰지 확인하는 표현식 만들기

1.3 Decision Stage의 No 경로에 예외 스테이지를 추가
1.4 저장후 프로세스 실행

step2.) 예외 속성 내에서 예외 유형 및 예외 세부정보를 구성하는 방법
예외가 예측되는 경우 주변 상황을 포함하여 해당 오류와 관련된 정보가 포함된 예외 스테이지를 포함하는 것이 가장 좋다.
예외 유형과 예외 세부정보를 적어주는 것이 중요!
예외 유형은 드롭다운에 있지만 더 자세하게 적고 싶다면 고유한 예외유형을 정의 가능함
예외 세부정보는 세션로그와 컨트롤 룸의 작업로그에서 확인이 가능하기 때문에 프로세스 내용에 적합한 내용을 적어주는 것이 오류를 빨리 해결할 수 있다.
또한 예외 세부정보는 따옴표로 묶은 문자열이나 데이터 항목이어야 함.

프로세스가 예외를 식별하면 특정 작업을 먼저 수행하고 나서 예외를 확인하고 던진 후 프로세스를 종료해야 하는 경우가 있다.
ex) 로그아웃 후 닫기, 상호작용하는 응용 프로그램에 문제가 있음을 표시,
이런 경우 프로세스 솔루션을 구축할 수 있다.
데이터 항목 내에 예외 세부 정보를 저장하고 복구 모드 내부에서 논리를 만들어 처리.
복구모드 내에 계산 스테이지를 설정 > 데이터 항목 내에 예외 세부 정보를 저장
계산 스테이지 속성
Functions의 Exceptions> Exception Detail 을 표현식에 드래그 앤 드랍
Store Result In 에 Exception Detail 작성 후 옆 아이콘 클릭 하면 데이터 항목이 자동 생성된다.

결과 화면

Exception Detail 및 Exception Type 과 같은 예외 함수는 Recover Stage(복구 스테이지) 및 Resume Stage(회복 스테이지) 사이에서만 사용할 수 있다.
이때만 예외가 유지되고 함수를 수행할 수 있기 때문.
복구모드 밖에서는 예외 함수가 작동 하지 않는다.

예외가 발생할 때마다 프로세스 솔루션의 최상위 계층에 있는 프로세스인 메인 페이지로 항상 이동.
비즈니스 객체 내의 액션 페이지에서 발생한 예외가 호출 프로세스를 지나서 예외 처리 로직이 포함된 페이지를 만날 때 까지 위로 이동하는 프로세스 솔루션
step1.) Racer Score 비즈니스 객체를 사용하는 프로세스를 생성.
1.1 Races Score 비즈니스 객체를 열어서 복구로직 제거 후 액션페이지 게시하고 저장

예외가 비즈니스 객체에서 호출 프로세스로 버블링 되는지 확인
1.2 New Racer Scores 프로세스 생성 후 액션 스테이지 추가

1.3 실행 후 버블링 테스트

비즈니스 객체에서 예외가 발생해 이를 사용하는 프로세스 버블링 되었음
step2.) 비즈니스 객체 및 프로세스 페이지를 통해 예외가 발생하는 다양한 방법을 실험
2.1 다른 프로세스 페이지 추가
2.2 메인 페이지의 프로세스 다이어그램에 복구 로직을 붙여넣기.

2.3 액션 페이지만 page1 에 추가

2.4 main page 에 페이지 참조 스테이지 추가
2.5 저장 후 실행

Racer Score 비즈니스 객체에서 발생한 예외가 프로세스의 메인 페이지까지 처리되지 않은 채로 전달되도록 만들었다.
비즈니스 객체에서 메인 페이지의 프로세스까지 도달하는 것을 볼 수 있다.


복구모드 내에서 사용되는 예외 스테이지는 일반적으로 버블링 되는 예외를 포착하고 다시 발생시키는 것을 목적으로 사용된다.
따라서 복구 모드내의 예외 스테이지는 버블링된 예외에 포함된 정보를 보존하도록 구성되어야 한다.
오류에 대한 정확한 설명이 세션 로그에 유지될 수 있다.
예외 스테이지 속성에서 Preserve the type and detail of the current exception을 선택하지 않으면 예외가 다시 발생할 때 새로운 예외가 생성된다.
이럴 경우 버블링 된 원래의 예외는 무시된다.
부정확한 정보가 캡처되고 기존의 예외 정보가 모두 사라지게 되어 오류의 원인을 식별하기 어려워진다.
다이어그램의 기본 흐름 내에서 사용되는 예외 스테이지에서는 Preserve 상자를 선택하면 오류 발생.
이는 복구 모드 외부의 예외단계는 항상 새로운 예외이므로 보존할 정보가 없기 때문.
step1.) 복구모드 내에서 결정 스테이지와 새 예외 스테이지를 추가하여 프로세스의 메인 페이지에 도달해도 처리할 수 없는 예외를 다시 발생시키기
1.1 메인페이지의 복구로직을 page1에 붙이기.

1.2 예외를 다시 발생시키기 위해 복구 스테이지와 계산 스테이지 사이에 결정 스테이지를 추가.

1.3 결정 스테이지 속성
복구된 예외가 Number of Races 데이터 항목이 0이기 때문인지 여부를 확인.

step2.) 프로세스의 기본페이지로 버블링 될 때 비즈니스 객체에 의해 생성된 예외정보 유지하는 방법
예외 스테이지 추가 및 속성
보존 상자를 선택하면 Exception Type 필드와 Exception Detail 필드가 비활성화된다.
예외 스테이지가 비즈니스 오브젝트에서 버블링된 예외 정보만 캡처하고, 다시 던지도록 설정되었기 때문. 따라서 복구 모드 내의 예외 스테이지에서 새로운 정보를 캡처할 필요가 없다.


예외 블록을 사용하여 더 정교한 수준의 예외 처리를 제어 할 수 있다.
블록은 복구 스테이지가 담당하는 프로세스 영역 또는 액션 다이어그램 영역을 분리하는 역할을 한다.
페이지를 별도의 예외 영역으로 나누는 수단.
블록이 없으면 복구 스테이지는 해당 페이지의 모든 스테이지에서 발생하는 모든 예외를 끌어들인다.
각 예외 영역에는 고유한 복구 스테이지와 예외 처리 논리를 가질 수 있으며, 동일한 블록 내에 있는 스테이지에서 생성된 예외에 대해 책임을 집중할 수 있다.
다른 예외는 무시된다.

블록의 장점
동일한 페이지에서 여러개의 복구 논리를 사용할 수 있게 해준다.
블록 사용시 주의할점
블록 내에는 하나의 복구 스테이지만 사용하도록 하는 것이 중요하다.
블록은 겹치지 않아야 한다.
블록을 서로의 내부에 배치하지 않아야 한다

이러한 방식의 블록사용은 아무런 이점을 주지 않는다.

블록은 복구 스테이지가 포함된 경우에만 작동한다.
첫 번째 복구 스테이지는 이제 동일한 블록 내부에 있는 스테이지에서 생성된 예외만 처리.

블록 외부의 스테이지에서 예외가 발생하는 경우, 두 번째 복구 스테이지에서 해당 예외를 포착한다.

첫 번째 복구 페이지만 블록 처리 했을 때

블록 내부의 프로세스 흐름에 스테이지가 없기 때문에 첫 번째 복구 스테이지가 불필요..