J2EE에서 웹 서비스를 개발하고 배포하는 데 사용할 수 있는 기술 중 하나가 바로 XML 기반 RPC(JAX-RPC) 용 자바 API이다. 하지만 개발자가 JAX-RPC 기술을 사용하려면 webservices.xml, web.xml, ejb-jar.xml 등과 같은 배포 디스크립터에서 상당량의 정보를 지정해야 하는데, 프로그래머들은 이런 요구사항을 성가시거나 혼란스러운 것으로 여기는 경우가 대부분이다.

웹 서비스 프로그래밍 모델을 간소화하기 위해 XML 웹 서비스(JAX-WS) 용 자바 API가 도입되었다. JAX-WS 기술의 주된 목적은 웹 서비스의 개발과 배포를 용이하게 하는 것으로, 이러한 간소화의 상당 부분은 주석에서 비롯된다고 할 수 있다. 지난 1월 18일자 테크 팁, "JAX-WS를 이용하여 웹 서비스 개발하기"에서 이와 유사한 주석의 몇 가지 용례를 다룬 적이 있는데, 이를 비롯한 JAX-WS의 기능은 배포 디스크립터에 대한 번거로운 요구의 부담을 어느 정도 해소시켜 준다.

JAX-WS 기술은 Java Web Services Developer Pack (Java WSDP) Version 2.0에서 처음으로 선을 보였는데, 이 팩은 얼리 어댑터들이 JAX-WS 기반의 웹 서비스를 개발하여 J2EE 1.4 SDK(Sun Java System Application Server 8.2 Platform Edition 포함) 또는 Apache Tomcat 같은 J2EE 1.4 구현 상에서 배포를 할 수 있도록 해준다. 하지만 JAX-WS 기술은 J2EE 1.4가 공개된 후에 이용 가능하게 되었기 때문에, 이를 그러한 레벨의 플랫폼에서 사용하려면 다양한 배포 스크립터에 플랫폼 고유의 정보를 추가해야 했다. 불행히도 이러한 플랫폼 정보는 Java WSDP 2.0을 이용하여 개발한 JAX-WS 기반의 웹 서비스를 Java EE 5에 포팅하는 것을 제한한다는 단점이 있다.

본 테크 팁에서는 Java WSDP 2.0을 이용하여 개발하고 J2EE 1.4 플랫폼에 배포된 JAX-WS 기반의 웹 서비스를 변경하여 Java EE 5 플랫폼에 포팅할 수 있도록 하는데 필요한 사항들에 대해 설명한다.

시작하기

본 팁에는 마이그레이션 프로세스의 예시를 위한 예제 패키지가 첨부되어 있으며, 여기에는 웹 서비스를 구축하기 위한 소스 코드와 관련 파일이 포함되어 있다. 코드와 파일은 두 가지 버전으로 제공되는데, 그 중 하나는 Java WSDP 2.0을 이용하여 웹 서비스를 구축하고 이를 Java System Application Server 8.2 Platform Edition에 배포하기 위한 것이고, 다른 하나는 Java EE 5의 오픈 소스 레퍼런스 구현인 GlassFish 상에 웹 서비스를 구축하고 배포하기 위한 것이다.

다음과 같이 다운로드하여 설치할 수 있다.

이어서 본 테크팁에 해당하는 예제 패키지를 다운로드하여 압축을 푼다. 새로 압축을 푼 디렉토리가 <sample_install_dir>/ttapr2006migws로 표시되어야 하고, 이 때 <sample_install_dir>은 예제 패키지가 설치된 디렉토리이다. ttapr2006migws 디렉토리 하위의 jwsdp-as82 디렉토리와 jwsdp-gf 디렉토리에 두 가지 버전의 코드와 파일이 포함되어 있다.

Java WSDP 2.0으로 웹 서비스 구축하기

웹 서비스를 구축하려면 다음과 같은 작업 절차가 필요하다.

  1. 엔드포인트 구현 클래스를 작성한다.
  2. 엔드포인트 구현 클래스를 컴파일한다.
  3. 웹 서비스 실행에 필요한 portable artifact를 생성한다.
  4. 웹 서비스를 WAR 파일로 패키징하여 배포한다.
엔드포인트 구현 클래스 AddNumbersjwsdp-82\endpoint 디렉토리에 들어 있는데, 사용자는 jwsdp-82 디렉토리에 있는 빌드 파일에 정의된 asant 태스크를 실행하여 웹 서비스를 컴파일하고 그에 필요한 portable artifact를 생성할 수 있다. 먼저 Java Application Server 8.2 Platform Edition을 시작하도록 한다.
   %S1AS_HOME%\bin\asadmin start-domain 
이어서 다음 명령어를 실행한다.
   <sample_install_dir>\jwsdp-82\asant service 
