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

내용 목차

21.1. Java 클래스 웹 서비스 생성과 배치
21.1.1. 서비스 설정 파일 작성
21.1.2. WSDL 파일과 JAX-RPC 매핑 파일 생성
21.1.3. Deployment Descriptor 작성
21.1.4. 웹 서비스 패키징과 배치
21.2. EJB 웹 서비스 생성과 배치
21.2.1. 서비스 설정 파일 작성
21.2.2. WSDL 파일과 JAX-RPC 매핑 파일 생성
21.2.3. 웹 서비스 Deployment Descriptor 작성
21.2.4. 웹 서비스 패키징과 배치

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

21.1. Java 클래스 웹 서비스 생성과 배치

JEUS JAX-RPC 웹 서비스 생성은 개발 편의를 제공하기 위해 커맨드 라인 툴과 Apache Ant 툴을 사용한다. 자세한 사항은 JEUS Reference Book”의 “4.10. java2wsdl”JEUS Reference Book”의 “4.11. wsdl2java”JEUS Reference Book”의 “5.5.1. java2wsdl”JEUS Reference Book”의 “5.5.2. wsdl2java”를 참조한다.

JAX-RPC 웹 서비스 생성과 배치 작업은 다음의 작업들이 순차적으로 진행된다.

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

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

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

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

21.1.1. 서비스 설정 파일 작성

JEUS JAX-RPC 웹 서비스는 service-config.xml과 같이 웹 서비스 생성을 위한 설정을 xml 파일에 저장한다. 다음은 설정 파일의 한 예이다.

<?xml version="1.0" encoding="UTF-8"?>
<web-services-config xmlns="http://www.tmaxsoft.com/xml/ns/jeus">
    <service>
        <service-name>DocLitEchoService</service-name>
        <target-namespace>urn:DocLitService</target-namespace>
        <output-wsdl-file>DocLitEchoService.wsdl</output-wsdl-file>
        <output-jaxrpc-mapping-file>
            DocLitEchoService-mapping.xml
        </output-jaxrpc-mapping-file>
        <style>wrapped</style>
        <interface>
            <endpoint-interface-class>
                jeustest.webservices.java2wsdl.doclit.Echo
            </endpoint-interface-class>
        </interface>
    </service>
</web-services-config>

위 예에서는 <service-name>에 설정된 'DocLitEchoService'라는 이름의 웹 서비스를 생성하게 되며, 생성되는 WSDL과 매핑 파일은 각각 'DocLitEchoService.wsdl'과 'DocLitEchoService-mapping.xml'이 된다. 서비스 스타일은 문서 방식 중 WRAPPED 방식이며, 웹 서비스 Endpoint로는 "jeustest.webservices.java2wsdl.doclit.Echo"라는 Java 클래스 파일로 설정되었다.

참고

service-config.xml 파일에 대한 보다 자세한 설명은 "JEUS XML Reference"의 "27. jeus-webservices-config.xml 설정"을 참조한다.

21.1.2. WSDL 파일과 JAX-RPC 매핑 파일 생성

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

21.1.2.1. 커맨드 라인 툴 이용

JAX-RPC 웹 서비스는 웹 서비스의 생성을 위한 커맨드 라인 툴을 제공한다. 사용법은 다음과 같다.

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

“21.1.1. 서비스 설정 파일 작성”에서 생성한 service-config.xml 파일을 가지고 웹 서비스를 생성하려면 커맨드 라인(Command Line)에서 다음과 같이 입력하여 명령어를 수행한다.

다음 예는 컴파일 된 Java 클래스 백엔드 파일들이 D:\sample\classes에 존재하는 경우이다.

D:\sample\>java2wsdl -cp .\classes service-config.xml

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

21.1.2.2. Ant 툴 이용

JEUS JAX-RPC 웹 서비스는 웹 서비스의 생성을 위한 Ant Task인 java2wsdl을 제공한다. 'java2wsdl' Ant Task는 입력으로 서비스 설정 파일의 위치를 받아서, WSDL 파일과 JAX-RPC 매핑 파일을 생성한다. 'java2wsdl' task에 관한 더 많은 정보는 JEUS Reference Book”의 “5.5.1. java2wsdl”을 참고한다. 먼저 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>

21.1.3. Deployment Descriptor 작성

