일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 윈도우
- python
- DATABASE
- 설치
- Linux
- node
- 노드
- javascript
- 아틀라시안
- Windows
- 우분투
- 리눅스
- install
- postgres
- 자바스크립트
- 3.0
- 파이썬
- java
- ubuntu
- 설정
- Atlassian
- DB
- script
- JS
- 하모니카
- PostgreSQL
- hamonikr
- 데이터베이스
- 스크립트
- 자바
Archives
- Today
- Total
LukeHan 의 잡다한 기술 블로그
Transaction execute 코드 적용 본문
반응형
기존 플러그인을 신규 구축한 Confluence 에 적용한 후 테스트를 진행하였으나 아래와 같은 에러가 발생 하였다.
org.springframework.orm.hibernate5.HibernateOptimisticLockingFailureException: Object of class [com.atlassian.confluence.pages.Page] with identifier [393407]: optimistic locking failed; nested exception is org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect) : [com.atlassian.confluence.pages.Page#393407]
확인해 보니 Confluence 가 상위 버전으로 넘어가면서 Transaction 처리 방법이 변경되었다고 한다.
환경 구성
- Confluence 기존 버전 : 6.15.2
- Confluence 신규 버전 : 7.19.0
코드 적용 예시
package [...];
[...] // import api
import com.atlassian.sal.api.transaction.TransactionTemplate;
public class TestService{
// [...] // import bean
@ConfluenceImport
private final TransactionTemplate transactionTemplate;
@Autowired
public TestService(
// [...] ,
TransactionTemplate transactionTemplate){
// [...]
this.transactionTemplate = transactionTemplate;
}
public void transactionTest(){
transactionTemplate.execute(() -> {
// [...]
ttachmentManager.saveAttachment(...); // outter Transaction
// [...]
Page page = pageManager.getPage(pageId); // outter Transaction
Page originalPage = (Page) page.clone();
String content = page.getBodyAsString();
//modify content
page.setBodyAsString(content);
pageManager.saveContentEntity(page, originalPage, null); // outter Transaction
// [...]
return null;
});
}
}
반응형
Comments