뢉 해럽 쌩큐

참조: http://blog.springsource.com/2008/12/11/slides-and-demos-from-springone-americas-2008/

뢉 해럽이 S1A에서 발표한 세션 중 두 개 세션의 ppt와 소스 코드를 공개했습니다.

그 중 하나가 컨커런시인데 이 부분은 굳이 스프링 애호가나 사용자가 아니여도 들어볼 만한 세션인 것 같습니다. 코딩을 얼마 해보지도 않았지만, 컨커런시를 다룬 코딩은 정말 조금 밖에 안 해봤고(배치와 스케줄러 관련 작업할 때 조금 해본 기억이 나네요. 아주 조금; 단순하거.. 그것도 사부님한테 여러번 수정 사항 지적받으면서..) 별로 궁금하지도 않았습니다. Thread랑 Runnable 가지고 깨우고 재우고 롹킹하고 어쩌구 저쩌고.. 정도만 알고 있었을 뿐..

이번 뢉 해럽의 발표를 보니까 정말 정말 많은 기능들이 자바에 추가되고 있었습니다. 몰랐습니다. 거의 90% 가까이 내용을 못 알아들었습니다. 좌절했죠. (역시 아는 만큼만 보이고 들리더군요.) 그래서 돌아가면 소스 코드 보면서 다시 공부하리라 마음 먹었습니다. 뢉 해럽한테 가서 소스 코드도 얻어보려고 발표가 끝나고 앞에 나가서 “how can I get the source code? example source code.” 라고 질문도 했었죠.ㅋㅋ 그랬더니 오늘쯤 블로그에 올린다고 하더니 정말 올려줬습니다.

S1A에 가서 첫날 뢉 해럽한테 우루루 몰려가서 사진찍고 둘 쨋날은 맨 앞에서 뢉 해렵의 모든 세션(dm 서버 관련 3개)에 참석하고 마지막 날은 사인까지 받았고 질문도 했으니.. 다음에 찾아가도 절 기억해 주겠죠? 기억 못하면 다시 사진 한 방.. ㅋㅋ

S1A – Advanced SpringSource DM Server by 뢉 해럽

와이어링
– 클래스 로딩: package import and export
– 객체 생성과 엮기: spring dm

Personality

synthetic context와 PAR

배포 파이프 라인
1. PAR 배포
2. personality 판별
3. ..

프로파일

고급 와이어링: 속성 사용하기
=> 같은 패키지 두 개 중에서 하나를 선택할 때 속성을 사용할 수 있다.

고급 와이어링: uses
=> 나중에 발생할 타입 캐스팅 문제를 조기에 방지

dm 서버 진단 기능
=> 콘솔에서 직접 분석해야 하는 걸 dm 서버가 알아서 해 준다.
=> ex) Import-Package, uses 진단 기능.

Java EE 애플리케이션 마이그레이션
(FormTags)
– 웹/서비스로 쪼개기
– 서비스에서는 구현체를 숨기고 인터페이스로 서비스를 공개
– web.xml에 별도의 OSGiContextLoader 사용한다.
– 서비스를 참조하는 reference를 만든다.

S1A – SpringSource dm Server Introduction by 뢉 해럽

SpringSource dm Server 소개

dm 서버
=> 자바 EE를 지원하려는게 아니라 OSGi 기반 배포 모델을 제공하기 위한 것이다. 매우 고객 지향적인(custom-oriented) 오픈 소스 프로젝트다.

배포
=>

Configurable
=> 여러분이 설치하고 싶은 걸 선택할 수 있다.

잠재적인 사용자 이익
=> 배포를 모듈 단위로 할 수 있다.
=> 쪼개서 개발할 수도 있고 유지보수 하기도 쉽다.

OSGi는 무언인가?
=> 유일한 모듈 시스템은 아니다. 하지만 10년이나 됐다. 그동안 많이 테스트 하고 검증되었다.

모듈
=> 정확히 어떤 패키지를 공개하고 사용할지 정의한다.(Strict Visibility rules)

