'transaction'에 해당되는 글 1건

  1. 2009.06.08 EMF 트랜잭션 관리

EMF 트랜잭션 관리

EMF 2009. 6. 8. 19:42

ChangeRecorder

ChangeRecorder는 org.eclipse.emf.ecore.change에 포함되어 있는 도구로, EObject를 상속받은 객체들의 변경을 추적할 수 있는 도구이다. 이를 사용하는 예제는 다음과 같다:
// 임의의 ecore 모델을 하나 만든다.
Person jiyul = MyFactory.eINSTANCE.createPerson();
jiyul.setName("Jiyul");

// 롤백 디스크립션 작성 시작
ChangeRecorder recorder = new ChangeRecorder(jiyul);

// 모델을 변경 시킴
jiyul.setName("Sid Vicious");

// 녹화 종료
ChangeDescription rollbackDescription = recorder.endRecording();

// 녹화된 내용을 역으로 적용
rollbackDescription.apply();

System.out.println(jiyul.getName());
위의 코드를 수행 하면, jiyul:Person의 name을 시드 비샤스로 지정하였지만, 화면에는 지율이 출력된다. ChangeRecorder가 jiyul:Person이 발생시키는 모든 Notification을 수집하여 역으로 수행할 수 있는 ChangeDescription을 만들어 주기 때문이다. ChangeDescription은 녹화 이외에도 다른 방법으로도 생성할 수 있다.

트랜잭션 처리

위의 예제를 좀 더 일반화된 트랜잭션 관리 코드로 나타내면 다음과 같은 모양이 된다:
ChangeRecorder recorder = new ChangeRecorder(model);
try{
	모델을 조작하는 코드들이 여기에 위치한다...
}catch(Exception e){
	// 모델을 다루는 작업 도중 문제가 발생한 경우 롤백 시킨다.
	recorder.endRecording().apply();
}

ChangeDescription

그런데 재미있는 점은 모델의 변경을 기술하는 객체인 ChangeDescription 역시, EObject를 상속받는다는 점이다. 이 말은 ChangeDescription 역시 EMF를 통해 제네레이트 된 코드라는 뜻이다. 다시 말해 ChangeDescription은 XML로 시리얼라이즈 될 수 있다. 이 사실은 도전적인 독자들에게, XML로 시리얼라이즈된 ChangeDescription을 이용하여, 네트워크 너머의 모델을 수정할 수 있다라는 멋진 아이디어에 들뜨게 할 것이다. ChangeDescription은 ChangeFactory 및 ChangePackage를 이용하여 직접만들거나, 리소스로 부터 읽거나 쓸수 있다. 여기서는 간단한 예제만을 다뤄 보이겠다:
// 녹화 종료
ChangeDescription description = recorder.endRecording();

// 변경된 내용을 xml로 출력
ResourceSet rs = new ResourceSetImpl();
XMLResource resource = 
    (XMLResource) rs.createResource(URI.createFileURI("test.xml"));
resource.getContents().add(description);
resource.save(System.out, new HashMap<Object, Object>());
위의 코드를 수행하면 ChangeDescription의 내용이 시리얼라이즈 되는 것을 확인 할 수 있을 것이다.

'EMF' 카테고리의 다른 글

EMF, XML 1.1 읽어들이기 문제  (0) 2011.04.18
How to Customize EMF Loading  (0) 2010.09.27
Posted by 지이이이율
,