 |  |
|
난이도 : 중급 Ashish Jain, Software Engineer, IBM
2008 년 2 월 19 일 새로운 전개 플랜, 다중 서버 인스턴스를 동시에 실행하는 기능, 새롭게 향상된 웹 콘솔, 의존성 투입, JAX-WS 지원 등 IBM® WebSphere® Application Server Community Edition V2.0의 새로운 특징과 기능은 물론, Java™ EE 5의 완벽 지원에 대해서 알아봅시다. 이러한 메이저 버전으로 WebSphere Application Server Community Edition은 더욱 강력한 애플리케이션 서버 애플리케이션이 되었습니다.
머리말
IBM WebSphere Application Server Community Edition V2.0
(이후, Community Edition)은 Java Platform, Enterprise Edition 5 (Java EE 5) 인증 애플리케이션 서버로서, 데이터베이스(Apache Derby), 메시징 서비스(Active MQ), 디렉토리 서버(LDAP)를 위한 통합된 컴포넌트를 포함하고 있다. GBeans 아키텍처와 Apache Geronimo 2.0의 측정성, 모듈성, 이식성, 개인화 특성을 겸비한 Community Edition은 이제 가장 강력한 애플리케이션 서버가 되었다.
WebSphere 제품군의 일부로서, Community Edition은 IBM Rational® Application Developer와 WebSphere MQ 같은 다른 IBM 제품들과의 통합이 가능하며, 다른 WebSphere Application Server 제품들로의 마이그레이션 경로를 제공한다.
 |