service 태스크는 엔드포인트 구현 클래스를 컴파일하고 wsgen 툴을 실행함으로써 portable artifact를 생성한다.

웹 서비스를 WAR 파일로 패키징하여 배포하려면 다음 명령어를 (한 행으로 입력하여) 실행한다.
   %S1AS_HOME%\bin\asadmin deploy 
   <sample_install_dir>\jwsdp-82\build\jwsdp-add.war
이 때, 이식성(portability)의 관점에서 볼 때 중요한 것은 이 프로세스가 다음과 같이 다양한 디스크립터 파일을 필요로 한다는 사실이다 - web.xml 파일(이 경우에는 jwsdp-web.xml)과 sun-jaxws.xml. 이 파일들은 웹 서비스와 함께 패키징하여 배포되어야 한다.

web.xml 파일에는 배포 중인 웹 애플리케이션을 위한 서블릿 컨텍스트 리스너를 등록하는 <listener> 엘리먼트가 포함된다.
   <listener>
    <listener-class>
    com.sun.xml.ws.transport.http.servlet.WSServletContextListener
    </listener-class>
   </listener>
서블릿 컨텍스트 리스너의 등록은 Java WSDP 2.0이 WAR가 배포될 때 웹 서비스 엔드포인트를 위해 필요한 모든 초기화를 수행하는 데 필요하다.
   <servlet>
     <servlet-name>AddService</servlet-name>
     <servlet-class>
      com.sun.xml.ws.transport.http.servlet.WSServlet
     </servlet-class>
     <load-on-startup>1</load-on-startup>
   </servlet>
web.xml 파일에는 또한 com.sun.xml.ws.transport.http.servlet.WSServlet를 가리키는 <servlet> 엘리먼트가 포함되는데, 이 레퍼런스는 Java WSDP 플랫폼으로 한정되어 사용된다. 이는 또한 해당 웹 서비스 엔드포인트에 정의된 URL에 대한 모든 요청이 공통 서블릿을 통해 경로 지정되도록 하는데 필요하다. 이어서 공통 서블릿은 요청을 해당 웹 서비스 엔드포인트로 경로 지정한다.

sun-jaxws.xml 파일에는 엔드포인트에 관한 추가 정보가 포함되어 있다.

웹 서비스를 배포한 후에는 브라우저를 URL http://localhost:8080/jwsdp-add/addnum?wsdl로 포인트하여 생성된 WSDL 파일을 열람할 수 있다. 클라이언트는 웹 서비스를 이용하기 위해 이 WSDL 파일을 참조한다.

배포된 웹 서비스가 유효하고 J2EE 및 Java EE 5 클라이언트에 의해 사용될 수 있는 것은 틀림없지만, 그렇다고 해서 모든 Java EE 컨테이너에 이식 가능한 것은 아니다. 왜냐하면 jwsdp-web.xml 파일의 콘텐트에는 플랫폼 고유의 정보가 포함되기 때문이다. 뿐만 아니라, sun-jaxws.xml 파일은 벤더 고유의 파일이기도 하다.

이제 웹 서비스를 이식 가능하게 만들어 Java EE 5에서 사용할 수 있도록 하는 방법을 알아보도록 하자.

웹 서비스를 이식 가능하게 만들기

JSR-109(Implementing Enterprise Web Services)는 Java EE 5에서 웹 서비스를 구현하기 위한 프로그래밍 모델을 지정하는데, Java WSDP 2.0을 이용하여 개발되고 J2EE 1.4 플랫폼에 배포된 웹 서비스를 Java EE5 플랫폼에 배포할 수 있게 만들려면 JSR-109 스펙과 일치하도록 해야 한다.

사용자는 여전히 엔드포인트 구현 클래스를 제공하고 컴파일해야 하지만 JSR-109에 기초하면 더 이상 벤더 고유의 디스크립터 파일 sun-jaxws.xml을 패키징하지 않아도 된다. 엔드포엔트에 관하여 요구되는 모든 정보는 엔드포인트 구현 클래스 내에 있는 @WebService 주석의 플랫폼 구현에 의해 유도된다.

