책 소개
요약
기본적인 이클립스 플러그인 개발에서 더 나아가 사용자 정의 확장점과 서비스나 외부 라이브러리의 정적/동적 연결을 통해 애플리케이션의 기능을 더욱 풍부하게 구현하는 방법을 소개한다. 또한 업데이트 사이트와 도움말 등을 통해 사용자가 애플리케이션을 편리하게 사용하도록 지원하는 기능을 제공하는 방법도 다룬다. 이 책을 통해 플러그인 개발 경험이 있는 개발자는 자신의 애플리케이션을 더욱 화려하게 만들 수 있는 팁을 얻게 될 것이다.
이 책에서 다루는 내용
■ 다른 플러그인이 기능을 기여할 수 있는 사용자 정의 확장점 생성
■ 선언적 서비스(Declarative Services)와 블루프린트(Blueprint)를 사용해서 동적으로 OSGi에 기여
■ 중첩된 콘텐츠를 제공해서 공통 탐색기 프레임워크(Common Navigator Framework) 확장
■ 내장된 Gogo 셸의 확장을 위한 커맨드 작성
■ 플러그인에 네이티브 코드를 기여하기 위한 프래그먼트 사용
■ 서비스 로더를 사용한 코드 수정과 OSGi에 친화적이지 않은 JAR 래핑
■ 약결합의 디자인 패턴으로 모듈형 애플리케이션 개발
이 책의 대상 독자
이 책은 이클립스 플러그인 환경에 익숙한 자바 개발자가 진정한 전문가가 되기 위해 알아야 할 높은 수준의 개념을 다룬다. 이클립스 플러그인을 작성해본 경험이 있다는 가정하에 이 책을 작성했다.
이 책의 구성
1장, ‘JFace와 공통 탐색기 프레임워크에 연결’에서는 JFace 마법사 생성법과 공통 탐색기 프레임워크에 콘텐츠를 통합하는 방법을 설명한 다음, 패키지 탐색기(Package Explorer)에 프로젝트 콘텐츠를 트리 뷰로 표시해본다.
2장, ‘사용자 정의 확장점 생성’은 다른 플러그인이 기능을 기여할 수 있는 확장 가능한 플러그인을 생성하기 위해 이클립스 확장 저장소를 사용하는 방법과 OSGi나 이클립스 런타임 밖에서 플러그인을 사용하는 방법을 설명한다.
3장, ‘OSGi 서비스를 이용한 애플리케이션 동적 연결’에서는 애플리케이션의 기능을 확장하는 수단으로서 OSGi 서비스를 소개한다. 이 장은 선언적 서비스(Declarative Services)나 블루프린트(Blueprint)를 이용해 선언적으로 OSGi 서비스를 설정하는 방법을 설명하고, OSGi R6에서 새롭게 추가된 Config Admin을 이용해서 서비스를 설정하는 방법을 설명한다.
4장, ‘Gogo 셸과 커맨드 사용’은 이클립스 4에 포함된 Gogo 셸의 사용법과 Gogo 스크립트와 자바로 사용자 정의 커맨드를 생성해 셸을 확장하는 방법을 설명한다.
5장, ‘네이티브 코드와 프래그먼트 번들’에서는 OSGi나 이클립스 애플리케이션으로 네이티브 코드를 로드하는 방법과 프래그먼트를 사용해 프레임워크나 기존의 OSGi 번들의 기능을 확장하는 방법을 설명한다.
6장, ‘클래스로더 이해’에서는 자바 클래스로더(ClassLoader)의 기본적인 동작 원리를 자세히 살펴보고, OSGi 런타임에서 클래스로더를 어떻게 사용했는지 알아본다. OSGi가 아닌 JAR 파일에 대한 업그레이드 전략과 함께 스레드 컨텍스트 클래스로더(Thread Context ClassLoader)와 서비스로더(ServiceLoader) 같은 OSGi가 아닌 다른 런타임에서 OSGi 프레임워크를 사용하는 방법도 설명한다.
7장, ‘모듈형 애플리케이션 설계’는 18가지 모범 사례와 함께 화이트보드 패턴(whiteboard pattern)과 익스텐더 패턴(extender pattern) 같은 모듈형 설계 패턴을 설명하고, 버전 번호 관리를 자동화하는 시맨틱 버전관리와 도구를 사용하는 방법도 다룬다.
8장, ‘EventAdmin을 이용한 이벤트 기반 애플리케이션’에서는 OSGi EventAdmin 서비스를 소개하고 이벤트 기반 애플리케이션을 설계하는 7단계와 함께 대화형 작업 공간을 제공하기 위해 E4에서 이벤트를 어떻게 사용하는지 설명한다.
9장, ‘P2를 이용한 배포와 업데이트’는 사용자 정의 접점(touchpoint)과 카테고리를 생성하고, P2 저장소(업데이트 사이트)를 생성하고 관리하는 방법을 설명한다.
10장, ‘이클립스의 사용자 지원 기능’에서는 참조 문서와 함께 이클립스 또는 RCP 기반 제품에 대한 도움말 문서를 작성하는 방법과 공용 도움말 서버를 실행하는 방법을 설명한다.
목차
목차
- 1장. JFace와 공통 탐색기 프레임워크에 연결
- JFace 마법사
- 피드 마법사 생성
- 클래스 생성하기
- 마법사에 페이지 추가
- 페이지에 콘텐츠 추가
- 마법사 테스트
- 제목과 이미지 추가
- 도움말 추가
- 마법사 완료
- FeedWizard를 newWizards 확장점에 추가
- 진행 모니터 추가
- 미리 보기 표시
- 피드 마법사 생성
- 공통 탐색기
- 콘텐츠와 레이블 프로바이더 생성
- 공통 탐색기와 통합
- 콘텐츠 탐색기와 뷰 연결
- 공통 탐색기에 커맨드 추가
- 변경에 반응
- 뷰어 업데이트 최적화
- 선택 변경 연결
- 편집기 열기
- 콘텐츠가 있는 줄 찾기
- 선택 항목 설정하기
- 정리
- JFace 마법사
- 2장. 사용자 정의 확장점 생성
- 확장과 확장점
- 확장점 생성
- IFeedParser 인터페이스 생성
- MockFeedParser 클래스 생성
- 확장점 스키마 생성
- 확장점 사용
- 콘텐츠와 레이블 프로바이더를 확장에 통합
- 브라우저에 피드 표시
- 실제 피드 분석기 구현
- Atom 지원
- 분석기에서 네임스페이스 인식
- 우선순위와 순서
- 실행 가능한 확장과 데이터
- 실행 가능한 확장 팩토리
- OSGi 외부에서 확장 저장소 사용
- 확장 저장소 캐시 사용
- 클래스 경로의 모든 확장 로드
- 확장점 생성
- 정리
- 확장과 확장점
- 3장. OSGi 서비스를 이용한 애플리케이션 동적 연결
- 서비스 개요
- 프로그램적으로 서비스 등록
- 액티베이터 생성
- 서비스 등록
- 서비스 우선순위
- 서비스 사용
- 번들의 느린 활성화
- 서비스와 확장점 비교
- 선언적 서비스 등록
- 선언적 서비스
- 속성과 선언적 서비스
- 선언적 서비스에서 서비스 참조
- 다수의 컴포넌트와 선언적 서비스 디버깅
- 동적 서비스 어노테이션
- 메이븐 빌드 시 어노테이션 처리
- 블루프린트
- 제미니 블루프린트 설치
- 에리즈 블루프린트 설치
- 블루프린트 서비스 사용
- 블루프린트에 속성 전달
- 빈 참조와 속성
- 블루프린트와 DS 비교
- 선언적 서비스
- 동적 서비스
- 매번 서비스 처리하기
- 서비스 트래커 사용
- 서비스 정렬
- 서비스 필터링
- 액티베이터 없이 번들 컨텍스트 가져오기
- 서비스 참조 사용 시 주의사항
- 종속 서비스
- 동적 서비스 구성
- 펠릭스 파일인스톨 설치
- 구성 관리자 설치
- 선언적 서비스 구성
- DS 외부의 구성 관리자
- 서비스와 관리 서비스
- EmptyFeedParser 클래스 생성
- EmptyFeedParser 구성
- 서비스 팩토리
- EchoServer 클래스 생성
- EchoServiceFactory 클래스 생성
- EchoService 구성
- 정리
- 4장. Gogo 셸과 커맨드 사용
- 이퀴녹스의 콘솔
- 호스트 OSGi 콘솔
- 커맨드 실행
- 변수와 파이프
- 함수와 스크립트
- 리터럴과 객체
- 메소드 호출과 연쇄처리법
- 제어 흐름
- 커맨드 라인에서 이퀴녹스 실행
- osgi.bundles와 config.ini 이해
- 원격 접속
- 연결 보안
- JAAS 구성 생성
- 구성 옵션의 이해
- SSH 데몬 실행
- 셸 확장
- 기존 메소드를 커맨드로 추가
- 기존 인스턴스로부터 클래스 얻기
- ClassLoader로 클래스 로드
- 자바로 커맨드 작성하기
- 프로젝트 생성
- 선언적 서비스로 커맨드 등록
- 커맨드 테스트
- 콘솔 커맨드로 객체 처리
- 번들을 출력하는 커맨드 추가
- 번들 목록 반환
- each로 목록 처리
- 커맨드로 함수 호출하기
- 루프와 이터레이션
- 기존 메소드를 커맨드로 추가
- 정리
- 이퀴녹스의 콘솔
- 5장. 네이티브 코드와 프래그먼트 번들
- 네이티브 코드와 이클립스
- 간단한 네이티브 라이브러리 생성
- 맥 OS X
- 리눅스
- 윈도우
- 네이티브 라이브러리 로딩
- 라이브러리 종속성
- 네이티브 코드 패턴
- 간단한 네이티브 라이브러리 생성
- OSGi 번들 안의 네이티브 라이브러리
- 네이티브 코드의 선택적 해석
- 동일 플랫폼에 대한 다수의 라이브러리
- 동일한 이름의 여러 라이브러리
- 필터와 제약사항 추가
- 네이티브 라이브러리 다시 로딩
- OSGi 프래그먼트 번들
- 프래그먼트로 네이티브 코드 추가
- 번들에 클래스 추가
- 프래그먼트로 번들 패치
- 프래그먼트로 패키지 내보내고 가져오기
- 확장 번들
- 정리
- 네이티브 코드와 이클립스
- 6장. 클래스로더 이해
- 클래스로더 개요
- 클래스로더와 상속
- 웹 애플리케이션 서버의 클래스로더
- 클래스로더와 가비지 컬렉션
- OSGi와 클래스로더
- OSGi 서비스와 클래스로더
- 스레드 컨텍스트 클래스로더
- 자바 서비스로더
- 서비스로더와 OSGi, Eclipse의 문제
- 서비스 생산자 생성
- 필수 번들 다운로드
- 서비스 생산자 실행
- 서비스 소비자 생성
- 서비스 소비자 실행
- OSGi 업그레이드 전략
- 직접 라이브러리 포함시키기
- bnd로 라이브러리 래핑
- 서비스를 사용하도록 라이브러리 업그레이드
- 클래스 확인 문제 해결
- 정리
- 클래스로더 개요
- 7장. 모듈형 애플리케이션 설계
- 시맨틱 버저닝
- 공개 API와 버전 범위
- 기준선 설정과 자동 버전 관리
- 이클립스 API 기준선
- Bnd 기준선
- Bndtools
- 메이븐 기준선 설정
- 디자인 패턴
- 화이트보드 패턴
- 익스텐더 패턴
- 모범 사례
- API와 구현의 분리
- 패키지 분리
- 서비스 분리
- Require-Bundle보다 Import-Package 사용
- 패키지 버전과 번들 버전
- 분할 패키지 피하기
- 패키지 가져오기와 내보내기
- 시작 순서 조건 피하기
- 긴 액티베이터 start 메소드 피하기
- 구성 관리자 사용
- 구현이 아닌 서비스 공유
- 낮은 결합도와 높은 응집도
- 낮은 수준의 실행 환경에서 컴파일
- Class.forName 피하기
- DynamicImport-Package 피하기
- BundleActivator 사용 자제하기
- 스레드 안정성 고려하기
- 다른 프레임워크에서 테스트
- 정리
- 8장. EventAdmin을 이용한 이벤트 기반 애플리케이션
- OSGi EventAdmin 서비스의 이해
- 이메일 전송
- 이벤트 생성
- 이벤트 게시
- 이벤트 수신
- 이벤트 필터링
- 스레드와 이벤트 전달 순서
- EventAdmin과 서비스 비교
- 프레임워크 이벤트
- 이벤트와 E4
- E4로 이벤트 전달
- E4로 이벤트 수신
- 직접 E4 EventHandler 구독
- EventAdmin과 IEventBroker 비교
- 이벤트 기반 애플리케이션 설계
- 애플리케이션 컴포넌트화
- 채널 식별
- 속성 식별
- 토픽에 채널 연결
- 이벤트 시뮬레이션
- 버전과 느슨한 형 관리
- 이벤트 객체 콘텐츠
- JMS와 비교
- 정리
- OSGi EventAdmin 서비스의 이해
- 9장. P2를 이용한 배포와 업데이트
- 이클립스 P2
- P2 디렉터를 이용한 프로비저닝
- 기존 애플리케이션에 콘텐츠 설치
- P2 애플리케이션 실행
- JVM 구동
- 이퀴녹스 시작
- P2 저장소
- P2 아티팩트와 콘텐츠 파일
- 바이너리와 압축 파일
- P2 미러 사이트 생성
- P2 메타데이터 생성
- 업데이트 사이트 카테고리
- 복합 업데이트 사이트
- 고전적인 업데이트 관리자
- 접점
- P2로 피처 분류
- 자동으로 업데이트 사이트 추가
- 접점 액션 등록
- JVM 또는 프로그램 인수 추가
- 사용자 정의 접점
- 정리
- 이클립스 P2
- 10장. 이클립스의 사용자 지원 기능
- 이클립스의 도움말 페이지
- 도움말 페이지 추가
- 중첩된 목차
- 앵커와 링크
- 다른 플러그인에서 앵커에 연결
- 조건부 활성화
- 문맥 인지 도움말
- 액티브 도움말
- DocBook과 이클립스 도움말
- Mylyn WikiText와 이클립스 도움말
- 도움말 서버와 RCP
- 도움말과 이클립스 3.x
- 도움말과 이클립스 4.x
- 독립된 InfoCenter 실행
- 치트 시트
- 치트 시트 생성
- 커맨드 추가
- 선택적인 단계
- 선택에 응답
- 복합 치트 시트
- 정리
- 이클립스의 도움말 페이지