관리되는 스레드 팩토리 구성

관리되는 스레드 팩토리가 검색하거나 삽입할 스레드의 스레드 컨텍스트로 실행할 새 스레드를 작성하는 ManagedThreadFactory 인스턴스를 구성할 수 있습니다. 자체 스레드를 직접 관리하는 것을 피하는 것이 Java™ EE 애플리케이션을 위한 우수 사례입니다. 그러므로 ManagedThreadFactory는 JSE ThreadFactory를 확장하여 애플리케이션 서버 환경 내에서 관리되는 스레드를 작성할 방법을 제공합니다. 또한 Java EE 애플리케이션과 관련된 스레드 컨텍스트를 캡처하여 새 스레드로 전파하는 ManagedThreadFactory를 구성할 수도 있습니다.

이 태스크 정보

관리되는 스레드 팩토리는 <concurrent-1.0> 기능에서 사용 가능하며, 다음과 같이 server.xml 파일에서 사용으로 설정됩니다.
<featureManager>
	<feature>concurrent-1.0</feature>
</featureManager>

스레드 컨텍스트 캡처 및 전파는 컨텍스트 서비스에 의해 관리됩니다. 컨텍스트 서비스의 기본 인스턴스(DefaultContextService)는 서버에 의해 작성되고 최소한 classloaderContext, jeeMetadataContextsecurityContext를 전파하도록 구성됩니다. 이 기본 컨텍스트 서비스 인스턴스는 ManagedThreadFactory가 컨텍스트 서비스를 지정하지 않는 경우 사용됩니다. 컨텍스트 서비스 인스턴스에 대한 자세한 정보는 스레드 컨텍스트 서비스 인스턴스 구성 주제를 참조하십시오.

ManagedThreadFactory의 기본 인스턴스(DefaultManagedThreadFactory)는 java:comp/DefaultManagedThreadFactory로 사용 가능하며 스레드 컨텍스트 캡처 및 전파를 위해 기본 컨텍스트 서비스 인스턴스를 사용합니다.

프로시저

server.xml 파일의 구성 예제:

관리되는 스레드 팩토리는 @Resource를 사용하여 애플리케이션 컴포넌트에 삽입되거나 자원 환경 참조(resource-env-ref)를 사용하여 검색될 수 있습니다. 인스턴스를 얻는 방법과 무관하게, javax.enterprise.concurrent.ManagedThreadFactory 또는 java.util.concurrent.ThreadFactory로 교체하여 사용될 수 있습니다.

  • 기본 관리되는 스레드 팩토리를 검색하는 예:
    ManagedThreadFactory threadFactory =
        (ManagedThreadFactory) new InitialContext().lookup(
            "java:comp/DefaultManagedThreadFactory");
    // Create an executor that always runs tasks with the thread context of the managed thread factory
    ExecutorService executor = new ThreadPoolExecutor(
        coreThreads, maxThreads, keepAliveTime, TimeUnit.MINUTES,
        new ArrayBlockingQueue<Runnable>(workRequestQueueSize),
        threadFactory, new ThreadPoolExecutor.AbortPolicy());
  • @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

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

파일 이름: twlp_config_threadfactory.html