웹 서비스 DD(Deployment Descriptor) 파일은 웹 서비스의 배치에 관해 기술한 XML 파일이다. 웹 서비스 DD 파일은 웹 서비스의 배치에 관한 정보와 어떻게 웹 서비스 백엔드(back-end)를 발견할 것인가에 대한 정보를 웹 서비스 엔진에게 제공한다.

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

21.1.3.1. JavaEE 웹 서비스 DD의 작성

JavaEE웹 서비스 DD 파일명은 반드시 webservices.xml로 해야 한다. 다음은 한 예이다.

[예 21.1] << webservices.xml >>

<?xml version="1.0"?>
<webservices version="1.1" xmlns="http://java.sun.com/xml/ns/j2ee">
    <webservice-description>
        <webservice-description-name>DocLitEchoService
        </webservice-description-name>
        <wsdl-file>WEB-INF/wsdl/DocLitEchoService.wsdl</wsdl-file>
        <jaxrpc-mapping-file>
            WEB-INF/DocLitEchoService-mapping.xml
        </jaxrpc-mapping-file>
        <port-component>
            <port-component-name>EchoPort</port-component-name>
            <wsdl-port xmlns:ns2="urn:DocLitService">
                ns2:EchoPort
            </wsdl-port>
            <service-endpoint-interface>
                jeustest.webservices.java2wsdl.doclit.Echo
            </service-endpoint-interface>
            <service-impl-bean>
                <servlet-link>EchoServlet</servlet-link>
            </service-impl-bean>
        </port-component>
    </webservice-description>
</webservices>


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

21.1.3.2. JEUS 웹 서비스 DD의 작성

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

[예 21.2] << jeus-webservices-dd.xml >>

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<jeus-webservices-dd xmlns="http://www.tmaxsoft.com/xml/ns/jeus">
    <service>
        <webservice-description-name>
            DocLitEchoService
        </webservice-description-name>
        <port>
            <port-component-name>EchoPort</port-component-name>
        </port>
    </service>
</jeus-webservices-dd>


참고

보다 자세한 설명은 "JEUS XML Referece"의 "25. jeus-webservices-dd.xml 설정"을 참조한다.

21.1.4. 웹 서비스 패키징과 배치

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

참고

JEUS 웹 컨테이너의 컨텍스트와 웹 애플리케이션에 대한 보다 자세한 설명은 JEUS Web Container 안내서”의 “제6장 Web Context(웹 애플리케이션)”를 참조한다.

21.1.4.1. 서블릿 DD 및 JEUS 웹 모듈 DD 작성

서블릿 DD 작성

서블릿 DD(web.xml)의 통상적인 역할은 서블릿과 JSP 컴포넌트의 런타임 속성을 기술하는 것이다. Java 클래스 웹 서비스는 런타임에 서블릿에 임베드된 형태로 연동되므로 web.xml 파일은 Java 클래스 웹 서비스를 배치할 때 필요하다. 다음은 web.xml 파일의 한 예이다.

[예 21.3] << web.xml >>

<?xml version="1.0"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee">
    <servlet>
        <servlet-name>EchoServlet</servlet-name>
        <servlet-class>
            jeustest.webservices.java2wsdl.doclit.EchoImpl
        </servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>EchoServlet</servlet-name>
        <url-pattern>/DocLitEchoService</url-pattern>
    </servlet-mapping>
</web-app>


<servlet-class> element는 실제 서비스를 구현한 로직이 들어있는 Java 클래스의 풀 패키지 이름을 포함한 클래스 이름을 텍스트 노드의 값으로 가진다. <servlet-mapping> element의 하위 element인 <url-pattern> element는 실제로 서비스에 접근하기 위한 URL을 값으로 필요로 한다.

JEUS 웹 모듈 DD 작성

JEUS 웹 모듈 DD는 배치하려는 웹 모듈의 컨텍스트를 정의한다. 파일 이름은 jeus-web-dd.xml과 같다. 다음은 DocLitEchoService를 컨텍스트로 가지는 서비스의 JEUS 웹 모듈 DD이다.

[예 21.4] << jeus-web-dd.xml >>

