Sookmyung Women’s Univ. PSLAB Ohe, heejung

Slides:



Advertisements
Similar presentations
All Rights Reserved, Copyright© UBIVELOX co.,Ltd LG U+ 과금 API 소개 Version1.0 Authorubivelox Date21-Feb
Advertisements

Term Project Hints Topics Keep-alive CGI Multi-thread Multi-process Event-based.
멘토링 2 주차 장 프로그래밍을 위한 자바의 자료형  값이 변하지 않는 상수  메모리 기억공간인 변수.
Copyright © 2006 The McGraw-Hill Companies, Inc. 프로그래밍 언어론 2nd edition Tucker and Noonan 5 장 타입 “ 타입은 컴퓨터 프로그래밍의 효소이다 ; 프로그래밍은 타입을 통해 소화할만한 것이 된다.” 로빈.
좋은 강의 국제관계학과 정연식.
11장. 프로토콜 핸들러 AI &HC I LAB 김 성 현.
6장 java.applet.Applet의 네트워크 메쏘드들
14. 위피 게임: 가위바위보 게임 초기에 점수=0 처음 이기면 10 점 그 다음부터 이기면 점수=현재 점수*2 지면
입출력 14.1 java.io 패키지의 개요 14.2 파일과 디렉토리
어서와 Java는 처음이지! 제2장 자바 프로그래밍 기초.
10. 예외 처리.
컴퓨터 응용 및 실습 Part1. OOP&Java Programming data type Review
제9장 입출력과 JNI.
어서와 Java는 처음이지! 제2장 자바 프로그래밍 기초.
J2ME(Java 2 Micro Edition) 무선 장치용 UI의 핵심 컴포넌트
4부 클래스 라이브러리 “4부에서는 자바 언어의 API인 클래스 라이브러리에 관해 설명합니다
이번 시간에는... 지난 시간에는 VM 기반 모바일 플랫폼 기술의 첫번째 시간으로, 모바일 플랫폼 및 그 현황과, GVM, XVM, WITOP, Brew 및 JavaStation 모바일 플랫폼의 특징과 구성에 대해 알아 보았습니다. 이번 시간에는 모바일 플랫폼 기술 그.
RMS (Record Management System)
Chapter 11 – 예외 처리 Outline 11.1 설계 쟁점 11.2 Pl/I의 예외 처리 11.3 Ada의 예외 처리
5 익셉션 처리.
DB와 WEB 연동(1) [2-Tier] Java Applet 이용
2주 실습강의 Java의 기본문법(1) 인공지능연구실.
Chapter 02 자바 기본구조 자바 프로그래밍의 기초적인 문법을 소개
제7장 제어구조 I – 식과 문장.
음악 재생 프로그램 예외 처리 방법 try/catch 블록 예외 선언 방법
2강. JAVA 프로그래밍이란?-II & 변수 JAVA 프로그램 환경설정과 실행 방법 변수란?
Wireless Java Programming
CDC Connected Device Configuration CLDC보다 많은 리소스를 가진 시스템을 대상으로 설정
Sookmyung Women’s Univ. PSLAB Moon, Se won
Network Project (완료 보고서)
Java 12장. 입출력 public class SumTest {
8장 자바 입출력.
7장 파일과 데이터베이스.
JAVA 프로그래밍 6장 객체지향프로그래밍의 핵심.
고수준 사용자 인터페이스 프로그래밍 Lecture #4.
10장 SafeTalk 시스템 소프트웨어 연구실 성순화 이재일
명품 Java Programming.
Chap07 예외 처리 7.1 예외의 개요 7.2 예외 관련 클래스 7.3 예외 처리.
10장 다중 스레드 10.1 스레드 개요 10.2 Thread 클래스 10.3 스레드 생성
Hadoop 김연왕
2장 자바환경과 자바 프로그램 2.1 자바 개발 환경 2.2 자바 통합환경 2.3 자바 응용 프로그램과 애플릿 프로그램
모바일 자바 프로그래밍 MIDP 이벤트 & 그래픽 Ps lab 오민경.
Android Coding Convention
8 데이터베이스 사용하기.
12 데이터베이스 사용하기.
주소록 프로그램.
Network Programming(1)
자바 5.0 프로그래밍.
제 4주 2014년 1학기 강원대학교 컴퓨터학부 담당교수: 정충교
JDBC (Java Database Connectivity)
제1장 서론.
DataScience Lab. 박사과정 김희찬 (월)
컴퓨터의 기초 제 2강 - 변수와 자료형 , 연산자 2006년 3월 27일.
03. 안드로이드를 위한 Java 문법 제목. 03. 안드로이드를 위한 Java 문법 제목.
Ch.1 Iterator Pattern <<interface>> Aggregate +iterator
Chap10 다중 스레드 Section 1 : 스레드 개요 Section 2 : Thread 클래스와 스레드 생명주기
1조 김성수 백현기 석광우 김지원 박광연.
제 2장 어휘구조와 자료형 토 큰 리 터 럴 주 석 자 료 형 배 열 형.
기존 REC거래시스템 회원사의 신재생 통합포털 회원가입 설명서.
MIDP-MOBILE INFORMANTION DEVICE PROFILE
Java Chapter 4 ~ 주차.
컴퓨터공학실습(I) 3주 인공지능연구실.
자바 5.0 프로그래밍.
Java 3장. 자바의 기본 구조 I : 변수, 자료형, 연산자 public class SumTest {
RMS란? Record Store헤더 RMS 패키지 Record Store Record 부가적 데이터와 제약사항 효율적 활용
Barat을 이용한 Code Transformation
자바 5.0 프로그래밍.
C# 10장. 참조형.
자바 가상 머신 프로그래밍 Chapter 3. 메소드 작성하기 Pslab 오민경.
임베디드 프로그래밍 Lecture #
Presentation transcript:

Sookmyung Women’s Univ. PSLAB Ohe, heejung 8장. Persistent Storage Sookmyung Women’s Univ. PSLAB Ohe, heejung

Introduction 무선 장치들의 메모리 데이터베이스 Application의 실행에 필요한 메모리 데이터의 Persistent Storage를 위한 메모리 Application에서 그 데이터를 계속해서 사용하도록 지속적 시간이 지나면 바뀔 수 있는 개인 설정이나 정보를 저장 데이터베이스 출력,저장, 조작 액세스 등의 작업을 제공하는 크고 지속적이며 통합적인 동적 데이터의 집합체 J2ME의 MIDP : RMS( Record management system) Table: record store javax.microedition.rms RMS : 레코드 지향적인 간단한 데이터베이스 시스템 시스템의 각 테이블이 record store이고 record에 접근하고 저작하는 API는 javax.. Dp vhgka

Introduction Javax.microedition.rms Calsses Interface Exception RecordStore, RecordEnumeration Interface RecordComparator, RecordFilter, RecordListener Exception InvalidRecordIDException RecordStoreException RecordStoreFullException RecordStoreNotFoundException RecordStroeNotOpenException Exception : 1. 동일한 id가 없을경우 2. record store의 이름이 너무 길거나 파일이 손상되었을경우 3. 메모리가 충분치 않아서 레코드를 생성할 수 없을경우 4. 해당 이름의 record store가 발견되지 않을경우 5. 해당 이름의 record store가 열리지 않을경우

1. Record Store

1.1 Record Store 조작하기 RMS Recore Store 조작하기 단순한 파일로 이루어진 데이터베이스 시스템 Recordstore class를 통해 조작 Recore Store 조작하기 public static RecordStore openRecordStore ( String recordStoreName, BooleancreateIfNecessary) public void closeRecordStor() Public static void deleteRecordStore (String recordStoreName) Recordstore openrecordstore에서 true일 경우는 레코드가 없다면 새로 생성되고 false이면 해당 이름의 레코드가 없다면 recordstorenotfound exception이 발생

1.1 Record Store 조작 예제 import javax.microedition.midlet.*; import javax.microedition.rms.*; public class RecordStoreTest1 extends MIDlet { public RecordStoreTest1() { } public void startApp() throws MIDletStateChangeException { RecordStore rs=null; try { rs = RecordStore.openRecordStore("file1",true); System.out.println("record store file1 is opened."); }catch(Exception e){ System.out.println("Error: "+e.getMessage()); finally{ // record store 닫기 rs.closeRecordStore(); System.out.println("record store file1 is closed"); }catch (Exception e){ destroyApp(true); notifyDestroyed(); /** * MIDlet의 실행을 중지한다. */ public void pauseApp() { * 어플리케이션이 언로드되기 전 프레임워크에서 호출한다. public void destroyApp(boolean unconditional) { - Record stroe는 사용을 마치면 반드시 닫아줘야 한다. -> 디바이스의 자원 소비 실제로 closeRecordStore 메소드는 실제로 store파일을 닫는게 아니라 application manager에게 record stroe의 사용이 끝났음을 알려준다. Record store를 사용한 모든 프로세스에게서 close 메소드가 날라와야 실제로 파일이 닫힌다. - 삭제 전에는 닫혀 있어야 한다.

1.2 Record Store 헤더 다른 파일 기반의 데이터베이스와 마찬가지로 record store도 헤더와 데이터 블록으로 구성 Data block : record store의 레코드 Data block은 LinkedList 처럼 서로 연결 데이터베이스의 작동 위해서는 헤더에 첫번째 데이터 블록에 대한 링크 있어야 한다. Record store header 정보 Record sotre 안의 레코드의 수 : public int getNumRecords() 버전 번호 (default :0 ) : public int getVersion() 최근 수정 시간 : public long getLastModified() 다음 레코드의 Id : public int getNextRecordID() 최근 수정시간 : 마지막 변경된 시간 버전번호는 레코드가 추가, 수정 , 삭제될때 증가, 버전이 증가함으로인해 미들릿에서는 다른 프로세스나 쓰레드에 의해 record store가 변경되었다는 사실 인지 다음 레코드의 id: 다음에 레코드가 추가될 때 레코드의 id, addrecord 불리어지면 id도 증가.

1.3 Record Store의 부가적 데이터 헤더에는 포함되지 않지만 implementation에서 제공하는 record store에 관한 나머지 정보 Public int getSizeAvailable() Record store에서 사용할 수 있는 여유 공간을 바이트 단위로 반환 반드시 미들릿에서 데이터를 저장하는데 사용할 수 있는 여유 공간과 일치하지는 않는다. Public int getSize() Record storerk 차지 하고 있는 공간을 바이트 단위로 반환 Public static String[] ListRecordStores() 현재의 MIDlet suite인 record store의 이름을 배열로 반환 여유공간 일치 -> 구현시에 native application과의 통합과 같은 추가적인 데이터 구조를 저장할 수 있으므로 반드시 일치하지는 않는다.

1.4 Record Store의 제약사항 MIDP 의 RMS API에서 초기화, 업데이트, 값 추출만 가능 Primary key인 recordId, byte array 형의 레코드 필드 다른 데이터베이스에서 지원하는 트랜잭션 컨트롤, 크래쉬 복구, 데이터 무결성 보장은 지원하지 않는다. 하나의 MIDlet suite 내에 여러 개의 미들릿이 있는 경우나 하나의 미들릿에 여러 개의 쓰레드가 있다면 각각에서 하나의 record store를 동시에 열고 액세스 가능

2. Record

2.1 Record Record Record store에 들어가는 값 Byte array형이며, recordId로 구별된다. 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 수정 Delete 시에는 지워진 부분이 빈칸으로 남는다.

2.2 Record 변경사항 모니터링 RecordListener Record store의 변경사항을 모니터링 Record store가 변경되면 이벤트가 등록된 RecordListener에 전달 recordChanged, recordAdded, recordDeleted의 세가지 이벤트 발생 void recordAdded (RecordStore recordStore, int recordId) void recordChanged (RecordStore recordStore, int recordId) void recordDeleted (RecordStore recordStore, int recordId) RecordListener등록 해제 void addRecordListener (RecordListener listener) void removeRecordListener (RecordListener listener) 하나의 객체에 여러 개의 리스너를 등록가능

3. RecordEnumeration

3.1 RecordEnumeration 레코드가 삭제되고 나면 record store 안의 recordId는 연속적이지 않다. getRecord메소드를 이용해서 데이터를 추출한다면 삭제된 부분들은 InvalidRecordIDException이 발생 RecordEnumeration class는 양방향의 record store의 record enumerator 역할을 하는 class Public RecordEnumeration enumerateRecords (RecordFilter filter, RecordComparator comparator, boolean keepUpdated) KeepUpadate의 상태가 true로 enumerator를 생성하였다면 계속해서 현재 record의 변화를 감지 False이면 미들릿에서 rebuild() 메소드를 통해서 enumerator를 업데이터해줘야 한다. (정보 손실 vs 퍼포먼스 저하)

3.2 레코드 액세스와 이동 RecordEnumeration class의 API에서는 레코드 사이를 이동하고 레코드에 액세스 하는 메소드 제공 Void destroy() : 내부 리소스를 free 시켜준다. Boolean hasNextElement() : 다음 방향에 있는 element들 Boolean hasPreviousElement() : 이전 방향에 있는 element들 Byte[] nextRecord() : 다음 레코드 Int nextRecordId() : 다음 레코드 id Int numRecords() : 레코드의 갯수 Byte[] previousRecord() :이전 레코드 Int previousRecordId () : 이전 레코드의 id Void rebuild() Void reset()

4. 다중 컬럼 테이블 만들기

4.1 다중 컬럼 테이블 만들기 일반적으로 데이터베이스 테이블에는 자료형이 byte array인 하나의 데이터 필드만 존재 UTF-8 인코딩을 사용하여 여러 개의 필드를 하나의 레코드로 묶을 수 있다. -> 다중 컬럼 테이블 생성 DataInputStream DataOutputStream ByteArrayInputStream ByteArrayOutputStream Sun의 J2MEWTKdml RecordStore.setRecord() 메소드는 새 레코드의 데이터가 이전 데이터 보다 크기가 큰 경우 record store가 깨진다.

Record Filter, RecordComparator Interface

Record Fileter RecordComparator Public Boolean matches(byte[] candidate) 메소드의 추출 기준을 정의 Candidate가 적용되는 규칙과 일치하면 true를 리턴 RecordComparator Int compare(bye[] rec1, byte[] rec2) Rec1과 rec2를 정렬 했을때 rec1이 rec2보다 앞에 있으면 RecordComparator.PRECEDES 반환 (value = -1) 같으면 RecordComparator.EQUIVALENT (value = 0) 뒤에 있으면 Recordcomparator.FOLLW (value = 1)