EJB 3.1 세션 Bean 메소드를 비동기로 구성
EJB(Enterprise JavaBean) 3.1 세션 Bean 메소드를 비동기식으로 실행하도록 구성하려면 이 태스크를 사용하십시오. Bean 메소드의 일부 또는 전부를 비동기로 만들 수 있습니다.
시작하기 전에
주의: EJB 3.1 모듈에서 하나 이상의 세션 Bean
메소드를 비동기로 설정하여 애플리케이션에서 병렬
처리를 확장할 수 있습니다.
- 아직 EJB 3.1 비동기 메소드에 익숙하지 않은 경우, EJB 3.1 비동기 메소드, EJB 비동기 메소드에 대한 클라이언트 프로그래밍 모델, EJB 비동기 메소드에 대한 Bean 구현 프로그래밍 모델 및 비동기 메소드를 위한 EJB 컨테이너 작업 관리자에 대해 읽으십시오. 이 주제는 EJB 3.1 비동기 메소드의 개요를 제공하고, 클라이언트 및 Bean 구현 프로그래밍 모델을 설명하고, EJB 컨테이너가 비동기 메소드를 디스패치하기 위해 사용하는 작업 관리자에 대해 논의합니다.
- 애플리케이션을 위한 새 EJB 3.1 세션 Bean을 개발하거나, 비동기 메소드에 대한 EJB 3.1 프로그래밍 모델 요구사항을 준수하도록 기존 세션 Bean을 변경하십시오. 일반 정보의 경우 엔터프라이즈 Bean 개발에 관한 정보를 참조하십시오.
이 태스크 정보
프로시저
- Bean 구현 클래스의 하나 이상의 메소드를 비동기로
지정하십시오. 이것은 Bean 소스 코드에 @Asynchronous 어노테이션을
추가하거나, 모듈 배치 디스크립터에서 <async-method>
스탠자를 추가하거나, 어노테이션 및 배치 디스크립터 스탠자
모두의 조합을 추가하여 수행될 수 있습니다. @Asynchronous 어노테이션이나 그의 수퍼클래스만 Bean 구현
클래스에 적용할 수 있습니다. 인터페이스 클래스에는 적용할 수
없습니다. 또한, 어노테이션이 클래스 레벨에서 적용될 때 해당
클래스의 모든 메소드가 비동기입니다. 마찬가지로, "*"를
배치 디스크립터에서 <method-name>으로 적용하여
Bean의 모든 메소드가 비동기로 구성될 수 있습니다.
@Asynchronous 어노테이션 적용의 다음 예를 참조하십시오.
- @Asynchronous 어노테이션을 인터페이스가 없는 보기를 갖는 Bean의
한 메소드에 적용하십시오. 이 예에서 m1 메소드는 동기식이고
m2 메소드는 비동기식입니다.
@Stateless @LocalBean public class MyLocalBean { public void m1() { // method code } @Asynchronous public Future<String> m2() { // method code return new javax.ejb.AsyncResult("Hello, Async World!"); } }
중요사항: javax.ejb.AsyncResult<V> 오브젝트는 Future<V> 인터페이스의 편리한 구현입니다. 자세한 내용은 API 문서를 참조하십시오. - @Asynchronous 어노테이션을 Bean 클래스의
클래스 레벨에 적용하십시오. 이 예에서, m1 메소드와 m2 메소드가
둘 다 인터페이스가 없는 보기 Bean에서 비동기입니다.
@Stateless @LocalBean @Asynchronouspublic class MyLocalBean { public void m1() { // method code } public Future<String> m2() { // method code return new javax.ejb.AsyncResult("Hello, Async World!"); } }
- @Asynchronous 어노테이션을 Bean 구현 클래스의 한 메소드에
적용하십시오. 이 예에서 m1 메소드는 동기식이고 m2 메소드는
비동기식입니다. 이 예는 또한 비즈니스 인터페이스와 구현
클래스 사이에서 리턴 유형이 어떻게 다를 수 있는지를
보여줍니다.
public interface MyIntf { public void m1(); public Future<Integer> m2(); }
@Stateless @Local(MyIntf.class) public class MyBean { public void m1() { // method code } @Asynchronous public Integer m2() { // method code return new Integer(3); } }
- @Asynchronous 어노테이션을 Bean 구현 클래스의
클래스 레벨에 적용하십시오. 이 예에서 m1 메소드와
m2 메소드가 둘 다 비동기식입니다.
@Stateless @Local(MyIntf.class) @Asynchronous public class MyBean { public void m1() { // method code } public Integer m2() { // method code return new Integer(8); } }
EJB 모듈 배치 디스크립터 ejb-jar.xml 수정의 다음 예를 참조하십시오.- 이 예에서 FullAyncBean Bean 구현 클래스 및 그의
수퍼클래스의 모든 비즈니스 메소드는 와일드카드(*)
method-name 요소로 비동기로서 구성됩니다.
<session> <display-name>FullAsyncEJB</display-name> <ejb-name>FullAsyncBean</ejb-name> <business-local>com.ibm.sample.async.ejb.FullAsyncIntf</business-local> <ejb-class>com.ibm.sample.async.ejb.FullAsyncBean</ejb-class> <session-type>Stateless</session-type> <async-method> <method-name>*</method-name> </async-method> </session>
- 이 예에서 지정된 메소드 및 서명(m1으로 지정된 모든
메소드 및 단일 String 매개변수를 갖는 메소드 m2)이
PartiallyAsyncBean Bean 구현 클래스에서 비동기로
구성됩니다.
<session> <display-name>PartiallyAsyncEJB</display-name> <ejb-name>PartiallyAsyncEJB</ejb-name> <business-local>com.ibm.sample.async.ejb.PartiallyAsyncIntf</business-local> <ejb-class>com.ibm.sample.async.ejb.PartiallyAsyncBean</ejb-class> <session-type>Stateless</session-type> <async-method> <method-name>m1</method-name> </async-method> <async-method> <method-name>m2</method-name> <method-params> <method-param>java.lang.String</method-param> </method-params> </async-method> </session>
Bean 소스 코드에서 @Asynchronous 어노테이션의 조합 적용 및 EJB 모듈 배치 디스크립터 ejb-jar.xml 수정의 다음 예를 참조하십시오.- 이 예에서 @Asynchronous 어노테이션은 m2 메소드를
비동기로 구성하고, 배치 디스크립터는 m1 메소드를 비동기
메소드가 되도록 구성합니다.
@Stateless @LocalBean public class MyLocalBean { public void m1() { // method code } @Asynchronous public Future<String> m2() { // method code return new javax.ejb.AsyncResult("Hello, Async World!"); } } <session> <display-name>MyLocalEJB</display-name> <ejb-name>MyLocalEJB</ejb-name> <local-bean/> <ejb-class>com.ibm.sample.async.ejb.MyLocalBean</ejb-class> <session-type>Stateless</session-type> <async-method> <method-name>m1</method-name> </async-method> </session>
- 이 예에서 m2 메소드에 대한
@Asynchronous 어노테이션은 배치 디스크립터 헤더가
metadata-complete="true" 플래그를 포함하기 때문에 무시됩니다. 이 플래그는
구성 정보를 배치 디스크립터 요소에서만 가져오도록
합니다. 결과는 MyLocalBean 구현의 m1 메소드만
비동기식이 되도록 구성된다는 점입니다.
@Stateless @LocalBean public class MyLocalBean { public void m1() { // method code } @Asynchronous public Future<String> m2() { // method code return new javax.ejb.AsyncResult("Hello, Async World!"); } } <ejb-jar id="ejb-jar_ID" ... metadata-complete="true" version="3.1"> ... <session> <display-name>MyLocalEJB</display-name> <ejb-name>MyLocalEJB</ejb-name> <local-bean/> <ejb-class>com.ibm.sample.async.ejb.MyLocalBean</ejb-class> <session-type>Stateless</session-type> <async-method> <method-name>m1</method-name> </async-method> </session> ... </ejb-jar>
- @Asynchronous 어노테이션을 인터페이스가 없는 보기를 갖는 Bean의
한 메소드에 적용하십시오. 이 예에서 m1 메소드는 동기식이고
m2 메소드는 비동기식입니다.
- 임의의 비동기 메소드에 적용된 트랜잭션 속성이 REQUIRED,
REQUIRES_NEW 또는 NOT_SUPPORTED인지 확인하십시오. 이들 트랜잭션 속성 유형이 비동기 메소드에서 지원되는 유일한
트랜잭션 속성 유형입니다. Bean 소스 코드에서
@TransactionAttribute 어노테이션을 적용하거나, ejb-jar.xml
파일에서 <container-transaction> 스탠자를 추가하거나,
배치 디스크립터에서 어노테이션과 <container-transaction> 스탠자의
조합을 추가하여 이 조치를 완료할 수 있습니다.
어노테이션을 사용하는 비동기 메소드의 트랜잭션 속성 설정의 다음 예를 참조하십시오.
@Singleton @LocalBean public class FullAsyncBean { @Asynchronous @TransactionAttribute(REQUIRED) // the default; specified for illustration public void m1() { // ... } @Asynchronous @TransactionAttribute(NOT_SUPPORTED) public void m2() { // ... } @Asynchronous @TransactionAttribute(REQUIRES_NEW) public void m3() { // ... } // ... }
XML 배치 디스크립터를 사용하는 비동기 메소드의 트랜잭션 속성 설정의 다음 예를 참조하십시오.<assembly-descriptor> <container-transaction> <method> <ejb-name>FullAsyncBean</ejb-name> <method-name>m1</method-name> </method> <trans-attribute>Required</trans-attribute> </container-transaction> <container-transaction> <method> <ejb-name>FullAsyncBean</ejb-name> <method-name>m2</method-name> </method> <trans-attribute>NotSupported</trans-attribute> </container-transaction> <container-transaction> <method> <ejb-name>FullAsyncBean</ejb-name> <method-name>m3</method-name> </method> <trans-attribute>RequiresNew</trans-attribute> </container-transaction> </assembly-descriptor>
Bean의 트랜잭션 속성을 구성하기 위한 어노테이션 및 XML 배치 디스크립터 모두의 조합 사용의 다음 예를 참조하십시오. 이 예에서 m3 메소드에 대한 배치 디스크립터 스탠자가 클래스 레벨 어노테이션을 대체합니다. 결과는 m3 메소드가 REQUIRES_NEW로 구성되는 반면 m1 및 m2 메소드는 REQUIRED로 구성됩니다.@Singleton @LocalBean @Asynchronous @TransactionAttribute(REQUIRED) // the default; specified for illustration public class FullAsyncBean { public void m1() { // ... } public void m2() { // ... } public void m3() { // ... } // ... } <assembly-descriptor> <container-transaction> <method> <ejb-name>FullAsyncBean</ejb-name> <method-name>m3</method-name> </method> <trans-attribute>RequiresNew</trans-attribute> </container-transaction> </assembly-descriptor>
다음에 수행할 작업
애플리케이션을 실행할 때, 처음으로 비동기 메소드를 갖는 세션 Bean을 사용하려고 시도할 때 실패하면 구성 오류가 존재할 수 있습니다. 시스템 로그 파일에서 구성 오류 메시지를 검사하십시오.
추적 데이터를 분석하거나 이를 분석을 위해 적합한 조직으로 전달하십시오. EJB 비동기 메소드 스케줄링 및 호출은 EJB 컨테이너 추적에서 추적됩니다. 이 추적 사용에 대한 지시사항은 실행 중인 서버에서 추적 사용에 대한 정보를 참조하십시오. 추적 데이터를 분석하려면 추적 출력에 관한 정보를 참조하십시오.
하위 주제
원격 비동기 EJB 메소드 결과 구성
원격 비동기 EJB(Enterprise JavaBeans) 메소드 호출에 대한 무청구 결과의 최대 수를 설정하려면 이 태스크를 사용하십시오.스크립트를 사용하여 EJB 비동기 메소드 구성
wsadmin 스크립트를 사용하여 EJB(Enterprise JavaBeans) 비동기 메소드를 구성하십시오.EJB 3.1 비동기 메소드
EJB(Enterprise JavaBeans™) 3.1 스펙에는 호출자 스레드의 별도 스레드에서 실행되는 애플리케이션 개발자가 EJB 비동기 메소드 구성에 사용할 수 있는 기능이 포함됩니다.EJB 비동기 메소드를 호출하는 클라이언트 코드 개발
이 주제에 있는 샘플 코드를 사용하여 EJB 비동기 메소드를 호출하는 클라이언트 코드를 개발할 수 있습니다.EJB 비동기 메소드에 대한 Bean 구현 프로그래밍 모델
세션 Bean에서 비동기 메소드를 구성할 수 있습니다. 그렇지만 EJB(Enterprise JavaBeans) 3.1 스펙에 언급된 것처럼 비동기 메소드는 엔티티 Bean이나 메시지 구동 Bean에 구성되면 안됩니다.비동기 메소드에 대한 EJB 컨테이너 작업
비동기 메소드를 디스패치하기 위해 EJB(Enterprise JavaBeans) 컨테이너에서 사용되는 기본 작업 관리자는 구성 가능하지 않습니다. 다음 구성 정보는 이 작업 관리자로 인한 제한을 이해하는 데 도움이 되도록 제공됩니다. 하나의 EJB 컨테이너 작업 관리자가 애플리케이션 서버 프로세스에서 실행 중인 모든 비동기 메소드에 대해 존재하는 것을 잊지 마십시오.EJB 비동기 메소드 설정
이 페이지에서 Enterprise JavaBeans 비동기 메소드 지원에 사용되는 작업 관리자에 대한 설정을 수정할 수 있습니다.원격 비동기 EJB 메소드 결과 구성
원격 비동기 EJB(Enterprise JavaBeans) 메소드 호출에 대한 무청구 결과의 최대 수를 설정하려면 이 태스크를 사용하십시오.스크립트를 사용하여 EJB 비동기 메소드 구성
wsadmin 스크립트를 사용하여 EJB(Enterprise JavaBeans) 비동기 메소드를 구성하십시오.EJB 3.1 비동기 메소드
EJB(Enterprise JavaBeans™) 3.1 스펙에는 호출자 스레드의 별도 스레드에서 실행되는 애플리케이션 개발자가 EJB 비동기 메소드 구성에 사용할 수 있는 기능이 포함됩니다.EJB 비동기 메소드를 호출하는 클라이언트 코드 개발
이 주제에 있는 샘플 코드를 사용하여 EJB 비동기 메소드를 호출하는 클라이언트 코드를 개발할 수 있습니다.EJB 비동기 메소드에 대한 Bean 구현 프로그래밍 모델
세션 Bean에서 비동기 메소드를 구성할 수 있습니다. 그렇지만 EJB(Enterprise JavaBeans) 3.1 스펙에 언급된 것처럼 비동기 메소드는 엔티티 Bean이나 메시지 구동 Bean에 구성되면 안됩니다.비동기 메소드에 대한 EJB 컨테이너 작업
비동기 메소드를 디스패치하기 위해 EJB(Enterprise JavaBeans) 컨테이너에서 사용되는 기본 작업 관리자는 구성 가능하지 않습니다. 다음 구성 정보는 이 작업 관리자로 인한 제한을 이해하는 데 도움이 되도록 제공됩니다. 하나의 EJB 컨테이너 작업 관리자가 애플리케이션 서버 프로세스에서 실행 중인 모든 비동기 메소드에 대해 존재하는 것을 잊지 마십시오.EJB 비동기 메소드 설정
이 페이지에서 Enterprise JavaBeans 비동기 메소드 지원에 사용되는 작업 관리자에 대한 설정을 수정할 수 있습니다.
관련 개념:


http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=tejb_dvamethods
파일 이름:tejb_dvamethods.html