모듈성
=> 타입 Dependency

모듈성:Import-Package
=> 버전 설정을 가능한 상세하게 할 것을 권장.

모듈성:Require-Bundle
=> 하이버네이트…, 하지만 패키지 중복 문제 발생 가능.

모듈성:Import-Bundle
=> 그래서.이걸 권장한다.

다음 레벨 모듈은 서비스.

서비스
=> 구현체는 감추고 타입으로 그 구현체를 참조할 수 있게한다.

데모
– greenpage 웹 애플리케이션 예제
– 모듈(app, db, jpa, web)

1. STS 실행
2. dm 서버 추가
3. dm 서버 홈 찾아주기
4. bundle 프로젝트 만들기
5. greenpage.web/모듈타입을 web으로/타겟 플랫폼을 dm 서버로 설정 next
6. Web-ContextPath 를 /greenpages   .. *.htm    next finish
7. META-INF/MANIFEST.MF 열고 설정 확인
8. src에 MODULE-INF/WEB-INF 폴더 추가
9. WEB-INF 폴더를 웹 폴더 루트로 jsp 추가
10. 컨트롤러 개발
11. Import-Library: org.springframework.spring:version=”[2.5.5.A,2.5.5.A]”
12. 컨트롤러 개발
13. META-INF/spring 풀더에 mudile-context.xml 만들기
14. 컴포넌트 스캔 추가해서 컨트롤러 빈 등록
15. 서버로 드래그 앤 드랍
16. 서버 실행
17. 404 에러 나는데 그건 뷰 파일이 없어서 그랬어. 복사해서 붙이고 뷰가 프리마커라서 프리마커 뷰 리졸버 추가해준다.
=> 로깅 메시지는 별도의 파일로 분리해 놨다.

0. web 모듈 빼준다.

1. greeenpage.app 모듈 추가
2. 패키지 추가
3. 인터페이스 추가
4. 구현체 추가
5. MANIFEST.MF에 Export-Package: greenpages.app:version=”1.0″ 추가
6. greenpage.web에서 Import-Package:greenpage.app 추가
7. 에러 나면 이클립스 프리퍼런스에서 패키지 의존성 추가
8. osgi-context.xml 파일 만들기
9. directory 서비스 등록.
10. module-context.xml 파일 만들기
11. Directoty 빈 등록
12. 서버로 드래그 앤 드랍
13. telnet localhost 2401 로 osgi 콘솔에 접근
14. osgi-reference.xml 만들기
15. osgi 레퍼런스 빈 등록 id=”directory” interface=”…

1. greenpages.db 모듈 추가
2. Import-Bundle: com.sprinsource.org.apache.commons.dbcp:version, …
3. datasource  빈 등록, osgi 서비스 등록
4. Import-Pacjage: javax.sql
5. 콘솔에서 설치한 번들과 서비스 확인

1.greenpages.jpa 모듈 추가
2. MANIFEST.MF에서 Import-Package: greenpages.app, javax.sql
3. 인터페이스 추가
4. 구현체 추가
5.  Import-Package에 javax.persistence 추가
6. Import-Library에 spring 추가
7. META-INF/spring 폴더에 module-context.xml 추가
8. 로드 타임 위버가 있네.. 왜 있지?
9. osgi-context.xml 추가
10. directory 서비스 추가
11. 드래그 앤 드랍
12. aspectj 없어서 실패.
13. Import-Library에 org.aspectj;version 1.6.1 추가
14. Import-Bundle: eclipse.persistence..
15. osgi 레퍼런스로 dataSource 등록

=> osgi:reference 의 filter 속성과 service의 속성 매칭으로 동일 인터페이스에 대한 여러 구현체 서비스 중에서 한 가지를 선택하게 할 수 있다.

1. Par 프로젝트 만들기
2. greenpage 만들기
3. Dependencies  탭에서 추가해주기.
4. 드래그 앤 드랍.

필요한 번들이 번들 저장소에 없는 경우
1. private class path 이용
2. osgi 번들로 만들어라.
3. 하난 뭐지?