스레드 컨텍스트 서비스 인스턴스 구성

관리 스레드 컨텍스트를 캡처하여 스레드에서 지정된 인터페이스 메소드의 호출에 적용하도록 ContextService 인스턴스를 구성할 수 있습니다.

이 태스크 정보

Java™ EE 애플리케이션에 대한 우수 사례는 자체 스레드를 직접 관리하지 못하게 하는 것이므로 ContextService는 이전에 캡처된 스레드 컨텍스트를 비관리 스레드와 관리 스레드에서 설정하여 제 위치에 있는 스레드 컨텍스트를 오버레이하는 방법을 제공합니다.

기본 스레드 컨텍스트 서비스 인스턴스(DefaultContextService)가 서버에 의해 작성되어 최소한 classloaderContext, jeeMetadataContextsecurityContext 요소를 캡처하고 전파하도록 구성됩니다. 다음과 같은 유형의 스레드 컨텍스트를 포함하도록 스레드 컨텍스트 전파를 구성할 수 있습니다.

classloaderContext
태스크 제출자의 클래스 로더가 태스크에 사용 가능하도록 만듭니다. 컨텍스트 클래스 로더가 직렬화된 경우 이 클래스 로더는 애플리케이션의 스레드 컨텍스트 클래스 로더여야 합니다. OSGi 웹 애플리케이션 번들에 대한 클래스 로더 직렬화는 현재 지원되지 않습니다.
jeeMetadataContext
태스크를 제출한 애플리케이션 컴포넌트의 네임스페이스를 태스크에 사용 가능하도록 만듭니다.
securityContext
이 유형의 스레드 컨텍스트를 사용하려면 server.xml 파일에서 appSecurity-2.0 기능을 사용으로 설정해야 합니다. 태스크 제출자의 호출자 주제 및 호출 주제를 태스크에 사용 가능하도록 만듭니다. 이것은 JAAS 로그인 모듈을 사용하여 제출자의 WSPrincipal 신임 정보로 로그인하여 수행됩니다. 제출자의 주제에 있는 정보 중 보안 컨텍스트에 없는 정보에 대한 세부사항은 concurrent-1.0 기능 제한사항을 참조하십시오.

프로시저

server.xml 파일에서 스레드 컨텍스트 서비스를 사용으로 설정하십시오. 스레드 컨텍스트 서비스는 <concurrent-1.0> 기능 아래에서 사용할 수 있습니다.
<featureManager>
		<feature>concurrent-1.0</feature>
</featureManager>

server.xml 파일에서 스레드 컨텍스트 서비스 인스턴스 구성:
  • jeeMetadataContext만 캡처하여 전파하는 concurrent/threadContextSvc1이라는 이름으로 JNDI에서 등록되는 스레드 컨텍스트 서비스:
    <contextService id="threadContextSvc1" jndiName="concurrent/${id}">
    	<jeeMetadataContext/>
    </contextService>
  • classloaderContextsecurityContext가 포함된 스레드 컨텍스트 서비스:
    <contextService jndiName="concurrent/threadContextSvc2">
    	<classloaderContext/>
    	<securityContext/>
    </securityContext/>
  • threadContextSvc1에서 jeeMetadataContext를 상속하고 securityContext를 추가하는 스레드 컨텍스트 서비스:
    <contextService jndiName="concurrent/threadContextSvc3" 
    baseContextRef="threadContextSvc1">
    	<securityContext>
    </contextService>

기본 컨텍스트 서비스를 검색하는 예:

ContextService threadContextSvc =
    (ContextService) new InitialContext().lookup(
        "java:comp/DefaultContextService");
myContextualAsyncCallback = threadContextSvc.createContextualProxy(
    myAsyncCallback, MyAsyncCallback.class);
doSomethingAsync(arg1, arg2, myContextualAsyncCallback);

@Resource를 사용하여 스레드 컨텍스트 서비스 인스턴스를 애플리케이션 컴포넌트에 삽입하거나 자원 환경 참조(resource-env-ref)를 사용하여 검색하는 예

  • @Resource를 사용하는 예제:
    @Resource(lookup="concurrent/threadContextSvc1")
    ContextService threadContextSvc1;
    
    ...
    
    Callable<Integer>  processSalesOrderCompletion = new Callable<Integer>() { 
    		public Integer call() throws Exception { 
    	   		DataSource ds = (DataSource) new InitialContext().lookup("java:comp/env/jdbc/ds1");
    		 ...update various database tables 
    		 return isSuccessful; 
    	} 
    };  
    // capture thread context of current application component
    execProps = Collections.singletonMap(ManagedTask.TRANSACTION, 
    ManagedTask.USE_TRANSACTION_OF_EXECUTION_THREAD);
    processSalesOrderCompletion = (Callable<Boolean>)
     threadContextSvc1.createContextualProxy(processSaleCompletion, execProps, 
    Callable.class);
    
    //later from a different application component
    tran.begin();
    ...
    successful = processSalesOrderCompletion.call();
    if (successful)
      tran.commit();else
      tran.rollback();
  • web.xml 파일에서 resource-env-ref를 지정하는 예:
    <resource-env-ref>
    	<resource-env-ref-name>concurrent/threadContextSvc3</resource-env-ref-name>
    	<resource-env-ref-type>javax.enterprise.concurrent.ContextService</resource-
    	env-ref-type>
    </resource-env-ref>
  • 자원 환경 참조를 사용하는 예제 검색:
    ContextService threadContextSvc3 = 
    (ContextService) new InitialContext().lookup("java:comp/env/concurrent/threadContextSvc3");
    Runnable updateAndGetNextFromDatabase = threadContextSvc3.createContextualProxy
    (new Runnable() {
    		public void run() {
    		 		DataSource ds = (DataSource) new InitialContext().lookup("java:comp/env/jdbc/ds1");
        ... update the database and get next item to process
      }
    }, Runnable.class);
    barrier = new CyclicBarrier(3, updateAndGetNextFromDatabase);
    ...

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



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