지금 Community Edition V2.0을 다운로드 하십시오!
IBM WebSphere Application Server Community Edition V2.0은 사용과 전개가 무료입니다. 지금 바로 다운로드하여 사용해 보십시오. |
|
Community Edition에는 다음 사항들이 추가되었다:
- IBM SDK, Java 2 Technology Edition
- Apache Derby와 IBM DB2®용 JDBC 드라이버
- Apache Derby, IBM DB2, Oracle®, Microsoft® SQL Server, MySql을 위한 데이터베이스 커넥터 지원
- Apache Directory Server, IBM Tivoli® Directory Server, MS Active Directory, OpenLDAP Server, Sun™ ONE Directory Server를 위한 디렉토리 지원.
새로운 기능
최신 버전의 WebSphere Application Server Community Edition에는 Java EE 5를 완벽히 지원한다. 또한, 많은 신기능과 향상을 포함하고 있다:
-
웹 콘솔 향상
-
설정 대체 프로퍼티
-
하나의 서버, 다중 저장소
-
다중 서버 인스턴스
-
고유의 저장소를 갖고 있는 다중 서버 인스턴스
-
단순해진 전개
-
주석
-
Eclipse 플러그인과 Eclipse V3.3
-
JAX-WS 툴
-
샘플 애플리케이션 업데이트
이러한 기능에 대한 자세한 설명은 다음 섹션을 참조하라.
지원되는 스팩
여러분이 참조할 수 있도록, 아래 표에 Community Edition V2.0에서 지원되는 스팩들을 정리했다:
|
표 1. 웹 애플리케이션 기술
|
| 스팩 | 버전 | JSR No. | J2EE 1.4에서 바뀐 부분 |
|---|
| Servlet | Servlet 2.5 | JSR 154 | Servlet 2.4에서 업데이트 | | Java Server Pages | JSP 2.1 | JSR 245 | JSP 2.0에서 업그레이드 | | JSP Debug | JSP Debug 1.0 | JSR 45 | Java EE 5.0의 신기능 | | Java Server Faces | JSF 1.2 | JSR 252 | Java EE 5.0의 신기능 | | Java Server Pages Standard Tag Library | JSTL 1.2 | JSR 52 | Java EE 5.0의 신기능 |
|
표 2. 엔터프라이즈 애플리케이션 기술
|
| 스팩 | 버전 | JSR No. | J2EE 1.4에서 바뀐 부분 |
|---|
| JavaBeans Activation Framework | JAF 1.1 | JSR 925 | JAF 1.0에서 업데이트 | | JavaMail | JavaMail 1.4 | JSR 919 | JavaMail 1.3 에서 업데이트 | | Java Persistence API | JPA 1.0 | JSR 220 | Java EE 5.0의 신기능 | | Java Transactions API | JTA 1.1 | JSR 907 | JTA 1.0 에서 업데이트 | | Java Authorization Contract for Containers | JACC 1.1 | JSR 115 | JACC 1.0 에서 업데이트 | | Common Annotations for the Java Platform | Annotations 1.0 | JSR 250 | Java EE 5.0의 신기능 | | Enterprise JavaBeans | EJB 3.0 | JSR 220 | EJB 2.1 에서 업그레이드 |
|
표 3. 관리 스팩
|
| 스팩 | 버전 | JSR No. | J2EE 1.4에서 바뀐 부분 |
|---|
| Java EE Management | Java EE Mgmt 1.1 | JSR 77 | Mgmt 1.0에서 업데이트 | | Java EE Application Deployment | App Deploy 1.2 | JSR 88 | App Deploy 1.1 에서 업데이트 |
|
표 4. 웹 서비스 - Axis2
|
| 스팩 | 버전 | JSR No. | J2EE 1.4에서 바뀐 부분 |
|---|
| Implementing Web Services | WSEE 1.2 | JSR 109 | WSEE 1.1 에서 업데이트 | | Java API for XML-Based Web Services | JAX-WS 2.0 | JSR 224 | Java EE 5.0의 신기능 | | Java Architecture for XML Binding | JAXB 2.0 | JSR 222 | Java EE 5.0의 신기능 | | Web Service Metadata for the Java platform | WS Metadata 2.0 | JSR 181 | Java EE 5.0의 신기능 | | SOAP with Attachments API | SAAJ 1.3 | JSR 67 | SAAJ 1.2 에서 업데이트 | | Streaming API for XML | STAX 1.0 | JSR 173 | Java EE 5.0의 신기능 |
|
표 5. 웹 서비스 - CXF
|
| 스팩 | 버전 | JSR No. | J2EE 1.4에서 바뀐 부분 |
|---|
| 웹 서비스 구현 | WSEE 1.2 | JSR 109 | WSEE 1.1 에서 업데이트 | | Java API for XML-Based Web Services | JAX-WS 2.0 | JSR 224 | Java EE 5.0의 신기능 | | Java Architecture for XML Binding | JAXB 2.0 | JSR 222 | Java EE 5.0의 신기능 | | Web Service Metadata for the Java platform | WS Metadata 2.0 | JSR 181 | Java EE 5.0의 신기능 | | SOAP with Attachments API | SAAJ 1.3 | JSR 67 | SAAJ 1.2 에서 업데이트 | | Streaming API for XML | STAX 1.0 | JSR 173 | Java EE 5.0의 신기능 |
웹 콘솔 향상
프로세스 문제 해결을 쉽게 하기 위해, Community Edition 웹 콘솔에 새로운 Debug View 포틀릿이 시스템 모듈과 사용자 정의 모듈에 관한 정보를 디스플레이 하는 다양한 뷰어들을 제공한다. JMX, LDAP, ClassLoader, JNDI와 종속물들에 대한 특수한 뷰어들이 있다. (그림 1)
그림 1. 관리 콘솔의 Debug View 포틀릿
다음은 이러한 뷰어에 대한 설명이다. 각각 admin 콘솔을 사용하여 서버에 전개되는 DB2 데이터베이스 풀의 예제를 보여주고 있다:
-
JMX Viewer
JMX Viewer는 다양한 유형의 MBean들을 트리 표현으로 디스플레이 한다. 각 MBean은 객체 이름을 가진 트리 노드를 나타낸다. JMX Viewer로는 다음을 볼 수 있다:
- 모든 MBean
- J2EE™ 내부 객체들
- Geronimo MBeans
- ServiceModule MBeans
- Statistics provider MBeans
- Search MBeans
이러한 카테고리들 중 어떤 것이라도 확장하면 객체들의 리스트가 디스플레이 되고, 객체를 선택하면, 애트리뷰트, 통계, 각 객체에 대해 수행될 수 있는 연산들이 디스플레이 된다. 포틀릿 역시 Object Name Pattern을 키로서 취할 수 있는 검색 기능을 갖고 있다. 다음은 키에 대한 예제이다:
-
geronimo:* 은 "geronimo:"로 시작하는 모든 MBean을 디스플레이 한다.
-
geronimo.config:* 는 "geronimo.config:"로 시작되는 모든 MBean을 디스플레이 한다.
-
*:j2eeType=StatelessSessionBean,* 은 StatelessSessionBean인 모든 MBean을 디스플레이 한다.
JMX Viewer를 사용하여 진단 정보 보기 (데이터베이스 풀 예제의 경우):
- 관리 콘솔에서 JMX Viewer를 실행한다.
-
J2EE Managed Objects => JCAManagedConnectionFactory를 확장한다.
- 데이터베이스 풀 예제용 엔트리를 선택한다.
- 오른쪽 패널에는 상응하는 탭에 리스팅된 대로 객체의 Attributes, Info, Stats와, 객체에 수행될 수 있는 Operations가 디스플레이 된다. (그림 2)
그림 2. 데이터베이스 풀 샘플용 JMX Viewer
-
LDAP Viewer
애플리케이션 서버는 파일, 데이터베이스, 또는 LDAP(Lightweight Directory Access Protocol)에 기반한 저장소에 사용자에 관한 정보를 저장한다. LDAP는 엔터프라이즈 전반의 모든 애플리케이션에 액세스 할 수 있는 정보를 저장한다. LDAP Viewer는 어떤 LDAP 서버라도 연결하여 콘텐트(읽기 전용 액세스)를 검색할 수 있도록 해준다. Community Edition은 IBM Tivoli Directory Server, Microsoft Active Directory 2000, OpenLDAP Server, Sun ONE Directory Server와 호환된다. 애플리케이션 서버가 시작되기 전에 여러분의 디렉토리 서버를 확인하라.
LDAP Viewer 사용 방법:
- 관리 콘솔에서 LDAP Viewer를 실행한다.
- 뷰어는 두 개의 패널을 갖고 있다: 한 패널에는 ou (organizational unit)의 트리 뷰가 포함되어 있고, 다른 패널에는 Attributes, Search, Connect Info 용 탭이 있다. 전체 조직의 범위를 나타내는 트리 ou=system을 확장한다. (그림 3)
-
uid=admin을 선택한다. 오른쪽 패널의 Attributes 탭은 사용자 admin의 애트리뷰트를 디스플레이 한다.
-
Search 탭을 선택하고, 그림 4와 같이 폼을 채운다.
-
Connect Info 탭은 LDAP 서버의 연결 정보를 디스플레이 한다.
그림 3. 관리 콘솔의 LDAP Viewer
그림 4. LDAP Viewer의 Search
-
ClassLoader Viewer
ClassLoader는 자바 기반 시스템의 컴포넌트로서, 런타임 시 자바 클래스를 찾고 로딩한다. ClassLoader Viewer는 정의된 클래스로더, 이들의 관계, 서로에 의해 로딩된 클래스들을 디스플레이 한다. 이 뷰어는 두 개의 옵션, Search와 Invert Tree를 갖고 있다.
기본적으로, ClassLoader Viewer는 부모-자식 포맷으로 ClassLoader를 디스플레이 한다. 부모는 sun.misc.Launcher$ExtClassLoader@6fbc6fbc이다. Invert Tree를 선택하여 자식-부모 포맷에 대한 뷰를 수정한다. 확장 클래스로더 sun.misc.Launcher$ExtClassLoader@6fbc6fbc는 부트스트랩 클래스로더의 자식이다.
ClassLoader Viewer 사용하기(데이터베이스 풀 예제):
- 관리 콘솔에서 ClassLoader Viewer를 실행한다.
-
Invert Tree를 선택한다.
- 데이터베이스 풀 예제용 엔트리를 선택하고, 모든 트리 노드들을 확장한다. 이 뷰어는 데이터베이스 풀 샘플을 위해 로딩된 모든 클래스들을 디스플레이 한다.
그림 5. 데이터베이스 풀 샘플용 ClassLoader Viewer
-
JNDI Viewer
JNDI (Java Naming and Directory Interface)는 디렉토리 인터페이스 API로서, 데이터 소스, EJB 컴포넌트 같은 데이터와 객체를 이름 별로 검색하는데 사용된다. JNDI Viewer는 같은 기능에 기반하고 있고, 다양한 모듈에 대한 JNDI 콘텍스트를 디스플레이 한다.
JNDI Viewer 사용 방법:
-
geronimo-jsp-examples-2.0.war 같은 애플리케이션을 전개한다.
- 관리 콘솔에서 JNDI Viewer를 실행한다.
-
WebModule을 확장한 다음, org.apache.geronimo.applications.examples.geronimo-examples/geronimo-jsp-examples/2.0/war 파일을 확장한다. 이 뷰어는 다양한 모듈에 대한 JNDI 콘텍스트를 디스플레이 한다.
그림 6. JNDI viewer
-
Dependency Viewer
일반적으로 애플리케이션은 JAR 또는 압축 파일의 형태로 외부 라이브러리에 대한 종속성을 갖고 있다. 서버에서 실행되는 모든 모듈 역시 라이브러리나 다른 모듈을 참조하게 된다. Dependency Viewer는 서버에 설치되어 실행되는 모든 모듈의 종속성 뷰를 디스플레이 한다. 이 정보는 중복 종속성을 찾아 해결하고, 소실된 종속성을 찾는데 유용하다.
Dependency Viewer 사용 방법(데이터베이스 풀 예제):
- 관리 콘솔에서 Dependency Viewer 포틀릿을 실행한다.
-
Resource Adapter Module 트리를 확장한다.
- 데이터베이스 풀 sample 용 트리를 확장한다. 이 뷰어는 DB2 JAR와 시스템 모듈에 대한 DB2 데이터베이스 풀 샘플의 의존성을 디스플레이 한다.
그림 7. 데이터베이스 풀 샘플의 Dependency Viewer
 |

