chapter 6. 와치 서비스 API
오브젝트의 변경이나 이벤트를 감시하는 기능을 제공하는 쓰레드에 안전한 서비스다. 와치 서비스는 주로 생성, 삭제, 수정 처림 디렉토리의 내용 변화를 위해 디렉토리를 감시하는데 쓰인다.
NIO.2 이전에는 폴링하거나 다른 방식을 사용했음.
6.1 와치 서비스 API 클래스
java.nio.file.WatchService 인터페이스 : 와치 서비스 API의 시작점
파일시스템 감시하기 위한 클래스 설명
- 감시가 가능한 오브젝트 Watchable object : java.nio.file.Watchable를 구현한 인스턴스 ** 중요
- 이벤트 타입 Event Type : 표준 이벤트 java.nio.file.StandardWatchEventKinds 정의, WatchEvent.Kind<T> 구현
- 이벤트 수정자 Event Modifier: WatchService에 감시 가능한 오브젝트를 등록할지 한정 한다.
- 와처 Watcher: 오브젝트를 감시 한다.WatchService가 바로 와쳐
6.2 와치 서비스 구현하기
6.2.1 WatchService 생성하기
WatchService watchService = FileSystems.getDefault().newWatchService();
6.2.2 와치 서비스에 오브젝트 등록하기
Watchable 구현한 오브젝트 등록 가능함. 등록시 어떤 서비스가 감시하고 통지할지를 위한 이벤트 식별이 필요.
관련 메서드 : Watchable.register()
지원하는 이벤트 타입(StandardWatchEventKinds
- ENTRY_CREATE : 디렉토리 항목이 생성됐다. 해당 디렉토리에 있는 파일 이름 바뀌거나 이동한 경우에도 발생
- ENTRY_DELETE : 디렉토리 항목이 삭제. 해당 디렉토리에 있는 파일 이름 바뀌거나 파일이 디렉토리 바깥으로 이동한 경우에도 발생
- ENTRY_MODIFY : 디렉토리 항목이 수정됐다. 어느 이벤트가 수정인지는 플랫폼에 따라 다소 다를 수 있음. 실제로 파일의 내용이 수정됐을 때 항상 수정 이벤트가 발생한다. 일부 플랫폼에서는 파일의 속성이 변경해도 이 이벤트가 발생
- OVERFLOW : 이벤트가 소실됐거나 버려진 경우. 이 이벤트를 받으려 등록할 필요는 없다.
6.2.3 유입 이벤트 대기하기
유입 이벤트를 대기하려면 무한 루프를 사용해야 함. 이벤트가 발생했을 때 와치 서비스는 해당하는 와치 키를 신호로 보낸다.
6.2.4 와치 키 가져 오기
와치 키를 가져오는 세가지 메소드(모두 키를 가져오고, 큐에서 키를 제거한다) - 차이점은 키가 없을 때 동작 방식
- poll() : 이용할 수 있는 키가 없으면 즉시 null 값을 반환한다.
- poll(long,TimeUnit) : 이용할 수 있는 키가 없으면 지저된 시간동안 대기한 다음 다시 시도한다. 다시 시도 하였을 때도 이용할 수 있는 키가 없으면 null을 반환 한다. long 대기시간 , TimeUnit 시간 단위
- take() : 이용할 수 있는 키가 없으면 큐에 키가 들어올 때까지 대기한다. 몇가지 조건에 대해서는 무한 루프를 중지 한다.
댓글 없음:
댓글 쓰기