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을 위해)
(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를 처리할 수 있다.
'Study > Software Engineering' 카테고리의 다른 글
Eclipse 에서 WSDL GUI Editor 사용하기 (0) | 2010.03.17 |
---|---|
Eclipse SOA Platform 구성 요소 (0) | 2010.03.16 |
WSDL (Web Service Description Language) (0) | 2010.01.24 |
Web 2.0 에 대한 개요 (0) | 2010.01.19 |
디자인 패턴(Design Patterns) 카탈로그의 조직화 (23개) (0) | 2010.01.07 |