엔터프라이즈용 Java Application Verification Kit (AVK))은 개발자들의 어플리케이션이 J2EE 명세서에 기입된 특성만을 사용하도록 도움을 주기 위해 설계된 툴이다. 이는 다양한 종류의 J2EE-호환 어플리케이션 서버들에 걸쳐 어플리케이션의 이동성을 보증한다. 클라이언트-서버 어플리케이션에 있어 대부분의 비즈니스들에 큰 투자가 필요해왔다면, J2EE 플랫폼은 다양한 어플리케이션 서버들에 따로 인스톨하고 테스트할 필요를 줄여 많은 개발 시간과 비용을 절약할 수 있게 한다. J2EE의 이동성 특징 덕분에 각각 다른 서버들에 맞춰 코드를 다시 쓸 필요가 없다.
Java BluePrints program 에서는 이식 가능한(portable) J2EE 기반 어플리케이션 형성과 관련된 가이드라인을 제공한다. 그러나 의도하시 않게 이식 불가능한(non-portable) 어플리케이션을 쓰게 될 수도 있다. 엔터프라이즈용 Java AVK는 이런 경우에 유용하다.
Java AVK는 정적 검증과 동적 검증의 두 단계를 거칩니다..
Java AVK 사용하기
만약 AVK distribution을 설치하지 않았다면, Java Application Verification Kit (AVK) for the Enterprise 페이지에서 이를 다운로드하여 설치한다
AVK를 사용하려면 Ant 파일에 AVK 태스크를 정의해야 한다. (이 태스크들을 사용하기 위해 Application Server 를 실행시켜놓을 필요는 없다.) AVK distribution에는 샘플 디렉토리가 포함되어 있다. 샘플 디렉토리에는
다음은
AVK 태스크를 정의하는 것 외에 또 태스크를 사용하는 대상을 지정해야 한다. 샘플 디렉토리의
독점 API용 스캔 코드
(이전에 언급되었듯이, 추후에는 소스 스캔 기능이 정적 아카이브 테스트의 한 부분으로써 실행될 것이다. 그러나 소스 스캔 기능이 현재 유저 가이드에서 다뤄지고 있고 샘플
샘플
다음의 명령을 실행하여 샘플에서
정적 아카이브 테스트
ArchiveTest 태스크를 사용하여 어플리케이션 모듈이 J2EE 명세에 따르는지 확인한다. 이 태스크는 모듈 파일 구성 요소의 메소드 서명과 다른 정적 불일치와 관련된 문제들을 확인하여 보고한다. 이는 파일의 모든 구성 요소를 훑으며, API와 관련된 불일치나 J2EE 명세에서 정의된 전개 기술어를 보고한다
이 태스크는 또한 모듈의 패키징과 구조를 확인한다. 예를 들어, 샘플
샘플에 있는
정적 아카이브 테스트의 요약 페이지는 어플리케이션에 포함된 J2EE 플랫폼의 각 모듈별로 실패, 경고, 통과 그리고 적용불가능한 테스트 결과들을 보여준다. 각 결과는 구동된 테스트에 대한 설명, 테스트명 등의 구체적인 정보로의 링크를 포함한다. 그 뿐만 아니라 정적 아카이브 테스트가 부딪힌 오류들을 열거한 섹션도 요약에 포함된다.
전개 기술어 번역
모든 어플리케이션 서버는 각각의 실행시간 전개 기술어가 있어, 전개의 실행에 특유한 양상을 상술한다. 다른 J2EE 서버에서 실행되었던 어플리케이션은 그 실행시간 전개 기술어를 반드시 전환시켜야 Sun Java System Application Server 에서 실행이 가능하다. Java AVK로 전개 기술어를 전환하는 과정은 기존의 모듈이나 어플리케이션을 대체하지 않고, 대신 새로운 전개 기술어를 가진 모듈이나 어플리케이션의 새 카피를 생성한다.
다음의 명령을 통해 샘플에 있는
Java AVK에 대한 더 많은 정보는 엔터프라이즈용 Java Application Verification Kit (AVK) 페이지를 참고하기 바란다. 또한, 동적 검증에 대한 정보는 다음번 테크팁에서 다루도록 한다.
Java BluePrints program 에서는 이식 가능한(portable) J2EE 기반 어플리케이션 형성과 관련된 가이드라인을 제공한다. 그러나 의도하시 않게 이식 불가능한(non-portable) 어플리케이션을 쓰게 될 수도 있다. 엔터프라이즈용 Java AVK는 이런 경우에 유용하다.
Java AVK는 정적 검증과 동적 검증의 두 단계를 거칩니다..
- 정적 검증 단계에서는 어플리케이션 스위트의 전개 기술어가 명세를 따르는지, 그리고 스위트가 특정 벤더에게 독점적인 메소드를 포함하지 않는지를 결정한다. 또한 이 단계에서는 어플리케이션 코드가 J2EE 명세를 따르는지도 확인한다. (예를 들어, EJB의 원격 인터페이스가 모든 RMI/IIOP-compliant 매개 변수 타입을 포함하는지 확인한다.)
- 동적 검증 단계에서는 엔터프라이즈 빈 컴포넌트 메소드과, 웹 서비스 메소드, 어플리케이션을 구동함으로써 호출되는 웹 요소들의 비율을 결정한다.
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 전개 기술어로 전환한다.
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>
srcDir과srcServer 속성 모두 대상 명세에서 필요하다. 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를 열거한다.
정적 아카이브 테스트
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 플랫폼의 각 모듈별로 실패, 경고, 통과 그리고 적용불가능한 테스트 결과들을 보여준다. 각 결과는 구동된 테스트에 대한 설명, 테스트명 등의 구체적인 정보로의 링크를 포함한다. 그 뿐만 아니라 정적 아카이브 테스트가 부딪힌 오류들을 열거한 섹션도 요약에 포함된다.
전개 기술어 번역
모든 어플리케이션 서버는 각각의 실행시간 전개 기술어가 있어, 전개의 실행에 특유한 양상을 상술한다. 다른 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" />
archiveName 과 srcServer속성이 모두 필요하다. 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).를 생성함을 주의하자. 이들을 어플리케이션에 덧붙이지 않는다.
Java AVK에 대한 더 많은 정보는 엔터프라이즈용 Java Application Verification Kit (AVK) 페이지를 참고하기 바란다. 또한, 동적 검증에 대한 정보는 다음번 테크팁에서 다루도록 한다.
"Java EE" 카테고리의 다른 글
- Attach API (댓글 18개 / 트랙백 1개) 2007/09/03
- JSP 2.0 EXPRESSION LANGUAGE (댓글 1개 / 트랙백 0개) 2004/02/05
- 환경 엔트리를 이용해서 배포의 사용자 정의하기 (댓글 2개 / 트랙백 0개) 2003/12/24
- JAX-WS를 이용한 웹 서비스 개발 (댓글 1개 / 트랙백 0개) 2006/01/18
- EJB 2.1로 메시지 구동 빈 이용하기 (댓글 1개 / 트랙백 0개) 2005/05/18
- EclipseLink를 사용하여 JPA에서 반복 불가능한 읽기 방지 (댓글 0개 / 트랙백 1개) 2008/07/09
- 컴포넌트 시스템과 클래스 로더 경계 (댓글 1개 / 트랙백 0개) 2004/10/05
- JAX-WS Dispatch 및 Provider API를 이용한 문서 처리 (댓글 4개 / 트랙백 0개) 2006/09/15
- POJO를 Persistent Entity로 변환하기 (댓글 1개 / 트랙백 0개) 2005/12/27
- SAAJ 소개 (댓글 1개 / 트랙백 0개) 2005/06/08
2005/08/23 16:27
2005/08/23 16:27
댓글을 달아 주세요
쉬운 예제와 설명 잘 읽었읍니다. 큰 도움이 되겠어요.
2007/09/09 23:04좋은 정보 감사해요~
2007/09/19 05:07