[z/OS]

RMI/IIOP 엔터프라이즈 Bean 요청 완료에 대한 시간 한계 설정

요청 제한시간 ORB 서비스 설정은 클라이언트가 아웃바운드 RMI/IIOP 엔터프라이즈 Bean 호출로부터의 응답에 얼마나 오래 대기할 것인지 결정합니다. 이 설정은 엔터프라이즈 Bean 호출의 결과로 전송되는 각 IIOP 찾기 및 요청 메시지에 대해 적용되는 서버 범위의 설정입니다. 지정된 시간 한계가 만기되면 아웃바운드 RMI/IIOP 엔터프라이즈 Bean을 호출한 애플리케이션이 org.omg.CORBA.COMM_FAILURE 시스템 예외를 수신합니다.

시작하기 전에

WebSphere® Application Server 버전 7 이상의 경우, 리스너 포트가 더 이상 사용되지 않습니다. 따라서 리스너 포트 사용에서 활성화 스펙 사용으로 WebSphere MQ 메시지 구동 Bean 배치 구성을 마이그레이션해야 합니다. 그러나 WebSphere Application Server 버전 7 이전의 애플리케이션 서버에서 애플리케이션을 실행할 필요가 없다는 것이 확신할 때까지는 이 마이그레이션을 시작하지 않아야 합니다. 경우에 따라 WebSphere MQ 메시지 구동 Bean 배치와 리스너 포트를 계속 사용하거나, WebSphere MQ 메시지 구동 Bean 배치와 활성화 스펙을 사용하게 됩니다.

다음 특성은 활성화 스펙 구동 메시지 구동 Bean 배치에 적용되지 않습니다. 즉, 다음 특성은 WebSphere MQ 메시지 구동 Bean 배치와 리스너 포트를 사용할 때 구성해야 합니다.
  • control_region_mdb_request_timeout
  • control_region_mdb_queue_timeout_percent
  • server_region_mdb_stalled_thread_dump_action
다음 특성은 활성화 스펙 구동 메시지 Bean 배치에 적용됩니다. 즉, 다음 특성은 WebSphere MQ 메시지 구동 Bean 배치와 활성화 스펙을 사용할 때 구성해야 합니다.
  • control_region_wlm_dispatch_timeout
  • control_region_iiop_queue_timeout_percent
  • server_region_iiop_stalled_thread_dump_action

지시사항에 따라 이러한 특성을 구성하는 경우 리스너 포트 및 활성화 스펙에 적용되는 특성이 각각 무엇인지 기억해 두십시오.

시작하기 전에, 다음을 수행해야 합니다.
  • 모든 디스패치 타이머에 대해 설정을 결정하십시오. 메시지 구동 Bean(MDB), (control_region_mdb_request_timeout), HTTP 요청(protocol_http_timeout_output), HTTPS 요청(protocol_https_timeout_output), SIP 요청(protocol_sip_timeout_output), SIPS 요청(protocol_sips_timeout_output) 및 IIOP 요청(control_region_wlm_dispatch_timeout)에 대해 별도의 디스패치 타이머가 있습니다. 애플리케이션이 MDB, 서블릿 또는 또 다른 엔터프라이즈 Bean 아래에서 실행되는 종안 엔터프라이즈 Bean 호출이 발생할 수 있으므로 RMI/IIOP 아웃바운드 타이머에 대한 간격 설정이 모든 해당 디스패치 타이머에 대한 간격 설정보다 짧은지 확인해야 합니다.
  • 호출자의 Perspective에서 원격 엔터프라이즈 Bean 호출이 동기화되도록 이해해야 합니다. 따라서 호출자가 엔터프라이즈 Bean으로부터의 응답을 수신 대기하는 동안 호출 스레드가 블록화됩니다. RMI/IIOP 타이머가 만기될 때 호출 스레드가 인터럽트되고 시스템 예외 응답과 함께 호출자에게 리턴됩니다. 호출된 EJB의 응답이 RMI/IIOP 타이머가 만기된 후에 도달되면 무시됩니다.
  • RMI/IIOP 아웃바운드 타이머 및 트랜잭션 간의 관계를 이해해야 합니다. RMI/IIOP 아웃바운드 타이머가 만기되고 시스템 예외가 호출자에게 리턴되면 EJB 컨테이너가 즉시 모든 기존 글로벌 트랜잭션을 롤백 전용 상태로 놓습니다. 그러나 대상 엔터프라이즈 Bean의 트랜잭션이 롤백용으로 표시된 경우에도 호출자가 대상 엔터프라이즈 Bean으로부터의 모든 응답을 계속 리턴합니다.

이 태스크 정보

타이머가 만기되면, 다음 메시지와 비슷한 메시지가 발행됩니다.
BBOO0325W An IIOP request for Class Name 'com.ejb.test.hello.second.EJSRemoteStatelessSayHelloSecond_686a0ff2' 
and Method Name 'sayHelloTwo', to 'jobname=BBOS002  asid=0031', has timed out. SessionHandle=0000000026D9F0480000000A008004FF, Request ID=00000004