아울러, 사용자는 더 이상 web.xml 파일을 패키징할 필요가 없고, 사용자가 파일을 제공하지 않으면 플랫폼이 기본값 파일을 정의한다. 하지만 사용자가 웹 서비스와 함께 패키징할 파일을 제공할 경우에는
  • web.xml 파일이 최신의 서블릿 스키마를 가리키도록 해야 한다.
         <web-app xmlns="http://java.sun.com/xml/ns/javaee" 
         xmlns:j2ee="http://java.sun.com/xml/ns/javaee" 
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
         version="2.5" xsi:schemaLocation=
         "http://java.sun.com/xml/ns/javaee 
         http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
    
    이것이 중요한 이유는 Java EE 5 기반 디스크립터를 사용하는 애플리케이션에 대해서만 주석 처리가 이루어지기 때문이다.

  • web.xml 파일에서 <listener> 엘리먼트는 필요하지 않으며, 필요한 모든 초기화는 Java EE 플랫폼에 웹 서비스를 배포하는 과정에서 수행된다.

  • <servlet> 엘리먼트는 <servlet-name>이 웹 서비스 엔드포인트의 port-component-name(즉, @WebService.name)인 경우에 요구된다. 예:
         <servlet>
         <servlet-name>AddNumbers</servlet-name>
         <servlet-class>endpoint.AddNumbers</servlet-class>
         <load-on-startup>1</load-on-startup>
         </servlet>
    
    사용자가 <servlet-name> 엘리먼트를 제공하지 않을 경우 이름은 엔드 포인트 구현 클래스의 simple name으로 기본 지정되고, <servlet-class>는 엔드포인트 구현 클래스의 full name으로 기본 지정된다.

이를 확인하려면 예제 아카이브의 jwsdp-gf 디렉토리에 들어 있는 파일을 살펴보도록 한다. 단, sun-jaxws.xml 파일이 없다는 점에 유의할 것. 아울러, jwsdp-web.xml 파일에는 <listener> 엘리먼트가 없고 <servlet> 엘리먼트는 앞서 언급한 규칙을 따른다는 점에도 유의하도록 한다.

또 한 가지 유의해야 할 사항은, 사용자가 wsgen 툴을 실행하여 portable artifact를 생성할 수 있는 옵션을 가진다는 것이다. wsgen을 실행하지 않으면 배포 시에 Java EE 5 플랫폼 구현이 사용자 대신 portable artifact를 생성하게 된다.

사용자는 J2EE 1.4의 경우와 동일한 JAX-WS 기반 웹 서비스를 구축하고 배포할 수 있으며, 이 경우 jwsdp-gf 디렉토리에 있는 파일을 이용하여 Java EE 5에 이를 구축하고 배포하게 된다. jwsdp-web.xml file\endpoint 디렉토리에서 엔드포인트 구현 클래스 AddNumbers를 찾을 수 있다.

다음과 같이 GlassFish를 시작한다.

   %GLASSFISH_HOME%\bin\asadmin start-domain 

이어서 다음 명령어를 실행한다.

   <sample_install_dir>\jwsdp-gf\asant service    
 
   %GLASSFISH_HOME%\bin\asadmin deploy 
   <sample_install_dir>\jwsdp-gf\build\javaee-add.war

서비스 태스크가 wsgen을 실행하지 않는다는 점에 유의할 것. 태스크를 위한 빌드 파일에는 wsgen이 존재하지 않고, portable artifact는 WAR 파일 배포 시 자동으로 생성된다.

웹 서비스를 배포한 후에는 브라우저를 URL http://localhost:8080/javaee-add/addnum?wsdl로 포인트하여 생성된 WSDL 파일을 열람할 수 있다.

요약하자면, Java EE 5 플랫폼은 다음과 같은 방법으로 서비스를 이식 가능하게 만든다.
  • 모든 portable artifact를 패키징할 것을 요구하지 않으며, 그렇기 때문에 wsgen과 같은 플랫폼 특유의 툴을 실행하지 않아도 된다.
  • sun-jaxws.xml과 같은 플랫폼 특유의 디스크립터를 패키징할 것을 요구하지 않는다.
  • 패키징을 위해 web.xml 파일을 요구하지 않는다. 하지만 사용자가 패키징을 위해 web.xml을 제공할 경우 그 콘텐트에는 어떠한 플랫폼 특유의 정보도 포함되지 않는다.
글쓴이 소개

Vijay Ramachandran은 Sun Java Application Server 팀의 고참 멤버로서, 지난 6년간 J2EE 그룹에서 작업해 왔으며 Sun Java System Application Server 버전 8.X 및 9.X의 배포 및 웹 서비스 관련 기능 개발에 크게 기여했다. 이전에 Vijay는 Java BluePrints 팀의 기술 관리자였으며, 같은 팀에서 J2EE 1.3 및 1.4 플랫폼에 관한 책들을 공동 집필하기도 했다.

"Java EE" 카테고리의 다른 글

2006/06/16 17:13 2006/06/16 17:13

TRACKBACK :: http://blog.sdnkorea.com/blog/trackback/318

댓글을 달아 주세요

  1. 박정숙  수정/삭제  댓글쓰기

    좋은 정보 감사해요~

    2007/09/19 04:23
  2. 김문경  수정/삭제  댓글쓰기

    유용한 글 잘 읽었읍니다

    2007/09/19 13:29
[로그인][오픈아이디란?]

◀ Prev 1  ... 384 385 386 387 388 389 390 391 392  ... 626  Next ▶