* OGSi official homepage : 
http://www.osgi.org/




* Universial Framework, OSGi

http://osgi.tistory.com/category


* Microsoftware 잡지 기사

- 상단
(Microsoftware 2008년 7월)
4부|이클립스 프로젝트의 원동력, 이클립스 플러그인 / 양석호
- 리스트
(Microsoftware 2007년 2월 - 6월)
스스로 만드는 이클립스 플러그인│양석호 ,
http://olv.moazine.com/search2/?page=&where=atl&ot_mag=&ot_atl=date&ot_img=&domainurl=olv.moazine.com&SearchText=%BD%BA%BD%BA%B7%CE%20%B8%B8%B5%E5%B4%C2%20%BE%E7%BC%AE%C8%A3%20%C0%CC%C5%AC%B8%B3%BD%BA%20%C7%C3%B7%AF%B1%D7%C0%CE&S_id=3&a_id=LOOPF1guZ293onBF538Mqda0

 

(Microsoftware 2009년 6월 - 7월)
-이클립스 플러그인 개발 / 김성안
http://olv.moazine.com/search2/?page=&where=atl&ot_mag=&ot_atl=date&ot_img=&domainurl=olv.moazine.com&SearchText=%B1%E8%BC%BA%BE%C8%20%C0%CC%C5%AC%B8%B3%BD%BA&S_id=3&a_id=LOOPF1guZ293onBF538Mqda0




* Eclipse Plug-in & RCP Developer Study Club
http://cafe.naver.com/eclipseplugin/




* OSGi and Eclipse Equinox explained[PDF]
http://eclipse.org/equinox/documents/eclipsist2007/EclipseSummitTurkey2007-OSGiEquinoxExplained.pdf




구루님이 작성하신 "Getting started with OSGi” 시리즈

http://xguru.net/443



'0x02 Platform & Framework > 0x025 OSGi' 카테고리의 다른 글

What is OSGi  (0) 2013.07.15

Server Side :


Web.xml



     <init-param>

            <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>

              <param-value>true</param-value>

        </init-param>

  

추가..


Client Side : 


ClientConfig clientConfig = new DefaultClientConfig();

clientConfig.getProperties().put(

ClientConfig.PROPERTY_FOLLOW_REDIRECTS, true);

clientConfig.getFeatures().put(JSONConfiguration.FEATURE_POJO_MAPPING, Boolean.TRUE);


기술..



http://stackoverflow.com/questions/583973/jax-rs-jersey-how-to-customize-error-handling



1. WebApplicationException을 상속받아 기존 정의된 Error를 Customizing 하여 Exception을 던지는 방법


2. Custom Exception을 정의하여 해당 Exception을 @Provider로 Mapping 하여 Framework에서 해결하는 방식


http://www.bhaveshthaker.com/25/customize-handling-server-side-exceptions-with-error-codes-using-exceptionmapper-with-jersey-jax-rs-in-java/

Jersey로 할 수 있는 것들


- JAX-RS에 맞게 구현되어있으므로 Jersey로 구현하는 방법을 알아두면 해당 스펙에 맞춘 다른 Framework개발도 손쉽다.

- 지원하는 Annotation을 가지고 빠르고 쉽게 Server와 Client를 개발할 수 있다.

+ Server Side

 - @Provider를 사용하여 custom entity Provider를 구현할 수 있따.

 - @Context를 사용하여 Object를 Injection할 수 있다.

 - @Singleton, @PerSession을 사용하여 Bean의 Life-Cycle을 지원한다.

 - 다양한 Param Object를 지원한다.


+ Client Side

 - Server와 같은 개발로 Client를 쉽게 구현 가능하다.

 - Filter를 제공하여 Decorator Pattern으로 Request를 쉽게 변경 가능하다.

(ex. GZIPContentEncodingFilter, LoggingFilter)


다양한 Param을 잘 설명해놓은 Blog

이보다 더 자신있게 설명할 수가 없네요..


Jersey Annotation 잘 설명해놓은 블로그

Jersey란 무엇인가?

- GlassFish Project의 Sub-Project

- Web Framework

- JAX-RS(JSR 311) 스펙에 따른 구현체

- Open Source(CDDL 1.1 And GPL 2 With CPE)

Jersey를 알기 위해 알아야 할것

- Jersey Web Application FrameWork JAX-RS 스펙에 맞게 구현되었기 때문에 JAX-RS를 알아야 이해할 수 있다.

