![[8.5.5.4 이상]](../ng_v8554.gif)
관리되는 스레드 팩토리 구성
관리되는 스레드 팩토리가 검색하거나 삽입할 스레드의 스레드 컨텍스트로 실행할 새 스레드를 작성하는 ManagedThreadFactory 인스턴스를 구성할 수 있습니다. 자체 스레드를 직접 관리하는 것을 피하는 것이 Java™ EE 애플리케이션을 위한 우수 사례입니다. 그러므로 ManagedThreadFactory는 JSE ThreadFactory를 확장하여 애플리케이션 서버 환경 내에서 관리되는 스레드를 작성할 방법을 제공합니다. 또한 Java EE 애플리케이션과 관련된 스레드 컨텍스트를 캡처하여 새 스레드로 전파하는 ManagedThreadFactory를 구성할 수도 있습니다.
이 태스크 정보
<featureManager>
<feature>concurrent-1.0</feature>
</featureManager>
스레드 컨텍스트 캡처 및 전파는 컨텍스트 서비스에서 관리됩니다. 컨텍스트 서비스의 기본 인스턴스(DefaultContextService)는 서버가 작성하며 최소한 classloaderContext, jeeMetadataContext 및 securityContext를 전파하도록 구성됩니다. 이 기본 컨텍스트 서비스 인스턴스는 ManagedThreadFactory가 컨텍스트 서비스를 지정하지 않는 경우 사용됩니다. 컨텍스트 서비스 인스턴스에 대한 자세한 정보는 스레드 컨텍스트 서비스 인스턴스 구성 주제를 참조하십시오.
ManagedThreadFactory의 기본 인스턴스(DefaultManagedThreadFactory)는 java:comp/DefaultManagedThreadFactory로 사용 가능하며 스레드 컨텍스트 캡처 및 전파를 위해 기본 컨텍스트 서비스 인스턴스를 사용합니다.
프로시저
server.xml 파일의 구성 예제:
예
관리되는 스레드 팩토리는 @Resource를 사용하여 애플리케이션 컴포넌트에 삽입되거나 자원 환경 참조(resource-env-ref)를 사용하여 검색될 수 있습니다. 인스턴스를 얻는 방법과 무관하게, javax.enterprise.concurrent.ManagedThreadFactory 또는 java.util.concurrent.ThreadFactory로 교체하여 사용될 수 있습니다.
- @Resource를 사용하여 java.util.concurrent.ThreadFactory로 삽입하는 예제입니다.
@Resource(lookup="concurrent/threadFactory2") ThreadFactory threadFactory ... // create a new thread Thread dailySalesAnalysisTask = threadFactory.newThread(new Runnable() { public void run() { // java:comp lookup is possible because <jeeMetadataContext> is configured DataSource ds = (DataSource) new InitialContext().lookup("java:comp/env/jdbc/ds1"); ... analyze the data } }); dailySalesAnalysisTask.start();
- @Resource를 사용하여 javax.enterprise.concurrent.ManagedThreadFactory로 삽입하는
예제입니다.
@Resource(lookup="concurrent/threadFactory2") ManagedThreadFactory threadFactory; ... usage is same as previous example
- web.xml 파일의 java.util.concurrent.ThreadFactory를 위한
예제 <resource-env-ref>입니다.
<resource-env-ref> <resource-env-ref-name>concurrent/threadFactory1</resource-env-ref-name> <resource-env-ref-type>java.util.concurrent.ThreadFactory</resource-env-ref-type> </resource-env-ref>
- web.xml 파일의 javax.enterprise.concurrent.ManagedThreadFactory를 위한
예제 <resource-env-ref>입니다.
<resource-env-ref> <resource-env-ref-name>concurrent/threadFactory2</resource-env-ref-name> <resource-env-ref-type>javax.enterprise.concurrent.ManagedThreadFactory</resource- env-ref-type> </resource-env-ref>
- 자원 환경 참조를 사용하는 예제 검색입니다.
ManagedThreadFactory threadFactory = (ManagedThreadFactory) new InitialContext().lookup("java:comp/env/concurrent/threadFactory"); // Create a scheduled executor that always runs tasks with the thread context of the managed thread factory ScheduledExecutorService executor = Executors.newScheduledThreadPool(5, threadFactory); ... use executor to schedule tasks from any thread