제22장 JAX-RPC 웹 서비스 생성과 배치

내용 목차

22.1. Java 클래스 웹 서비스 생성과 배치
22.1.1. 서비스 설정 파일 작성
22.1.2. WSDL 파일과 JAX-RPC 매핑 파일 생성
22.1.3. 웹 서비스 DD 파일 작성
22.1.4. 패키징과 배치
22.2. EJB 웹 서비스 생성과 배치
22.2.1. 서비스 설정 파일 작성
22.2.2. WSDL 파일과 JAX-RPC 매핑 파일 생성
22.2.3. 웹 서비스 DD 파일 작성
22.2.4. 패키징과 배치

본 장에서는 Java 클래스와 EJB를 Endpoint로 갖는 JAX-RPC 웹 서비스의 생성과 배치 방법에 대해 설명한다.

JEUS JAX-RPC 웹 서비스 생성은 개발 편의를 제공하기 위해 Command Line 툴과 Apache Ant 툴을 사용한다. JAX-RPC 웹 서비스 생성과 배치 작업은 다음의 작업들이 순차적으로 진행된다.

  1. 서비스 설정 파일의 작성(service-config.xml)

  2. Jakarta EE 웹 서비스를 위한 WSDL과 JAX-RPC 매핑 파일의 생성

  3. 웹 서비스 DD 작성(webservices.xml, jeus-webservices-dd.xml)

  4. 생성된 웹 서비스 모듈의 패키징과 배치

JEUS JAX-RPC 웹 서비스 생성을 위해 Command Line 툴 방식과 Ant Task 방식을 제공한다. 2가지 방법 중 어느 것을 선택해도 무방하며 사용자 편의에 따라 결정한다.

Command Line 툴 이용

JAX-RPC 웹 서비스는 웹 서비스의 생성을 위한 Command Line 툴을 제공한다.

Usage: java2wsdl [options] configuration_file
where [options] include:
-classpath <path>           specify where to find input class files
-cp <path>                  same as -classpath <path>
-d <directory>              specify where to place generated output files
-verbose                    [optional] turn verbose mode on

“22.1.1. 서비스 설정 파일 작성”에서 생성한 service-config.xml 파일로 웹 서비스를 생성하려면 Command Line에 명령어를 입력한다.

다음은 JEUS_HOME/sample/classes아래 컴파일된 Java 클래스 Back-end 파일이 있는 경우 명령어 실행의 예이다.

JEUS_HOME/sample$java2wsdl -cp ./classes service-config.xml

위와 같이 명령을 수행하면 JAX-RPC 매핑 파일인 DocLitEchoService-mapping.xml과 WSDL 파일인 DocLitEchoService.wsdl이 생성된다.

Ant 툴 이용

JEUS JAX-RPC 웹 서비스는 웹 서비스의 생성을 위한 Ant Task인 java2wsdl을 제공한다. java2wsdl은 서비스 설정 파일의 위치를 입력받아서 WSDL 파일과 JAX-RPC 매핑 파일을 생성한다.

다음과 같이 수행하여 Java 클래스 파일들을 컴파일한다.

$ ant compile

WSDL 파일과 JAX-RPC 매핑 파일 또한 위의 명령어를 수행하면 './build' 디렉터리에 자동 생성된다.

컴파일 Ant Task는 내부적으로 -pre-compile > do-compile > -post-compile 과정을 거치며 WSDL 파일과 JAX-RPC 매핑 파일을 생성하는 -post-compile은 다음과 같이 구성되어 있다.

<target name="-post-compile">
    <mkdir dir="${build.war.dir}/WEB-INF/wsdl"/>
    <antcall target="java2wsdl">
        <param name="java2wsdl.option" 
               value="-classpath ${build.classes.dir}
               -d ${build.war.dir}/WEB-INF ${src.conf}/service-config.xml" />
    </antcall>
</target>

웹 서비스 DD 파일은 웹 서비스의 배치에 관해 기술한 XML 파일로 웹 서비스의 배치에 관한 정보와 웹 서비스 Back-end를 발견하는 방법에 대한 정보를 웹 서비스 엔진에게 제공한다.