- JAX-B는 RESTful Service를 제공하기 위한 수단으로 JSON, XML을 선택한 경우 Marshaling 과 UnMarshaling을 위해 알아야한다.

- XML , JSON, Atom 등 RESTful Service에서 흔히 사용하는 자료형에 대해서도 알아야한다. 여기서는 JSON에 대해 간단히 언급하겠다.


+ JAX-RS

- RESTful WebServices를 위한 JAVA API

- JAVA SE5에 소개된 Annnotaion을 사용하여 정의된 사양

- 대표적인 Annotation으로 @Path, @GET, @POST, @PUT...

+ JAX-B

- JAX-B스펙에 맞게 구현

- JAVA Architecture for XML Binding

- Jersey에서는 JAX-B를 변형하여 Marshaling 과 UnMarshaling을 지원한다.

+ JSON

- JavaScript Object Notation

- Javascript에서 사용되는 자료형이나 프로그래밍 언어나 플랫폼에 독립적


자세한 내용은 WIKI를 참조

간단한 Tutorial 

Jersey HomePage

JSON HomePage


참 성급하게도 책을 받은 날 1장을 단 숨에 내려갔다. 하지만 내용이 이해가 가지 않아 다음날 다시 정독..

역시 두 세번은 읽어야 될 좋은 내용이다.

초난감 DAO로 시작해 Spring Framework를 적용시켜 멋진 DAO를 만드는 내용이다. 아직 1장 밖에 안 봤지만,
이 책의 꽃은 단연 1장 같다. 앞으로 펼칠 Spring Framework의 전반 적인 내용을 다 품고 있다고 해도 과언이

아니다.

- Java Bean :  원래 비쥬얼 툴에서 조작 가능한 컴포넌트, 자바의 주력 개발 플랫폼이 웹기반의 엔터프라이즈 방식으로 바뀌면서 비쥬얼 컴포넌트로서 자바빈은 인기를 잃었지만, JSP빈, EJB와 같은 표준기술과 자바빈 스타일의 오프젝트 사용으로 이어져 옴.
아래 두가지 관례를 갖춘 오브젝트를 자바빈이라고 함.

  • 디폴트 생성자
  • 프로퍼티

- 리팩토링 : 기존의 코드를 외부의 동작방식에는 변화없이 내부구조를 변경해서 재구성하는 작업 또는 기술

- 객체 지향의 5가지 원칙 SOLID

  • SRP : 단일 책임 원칙
  • OCP : 개방 폐쇄 원칙
  • LSP : 리코스프 치환 원칙
  • ISP : 인터페이스 분리 원칙
  • DIP : 의존관계 역전 법칙

- Bean Factory : 빈의 생성과 관계 설정 같은 제어를 담당하는 IoC 오브젝트
= Application Context : Application 전반에 걸쳐 모든 구성요소의 제어 작업을 담당하는 IoC 엔진. 별도의 정보를 참고해서 Bean의 생성, 관계 설정등의 제어 작업을 총괄

- Scope : 스프링이 관리하는 Object . 즉 Bean이 생성되고, 존재하고, 적용되는 범위

  • 싱글톤 : container 내에 한개의 오브젝트만
  • 프로토타입 : container에 빈을 요청할 때마다
  • 요청 : HTTP의 요청이 생길 때마다
  • 세션 : 웹의 세션과 스코프가 유사

- 스프링을 공부한다는 것 = DI를 어떻게 활용해야 할지를 공부하는 것

- Spring : 어떻게 오브젝트가 설계되고, 만들어지고, 어떻게 관계를 맺고, 사용되는지에 관심을 갖는 Framework


우선 웹서비스 작성을 하기전에 Axis에서 제공하는 Example을 서비스해봄으로써 앞으로 하게 될 서비스 제공에 대해 생각해보자 ㅡ

앞서 환경설정에서 보았던 Axis초기화면에서 List를 들어가면 이런 화면을 볼 수 있을 것이다.


보시다시피 현재 제공되는 서비스는 Administrator와 Version 뿐이다. 우리는 제공하는 예제중에서 Stock 이라는
서비스를 제공해 볼 것이다.

%AXIS_HOME% :  AXIS를 받은 폴더 ㅡ 톰캣에 넣어둔 AXIS폴더는 %AXIS_HOME%폴더의 하위폴더이다. 헷갈리지 않도록 하자. 거기에는 예제가 없다.

%AXIS_HOME%를 가면 하위폴더중에 samples폴더가 있다.
그 중에서 Stock폴더를 선택하여 들어가면


