엔터프라이즈용 Java Application Verification Kit (AVK))은 개발자들의 어플리케이션이 J2EE 명세서에 기입된 특성만을 사용하도록 도움을 주기 위해 설계된 툴이다. 이는 다양한 종류의 J2EE-호환 어플리케이션 서버들에 걸쳐 어플리케이션의 이동성을 보증한다. 클라이언트-서버 어플리케이션에 있어 대부분의 비즈니스들에 큰 투자가 필요해왔다면, J2EE 플랫폼은 다양한 어플리케이션 서버들에 따로 인스톨하고 테스트할 필요를 줄여 많은 개발 시간과 비용을 절약할 수 있게 한다. J2EE의 이동성 특징 덕분에 각각 다른 서버들에 맞춰 코드를 다시 쓸 필요가 없다.

Java BluePrints program 에서는 이식 가능한(portable) J2EE 기반 어플리케이션 형성과 관련된 가이드라인을 제공한다. 그러나 의도하시 않게 이식 불가능한(non-portable) 어플리케이션을 쓰게 될 수도 있다. 엔터프라이즈용 Java AVK는 이런 경우에 유용하다.

Java AVK는 정적 검증과 동적 검증의 두 단계를 거칩니다..
  • 정적 검증 단계에서는 어플리케이션 스위트의 전개 기술어가 명세를 따르는지, 그리고 스위트가 특정 벤더에게 독점적인 메소드를 포함하지 않는지를 결정한다. 또한 이 단계에서는 어플리케이션 코드가 J2EE 명세를 따르는지도 확인한다. (예를 들어, EJB의 원격 인터페이스가 모든 RMI/IIOP-compliant 매개 변수 타입을 포함하는지 확인한다.)

  • 동적 검증 단계에서는 엔터프라이즈 빈 컴포넌트 메소드과, 웹 서비스 메소드, 어플리케이션을 구동함으로써 호출되는 웹 요소들의 비율을 결정한다.
이번 테크팁에서는 어떻게 정적 검증을 수행하는 방법에 대해 얘기하고, 동적 검증의 몇 가지 면에 대해서도 다룬다. 이번테크팁은 엔터프라이즈 유저 가이드를 위한 Java Application Verification Kit(AVK)에 실린 정보에 기반을 두고 있다. 유저 가이드의 온라인 버전도 이용할 수 있으며, AVK 배포판의 docs 디렉토리에서도 가능하다. 다음번 테크팁에서는 고급 동적 검증 수행하는 방법에 대해 다루도록 하겠다.

Java AVK 사용하기

만약 AVK distribution을 설치하지 않았다면, Java Application Verification Kit (AVK) for the Enterprise 페이지에서 이를 다운로드하여 설치한다

AVK를 사용하려면 Ant 파일에 AVK 태스크를 정의해야 한다. (이 태스크들을 사용하기 위해 Application Server 를 실행시켜놓을 필요는 없다.) AVK distribution에는 샘플 디렉토리가 포함되어 있다. 샘플 디렉토리에는 build.xml 파일이 있는데 이는 두 AVK 태스크(소스 스캔과 정적 아카이브 테스트)를 정의한다. 사용자의 필요에 맞게build.xml 파일 안의 코드를 맞출 수 있다. (참고 : 추후에는 소스 스캔 기능이 정적 아카이브 테스트의 한 부분으로써 실행될 것이다. 그러나 소스 스캔 기능이 현재 유저 가이드에서 다뤄지고 있고 샘플 build.xml 파일에 SourceScan 태스크가 있기 때문에, 이 팁에서는 소스 스캔 기능을 다루도록 하겠다.)

다음은build.xml 파일 내의 두 AVK 태스크 정의이다. (참고 : 여기서는 각 <taskdef>요소가 형식상의 이유로 여러 줄에 나뉘어 나타나있다. 샘플 build.xml 파일에 있는 각 <taskdef>요소는 한 줄에 나타난다):
   <taskdef name="SourceScan" 
   classname="org.apache.tools.ant.taskdefs.optional.sun.
   verification.SourceScan" 
   classpath="${cpath}"/>
   
   <taskdef name="ArchiveTest"
   classname="org.apache.tools.ant.taskdefs.optional.sun.
   verification.StaticArchiveTest" classpath="${cpath}" />