<?xml version="1.0" encoding="UTF-8"?>
<jeus-web-dd xmlns="http://www.tmaxsoft.com/xml/ns/jeus">
    <context-path>/DocLitEchoService</context-path>
    <docbase>DocLitEchoService</docbase>
    <enable-jsp>true</enable-jsp>
    <auto-reload>
        <enable-reload>false</enable-reload>
        <check-on-demand>false</check-on-demand>
    </auto-reload>
    <max-instance-pool-size>-1</max-instance-pool-size>
    <url-rewriting>false</url-rewriting>
    <enable-default-login>false</enable-default-login>
</jeus-web-dd>


21.1.4.2. WAR 패키징

WAR 파일은 확장명이 .war로 끝나는 일종의 JAR 압축 파일이며, 압축과 압축 해제 알고리즘인 zlib 알고리즘 표준을 따라 압축되는 파일이다. WAR 파일은 서블릿, JSP와 같은 웹 컴포넌트들을 묶는 용도로만 쓰이며, 다음과 같이 특정한 디렉터리 구조를 가지고 있어야 한다.

C:\WAR
   |
   +-- WEB-INF
       |-- web.xml (서블릿 DD)
       |-- webservices.xml (표준 웹 서비스 DD)
       |-- jeus-webservices-dd.xml (JEUS 웹 서비스 DD)
       |-- jeus-web-dd.xml (JEUS 웹 모듈 DD)
       |-- Jax-rpc mapping 파일
       +-- wsdl
           |
           +-- wsdl 파일
       |
       +-- classes
           |
           +-- Java 클래스 컴포넌트, 핸들러 구현 등

앞에서 생성한 WSDL 파일과, JAX-RPC 매핑 파일, 표준 웹 서비스 DD(webserivices.xml), JEUS 웹 서비스 DD(jeus-webservices-dd.xml), 서블릿 DD(web.xml), JEUS 웹 모듈 DD을 WAR 파일 형태로 묶는다.

JAX-RPC 매핑 파일과 WSDL 파일이 webservices.xml 파일에 <wsdl-file>과 <jax-rpc-mappng-file>로 기술한 위치에 존재한다면 반드시 위의 구조를 따르지 않아도 무방하다.

21.1.4.3. EAR 패키징과 배치

EAR 패키징

JavaEE 응용 프로그램은 웹 컴포넌트나 EJB, JavaEE 커넥터를 사용할 수 있는 하나의 독립적인 비즈니스 솔루션이며, EAR(Enterprise ARchive)파일로 패키징 될 수 있다. EAR 파일은 응용 프로그램의 XML DD을 가지고 있으며, JavaEE 컴포넌트와 커넥터 등을 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 패키징한 JavaEE 컴포넌트들을 기술한다. 다음은 웹 모듈을 JavaEE 구성요소로 가지고 있는 EAR 응용 프로그램의 application.xml 파일의 한 예이다.

[예 21.5] << application.xml >>

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ns1:application version="1.4"
    xmlns:ns1="http://java.sun.com/xml/ns/j2ee">
    <ns1:module>
        <ns1:web>
            <ns1:web-uri>DocLitEchoService.war</ns1:web-uri>
            <ns1:context-root>DocLitEchoService</ns1:context-root>
        </ns1:web>
    </ns1:module>
</ns1:application>


<web> element에서는 웹 모듈 패키징의 이름이 무엇인지, 모듈의 컨텍스트의 정보가 무엇인지에 대한 정보를 가지고 있다.

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

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

http://host:port/DocLitEchoService/DocLitEchoService

21.2. EJB 웹 서비스 생성과 배치

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

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

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

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

  3. 웹 서비스 Deployment Descriptor 작성(webservices.xml, jeus-webservices-dd.xml, ejb-jar.xml)

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

21.2.1. 서비스 설정 파일 작성

다음은 설정 파일의 한 예이며, 파일 이름은 service-config.xml이다.

<?xml version="1.0"?>
<web-services-config xmlns="http://www.tmaxsoft.com/xml/ns/jeus">
    <service>
        <service-name>AddressBookService</service-name>
        <target-namespace>urn:AddressBookService</target-namespace>
        <style>wrapped</style>
        <use>literal</use>
        <interface>
            <endpoint-interface-class>
                address.AddressBookIF
            </endpoint-interface-class>
        </interface>
    </service>
</web-services-config>