디렉토리 안에는 이러한 파일들이 존재한다. 과정을 진행하기전에 한가지 알고 갈 것은 , 우리는 서비스를 제공하는데 이용되어질 파일을작성하고, 그것을 이용하여 wsdl파일을 생성하고 , wsdd파일을 만든 상태라고 가정한다.
(여기서 말하는 과정은 앞으로 우리가 배울 과정이다. 걱정하지 말자.)
위에 빨간 박스 쳐진 파일들은 우리가 서비스를 올리고 내리는데 사용하게될 wsdd파일이다. deploy는 서비스를 올릴때, undeploy는 서비스를 해제할때 사용된다.

① 커맨드 창을 열어 위 서비스 샘플이 존재하는 디렉토리로 이동한다.
AXIS에서는 서비스를 올리는 방법이 2가지 인데 직접 %CATALINA_HOME%\webapps\axis\WEB-INF\server-config.wsdd 파일을 직접 조작하는 것과 java패키지중에 AXIS.jar 에 있는 AdminClient 클래스로 생성된 배포 디스크립터를 이용해 웹 서비스를 Axis 서버에 배포하는 방법이 있다. 우리는 AdminClient를 이용한다.

java org.apache.axis.client.AdminClient -l http://localhost:8080/axis/services/AdminService deploy.wsdd 

라고 명령을 내린다. 

[사용법은  java org.apache.axis.client.AdminClient  -l 서비스제공호스트:포트/axis/services/AdminService deploy파일 경로]

이러한 화면이 보인다면 서비스가 배포된 것이다. 확인을 위해
http://localhost:8080/axis 로 접속하여 List로 가보자!!


화면에서 보여주듯이 Stock서비스가 정상적으로 배포되었음을 확인할 수 있다.
Sample로 제공하는 서비스를 배포해봄으로써 우리가 다음 과정에서 하는 것에 대한 목표를 알아보았다.
몇개 더 배포해보고 우리가 하는 웹서비스에 대해 더 생각해보자!!ㅋ


  1. Vasco_대륙 2009.09.28 16:17 신고

    AdminClient를 이용할시 NoClass에러가 나는 이용자가 있을것 입니다. 이러한 경우에 JDK폴더와 JRE폴더 양쪽에 존재하는 ext\lib\폴더에 %CATALINA_HOME%\webapps\axis\lib에 있는 파일들을 복사해주면 해결 될것이다. Path문제로 인해 생기는 에러이므로 적절히 대처하면 될듯싶습니다.
    저도 찾다가 귀찮아서 그냥 위의 방법으로 했다는^^;;

웹서비스 프로그래밍을 하기전에 앞서 앞서 말했던 RPC방식에서 중요한 개념인 스텁과 스켈레톤에 대해서 알고갑시다^^ 잘 정리가 된 글이 있어 가져왔습니다.


분산개체 애플리케이션은 다음과 같은 목적을 추구합니다. 
  • 덩치가 큰 프로그램(개체)은 서버만 가지고 있는다. 
  • 프로그램 실행은 서버가 담당한다. 
  • 클라이언트에게는 이 프로그램(개체)을 조작하는 데 필요한 최소한의 코드만 전달한다. 

여기서 세번째 목적을 수행하는 데 사용되는 것, 즉, 프로그램(개체)을 조작하는 데 필요한 최소한의 코드가 바로 스텁과 스켈리턴입니다. 가령 TV 보기 서비스를 제공하기 위해 덩치가 큰 TV 가 아니라 이를 조작하는 리모콘만 전달해도 충분한 것입니다. 

 

스텁(stub)은 원래 연필 토막이나 담배꽁초처럼 쓰고 남은 조각을 말합니다. 원래 단어의 의미보다 분산개체 애플리케이션에서 스텁stub은 그 자체로 제 기능은 발휘하지 못하지만 원래 개체가 무엇인지 알아낼 수 있는 참조 역할을 하고, 원 개체의 기능조작을 위임받은 위임자proxy 역할을 하는 작은 개체로 생각하면 됩니다. 

 

스텁(stub)의 작동원리

원격 개체를 이용하고자 하는 쪽(클라이언트)은 그 원격 개체를 직접 조작하는 것이 아니라 그에 해당하는 스텁의 메쏘드를 불러내면, 이 스텁이 대신하여 원격 개체의 해당 메쏘드를 수행하는 것입니다.
원격 개체에 대응하는 스텁은 그 원격 개체가 이행하는 똑같은 원격 인터페이스들을 이행합니다. 이렇게 함으로써 스텁은 원격 개체가 이행하는 원격 인터페이스들중 하나로 캐스트(형변환)할 수 있습니다. 물론 이렇게 하면 수신 가상기계에서는 캐스트한 원격 인터페이스가 포함하는 메쏘드만 사용할 수 있습니다.

 

