ChangeRecorder
ChangeRecorder는 org.eclipse.emf.ecore.change에 포함되어 있는 도구로, EObject를 상속받은 객체들의 변경을 추적할 수 있는 도구이다. 이를 사용하는 예제는 다음과 같다:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | // 임의의 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()); |
트랜잭션 처리
위의 예제를 좀 더 일반화된 트랜잭션 관리 코드로 나타내면 다음과 같은 모양이 된다:1 2 3 4 5 6 7 | ChangeRecorder recorder = new ChangeRecorder(model); try { 모델을 조작하는 코드들이 여기에 위치한다... } catch (Exception e){ // 모델을 다루는 작업 도중 문제가 발생한 경우 롤백 시킨다. recorder.endRecording().apply(); } |
ChangeDescription
그런데 재미있는 점은 모델의 변경을 기술하는 객체인 ChangeDescription 역시, EObject를 상속받는다는 점이다. 이 말은 ChangeDescription 역시 EMF를 통해 제네레이트 된 코드라는 뜻이다. 다시 말해 ChangeDescription은 XML로 시리얼라이즈 될 수 있다. 이 사실은 도전적인 독자들에게, XML로 시리얼라이즈된 ChangeDescription을 이용하여, 네트워크 너머의 모델을 수정할 수 있다라는 멋진 아이디어에 들뜨게 할 것이다. ChangeDescription은 ChangeFactory 및 ChangePackage를 이용하여 직접만들거나, 리소스로 부터 읽거나 쓸수 있다. 여기서는 간단한 예제만을 다뤄 보이겠다:1 2 3 4 5 6 7 8 9 | // 녹화 종료 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>()); |
'EMF' 카테고리의 다른 글
EMF, XML 1.1 읽어들이기 문제 (0) | 2011.04.18 |
---|---|
How to Customize EMF Loading (0) | 2010.09.27 |