위 예에서는 <service-name>에 설정된 AddressBookService 라는 이름의 웹 서비스를 생성하게 되며, 생성되는 WSDL과 매핑 파일은 각각 AddressBookService.wsdl과 AddressBookService-mapping.xml이 된다. 서비스 스타일은 문서 방식 중, WRAPPED 방식이며, 웹 서비스 Endpoint로는 address.AddressBookIF라는 Java 클래스 파일로 설정되었다.

참고

service-config.xml 파일에 대한 보다 자세한 설명은 "JEUS XML Reference"의 "27. jeus-webservices-config.xml 설정"을 참조한다.

21.2.2. WSDL 파일과 JAX-RPC 매핑 파일 생성

JEUS JAX-RPC 웹 서비스는 웹 서비스의 생성을 위해 커맨드 라인 툴 방식과 Ant Task 방식을 제공한다.

웹 서비스 생성을 위해 2가지 방법 중 어느 것을 택해도 무방하며, 사용자 편의에 따라 결정한다.

21.2.2.1. 커맨드 라인 툴 이용

JEUS JAX-RPC 웹 서비스는 웹 서비스의 생성을 위한 커맨드 라인 툴을 제공한다. 사용법은 다음과 같다.

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 파일을 가지고 웹 서비스를 생성하려면 커맨드 라인에서 다음과 같이 입력하여 명령어를 수행한다.

다음 예는 컴파일된 Java 클래스 백엔드 파일들은 D:\sample\classes에 존재하는 경우이다.

D:\sample\>java2wsdl -cp .\classes ejb-service-config.xml

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

21.2.2.2. Ant 툴 이용

JEUS JAX-RPC 웹 서비스는 웹 서비스의 생성을 위한 Ant Task인 java2wsdl를 제공한다. java2wsdl Ant Task는 입력으로 서비스 설정 파일의 위치를 받아서, WSDL 파일과 JAX-RPC 매핑 파일을 생성한다. java2wsdl Task에 관한 더 많은 정보는 JEUS Reference Book”의 “5.5.1. java2wsdl”을 참고한다.

먼저 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> element의 configfilepath 속성에 넣어주고, 컴파일 된 Java 클래스 파일들의 경로를 <classpath> element의 refid 속성에 넣어준다.

위와 같은 명령을 수행하고 나면 WSDL 파일과 JAX-RPC 매핑 파일이 생성된다.

21.2.3. 웹 서비스 Deployment Descriptor 작성

웹 서비스 DD(Deployment Descriptor; Deployment Descriptor) 파일은 웹 서비스의 배치에 관해 기술한 XML 파일이다. 웹 서비스 DD 파일은 웹 서비스의 배치에 관한 정보와 어떻게 웹 서비스 백엔드(back-end)를 발견할 것인가에 대한 정보를 웹 서비스 엔진에게 제공한다.

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

21.2.3.1. JavaEE 웹 서비스 DD 작성

JavaEE 웹 서비스 DD 파일명은 반드시 webservices.xml로 해야 한다. 다음은 한 예이다.

[예 21.6] << webservices.xml >>

<?xml version="1.0"?>
<webservices version="1.1" xmlns="http://java.sun.com/xml/ns/j2ee">
    <webservice-description>
        <webservice-description-name>
            AddressBookService
        </webservice-description-name>
        <wsdl-file>
            META-INF/wsdl/AddressBookService.wsdl
        </wsdl-file>
        <jaxrpc-mapping-file>
            META-INF/AddressBookService-mapping.xml
        </jaxrpc-mapping-file>
        <port-component>
            <port-component-name>
                AddressBookIFPort
            </port-component-name>
            <wsdl-port xmlns:ns2="urn:AddressBookService">
                ns2:AddressBookIFPort
            </wsdl-port>
            <service-endpoint-interface>
                address.AddressBookIF
            </service-endpoint-interface>
            <service-impl-bean>
                <ejb-link>AddressEJB</ejb-link>
            </service-impl-bean>
        </port-component>
    </webservice-description>
</webservices>


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

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

21.2.3.2. JEUS 웹 서비스 DD 작성

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

[예 21.7] << jeus-webservices-dd.xml >>

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<jeus-webservices-dd xmlns="http://www.tmaxsoft.com/xml/ns/jeus">
    <ejb-context-path>webservice</ejb-context-path>
    <service>
        <webservice-description-name>
            AddressBookService
        </webservice-description-name>
        <port>
            <port-component-name>
                AddressBookIFPort
            </port-component-name>
            <ejb-endpoint-url>
                /AddressBookService
            </ejb-endpoint-url>
        </port>
    </service>