웹 서비스 DD 파일에는 Jakarta EE 웹 서비스 스펙에 규정된 DD 파일인 webservices.xml과 JEUS 웹 서비스를 위한 DD 파일인 jeus-webservices-dd.xml이 있다.

Jakarta EE 웹 서비스 DD 파일 작성

Jakarta EE 웹 서비스 DD 파일명은 반드시 webservices.xml로 해야 한다.


DocLitEchoService라는 서비스 이름을 가지고, WSDL 파일의 위치는 WAR 파일 내에서 WEB-INF/wsdl 디렉터리 내에 있으며, 그 이름은 DocLitEchoService.wsdl이다. JAX-RPC 매핑 파일의 위치는 WEB-INF 디렉터리이며, DocLitEchoService-mapping.xml이라는 이름을 가지고 있다. 이 서비스에 접근하려면 WSDL에 표기된 포트 중 EchoPort라는 이름을 가지고 있는 포트를 사용하고, 이 포트에 대한 SEI와 서블릿이 정의된다. 보다 자세한 설명은 “제25장 JAX-RPC 웹 서비스 설정 파일 작성”을 참고한다.

JEUS 웹 서비스 DD 파일 작성

JEUS 웹 서비스 DD 파일명은 jeus-webservices-dd.xml로 해야 한다.


참고

DD 파일에 대한 자세한 설명은 "JEUS XML Reference"의 "23. jeus-webservices-dd.xml"을 참고한다.

Java 클래스 웹 서비스는 Java 클래스와 웹 서비스 DD 파일을 웹 모듈처럼 패키징한다. 웹 서비스는 웹 애플리케이션 WAR 파일과 EJB JAR 파일을 포함하는 표준 엔터프라이즈 애플리케이션(Enterprise Application) EAR 파일로 묶이게 된다.

본 절에서는 EAR 패키징과 배치에 대해서 설명한다.

EAR 패키징

Jakarta EE 응용 프로그램은 웹 컴포넌트나 EJB, Jakarta EE 커넥터를 사용할 수 있는 하나의 독립적인 비즈니스 솔루션이며, EAR(Enterprise ARchive) 파일로 패키징될 수 있다. EAR 파일은 응용 프로그램의 XML DD를 가지고 있으며, Jakarta EE 컴포넌트와 커넥터 등을 EJB JAR나 WAR 또는 RAR 파일 형태로 패키징하여 포함하고 있다.

Java 클래스 웹 서비스는 서블릿 프로그래밍 모델 위에서 생성되었으므로 WAR 파일 형태로 패키징되고, EJB Endpoint는 SOAP 메시지를 다루는 곳이 EJB이므로 EJB JAR 파일 형태로 패키징된다.

EAR
 |
 +-- WAR 파일
 |
 +-- JAR 파일
      |
      +-- EJB 웹 서비스 구성 요소
 |
 +-- META-INF
      |
      +-- 표준 application.xml 파일

META-INF 디렉터리에 있는 표준 application.xml 파일에 EAR 패키징한 Jakarta EE 컴포넌트들을 기술한다.

다음은 웹 모듈을 Jakarta EE 구성요소로 가지고 있는 EAR 응용 프로그램의 application.xml 파일의 작성 예이다. <web>에는 웹 모듈 패키징의 이름과 모듈의 컨텍스트의 정보를 설정한다.


웹 서비스의 배치(EAR 응용 프로그램의 배치)

웹 서비스의 배치 작업은 일반적인 Jakarta EE 응용 프로그램의 배치 작업과 동일하다. EAR 배치 작업을 수행함으로써 웹 서비스는 인터넷에서 접근 가능한 서비스로 공개된다.

배치된 서비스의 실제 접근 가능한 URL 주소는 다음과 같다.

http://host:port/DocLitEchoService/DocLitEchoService

