RMS란? Record Store헤더 RMS 패키지 Record Store Record 부가적 데이터와 제약사항 효율적 활용
1. RMS란? Record Management System MIDP에서 정의하는 영속성을 가진 자체 데이터공간 특징 영속성 바이트 배열구성 대소문자 구분 안전하게 구현(순차적 수행) 영속성 네트워크 접속 여부와 관계없이 데이터 저장 네트워크를 사용하지만 갑자기 끊겼을 때 상태 보존 자주 사용하는 데이터의 저장 영속성 : 어플리케이션 실행과는 무관하게 데이터를 보존 할 수 있는 성질 자바 어플리케이션은 객체를 생성하여 사용-힙(영속성 없음) 인터넷이라는 거대한 기억공간.. 이름 32글자 내의 문자열
2. Record Store헤더 레코드의 수 getNumRecords() 버전번호 getVersion() 초기값은 구현한 것에 따라 다름 Record Store 가 변경 될 때마다 변경 최근 수정시간 getLestModified() 버전번호를 보완 버전 값이 변경되면 함께 바뀜 다음레코드의 ID getNextRecordID() Record Store에서 다음에 추가될 레코드의 ID addRecord 메소드가 호출될 때마다 하나씩 증가 DB=헤더+데이터블록 헤더 : 첫 번째 데이터 블록에 대한 링크를 가지고 있다 데이터블록 : 서로 연결되어있고 각 블록은 다음 블록에 대한 포인터를 가지고 있다. Record Store 가 변경 될 때마다 버전번호는 변경 : 미들릿에서 다른 프로세스나 쓰레드에 의해 Record Store 가 변경되었다는 사실을 알 수 있다.
3. RMS 패키지 인터페이스 RecordComparator : 두 레코드를 비교하는 비교연산을 정의 RecordEnumeration (나열): 양방향으로 탐색 가능한 레코드 나열을 표현 RecordFilter : 조건에 맞는 레코드를 검색하기 위한 필터를 정의 RecordListener : 레코드의 상태변화 이벤트를 받음 클래스 RecordStore : 레코드 저장 장소를 표현 Exception InvalidRecordIDException : 레코드의 ID가 틀렸을 경우 발생 RecordStoreException : 레코드 저장장소에서 일반적이 오류가 있을 때 발생 RecordStoreFullException : 레코드 저장장소에서 저장 장소가 가득 찼을 때 RecordStoreNotFoundException : 레코드 저장장소를 찾지 못할 때 RecordStroeNotOpenException : 레코드 저장장소가 열려있지 않을 때
4. Record Store 열기 : RecordStore.openRecordStore(RecordStoreName,true) 닫기 : rs.closedRecordStore 추가 : 저장할 데이터를 바이트 배열로 변환 후 저장 ByteArrayOutputStream DataOutputStream 삭제 : rs.deleteRecord(id) 조회 : 저장된 레코드(바이트) 읽어 원래의 데이터 형으로 복원 ByteArrayIntputStream DataInputStream 검색 : RecordEnumeration 구현한 enumerateRecords()메소드사용 True는 해당레코드가 없으면 새로 생성 있으면 그냥 열림 추가 : 저장할 데이터를 바이트 배열로 변환 ByteArrayOutputStream DataOutputStream 뒤에 다중컬럼 테이블 에서 다시 돌아와 설명 조회 : 저장된 레코드(바이트) 읽어 원래의 데이터 형으로 복원 ByteArrayIntputStream DataInputStream
실행 예
5. Record Record Store에 들어가는 값 int addRecord (byte[] data, int offset, int numBytes) Defualt recordId는 1이며 레코드가 추가될 때 마다 +1 void deleteRecord (int recordId) RecordStoreNotOpenException InvalidRecordIdException RecordStoreException int getRecord (int recordId, byte[] buffer, int offset) Record 추출 byte[] getRecord (int recordId) void setRecord (int recordId, byte[] newData, int offset, int numBytes) Record 수정
6. 부가적 데이터와 제약사항 crash 복구 데이터 무결성 보장 부가적 데이터 제약사항 getSizeAvailable() : 사용 가능한 여유공간을 바이트 단위로 반환 getSize() : Record Store의 크기를 바이트 단위로 반환 ListRecordStores() : 소유자가 현재인 MIDlet suite인 Record Store의 이름들을 배열로 반환 제약사항 transaction control crash 복구 데이터 무결성 보장 부가적 정보 헤더에는 포함되지 않지만 implementation에서 제공하는 record store에 관한 나머지 정보 getSizeAvailable() : 사용 가능한 여유공간을 바이트 단위로 반환 통합 동기화 등을 지원하기 위해 추가적인 각 레코드의 데이터의 구조를 저장할 수도 있기 때문에 미들릿에서 데이터를 저장하는데 사용할 수 있는 여유공간과 일치X getSize() : Record Store의 크기를 바이트 단위로 반환, 전반적 정보를 포함한 공간의 크기 transaction ; 트랜잭션 컴퓨터 프로그램에서 트랜잭션의 일반적인 의미는 정보의 교환이나 데이터베이스 갱신 등 연관되는 작업들에 대한 일련의 연속을 의미하는데, 데이터베이스의 무결성이 보장되는 상태에서 요청된 작업을 완수하기 위한 작업의 기본 단위로 간주된다. crash ; 크래쉬 크래쉬는 응용 프로그램이나 운영체계와 같은 소프트웨어, 또는 하드디스크 드라이브 등의 하드웨어 장치들이 갑자기 고장나는 것을 말한다. 하나의 MIDlet suite 내에 여러 개의 미들릿이 있는 경우나 하나의 미들릿에 여러 개의 쓰레드가 있다면 각각에서 하나의 record store를 동시에 열고 액세스 가능
7. 효율적 활용 Record Fileter RecordComparator 다중 컬럼테이블 메소드의 추출 기준을 정의 Public Boolean matches (byte[] candidate) RecordComparator 레코드 정렬 Int compare(byte[] rec1, byte[] rec2) Rec1과 rec2를 정렬 했을때 rec1이 rec2보다 앞에 있으면 RecordComparator.PRECEDES 반환 (value = -1) 같으면 RecordComparator.EQUIVALENT (value = 0) 뒤에 있으면 Recordcomparator.FOLLW (value = 1) 다중 컬럼테이블 일반 DB table는 여러 개의 필드 존재, RS는 byte array 존재 UTF-8 인코딩을 사용 여러필드를 하나의 레코드로 묶음 새 레코드의 데이터>이전 데이터 : record store가 깨짐 Boolean : Candidate가 적용되는 규칙과 일치하면 true를 리턴 컬럼 : 항목(불른형, 인트형, 스트링형…) 일반적으로 데이터베이스 테이블에는 자료형이 byte array인 하나의 데이터 필드만 존재 UTF-8 인코딩을 사용하여 여러 개의 필드를 하나의 레코드로 묶을 수 있다. -> 다중 컬럼 테이블 생성 DataInputStream DataOutputStream ByteArrayInputStream ByteArrayOutputStream Sun의 J2MEWTKdml RecordStore.setRecord() 메소드는 새 레코드의 데이터가 이전 데이터 보다 크기가 큰 경우 record store가 깨진다.