build.xml 파일은 또한 클래스패스를 정의하는 다음의 <property> 요소를 포함하고 있다. (반드시build.xml 파일 내에 나타나야한다.)
   <property name="cpath" value="${avk.home}/lib/javke-ant.jar"/>

이는 사용자가 Java AVK를 설치한 디렉토리를 나타내는 avk.home이다. 샘플 디렉토리는 avk.home 속성을 정의하는 build.properties 파일을 포함한다. 사용자 고유의 build.properties 파일에서 이 속성을 정의하거나 build.xml파일의 속성을 정의할 수 있다.

AVK 태스크를 정의하는 것 외에 또 태스크를 사용하는 대상을 지정해야 한다. 샘플 디렉토리의 build.xml 파일은 다음의 샘플 대상을 지정한다.
  • 코드 스캔. 이 대상은SourceScan 태스크를 사용하여 어플리케이션을 생성시키는 데에 사용된 어플리케이션 서버에 독점적인 코드를 찾는다.

  • 정적 아카이브 테스트. 이 대상은 ArchiveTest태스크를 사용하여 J2EE 명세에 대한 아카이브 파일을 입증한다

  • 이 대상은 TranslateRuntimeDD태스크를 사용하여 다른 어플리케이션 서버들의 전개 기술어를 Sun Java System Application Server 전개 기술어로 전환한다.
대신에, 또다른 xml 파일에서 대상을 정의하고build.xml파일에서 그 파일을 가리키도록 할 수도 있다.

독점 API용 스캔 코드

(이전에 언급되었듯이, 추후에는 소스 스캔 기능이 정적 아카이브 테스트의 한 부분으로써 실행될 것이다. 그러나 소스 스캔 기능이 현재 유저 가이드에서 다뤄지고 있고 샘플 build.xml 파일에 SourceScan태스크가 있기 때문에, 이 팁에서는 소스 스캔 기능을 다루도록 하겠다.)

샘플build.xml 을 검사하면 파일에서 정의되는 첫번째 태스크가 코드 스캔 태스크(SourceScan)임을 알 수 있다. Java AVK는 이 태스크가 이build.xml 파일과 함께 사용된다면 첫번째로 수행할 것이다. 일반적으로SourceScan태스크를 먼저 실행하는 것이 좋다. 이는 사용자의 소스 코드에서 변경되어야 할 바(그리고 이에 수반하여 사용자의 어플리케이션을 재구축하는데 필요한 바)에 대해 태스크가 경고할 것이기 때문이다.

SourceScan 태스크를 사용하여 독점적인 API용 (Java나 JSP 파일에 있는) 소스 코드를 스캔하자. 예를 들어, 샘플 build.xml파일에 있는 대상은 BEA WebLogic 5 서버에 특유한 코드에 대해 nonportable이라는 이름의 디렉토리 내의 모든 Java와 JSP 파일을 스캔한다. 이는 다음과 같다:
   <target name="code-scan" description="scan source code tests">
     <SourceScan srcDir="${avk.home}/samples/nonportable"

                 srcServer="weblogic5" />

   </target>  
srcDirsrcServer 속성 모두 대상 명세에서 필요하다. srcServer속성은 어플리케이션을 생성하는 데에 사용된 서버를 상술한다. 엔터프라이즈 유저 가이드용 Java Application Verification Kit(AVK)에서 허용된 어플리케이션 서버를 참고하기 바란다.

다음의 명령을 실행하여 샘플에서 SourceScan 태스크를 수행할 수 있다:
   asant code-scan
그에 대한 반응으로 다음의 결과가 나타난다.:
   Buildfile: build.xml

   code-scan:
        [echo] 
        See "C:\Sun\javke1.4.1\reporttool\scan\codeSummary.html" 
        for results.

   BUILD SUCCESSFUL
