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 메소드를 비동기로 만드십시오.

프로시저

  1. 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> 
      
  2. 임의의 비동기 메소드에 적용된 트랜잭션 속성이 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>

다음에 수행할 작업

계속해서 애플리케이션에 대한 추가 컴포넌트를 개발하거나, 애플리케이션에서 필요한 모든 컴포넌트를 완료한 경우 애플리케이션을 어셈블하고 배치하십시오. EJB 모듈 어셈블 및 EJB 모듈 배치에 대한 정보를 참조하십시오.

애플리케이션을 실행할 때, 처음으로 비동기 메소드를 갖는 세션 Bean을 사용하려고 시도할 때 실패하면 구성 오류가 존재할 수 있습니다. 시스템 로그 파일에서 구성 오류 메시지를 검사하십시오.

추적 데이터를 분석하거나 이를 분석을 위해 적합한 조직으로 전달하십시오. EJB 비동기 메소드 스케줄링 및 호출은 EJB 컨테이너 추적에서 추적됩니다. 이 추적 사용에 대한 지시사항은 실행 중인 서버에서 추적 사용에 대한 정보를 참조하십시오. 추적 데이터를 분석하려면 추적 출력에 관한 정보를 참조하십시오.


주제 유형을 표시하는 아이콘 태스크 주제



시간소인 아이콘 마지막 업데이트 날짜: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=tejb_dvamethods
파일 이름:tejb_dvamethods.html