일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- javascript
- postgres
- 하모니카
- 데이터베이스
- hamonikr
- 아틀라시안
- 리눅스
- install
- node
- java
- 설치
- 우분투
- 자바
- script
- 3.0
- ubuntu
- JS
- 설정
- python
- 자바스크립트
- 파이썬
- Linux
- DB
- PostgreSQL
- 윈도우
- Atlassian
- 스크립트
- Windows
- DATABASE
- 노드
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