결과에서 지명된 codeSummary.html 파일은 스캔된 타입(Java 파일과 JSP 페이지)에 따라 소스 파일을 열거하며, 각 파일에서 발견되는 모든 이식 불가능한 API를 열거한다.

sourcescan

정적 아카이브 테스트

ArchiveTest 태스크를 사용하여 어플리케이션 모듈이 J2EE 명세에 따르는지 확인한다. 이 태스크는 모듈 파일 구성 요소의 메소드 서명과 다른 정적 불일치와 관련된 문제들을 확인하여 보고한다. 이는 파일의 모든 구성 요소를 훑으며, API와 관련된 불일치나 J2EE 명세에서 정의된 전개 기술어를 보고한다

이 태스크는 또한 모듈의 패키징과 구조를 확인한다. 예를 들어, 샘플build.xml 파일에 있는 다음 대상은 bookstore.war 이라는 WAR 파일을 스캔한다. (참고 : <target><ArchiveTest>요소가 형식상의 이유로 여러 줄에 나뉘어 나타나 있지만, 샘플build.xml 파일에 있는 <target><ArchiveTest>요소는 각각 한 줄로 나타난다.) :
   <target name="static-archive-test" 
   description="static archive tests for application containing 
   web components, reporting on all tests">
   <ArchiveTest 
   appName="${avk.home}/samples/bookstore/bookstore.war"
   reportingOpts="a" />

   </target>
appName 속성이 필요하다. 값은 EAR, JAR, WAR 또는 RAR 파일의 경로 이름이 될 수 있다. 다른 속성을 정의하지 않고 태스크를 사용하면, 태스크가 아카이브에 있는 모든 모듈을 스캔하고 모든 실패와 경고를 보고한다 . 이는 또한 어디서 결과를 볼 수 있는지도 나타낸다.

샘플에 있는ArchiveTest태스크는 다음의 명령을 통해 수행할 수 있다:
   asant static-archive-test
그 반응으로 다음과 같은 결과가 나타나게 된다 :
   Buildfile: build.xml

   static-archive-test:
     ...
     
     [exec] INFO: 
     [exec] # of Failures : 0
     [exec] # of Warnings : 0
     [exec] # of Errors   : 0
     [exec] Nov 23, 2004 3:04:08 PM 
     com.sun.enterprise.tools.verifier.ReportHandler writeToConsole
     [exec] INFO: Look in file 
     "C:\Sun\javke1.4.1\reporttool\static\bookstore.war.txt" for 
     detailed results.
     [echo] 
     See "C:\Sun\javke1.4.1\reporttool\static\verifierSummary.html" 
     for results.

   BUILD SUCCESSFUL
reportingOpts속성의 값을 변경하여 보고의 범위를 변경할 수 있다 (예를 들어 실패만 보고하도록). 또한 partitionOpts 속성을 지정하여 검증 과정을 하나 또는 그 이상의 구성 요소 타입으로 제한(예를 들어 EJB만으로)할 수도 있다. 허용된 속성과 값은 엔터프라이즈 유저 가이드용 Java Application Verification Kit(AVK)에서 볼 수 있다.

정적 아카이브 테스트의 요약 페이지는 어플리케이션에 포함된 J2EE 플랫폼의 각 모듈별로 실패, 경고, 통과 그리고 적용불가능한 테스트 결과들을 보여준다. 각 결과는 구동된 테스트에 대한 설명, 테스트명 등의 구체적인 정보로의 링크를 포함한다. 그 뿐만 아니라 정적 아카이브 테스트가 부딪힌 오류들을 열거한 섹션도 요약에 포함된다.

archivetest

전개 기술어 번역

