본문 바로가기
Study/Software Engineering

Eclipse - Swordfish Tutorial 따라하기

by SeulKom 2010. 1. 25.

1. Swordfish 란? - SOA Runtime Framework Project

Eclipse Project로 Eclipse Equinox runtime technology 기반의 extensible SOA framework를 제공하는 것을 목적으로 하며 다음과 같은 특징이 있다.

  - Service Registry와 runtime 서비스 동적 바인딩 통합
    : consumer와 provider가 느슨하게 연결될 수 있고 policy도 쉽게 수정할 수 있다.
  - Distributed ESB ~ 초기 통신 설정 후엔 서비스간 연결에 통제 컴포넌트가 필요 없다.
    : 시스템의 확장성 증가 (대신 관리가 어려워 질 수 있으므로 원격 관리 메커니즘이 필요)



2. Sowrdfish 설치

설치에 세 가지 방법이 있다.

  2-1. Eclipse 내 메뉴 바에서
     Help > Install New Software... > Galieo - http://download.eclipse.org/releases/galileo 선택
      > SOA Development Tools (Sowrdfish Tooling) 또는 EclipseRT Target Platform Component 설치
 
(주의: SOA Development Tools(Sowrdfish Tooling) / EclipseRT Target Platform Component 둘 중 하나만 설치)



 2-2. http://www.eclipse.org/swordfish/downloads/ 에서 Swordfish 를 다운받아 기존에 설치된 Eclipse 폴더에 덮어씌움

(추가 작업)
Eclipse 내 메뉴 바에서 Help > Install New Software... > Galieo - http://download.eclipse.org/releases/galileo 선택
Galieo - http://download.eclipse.org/releases/galileo 에서 다음 item들 추가
            (SOA Client Page - Testing을 위해)
   - General Purpose Tools > Eclipse Plug-in Development Environment
   - SOA Development > SOA Tools Platform
   - Web, XML, and Java EE > Eclipse Web Developer Tools
                                         > Eclipse XML Editors and Tools
                                         > JavaScript Developer Tools

  2-3. Eclipse SOA 플랫폼 설치







3. SwordFish 를 이용한 Web service 생성 과정

 두 서비스를 생성 하고 이를 사용하는 Composite 서비스를 생성하는 것이 이 Tutorial의 목적이다.
 두 서비스가 Service Registry에 저장 되어 있으면, 서비스의 end point가 어디인지 몰라도 Composite 서비스에서 consumer통해 두 서비스를 자유롭게 사용할 수 있다.







서비스를 생성하기 전, swordfish에서 제공하는 WSDL 샘플을 다운받아야 한다. 샘플을 다운받으면, WSDL 뿐 아니라 수정해야하는 소스 코드도 같이 들어있음을 알 수 있다. (이는 아래서 다시 설명하도록 하겠다.)


3-1. Web Service Provider 정의 (Service development)

미리 작성된 WSDL을 사용하기 때문에, FlightReservation 서비스와 PaymentProcessing 서비스 생성 방식은 동일하다.

따라서, 이 포스팅에서는 PaymentProcessing 에 관해서 간략히 설명하도록 하겠다. (FlightReservation 도 같은 방식으로 생성하면 된다.)


 3-1-1. Eclipse 메뉴에서, Window > Preference > Plug-in Development > Target Platform 선택
    > Add 탭을 선택 후 Template > swordfish 선택




 3-1-2. Eclipse 메뉴에서 File > New > Project 생성

 Eclipse 메뉴에서, File > New > Others > Swordfish > JAX-WS Provider from WSDL 선택




 3-1-3. Project 이름을 설정하고 Next 클릭

 Generate an activator, a Java class that controls the plug-in's life cycle 선택을 해제하고 Next 클릭



  PaymentProcessing.wsdl 을 file system 에서 찾아서 선택 후 finish 클릭



3-1-4. 생성된 서비스의 src 중 PaymentProcessingImpl.java 파일 > processPayment 메소드의 내용을 다음과 같이 변경하고 isValid 메소드를 추가 (sample.zip 에 있는 PaymentProcessing.java 파일 참조)



