destroyApp()는 당신의 친구

Java ME 2009/09/28 15:17 Posted by Sun
destroyApp()는 당신의 친구 Vikram Goyal 이 팁은 RecordStore 작업의 스레드 안전에 관해 썬 포럼에서 이루어진 최근의 토론에 대한 답변입니다. 이번 토론은 여러 가지 다른 방향으로 진행되었지만, 그 핵심이 되는 문제는 바로 타사 라이브러리가 안전하지 못하게 작동할 때 스스로를 어떻게 보호할 것인가 하는 것이었습니다. 그에 대한 해답이 간단하지는 않지만, 이 테크팁에서는 이번 토론이 시작될 때 제기되었던 구체적인 예제에 답해보도록 하겠습니다. 아마 그렇게 하는 것이 실제로 그런 문제를 다루기 위한 일반적인 지침을 제공하는 데 도움이 될 것입니다. RecordStore의 안전 이 문제는 개별 레코드 항목의 안전 문제로 요약됩니다. 레코드 항목 메소드 자체는 원자성, recordStore.addRecord(), 성격을 지니므로 스레드로부터의 안전이 보장됩니다. 하지만, 포럼 토론에서도 지적된 바와 같이, 레코드 저장소에 기록 중인 두 개의 레코드에 관해 일관성을 평가하고 애플리케이션 관리 소프트웨어(AMS)가 두 개의 호출 사이에서 destroyApp()를 호출했기 때문에 하나만 입력되고 두 번째 항목은 중단된 경우 데이터를 관리할 방법이 없어졌습니까? 현재 데이터가 불일치합니까? 물론, 그렇지 않습니다. 타사 소프트웨어에서 destroyApp() 메소드를 호출하더라도, 바로 이 점에서 이 메소드에 대한 진짜 이유가 드러납니다. 다음 코드에서 필자는 이 시나리오를 일관되게 처리하는 destroyApp() 메소드를 제시합니다. public void destroyApp(boolean unconditional) throws MIDletStateChangeException { if(!unconditional) { if(!recordsWritten) { // Records have not been written yet -- wait! throw new MIDletStateChangeException(); } else { // Records written -- MIDlet can be destroyed! } } else { // must destroy if(!recordsWritten) { // Roll back the record that was written. if(storage != null) { // Was the store ever opened? try { storage.deleteRecord(recordId1); } catch (Exception ex) { ex.printStackTrace(); } } } } } destroyApp() 메소드는 MIDlet을 실제로 닫기 전에 마치지 않은 항목을 완료할 방법을 제공합니다. AMS가 MIDlet를 무조건 닫으려 할 수도 있으며, 이런 경우에는 MIDlet을 닫는 수 밖에 없습니다. 하지만, 무조건 닫지 않아도 되고 쓰기 작업 중인 경우에는 MIDletStateChangeException을 스로우(throw)하여 쓰기 작업을 마칠 수 있습니다. 모든 데이터가 기록되어 있는 경우(이 경우에는 두 개의 레코드 항목)에만 데이터가 일관된 것으로 간주되기 때문에, recordsWritten이라는 플래그로 이를 표시합니다. 그런 다음 이 플래그를 사용하여 데이터의 상태를 모니터합니다. 이 플래그가 false로 설정되어 있으면 쓰기 작업을 마치지 않은 것이므로, 기록된 데이터를 전부 롤백해야 합니다. 두 레코드 중 어느 하나의 쓰기가 완료되기 전에 destroyApp() 메소드가 호출될 가능성이 있습니다. 그 가능성은 충분하며, 첫 번째 레코드를 삭제하려고 하면 예외가 발생하고 이 예외는 자동으로 무시됩니다. 데이터 쓰기 및 삭제 작업은 그 자체가 원자성을 지니므로, 쓰기 작업 간에는 데이터가 손상되지 않는다는 점을 확신할 수 있습니다. 데이터 손상을 더욱 확실히 방지하기 위해, 쓰기 또는 삭제 작업 중에 스토리지 객체에 대해 동기화할 수 있습니다. 이 간단한 예를 통해 타사 라이브러리의 효과를 더욱 적절히 처리하는 방법을 간파할 수 있기를 바랍니다. 일관성과 데이터 안전은 복잡한 주제이므로, 개발자는 특정 솔루션 개발에 임하기 전에 해당 문제 영역을 상세히 파악해야 합니다. 자료 자바 튜토리얼의 동시성 트랙 자바 동시성의 실제 더 나은 코딩 방법: 썬마이크로시스템즈 기술 전문가 Brian Goetz와의 대화 게시일: 2009/9/11 02:41PM, 게시자: Christine Dorffi, 게시물: Mobility | Comments[0] | Permalink

"Java ME" 카테고리의 다른 글

2009/09/28 15:17 2009/09/28 15:17

TRACKBACK :: http://blog.sdnkorea.com/blog/trackback/844

댓글을 달아 주세요

[로그인][오픈아이디란?]

◀ Prev 1  ... 33 34 35 36 37 38 39 40 41  ... 806  Next ▶