|
설정 대체 프로퍼티
애플리케이션 서버의 다중 인스턴스를 실행하는 것은, 포트 설정을 수동으로 변경하려면 포트 충돌을 피해야 하기 때문에 Community Edition V2.0 이전에는 다소 성가신 일이었다. 다중 서버 인스턴스를 실행하는 일이 이제는 원스텝 프로세스이다. Community Edition V2.0에서, config.xml은 $(a+b) 식을 사용하여 각 모듈에 대한 포트 넘버를 계산한다. 예를 들어:
Listing 1. From config.xml
<gbean name="RMIRegistry">
<attribute name="port">${NamingPort + PortOffset}</attribute>
</gbean> |
NamingPort와 PortOffset 변수가 config-substitutions.properties 파일에서 얻어지는 동안, 시작 시 config.xml을 처리한다. 이 파일은 <WASCE_HOME>/var/config/config-substitutions.properties에 있다.
Listing 2. config-substitutions.properties 파일
PortOffset=0
PlanServerHostname=0.0.0.0
PlanNamingPort=1099 |
기본적으로 portOffset=0이기 때문에 RMIRegistry는 포트 1099에서 시작한다. portOffset=10으로 바꾸면서, RMIRegistry는 포트 1109에서 시작한다. 마찬가지로, 다른 모듈은 10의 오프셋으로 시작한다.
config-substitutions.properties 파일의 이름은 다음 명령어를 사용하여 수정될 수 있다:
Dorg.apache.geronimo.config.substitutions.file=var/config/myconfig-file.properties
config-substitutions.properties 파일의 값은 환경 변수와 시스템 프로퍼티에 의해 오버라이드 된다.
한 개의 서버, 다중 저장소
Community Edition V2.0은 각 서버 인스턴스에 대한 다중 저장소를 지원한다. 데이터의 물리적 분리가 필요할 때 이 기능이 편리하다. 예를 들어, 대형 애플리케이션을 실행하는 엔터프라이즈라면 전체 실행 환경에 영향을 주지 않고 한 개의 저장소를 바꾸는 데에는 이 기능이 제격이다.
다중 저장소 만들기:
- 플랜 newrepo.xml을 만든다. 예를 들어:
Listing 3. newrepo.xml 예제
<?xml version="1.0" encoding="UTF-8"?>
<module xmlns="http://geronimo.apache.org/xml/ns/deployment-1.2">
<environment>
<moduleId>
<groupId>org.example.configs</groupId>
<artifactId>samplerepository</artifactId>
<version>2.0.1</version>
<type>car</type>
</moduleId>
<dependencies>
<dependency>
<groupId>org.apache.geronimo.configs</groupId>
<artifactId>j2ee-system</artifactId>
<version>2.0.1</version>
<type>car</type>
</dependency>
</dependencies>
<hidden-classes/>
<non-overridable-classes/>
</environment>
<!--Repository-->
<gbean name="newRepo" class="org.apache.geronimo.system.repository.Maven2Repository">
<attribute name="resolveToServer">true</attribute>
<reference name="ServerInfo">
<name>ServerInfo</name>
</reference>
</gbean>
<!--Configuration Store service-->
<gbean name="Local2" class="org.apache.geronimo.system.configuration.
RepositoryConfigurationStore">
<reference name="Repository">
<name>newRepo</name>
</reference>
</gbean>
</module> |
resolveToServer 애트리뷰트는 Boolean이다. 다시 말해서, true일 경우, 새로운 저장소를 서버 기반 디렉토리로 변환하고, false일 경우, 새로운 저장소를 서버 기반 저장소로 변환한다.
- 새로운 저장소 <WASCE_HOME>/newrepo를 위한 디렉토리를 만든다. 이 디렉토리는 Maven2Repository gbean에 있는 루트 애트리뷰트에 의해 참조되는 것과 같다. newrepo/ 경로는 Community Edition 설치 디렉토리와 상대적이다.
- 다음 명령어를 실행하여 newrepo.xml을 전개한다:
deploy deploy newrepo.xml
전개 명령어는 <WASCE_HOME>/bin/deploy.bat 스크립트 (또는 운영 체계에 따라서 deploy.sh)이다. 이는 <WASCE_HOME>/bin 디렉토리에서 deploy를 입력하거나, 시스템 경로에 디렉토리를 두어서 호출된다. 이로써 서버를 위한 두 번째 저장소의 생성이 완성되었다.
새로운 저장소 사용하기:
- 명령어 프롬프트(Windows) 또는 쉘 프롬프트(유닉스)를 연다.
- 다음 명령어를 실행한다:
deploy list-targets
- 서버에 사용할 수 있는 저장소 리스트가 디스플레이 된다.
Listing 4. 가용 타겟
org.example.configs/samplerepository/2.0.1/car? ServiceModule=
org.example.configs/samplerepository/2.0.1/car,j2eeType=ConfigurationStore,name=Local2
org.apache.geronimo.configs/j2ee-system/2.0.1/car?ServiceModule=
org.apache.geronimo.configs/j2ee-system/2.0.1/car,j2eeType=Configuration Store,name=Local |
- 애플리케이션을 새로운 저장소에 전개하려면, 다음 명령어를 사용한다:
deploy deploy --targets %NEWREPO% mysample.war
- 새로운 저장소에서 애플리케이션을 전개 해제하려면, 다음 명령어를 사용한다:
deploy undeploy "%NEWREPO%|default/mysample/2.0.1/war"
애플리케이션을 서버의 두 번째 저장소에 전개하는 것은 명령행을 통해서만 지원된다. --target 애트리뷰트가 전개 명령어에 사용되지 않는다면, 이 애플리케이션은 모든 저장소에 전개된다.
다중 서버 인스턴스
Community Edition V2.0은 하나의 설치 디렉토리에서 다중 서버 인스턴스들을 실행할 수 있다. 단일 디렉토리에서 다중 인스턴스를 실행하면 여러 가지 이점이 있다:
- 비용 효율적이다; 다중 머신에서 다중 서버들을 관리하는 일은 여러 개의 값비싼 하드웨어와 소프트웨어 설정을 필요로 한다.
- 한 인스턴스의 설정이 다른 인스턴스에 영향을 미치지 않는다.
- 하나의 서버 설치를 통해 클러스터링과 로드 밸런싱의 효과를 거두고, 측정성을 향상시키며, 한 개의 인스턴스가 충돌하거나 중지될 때 고 가용성을 보장할 수 있다.
- 서버의 다중 인스턴스들 중에서 서버 리소스들을 엄격하게 분리함으로써 오버헤드를 줄일 수 있다.
하나의 단일 설치에서 다중 서버 인스턴스를 만들기:
- <WASCE_HOME>/myserver 디렉토리를 생성한다. (myserver는 서버의 두 번째 인스턴스이다.)
- <WASCE_HOME>/var/* 를 <WASCE_HOME>/myserver/var에 복사한다.
- myserver/var/config-substitution.properties를 편집하고,
portOffset의 주석을 제거하며, 값을 10으로 바꾼다.
- 서버를 시작한다. 다음 세 방법 중 하나를 수행한다:
- 명령어 프롬프트 또는 쉘 프롬프트를 열고, 설정한 후:
GERONIMO_OPTS=-Dorg.apache.geronimo.server.name=myserver
실행한다:Windows: <WASCE_HOME>/bin/startup.bat
UNIX: startup.sh
- <WASCE_HOME>/bin/setenv.bat에서 다음을:
@if "%JAVA_OPTS%" == "" set JAVA_OPTS=-Xms32m -Xmx256m
아래와 같이 바꾼다:
if "%JAVA_OPTS%" == "" set JAVA_OPTS=-Xms32m -Xmx256m -Dorg.apache.geronimo.server.name=myserver
그리고 나서 실행한다:Windows: <WASCE_HOME>/bin/startup.bat
UNIX: startup.sh
- -Dorg.apache.geronimo.server.name=myserver를 서버에 대한 명령행 호출로 전달하고, 다음 명령어를 실행한다:
java java -Dorg.apache.geronimo.server.name=myserver -Djava.endorsed.dirs=lib
/endorsed -javaagent:bin/jpa.jar -jar bin/server.jar
- 브라우저에서 관리 콘솔을 실행한다:
http://localhost:8090/console
고유의 저장소를 갖고 있는 다중 서버 인스턴스
Community Edition V2.0은 각 서버 인스턴스가 고유의 저장소를 가질 수 있도록 설정될 수 있다:
- <WASCE_HOME>/myserver 디렉토리를 만드는데, 여기에서 myserver는 서버의 두 번째 인스턴스이다.
- <WASCE_HOME>/var/* 를 <WASCE_HOME>/myserver/var에 복사한다.
- <WASCE_HOME>/myserver/newrepo 디렉토리를 만드는데, 여기에서 newrepo는 myserver 인스턴스의 저장소이다.
- newrepo.xml에서 다음을:
<attribute name="root">newrepo/</attribute>
아래와 같이 바꾼다:
<attribute name="root">myserver/newrepo/</attribute>.
- myserver/var/config-substitution.properties 파일을 편집한다.
portOffset 라인의 주석을 제거하고 값을 10으로 바꾼다.
- 서버를 시작한다.
- newrepo.xml을 전개하고 다음 명령어를 실행한다:
deploy --port 1109 deploy newrepo.xml.
이 명령어는 서버의 현재 인스턴스에 있는 newrepo.xml 파일을 전개하고, 새로운 저장소를 서버의 새 인스턴스에 연결한다. 새 저장소의 풋프린트는 서버의 기본 인스턴스는 물론, 서버의 새 인스턴스에 나타나지만, 새로운 인스턴스에서만 실행될 것이다.
서버의 새로운 인스턴스에 애플리케이션 전개하기:
- 브라우저에서 관리 콘솔을 실행한다.
-
Deploy New를 선택하고 샘플 애플리케이션을 전개한다. 예를 들어: mysample.war. 이 애플리케이션은 두 인스턴스에 전개되겠지만, 새로운 인스턴스에서만 실행될 것이다.
- 이 애플리케이션은 라인 명령어를 사용하여 전개될 수도 있다:
deploy deploy --targets %NEWREPO% mysample.war
이러한 방식을 사용하여 전개된 애플리케이션은 새로운 저장소에서만 풋프린트를 갖는다.
- 애플리케이션의 전개를 해제하려면, 다음 명령어를 실행한다:
deploy undeploy "%NEWREPO%|default/mysample/2.0.1/war"
단순해진 전개
Enterprise JavaBeans™ (EJB)는 엔터프라이즈 애플리케이션을 개발하기 위한 서버 측 컴포넌트이다. EJB 컴포넌트의 개발은 EJB 스팩들에 대한 연속 릴리스로 더욱 복잡해졌지만, EJB 3.0의 릴리스로 상황은 급격히 변했다. Community Edition V2.0은 EJB 3.0을 지원하는데, 전개 디스크립터에 대한 대안으로서 메타데이터 주석을 사용한다.
EJB 3.0에서, 모든 EJB들은 주석을 가진 Plain Old Java Objects (POJO)이다. 어떤 엔터프라이즈 애플리케이션이 EJB 3.0을 사용하여 작성되었다면, Community Edition 컨테이너는 런타임 시 전개 디스크립터를 자동으로 생성한다. 이는 ejb-jar.xml 또는 open-ejb-jar.xml 파일의 필요를 줄인다. (그렇다고 해서 XML이 완벽히 제거되었다는 것을 의미하는 것은 아니다. 여러분이 주석과 전개 디스크립터 모두를 정의할 경우 주석이 오버라이드 된다.)
그림 8. Community Edition EJB 컨테이너를 사용한 전개 파일의 생성
Listing 5. Community Edition V2.0 이전의 EJB 애플리케이션
|- SampleApplication.ear
|- META-INF
|- application.xml
|- geronimo-application.xml
|- SampleApplication.jar
|- ejb-jar.xml
|- SampleApplication.war |
Listing 6. Community Edition V2.0의 EJB 애플리케이션
|- SampleApplication.ear
|- META-INF
|- application.xml
|- geronimo-application.xml
|- SampleApplication.jar
|- SampleApplication.war
|
주석
주석은 JSR-175의 일부로 제공된 새로운 언어 기능이다. Java Programming Language (JPL)용 메타데이터 장치로서, 자신의 코드에서 주석을 사용하는데, 웹 컨테이너의 작동이 메타데이터의 정보에 따라 바뀐다. 예제는 다음과 같다:
Listing 7. 주석 예제
@webService
public Class HelloWorld
{
@webMethod
public String hellowworld()
{
return “Hello” ;
}
} |
이 예제에서, @webService 주석 유형은 이 클래스를 웹 서비스로 표시하고, @webMethod는 hellowworld 메소드를 webMethod로서 표시한다. 주석을 사용하게 되면, 표준 web.xml 파일은 이제 옵션이 된다. Servlet 2.5 스팩에서는 주석이 서블릿, 필터, 리스너, 태그 핸들러 같은 특정 웹 컴포넌트에 대해 정의될 수 있다는 것을 명시하고 있다. 주석들은 외부 리소스에 대한 의존성을 선언하는데 사용된다. 웹 컨테이너는 이와 같은 컴포넌트에 대한 주석을 탐지하고, 컴포넌트 라이프 사이클이 시작되기 전에 필요한 종속물들을 투입한다. 주석은 컨테이너를 위한 요청으로서 작동하여, 서블릿이 갖고 있는 태스크를 수행하도록 한다. 이를 의존성 투입(dependency injection)이라고 한다.
웹 애플리케이션에 사용될 수 있는 주석으로는 @Resource, @PostConstruct, @PreDestroy, @EJB 등이 있다.
주석을 사용하면 다음과 같은 이점이 있다:
- 전개 디스크립터는 옵션이 된다.
- 비즈니스 로직에 더 많이 집중할 수 있다.
- 컨테이너 요청이 코드에 놓일 수 있으므로, 전개 디스크립터와 코드를 동기화 하는 데서 오는 오버헤드 비용을 최소화 할 수 있다. 예를 들어, 클래스를 웹 서비스로서 노출한다.
- 개발 시간이 현격히 줄어든다.
Eclipse 플러그인과 Eclipse 3.3
Eclipse 플러그인은 Community Edition과 Eclipse Web Tools Project (WTP)간 통합을 제공한다. 여러분은 이 플러그인을 사용하여 Eclipse 내에서 Community Edition에 있는 애플리케이션들을 개발, 테스트, 디버그 할 수 있다. (향후 Community Edition V2.0용 Eclipse 플러그인은 Community Edition V1.1.0.x도 지원할 예정이다.)
JAX-WS 툴
jaxws-tools를 사용하면 웹 서비스 전개와 호출을 위한 필수 생성물들을 생성하는 것이 전보다 쉬워진다:
- Windows: <WASCE_HOME>/bin/jaxws-tools.bat
- UNIX: <WASCE_HOME>/bin/jaxws-tools.sh
JAX-WS 웹 서비스에 사용되는 JAX-WS 생성물들을 생성하려면(참고자료), 서버가 시작 또는 중지될 때 다음 명령어를 호출한다:
jaxws-tools wsgen
서비스가 WSDL 없이 전개되면, 이 서버는 프로젝트 전개 시 자동으로 WSDL을 생성하기 때문에, wsgen 툴을 실행할 필요가 없다.
WSDL URI에서 JAX-WS의 이식성 있는 생성물들을 만들려면, 다음 명령어를 사용한다:
jaxws-tools wsimport
샘플 업데이트
새로운 샘플 애플리케이션과 업데이트 된 샘플 애플리케이션들은(참고자료) 새로운 Community Edition 향상과 자리오 기능은 물론, Apache Geronimo 2.0에 포함된 애플리케이션과 Community Edition 고유의 애플리케이션을 포함하고 있다. 각 샘플에는 소스 코드와 사전 구현된 설치 가능 파일들, README.txt 파일(각 샘플 하위 디렉토리에 있음)와 사용 방법 도움말이 포함되어 있다.
샘플에 포함된 애플리케이션들은 다음과 같다:
-
calculator-stateless-pojo: 서버의 OpenEJB 3.0.0에 의해 제공되는 EJB 3.0 지원을 나타내고 있다. 이 애플리케이션은 stateless 세션 빈을 갖고 있으며, 간단한 웹 클라이언트에 의해 사용된다.
-
cviewer: 서블릿을 호출하는 JSP 파일로 구성된 웹 애플리케이션이다. 사용자에게는 폼이 제공되고, 완전한 클래스 이름을 입력한다. 폼 제출 시, 서블릿은 클래스 이름을 검사하고, 결과를 사용자에게 리턴한다.
-
daytrader: 주식 거래 스토리라인을 에뮬레이트 하면서, 포트폴리오를 보고, 시세를 파악하고, 주식을 사거나 팔 수 있다. EAR 파일을 통해 전개된다.
-
dbdemo1: Derby 데이터베이스에 있는 Community Edition_USERS 테이블에 액세스 하는 웹 애플리케이션이다.
-
EMPdemo: Derby 데이터베이스에 액세스 하는 방법과 외부 데이터베이스(Oracle 또는 MicroSoft SQL)에 대한 액세스를 설정하는 방법을 보여준다. WAR 파일을 통해 전개된다.
-
file-realm-demo: 사용자와 그룹의 플랫 파일을 사용하여 보안 제약을 설정하는 방법을 나타낸다.
-
geronimo-jsp-examples: JSP 예제 애플리케이션에서 제공되는 Apache Tomcat이다.
-
geronimo-servlet-examples: 서블릿 예제 애플리케이션에서 제공되는 Apache Tomcat이다.
-
hello: "hello" JSP 웹 애플리케이션이다.
- jaxws-calculator: 서버의 Axis2 1.3에 의해 제공되는 JAX-WS 지원을 사용하는 방법을 나타낸다.
-
jpa: OpenJPA 1.0.0에 의해 제공되는 Java Persistence API (JPA) 지원을 사용하는 방법을 설명한다. 이 애플리케이션은 JPA Entity Bean을 갖고 있는데, 이는 간단한 웹 클라이언트에 의해 사용된다.
-
jsf: MyFaces 1.2에 의해 제공되는 JavaServer Faces (JSF) 지원을 사용하는 방법을 설명한다.
-
ldap-realm: ldap-realm-demo용 서버 중심의 LDAP 영역 설정 플랜을 제공한다. (사전 구현된 파일에는 샘플이 제공되지만, 이를 LDAP 서버에 사용할 수 있도록 커스터마이징 해야 한다.)
-
ldap-realm-demo: ldap-realm 샘플을 사용하여 서버에서 제공된 LDAPLoginModule을 사용하여 애플리케이션을 설정하는 방법을 설명한다.
-
magicGball: CORBA를 사용하여 J2EE 애플리케이션 클라이언트와 EJB 사이를 통신한다. (보안 및 비보안 전송을 위해 개별 플랜이 제공된다.)
-
mdb: OpenEJB으로 메시지 중심 빈을 사용하여 ActiveMQ를 사용하여 웹 애플리케이션 또는 독립형 자바 애플리케이션을 통해 고객 데이터베이스를 업데이트 하는 방법을 설명한다.
-
PlantsByWebSphere: 식물과 정원 관리 도구를 전문으로 하는 온라인 상점이다. 고객은 계정을 만들고, 구매 품목을 검색하고, 제품 상세를 보고 제품을 주문할 수 있다.
-
tomcat-cluster: 임베디드 Apache Tomcat 웹 컨테이너용 웹 티어 클러스터링, 로드 밸런서, 패일오버 샘플이다. (Apache HTTP Server와 mod-jk 파일을 다운로드 하려면 두 개의 물리적 서버와 인터넷 연결이 필요하다.)
-
welcome: WebSphere Application Server Community Edition에 제공되는 기본 Welcome 애플리케이션이다.
 |

|
결론
IBM WebSphere Application Server Community Edition V2는 애플리케이션 개발과 전개를 향상시킬 수 있도록 많은 기술 영역에 새롭고 향상된 기능을 선보이고 있다. 이 글을 통해 Community Edition 신 버전의 면모를 배웠기 바란다. 아래 참고자료 섹션을 참조하면 Community Edition V2.0을 보다 자세히 알 수 있다.
감사의 말
이 글을 검토하고 조언을 해준 Donald Woods에게 감사의 말을 전한다.
참고자료 교육
제품 및 기술 얻기
토론
필자소개  | 
|  |
Ashish Jain은 Level 2 Technical Support of IBM WebSphere Application Server Community Edition 분야의 소프트웨어 엔지니어이다. NITK Surathkal에서 컴퓨터 공학 학사 학위를 받은 후, 2005년 ELTP로서 IBM에 입사했다. |
기사에 대한 평가
|  |