3-1-5. 새 Run configuration 생성 ~ Run > Run Configuration > OSGi Framework > New
   (주의사항 : arguments 탭에서 variables box에 있는 port 번호와 registry;wsdl 파일이 있는곳;위치 확인)

오른쪽에 Target Platform 에서 

  org.eclipse.equinox.http.jetty
  org.eclipse.equinox.http.servlet
  org.eclipse.swordfish.registry

를 제거한다.



3-1-6. Run을 하여 swordfish를 실행시킨다. 

 Console 탭에 "ss" 를 입력 하고 Enter 를 치면 현재 동작 중인 Bundle list가 나오는 것을 확인할 수 있다.

 다음과 같이 PaymentProcessing 또한 동작 중인 것을 확인할 수 있다.



3-1-7. Eclipse 내 Project Explore 탭에서 PaymentProcessing.wsdl 을 찾아 오른쪽 마우스 버튼을 클릭 후,

Web services > Test with Web services Explorer 를 선택한다.



Operation 에서 processPayment를 클릭하면 다음과 같이 service 수행을 위한 input 값을 넣는 화면이 뜬다.


creditCardExpiry 가 오늘날짜 보다 뒤가 되면 서비스는 제대로 수행 될 것이고, 그렇지 않다면 Failed 가 될 것이다.




3-1-8. FlightReservation 서비스도 똑같은 방법으로 생성하고, 생성된 서비스의 src 중 FlightReservationImpl.java 파일 > reserveFlight 메소드의 내용을 다음과 같이 변경 (sample.zip 에 있는 FlightReservation.java 파일 참조)






3-2. Web Service Consumer 정의 (Service orchestration) 


3-2-1. FlightBooking Provider를 작성하기 위해 FlightReservation 서비스와 PaymentProcessing 서비스의 consumer 를 생성한다.



WSDL 을 선택할 때, "Generate example consumer code" 를 해제 한 채 finish 버튼을 누른다.




3-2-2. FlightBooking Provider 를 생성한다.

Provider를 생성할 때, FlightReservationConsumer 와 PaymentProcessingConsumer 를 추가해준다.



3-2-3. 
FlightBooking 서비스도 똑같은 방법으로 생성하고, 생성된 서비스의 src 중 FlightBookingImpl.java 파일 > FlightBookingImpl 클래스를 다음과 같이 변경

여기서, sample.zip 에 있는 FlightBooking.java 파일의 bookFlight를 그대로 사용한다면,
  
  flightReservationClient 
  paymentProcessingClient

변수가 없다는 에러가 발생한다.

이를 해결하기 위해 FlightBookingImpl 내 FlightReservation 형 변수와 PaymentProcessing 형 변수의 변수명을 각각 flightReservationClient, paymentProcessingClient 로 변경한다.




3-2-4. 새 Run configuration을 설정한다.  Run > Run Configuration > OSGi Framework > New

Bundles 탭에 보면, 이제 Workspace에 지금까지 만들었던 모든 프로젝트가 선택되어 있다.

기존 서비스들 (FlightReservation, PaymentProcessing) 이 실행 중에, 이를 합친 다른 서비스를 제공해야 하므로 (FlightBooking) Configuration 이 2개 있어야 하며, 각 Configuration은 선택해야하는 Bundle이 다르다.


기존 서비스 Provider를 위한 Swordfish configuration은 FlightReservation, PaymentProcessing 만 선택한다.

Composite 서비스 Provider를 위한 Configuration 은 다음과 같이 FlightBooking, FlightReservationConsumer, PaymentProcessingConsumer를 선택한다. 
 

그리고, Consumer와 Provider가 port가 같으면 안되므로 Arguments 탭에서 port를 수정하고, 

   DrmiRegistryPort=4771

를 추가한다.



3-2-5. 그리고, Run 은 다음 순서대로 실행한 후 FlightBooking.wsdl 의 Web Services Explorer 를 통해 확인한다.

  1. FlightReservation Provider, PaymentProcessing (위의 예에서는, Swordfish - development)
  2. FlightBooking Provider (위의 예에서는, Swordfish - orchestration)

bookFlight 의 결과가 OK가 나왔을 경우만 paymentData를 처리할 수 있다.