모든 어플리케이션 서버는 각각의 실행시간 전개 기술어가 있어, 전개의 실행에 특유한 양상을 상술한다. 다른 J2EE 서버에서 실행되었던 어플리케이션은 그 실행시간 전개 기술어를 반드시 전환시켜야 Sun Java System Application Server 에서 실행이 가능하다. Java AVK로 전개 기술어를 전환하는 과정은 기존의 모듈이나 어플리케이션을 대체하지 않고, 대신 새로운 전개 기술어를 가진 모듈이나 어플리케이션의 새 카피를 생성한다.

TranslateRuntimeDD 태스크를 사용하여 전개 기술어를 생성하자. 예를 들어, 샘플 build.xml 파일에 있는 다음의 대상은HelloWorld.ear이라는 EAR 파일의 전개 기술어를 BEA WebLogic 6에서 Sun Java System Application Server 에 맞게 전환시킨다. (참고 : <target><TranslateRuntimeDD>요소가 형식상의 이유로 여러 줄에 나뉘어 나타나 있다. 샘플 build.xml 파일에 있는 <target><TranslateRuntimeDD> 요소는 각각 한 줄에 나타난다.) :
   <target name="translate-dd" 
   description="translate runtime DD for deployment">
     <TranslateRuntimeDD 
     archiveName=
     "${avk.home}/samples/weblogic_6_x/HelloWorld/HelloWorld.ear"
     srcServer="weblogic6" />

archiveNamesrcServer속성이 모두 필요하다. srcServer속성은 어플리케이션을 생성하는 데에 사용된 서버를 상술한다. 허용된 어플리케이션 서버에 대해서는 엔터프라이즈 유저 가이드용 Java Application Verification Kit(AVK)을 확인하기 바란다.

다음의 명령을 통해 샘플에 있는 TranslateRuntimeDD 를 수행할 수 있다 :
      asant translate-dd
그에 대한 반응으로 다음과 같은 결과가 나타난다 :
   Buildfile: build.xml

   translate-dd:
     [echo] Some xml files may not have translated correctly.
     [java]       [war] Warning: selected war files include 
   a WEB-INF/web.xml which will be ignored (please use webxml 
   attribute to war 
   task)http://rhea.sfbay.sun.com/iw-cc/command/iw.ccpro.submit
     [java]       [ear] Warning: selected ear files include a 
   META-INF/application.xml which will be ignored (please use 
   appxml attribute to ear task)

     [java] BUILD SUCCESSFUL
     [java] Total time: 3 seconds
     [echo] See 
   "C:\Sun\javke1.4.1\reporttool\translate\translationSummary.html" 
   for results.
     [echo] We attempted to create an ear file even if minor 
   errors occurred. The application with translated deployment 
   descriptors is in a new .ear file located in 
   C:\Sun\javke1.4.1\reporttool\translate\Input_Archives\asmtbuild 

   BUILD SUCCESSFUL
태스크를 통해 생성된 새 EAR 파일을 사용하지 말기 바란다. 대신 웹 브라우저에서 translationSummary.html파일을 연다. 이 파일은 새로운 실행시간 기술어의 위치를 보여준다. 이 위치들은 접두사sun-으로 시작한다. 이 기술어들을 기존의 어플리케이션에 덧붙인다. 태스크가 또한 새로운 표준 기술어 (application.xml, ejb-jar.xml, web.xml).를 생성함을 주의하자. 이들을 어플리케이션에 덧붙이지 않는다.

translatedd

Java AVK에 대한 더 많은 정보는 엔터프라이즈용 Java Application Verification Kit (AVK) 페이지를 참고하기 바란다. 또한, 동적 검증에 대한 정보는 다음번 테크팁에서 다루도록 한다.

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

2005/08/23 16:27 2005/08/23 16:27

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

댓글을 달아 주세요

  1. 고진구  수정/삭제  댓글쓰기

    쉬운 예제와 설명 잘 읽었읍니다. 큰 도움이 되겠어요.

    2007/09/09 23:04
  2. 박정숙  수정/삭제  댓글쓰기

    좋은 정보 감사해요~

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

◀ Prev 1  ... 492 493 494 495 496 497 498 499 500  ... 626  Next ▶