제2장 Managed Objects

내용 목차

2.1. ManagedExecutorService
2.2. ManagedScheduledExecutorService
2.3. ContextService
2.4. ManagedThreadFactory

본 장에서는 Jakarta Concurrency에서 제공하는 Managed Objects에 대해서 간략하게 설명하고 사용 예제를 기술한다.

javax.enterprise.concurrent.ManagedExecutorService 인터페이스는 Java SE의 java.util.concurrent.ExecutorService 인터페이스를 상속한다. ExecutorService와 동일하게 비동기 작업을 수행하기 위해 이용되고, 애플리케이션 서버는 비동기로 실행되는 작업의 컨텍스트 정보를 유지시켜준다.

리소스 정의 예제

다음은 ManagedExecutorService를 리소스로 정의한 예제이다.


애플리케이션 예제

다음은 ManagedExecutorService를 활용한 애플리케이션 예제이다.


WebAdmin 예제

WebAdmin에서는 왼쪽 메뉴에서 [Resources] > [Concurrency Utilities Resource]를 선택해서 ManagedExecutorService 설정을 할 수 있다.


javax.enterprise.concurrent.ManagedExecutorService 인터페이스는 ManagedExecutorService의 모든 기능을 상속받는 동시에 Java SE의 java.util.concurrent.ScheduledExecutorService의 기능을 상속받아 작업의 지연 실행이나 주기적 실행이 가능하도록 기능을 제공한다. 추가적으로 Trigger와 ManagedTaskListener 인터페이스를 통해 작업의 실행을 제어할 수 있도록 한다.

리소스 정의 예제

다음은 ManagedScheduledExecutorService를 리소스로 정의한 예제이다.


애플리케이션 예제

다음은 ManagedScheduledExecutorService를 활용한 애플리케이션 예제이다.


WebAdmin 예제

WebAdmin 왼쪽 메뉴의 [Resources] > [Concurrency Utilities Resource]에서 ManagedScheduledExecutorService 설정을 할 수 있다.


ExecutorService를 이용하지 않고 ContextService를 통해 Managed Task를 생성하는 방식을 제공한다. 본 기능을 이용하여 사용자는 태스크를 만들 때 컨텍스트에 대해서 신경쓰지 않아도 애플리케이션 서버 내부적으로 작업이 실행될 때 컨텍스트를 유지시켜준다. 좀더 상세하게는 Dynamic Proxy를 이용해서 현재 작업을 실행하기 전에 해당 스레드에 컨텍스트를 설정하고 작업을 수행한다. 모든 작업이 완료되면 컨텍스트를 복귀하는 작업을 대신 수행한다.

리소스 정의 예제

다음은 ContextService를 리소스로 정의한 예제이다.


애플리케이션 예제

다음은 ContextService를 활용한 애플리케이션 예제이다.


WebAdmin 예제

WebAdmin 왼쪽 메뉴의 [Resources] > [Concurrency Utilities Resource]에서 ContextService 설정을 할 수 있다.


javax.enterprise.concurrent.ManagedThreadFactory 인터페이스는 Java SE의 java.util.concurrent.ThreadFactory 기능을 상속받아 스레드를 생성하는 기능을 제공한다. 일반적으로 ThreadFactory는 ThreadPoolExecutor를 생성할 때 생성자의 파라미터로 넘기는 곳에 사용한다. 따라서, Java SE의 Concurrency API 상에서도 worker 스레드가 작업을 실행할 때 Task에 대한 컨텍스트를 유지해줄 수 있다.

리소스 정의 예제

다음은 ManagedThreadFactory를 리소스로 정의한 예제이다.


애플리케이션 예제

다음은 ManagedThreadFactory를 활용한 애플리케이션 예제이다.