이 메시지는 대상 엔터프라이즈 Bean의 클래스 및 메소드를 표시합니다. 대상 엔터프라이즈 Bean이 TCP/IP를 통해 호출된 경우, 메시지의 "수신처" 섹션에 대상 서버의 호스트 이름 및 포트가 포함됩니다. 대상 엔터프라이즈 Bean이 최적화된 로컬 통신을 통해 호출된 경우, 앞의 예제에 표시된 것과 같이 메시지의 "수신처" 섹션에 대상 작업 이름 및 asid가 포함됩니다.

이 메시지가 발행될 때 다음 항목과 유사한 항목을 포함하는 해당되는 예외 추적이 생성됩니다.
/bbooejsb.cpp+3395 ... BBOO0011W The function ORBEJSBridge::invoke_request(JNIEnv *, bboojorb *, 
char *, CORBA::Boolean, CORBA::Request *&, void *)+3395 received CORBA system exception CORBA::COMM_FAILURE.  
Error code is C9C26A48  

이 추적 항목의 부 코드 C9C26A48은 RMI/IIOP 아웃바운드 타이머에 대한 대기 시간이 종료되었음을 나타냅니다.

요청에 대한 응답을 요청 제한시간 후에 받았고 더 이상 큐에 없는 경우에는 다음 메시지가 발행됩니다.
BBOO0328I: No Request found for inbound GIOP Response,
           SessionHandle=<hstring>, RequestID=<hstring>.

요청 또는 응답은 세션 핸들 및 요청 ID로 고유하게 식별되고 이 요청에 대해 이전에 BBOO0325W 메시지를 받았는지 여부를 판별하는 데 사용할 수 있습니다.

호출된 엔터프라이즈 Bean에서 클라이언트가 응답을 대기하는 시간을 변경하려면 다음을 수행하십시오.

프로시저

  1. 관리 콘솔에서 서버 > 서버 유형 > WebSphere 애플리케이션 서버 > server_name > 컨테이너 서비스 > ORB 서비스를 클릭하십시오.
  2. 요청 제한시간 필드에 적합한 타이머 설정을 초 단위로 지정하십시오. 기본값은 180초입니다. 예제: 요청 제한시간 필드에 2 값을 지정하면 타이머에 대한 대기 시간이 2초로 설정됩니다.

    디스패치 타이머에 지정한 시간보다 훨씬 작은 값을 지정할 것을 권장합니다. 이러한 유형의 설정을 사용하면 디스패치 타이머에 대한 대기 시간이 종료되기 전에 호출 애플리케이션이 비응답 엔터프라이즈 Bean을 보정할 수 있습니다. 디스패치 타이머에 대한 대기 시간이 종료되면 EC3 ABEND가 발생할 수 있습니다.

다음에 수행할 작업

org.omg.CORBA.COMM_FAILURE 예외가 시스템 예외이므로 만기된 엔터프라이즈 Bean 호출을 보정하거나 재시도하기 위해 엔터프라이즈 Bean을 호출하는 애플리케이션이 필요하지 않습니다. 그러나 자동 트랜잭션이 애플리케이션에 의해 사용되지 않는 상황을 포함한 특정 상황에서는 애플리케이션이 만기된 엔터프라이즈 Bean 호출을 보정하거나 재시도해야 하는 경우도 있습니다.

애플리케이션이 만기된 엔터프라이즈 Bean 호출을 보정하거나 재시도하도록 하려면 애플리케이션이 다음과 같아야 합니다.
  • 현재 글로벌 트랜잭션 외부에서 실행되어야 합니다.
  • org.omg.CORBA.COMM_FAILURE 예외를 발견해야 합니다.
다음 예제는 자동 트랜잭션 외부에서 실행 중인 코드 스니펫이며 애플리케이션이 만기된 엔터프라이즈 Bean 호출을 보정하거나 재시도하도록 하기 위해 애플리케이션이 수행해야 하는 단계를 설명합니다.
// This method runs outside a global transaction. public Data callingMethod() throws … {        
     try{
            InitialContext con = new InitialContext(); 
            EJBHome home con.lookup(...);    
            CalledBean cb = home.create();   

     } catch (org.omg.CORBA.COMM_FAILURE cf1){
        // The home create could timeout, so put retry or 
        // compensation logic here. 

     } catch( CreateException cx){  
                 throw new ... 
     } catch( NamingException nx){
                 throw new ... 
     } catch(RemoteException ex){ 
                 throw new ... 
     }
     try{
 		     	cb.calledMethod(…);

     } catch (org.omg.CORBA.COMM_FAILURE cf2){                
// The calledMethod could timeout, so put retry or 		   
// compensation logic here. 
     } catch( … ){ 
     			… 	
     }       
}  	

// This method can run in a global transaction. private void calledMethod(String strKey) throws … { 
      try{
             // business logic here 
      } 
      catch ( … ){  
                  throw new ... 
      }       
}

자동 트랜잭션 범위 내에서 실행 중인 애플리케이션은 만기된 엔터프라이즈 Bean 호출을 보정하거나 재시도하려면 엔터프라이즈 Bean을 호출하기 전에 트랜잭션을 일시중단해야 합니다. 호출을 TX_NOTSUPPORTED 엔터프라이즈 Bean 메소드 내에 임베드하는 것이 현재 트랜잭션을 일시중단하는 가장 좋은 방법입니다.


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



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