</jeus-webservices-dd>


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

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

http://host:port/webservice/AddressBookService

21.2.4. 웹 서비스 패키징과 배치

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

21.2.4.1. EJB DD의 작성

다음은 ejb-jar.xml 파일의 한 예이다.

[예 21.8] << ejb-jar.xml >>

<?xml version="1.0" encoding="UTF-8"?>
<ejb-jar xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
        http://java.sun.com/xml/ns/j2ee/ejb-jar_2_1.xsd"
    version="2.1">
<display-name>AddressEJB</display-name>
    <enterprise-beans>
        <session>
            <display-name>AddressEJB</display-name>
            <ejb-name>AddressEJB</ejb-name>
            <service-endpoint>
                address.AddressBookIF
            </service-endpoint>
            <ejb-class>address.AddressBookEJB</ejb-class>
            <session-type>Stateless</session-type>
            <transaction-type>Container</transaction-type>
        </session>
    </enterprise-beans>
</ejb-jar>


<ejb-class> element는 실제 서비스를 구현한 로직이 들어있는 Bean 클래스의 풀 패키지 이름을 포함한 클래스 이름을 텍스트 노드의 값으로 가진다. <service-endpoint> element는 EJB 웹 서비스의 서비스 Endpoint 인터페이스 클래스의 풀 패키지 이름을 포함한 클래스 이름을 텍스트 노드의 값으로 가진다.

다음은 JEUS에 필요한 또 다른 EJB DD이다. 파일 이름은 jeus-ejb-dd.xml이다.

[예 21.9] << jeus-ejb-dd.xml >>

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<jeus-ejb-dd xmlns="http://www.tmaxsoft.com/xml/ns/jeus">
    <beanlist>
        <jeus-bean>
            <ejb-name>AddressEJB</ejb-name>
            <export-name>AddressEJB</export-name>
        </jeus-bean>
    </beanlist>
</jeus-ejb-dd>


21.2.4.2. JAR 패키징

지금까지 작성한 EJB 구현 클래스들과 SEI, 그리고 웹 서비스 DD, EJB DD를 하나의 JAR 파일로 패키징을 한다. 구조는 다음과 같다.

C:\JAR
   |
   +-- META-INF
       |-- ejb-jar.xml (표준 EJB DD)
       |-- webservices.xml (표준 웹서비스 DD)
       |-- jeus-webservices-dd.xml (JEUS 웹서비스 DD)
       |-- jeus-ejb-dd.xml (JEUS EJB DD)
       +-- Jax-rpc mapping 파일
       +-- wsdl
           |
           +-- wsdl 파일
       |
       +-- EJB 클래스 컴포넌트, J2EE Portable Artifact

JAX-RPC 매핑 파일과 WSDL 파일이 webservices.xml 파일의 <wsdl-file>과 <jax-rpc-mapping-file>로 기술한 위치에 존재한다면 반드시 위의 구조를 따르지 않아도 무방하다.

21.2.4.3. EAR 패키징과 배치

EAR 패키징

JavaEE 응용 프로그램은 웹 컴포넌트나 EJB, JavaEE 커넥터를 사용할 수 있는 하나의 독립적인 비즈니스 솔루션이며, EAR(Enterprise ARchive) 파일로 패키징될 수 있다. EAR 파일은 응용 프로그램의 XML DD을 가지고 있으며, JavaEE 컴포넌트와 커넥터 등을 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 패키징한 JavaEE 컴포넌트들을 기술한다. 다음은 웹 모듈을 JavaEE 구성요소로 가지고 있는 EAR 응용 프로그램의 application.xml 파일의 한 예이다.

[예 21.10] << application.xml >>

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ns1:application version="1.4"
    xmlns:ns1="http://java.sun.com/xml/ns/j2ee">
    <ns1:module>
        <ns1:ejb>AddressBook.jar</ns1:ejb>
    </ns1:module>
</ns1:application>


<ejb> element에서는 EJB 웹 서비스의 JAR 패키징의 이름이 무엇인지에 대한 정보를 가지고 있다.

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

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