그러면 클라이언트가 어떻게 원격개체 메쏘드를 불러내어 조작하는지 구체적인 과정을 알아보겠습니다. 

  • 클라이언트는 조작하고자 하는 원격개체를 포함하는 원격(서버) JVM 과 접속하여 그 원격개체를 찾는다lookup.
  • 서버는 그 원격개체에 대응하는 원격 스텁을 클라이언트에게 전달한다.
  • 클라이언트는 대상 스텁의 원하는 메쏘드를 불러낸다. 이 과정에서 내부적으로 그 메쏘드의 파라미터들을 마샬링marshalling하여 원격 JVM 으로 전송한 뒤 그 응답 결과를 기다린다.
  • 서버의 스켈리턴은 호출자(클라이언트)가 보낸 마샬된 파라미터를 원래대로 복원(언마샬링unmarshal)한다.
  • 이 파라미터를 실제 원격 개체에게 전달하여 호출 대상 메쏘드를 불러낸다.
  • 호출 대상 메쏘드는 이행 결과 값이나 예외를 스켈리턴에게 되돌린다.
  • 그러면 스켈리턴은 이 되돌림값이나 예외를 마샬링하여 호출자에게 전달한다.
  • 마지막으로 원격 JVM(서버)으로부터 받은 되돌림값이나 예외를 언마샬링unmarshalling하여 이를 호출자에게 되돌린다.

스텁(Stub)과 스켈레톤(Skeleton)


스텁은 객체 그 자체와 동일한 비즈니스 메소드를 가진 인터페이스를 구현하지만, 스텁의 메소드는 비즈니스 로직 자체를 담고있지는 않으며, 클라이언트가 스텁의 비즈니스 메소드를 호출하면 호출된 메소드 명과 매개변수로 전달된 값들이 스트림 형태로 네트워크를 통해 스켈레톤에 전달된다.

 

해당 스트림을 스켈레톤이 받게 되면 스켈레톤은 스트림을 분석하여 어떤 메소드가 요청되었는지를 파악하고, 서버에 있는 객체의 비즈니스 메소드를 호출하게 된다. 메소드의 실행 결과값은 다시 스켈레톤에 의해 스텁으로 전달되며, 스텁은 마치 해당 비즈니스 로직을 로컬 컴퓨터에서 처리한 것처럼 클라이언트 애플리케이션에 결과값을 전달한다.


짐작하겠지만, 이 과정은 네트웍을 통한 자료교환을 포함하므로, 로칼에서의 메소드 콜보다는 훨씬 많은 시간을 소모한다. 따라서 원거리 호출의 횟수를 줄이는 것은 수행성능 향상을 위해 반드시 고려되어야 할 사항이다.

 

아래 그림은 Java RMI를 이용하였을 경우의 클라이언트 측의 스텁과 서버측의 스켈레톤의 형상을 보여주고 있다.


  • Beginning 자바 웹서비스(언제나 빨간책은 좋은것 같다.+_+)
  • 차세대 자바 SOAP AXIS(이것도 빨갛네 ㅎㅎ)
  • 열혈강의 XML 웹서비스(프리렉 책은 말할것도 없이 좋다.)
  • 자바를 이용한 웹서비스 구축


책을 읽고나서 실습을 하느냐, 실습을 하고 나서 책을 읽느냐는 항상 어려운 질문같다.

하지만 실습을 하기전에 AXIS서버가 하는일, SOAP가 왜 생겼는지, 그것을 왜 XML로 표기하는지, JAVA파일,

WSDL파일, WSDD파일 이 각자 무슨 역할이고 서로 어떻게 전개 되는지 등 핵심 사항들에 대해서는 간략하게 알고가

야 길목에서 내가 어디쯤 왔는지 헷갈리지 않을 것입니다. 그것에 대해 이책들은 답을 알려줄 것입니다.

책에서도 말하지만 웹서비스에 대한 정의가 다들 다르기 때문에 넓고 크게 봐서 자기만의 지식으로 만드는 것이

가장 중요한것 같습니다. 

이 후에는 과정을 진행하면서 도움을 많이 받았던 블로그나 웹페이지를 적어서 올리겠습니다.

^^ Have a nice day!!

+ Recent posts