EJB를 이용한 웹 서비스의 구현 작업을 완료했다면 실제로 EJB의 비즈니스 로직을 웹 서비스로 전환하고 배치하는 작업이 필요하다. EJB 웹 서비스 생성과 배치 작업의 전체적인 흐름은 Java 클래스 웹 서비스 생성, 배치 작업과 같다. JEUS JAX-RPC 웹 서비스 생성은 개발 편의를 제공하기 위해 Command Line 툴과 Apache Ant 툴을 사용한다.

전체적인 작업 흐름은 다음과 같다.

  1. 서비스 설정 파일의 작성(service-config.xml)한다.

  2. Jakarta EE 웹 서비스를 위한 WSDL과 JAX-RPC 매핑 파일의 생성한다.

  3. 웹 서비스 DD 작성(webservices.xml, jeus-webservices-dd.xml, ejb-jar.xml)한다.

  4. 생성된 웹 서비스 모듈의 패키징과 배치한다.

JEUS JAX-RPC 웹 서비스는 웹 서비스의 생성을 위해 Command Line 툴 방식과 Ant Task 방식을 제공한다. 웹 서비스 생성을 위해 2가지 방법 중 어느 것을 선택해도 무방하며, 사용자 편의에 따라 결정한다.

Command Line 툴 사용

JEUS JAX-RPC 웹 서비스는 웹 서비스의 생성을 위한 Command Line 툴을 제공한다.

Usage: java2wsdl [options] configuration_file

where [options] include:
-classpath <path>   specify where to find input class files
-cp <path>          same as -classpath <path>
-d <directory>      specify where to place generated output files
-level <log-level>  specify a log level
-verbose            [optional] turn verbose mode on

이전 장에서 생성한 service-config.xml 파일로 웹 서비스를 생성하려면 Command Line에서 다음과 같이 입력하여 명령을 수행한다.

다음 예는 컴파일된 Java 클래스 Back-end 파일들이 JEUS_HOME/sample/classes에 존재하는 경우이다.

JEUS_HOME/sample$java2wsdl -cp ./classes ejb-service-config.xml

위와 같이 명령을 수행하면, JAX-RPC 매핑 파일인 AddressBookService-mapping.xml과 WSDL 파일인 AddressBookService.wsdl이 생성된다.

Ant 툴 사용

JEUS JAX-RPC 웹 서비스는 웹 서비스의 생성을 위한 Ant Task인 java2wsdl를 제공한다. java2wsdl은 입력으로 서비스 설정 파일의 위치를 받아서 WSDL 파일과 JAX-RPC 매핑 파일을 생성한다.

Java 클래스 파일들을 다음과 같은 명령을 수행하여 컴파일한다.

$ ant compile

WSDL 파일과 JAX-RPC 매핑 파일 또한 위의 명령어를 수행하면 ./build 디렉터리에 자동 생성된다.

컴파일 Ant Task는 내부적으로 -pre-compile > do-compile > -post-compile 과정을 거치며 WSDL 파일과 JAX-RPC 매핑 파일을 생성하는 -post-compile은 다음과 같이 구성되어 있다.

<target name="-post-compile">
    <mkdir dir="${build.classes.dir}/META-INF/wsdl"/>
    <antcall target="java2wsdl">
        <param name="java2wsdl.option" 
               value="-classpath ${build.classes.dir}
        -d ${build.classes.dir}/META-INF ${src.conf}/ejb-service-config.xml" />
    </antcall>
</target>

서비스 설정 파일 경로를 <java2wsdl>의 'configfilepath' 속성에 입력하고, 컴파일된 Java 클래스 파일들의 경로를 <classpath>의 'refid' 속성에 입력한다. 위와 같은 명령을 수행하고 나면 WSDL 파일과 JAX-RPC 매핑 파일이 생성된다.

웹 서비스 DD 파일은 웹 서비스의 배치에 관해 기술한 XML 파일로 웹 서비스의 배치에 관한 정보와 웹 서 비스 Back-end를 발견하는 방법에 대한 정보를 웹 서비스 엔진에게 제공한다.

