관리 대상 실행기 구성

지정된 스레드 컨텍스트를 갖고 비동기 태스크를 실행하도록 ManagedExecutorService 인스턴스를 구성할 수 있습니다. Java™ EE 애플리케이션을 위한 우수 사례는 자체 스레드를 직접 관리하지 못하게 하는 것이므로 ManagedExecutorServiceJSE ExecutorService를 확장하여 애플리케이션 서버 환경에서 비동기 태스크를 시작하는 방법을 제공합니다. 또한 Java EE 애플리케이션과 연관된 다양한 스레드 컨텍스트를 비동기 태스크의 스레드로 전파하도록 ManagedExecutorService를 구성할 수도 있습니다.

이 태스크 정보

중요사항: Liberty에서 관리 대상 실행기는 자체 스레드 풀을 갖고 있지 않습니다. 관리 대상 실행기 인스턴스에 제출된 태스크는 공통 Liberty 실행기 스레드 풀에서 실행됩니다.
ManagedExecutorService<concurrent-1.0> 기능에서 사용 가능하며 다음과 같이 server.xml 파일에서 사용으로 설정됩니다.
<featureManager>
		<feature>concurrent-1.0</feature>
</featureManager>

ManagedExecutorService에 의해 실행되는 태스크의 스레드로의 컨텍스트 전파는 컨텍스트 서비스에 의해 관리됩니다. 컨텍스트 서비스의 기본 인스턴스(DefaultContextService)는 서버에 의해 작성되고 최소한 classloaderContext, jeeMetadataContextsecurityContext를 전파하도록 구성됩니다. 특정 컨텍스트 서비스 인스턴스를 참조하지 않거나 컨텍스트 서비스 인스턴스를 직접 내부에서 구성하지 않고 ManagedExecutorService가 작성되는 경우 이 기본 컨텍스트 서비스 인스턴스가 사용됩니다. 컨텍스트 서비스 인스턴스에 대한 자세한 정보는 스레드 컨텍스트 서비스 인스턴스 구성 주제를 참조하십시오.

기본 관리 대상 실행기 인스턴스(DefaultManagedExecutorService)는 java:comp/DefaultManagedExecutorService로서 사용 가능하며 스레드 컨텍스트 캡처 및 전파를 위해 기본 컨텍스트 서비스 인스턴스를 사용합니다.

프로시저

server.xml 파일의 구성 예제:

관리 대상 실행기 서비스 인스턴스는 애플리케이션 컴포넌트에 삽입되거나(@Resource 사용) 자원 환경 참조로 검색(resource-env-ref)할 수 있습니다. 인스턴스를 얻는 방법과 상관없이, 인스턴스를 javax.enterprise.concurrent.ManagedExecutorService 또는 그의 java.util.concurrent.ExecutorSerivce 수퍼클래스로서 교대로 사용할 수 있습니다.

  • 기본 관리 대상 실행기를 검색하는 예:
    ManagedExecutorService executor = 
        (ManagedExecutorService) new InitialContext().lookup(
            "java:comp/DefaultManagedExecutorService");
    executor.submit(doSomethingInParallel);
  • @Resource를 사용하여 java.util.concurrent.ExecutorService로서 삽입하는 예제:
    @Resource(lookup="concurrent/execSvc1")
    ExecutorService execSvc1;
    
    ...
    
    // submit task to run 
    Future<Integer> future1 = execSvc1.submit(new Callable<Integer>() { 
    		public Integer call() throws Exception { 
    	  	  // java:comp lookup is possible because <jeeMetadataContext> is configured 
    				DataSource ds = (DataSource) new InitialContext().lookup("java:comp/env/jdbc/ds1");
    				... make updates to the database 
    				return updateCount; 
    	} 
    });  
    Future<Integer> future2 = execSvc1.submit(anotherTaskThatUpdatesADatabase);  
    
    numUpdatesCompleted = future1.get() + future2.get();
  • @Resource를 사용하여 javax.enterprise.concurrent.ManagedExecutorService로서 삽입하는 예제:
    @Resource(lookup="concurrent/execSvc1")
    ManagedExecutorService execSvc1;
    
    ...
    
    // submit task to run 
    Future<Integer> future1 = execSvc1.submit(new Callable<Integer>() { 
    		public Integer call() throws Exception { 
    	  	  // java:comp lookup is possible because <jeeMetadataContext> is configured 
    				DataSource ds = (DataSource) new InitialContext().lookup("java:comp/env/jdbc/ds1");
    				... make updates to the database 
    				return updateCount; 
    	} 
    });  
    Future<Integer> future2 = execSvc1.submit(anotherTaskThatUpdatesADatabase);  
    
    numUpdatesCompleted = future1.get() + future2.get();
  • web.xml 파일에 있는 java.util.concurrent.ExecutorService에 대한 예제 <resource-env-ref>:
    <resource-env-ref>
    		<resource-env-ref-name>concurrent/execSvc2</resource-env-ref-name>
    		<resource-env-ref-type>java.util.concurrent.ExecutorService</resource-env-ref-type>
    </resource-env-ref>
  • 자원 환경 참조를 사용하는 예제 검색입니다.
    ExecutorService execSvc2 = 
        (ExecutorService) new InitialContext().lookup("java:comp/env/concurrent/execSvc2");
    
    futures = execSvc2.invokeAll(Arrays.asList(task1, task2, task3));
  • web.xml 파일에 있는 javax.enterprise.concurrent.ManagedExecutorService에 대한 예제 <resource-env-ref>:
    <resource-env-ref>
    		<resource-env-ref-name>concurrent/execSvc2</resource-env-ref-name>
    		<resource-env-ref-type>javax.enterprise.concurrent.ManagedExecutorService</resource-env-ref-type>
    </resource-env-ref>
  • 자원 환경 참조를 사용하고 ManagedExecutorService로 캐스트하는 검색 예:
    ManagedExecutorService execSvc2 = 
        (ManagedExecutorService) new InitialContext().lookup("java:comp/env/concurrent/execSvc2");
    
    futures = execSvc2.invokeAll(Arrays.asList(task1, task2, task3));

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



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