내용 목차
본 장에서는 웹 서비스를 JAX-WS JMS 기반 전송을 사용하는 방법에 대해 설명한다.
기본적으로 웹 서비스 클라이언트 애플리케이션은 JEUS 웹 서비스를 호출할 때, 전송 프로토콜로서 HTTP를 사용한다. 하지만, JEUS JAX-WS에서는 JMS 기반 전송을 사용하여 JEUS JAX-WS 기반 웹 서비스를 호출할 수 있다. JAX-WS JMS 기반 전송은 JEUS MQ 서버의 ConnectionFactory와 Destination 설정을 사용한다. JAX-WS JMS 기반 전송을 사용하는 웹 서비스는 @jeus.webservices.jaxws.api.JMSWebService Annotation을 웹 서비스 Endpoint에 더한다.
JAX-WS JMS 기반 전송을 사용하는 웹 서비스가 배치되면, 공개된 WSDL에는 2개의 wsdl:port가 정의된다(HTTP 기반의 port와 JMS 기반의 port). 웹 서비스 클라이언트 애플리케이션은 사용하기 원하는 타입의 port를 선택하여 웹 서비스를 호출할 수 있다.
본 절에서는 개발자가 JAX-WS 웹 서비스와 JMS에 익숙하다고 가정하고, 웹 서비스를 JAX-WS JMS 기반 전송을 사용하는 방법을 설명한다.
JAX-WS JMS 기반 전송은 JMS 서버를 기반으로 JMS 서버가 제공하는 ConnectionFactory와 Destination을 사용하여 동작한다. JAX-WS JMS 기반 전송을 사용하기 위해서는 JEUS MQ 서버의 JMSMain.xml에 JAX-WS JMS 기반 전송이 사용할 ConnectionFactory와 Destination 설정을 해야 한다.
JAX-WS JMS 기반 전송은 Destination으로 Queue 타입을 사용한다. 자세한 설정 방법은 "JEUS MQ 안내서"를 참고한다.
예제에서는 다음과 같은 설정을 사용한다.
[예 12.1] << JMSMain.xml >>
<jms-server xmlns="http://www.tmaxsoft.com/xml/ns/jeus"> ... <connection-factory> <type>queue</type> <name>QueueConnectionFactory</name> <service>jmstest</service> </connection-factory> <destination> <type>queue</type> <name>ExamplesQueue</name> <multiple-receiver>true</multiple-receiver> </destination> ... </jms-server>
HTTP 대신에 JMS 기반 전송을 사용하기 위해서는 @jeus.webservices.jaxws.api.JMSWebService Annotation을 웹 서비스 Endpoint에 더한다. @JMSWebService Annotation은 connectionFactory, destination, portName 속성을 갖는다.
[표 12.1] JMSWebService의 속성
속성 | 설명 | 기본값 |
---|---|---|
connectionFactory | JMS Server의 ConnectionFactory 이름으로 JMSMain.xml#<connection-factory>/<name> 값과 일치해야 한다. | "" |
destination | JMS Server의 destination 이름으로 JMSMain.xml#<destination>/<name> 값과 일치해야 한다. | "" |
portName | fromJava 모델에서는 published WSDL에 공개될 port 이름이다. | "" |
@JMSWebService Annotation이 설정된 웹 서비스 Endpoint는 다음과 같다.
[예 12.2] << AddNumbersImpl.java >>
@WebService @jeus.webservices.jaxws.api.JMSWebService( connectionFactory = "QueueConnectionFactory", destination = "ExamplesQueue", portName = "AddNumbersJMSPort") public class AddNumbersImpl { ...
@JMSWebService#portName 속성이 명시되지 않으면, JAX-WS JMS 기반 전송을 위한 portName은 “JMSTransport” + default_PortName으로 설정된다. 예를 들어, 위에서 portName을 설정하지 않으면 portName은 "JMSTransportAddNumbersImplPort"가 된다.
웹 서비스 Endpoint를 WSDL로부터 생성한다면, 배치할 애플리케이션(war 또는 jar)에 포함되는 WSDL에는 HTTP를 사용하는 wsdl:port 뿐만 아니라, JMS 기반 전송을 위한 wsdl:port가 설정되어 있어야 한다.
예제에서는 다음 설정을 사용한다.
[예 12.3] << AddNumbers.wsdl >>
<definitions name="AddNumbers" targetNamespace="urn:AddNumbers" ... > ... <service name="AddNumbersService"> <port name="AddNumbersPort" binding="impl:AddNumbersBinding"> <soap:address location="REPLACE_WITH_ACTUAL_URL" /> </port> <port name="AddNumbersJMSPort" binding="impl:AddNumbersBinding"> <soap:address location="REPLACE_WITH_ACTUAL_URL" /> </port> </service> </definitions>
또한, wsdl:port에 설정된 JMS 기반 전송을 위한 port 이름은 웹 서비스 Endpoint의 @JMSWebService#portName 속성 값과도 일치해야 한다.
JAX-WS JMS 기반 전송을 사용하려는 웹 서비스 클라이언트는 기존의 HTTP 기반의 port 대신에 JMS 기반의 port를 사용하여 JMS를 통해서 웹 서비스를 호출할 수 있다(JMS 기반 전송을 사용하는). 웹 서비스의 공개된(published) WSDL은 JMS 기반 전송을 위한 wsdl:port을 가지고 있다. 이 WSDL로부터 JEUS 웹 서비스의 wsimport 도구로 생성된 Service(extends javax.xml.ws.Service) 클래스는 기존의 HTTP 기반의 port를 얻기 위한 메소드뿐만 아니라, JMS 기반의 port를 얻기 위한 메소드도 가지고 있다.
웹 서비스 클라이언트 애플리케이션은 다음의 예와 같이 사용하기 원하는 타입의 port를 선택하여 웹 서비스를 호출할 수 있다.
[예 12.4] << AddNumbersClient.java >>
//AddNumbersPortType port = new AddNumbersService().getAddNumbersPort(); AddNumbersPortType port = new AddNumbersService().getAddNumbersJMSPort(); ...