웹 서비스 DD 파일은 Jakarta EE 웹 서비스 스펙에 규정된 DD 파일인 webservices.xml과 JEUS 웹 서비스를 위한 DD 파일인 jeus-webservices-dd.xml이 있다.

Jakarta EE 웹 서비스 DD 파일 작성

Jakarta EE 웹 서비스 DD 파일명은 반드시 webservices.xml로 해야 한다.


AddressBookService라는 서비스 이름을 가지고, WSDL 파일의 위치는 JAR 파일 내에서 META-INF/wsdl 디렉터리 내에 있으며, 그 이름은 AddressBookService.wsdl이다. JAX-RPC 매핑 파일의 위치는 META-INF 디렉터리이며, AddressBookService-mapping.xml이라는 이름을 가지고 있다.

이 서비스에 접근하려면 WSDL에 표기된 포트 중 AddressBookIFPort 라는 이름을 가지고 있는 포트를 사용하고, 이 포트에 대한 SEI와 EJB가 정의된다.

JEUS 웹 서비스 DD 파일 작성

JEUS 웹 서비스 DD 파일명은 jeus-webservices-dd.xml로 해야 한다.


JEUS 웹 서비스 DD 파일에는 EJB 웹 서비스로 접근하기 위한 URL 접근 경로를 기술한다. URL 접근 경로는 컨텍스트 경로와 URL 패턴을 포함한다. 컨텍스트 경로는 <ejb-context-path>로 지정한다. URL 패턴은 <port> 아래의 <ejb-endpoint-url>로 지정한다.

위의 경우 웹 서비스에 접근하기 위한 실제 URL 주소는 다음과 같다.

http://host:port/webservice/AddressBookService

EJB 웹 서비스는 EJB JAR 패키징 안에 웹 서비스 DD 파일과 WSDL을 같이 포함한다. 웹 서비스는 웹 애플리케이션 WAR 파일과 EJB JAR 파일을 포함하는 표준 엔터프라이즈 애플리케이션(Enterprise Application) EAR 파일로 묶이게 된다.

본 절에서는 EAR 패키징과 배치에 대해서 설명한다.

EAR 패키징

Jakarta EE 응용 프로그램은 웹 컴포넌트나 EJB, Jakarta EE 커넥터를 사용할 수 있는 하나의 독립적인 비즈니스 솔루션이며, EAR(Enterprise ARchive) 파일로 패키징될 수 있다. EAR 파일은 응용 프로그램의 XML DD를 가지고 있으며, Jakarta EE 컴포넌트와 커넥터 등을 EJB JAR나 WAR, 혹은 RAR 파일 형태로 패키징하여 포함하고 있다.

JSE(JAX-RPC Service Endpoint)는 서블릿 프로그래밍 모델 위에서 생성되었으므로 WAR 파일 형태로 패키징되고, EJB Endpoint는 SOAP 메시지를 다루는 곳이 EJB이므로 EJB JAR 파일 형태로 패키징된다.

EAR
 |
 +-- WAR 파일
      |
      +-- JSE(JAX-RPC Servlet Endpoint) 웹 서비스 구성 요소
 |
 +-- JAR 파일
      |
      +-- EJB 웹 서비스 구성 요소
 |
 +-- META-INF
      |
      +-- 표준 application.xml 파일

META-INF 디렉터리 안의 표준 application.xml 파일에 EAR 패키징한 Jakarta EE 컴포넌트들을 기술한다.

다음은 웹 모듈을 Jakarta EE 구성요소로 가지고 있는 EAR 응용 프로그램의 application.xml 파일의 한 예이다. <ejb>에서는 EJB 웹 서비스의 JAR 패키징의 이름에 대한 정보를 가지고 있다.


웹 서비스의 배치(EAR 응용 프로그램의 배치)

웹 서비스의 배치 작업은 일반적인 Jakarta EE 응용 프로그램의 배치 작업과 동일하다. EAR 배치 작업을 수행함으로써 웹 서비스는 인터넷에서 접근 가능한 서비스로 공개된다.