관리 스케줄 실행기 구성
태스크가 스케줄되는 스레드의 스레드 컨텍스트로 실행하는 비동기 태스크를 스케줄하도록 ManagedScheduledExecutorService 인스턴스를 구성할 수 있습니다. Java™ EE 애플리케이션을 위한 우수 사례는 자체 스레드를 직접 관리하지 못하게 하는 것이므로 ManagedScheduledExecutorService는 JSE ExecutorService를 확장하여 애플리케이션 서버 환경에서 비동기 태스크를 스케줄하는 방법을 제공합니다. 또한 Java EE 애플리케이션과 관련된 스레드 컨텍스트를 캡처하여 스케줄된 태스크의 스레드에 전파하도록 ManagedScheduledExecutorService를 구성할 수 있습니다.
이 태스크 정보
<featureManager>
<feature>concurrent-1.0</feature>
</featureManager>
스레드 컨텍스트 캡처 및 전파는 컨텍스트 서비스에 의해 관리됩니다. 컨텍스트 서비스의 기본 인스턴스(DefaultContextService)는 서버에 의해 작성된 후 최소한 classloaderContext, jeeMetadataContext 및 securityContext를 전파하도록 구성됩니다. 특정 컨텍스트 서비스 인스턴스를 참조하지 않거나 컨텍스트 서비스 인스턴스를 직접 내부에서 구성하지 않고 ManagedScheduledExecutorService가 작성되는 경우 이 기본 컨텍스트 서비스 인스턴스가 사용됩니다. 컨텍스트 서비스 인스턴스에 대한 자세한 정보는 스레드 컨텍스트 서비스 인스턴스 구성 주제를 참조하십시오.
기본 관리 스케줄 실행기 인스턴스(DefaultManagedScheduledExecutorService)는 java:comp/DefaultManagedScheduledExecutorService로 사용할 수 있으며 스레드 컨텍스트 캡처 및 전파를 위해 기본 컨텍스트 서비스 인스턴스를 사용합니다.
프로시저
server.xml 파일의 구성 예제:
예
@Resource를 사용하여 관리 스케줄 실행기를 애플리케이션 컴포넌트에 삽입하거나 자원 환경 참조(resource-env-ref)를 사용하여 검색하십시오. 인스턴스를 얻는 방법에 관계없이 인스턴스를 javax.enterprise.concurrent.ManagedScheduledExecutorService 또는 수퍼클래스 java.util.concurrent.ScheduledExecutorSerivce, java.util.concurrent.ExecutorService, javax.enterprise.concurrent.ManagedExecutorService로 교환하여 사용할 수 있습니다.
- 기본 관리 대상 스케줄된 실행기를 검색하는 예:
ManagedScheduledExecutorService executor = (ManagedScheduledExecutorService) new InitialContext().lookup( "java:comp/DefaultManagedScheduledExecutorService"); executor.schedule(beginSalePrices, 12, TimeUnit.HOURS); executor.schedule(restoreNormalPrices, 60, TimeUnit.HOURS);
- @Resource를 사용하여 java.util.concurrent.ScheduledExecutorService로 삽입하는 예제:
@Resource(lookup="concurrent/scheduledExecutor2") ScheduledExecutorService executor; ... // schedule a task to run every half hour from now Runnable updateSalesReport = new Runnable() { public void run() throws Exception { // java:comp lookup is possible because <jeeMetadataContext> is configured DataSource ds = (DataSource) new InitialContext().lookup("java:comp/env/jdbc/ds1"); ... query and update various database tables } }; ScheduledFuture<?> future = executor.scheduleAtFixedRate(updateSalesReport, 0, 30, TimeUnit.MINUTES);
- @Resource를 사용하여 javax.enterprise.concurrent.ManagedScheduledExecutorService로 삽입하는 예제:
@Resource(lookup="concurrent/scheduledExecutor2") ManagedScheduledExecutorService executor; ... usage is same as previous example
- web.xml 파일의 java.util.concurrent.ScheduledExecutorService에 대한
예제 <resource-env-ref>:
<resource-env-ref> <resource-env-ref-name>concurrent/scheduledExecutor1</resource-env-ref-name> <resource-env-ref-type>java.util.concurrent.ScheduledExecutorService</resource-env-ref-type> </resource-env-ref>
- web.xml 파일의 javax.enterprise.concurrent.ManagedScheduledExecutorService에 대한
예제 <resource-env-ref>:
<resource-env-ref> <resource-env-ref-name>concurrent/scheduledExecutor2</resource-env-ref-name> <resource-env-ref-type>javax.enterprise.concurrent.ManagedScheduledExecutorService</resource-env-ref-type> </resource-env-ref>
- 자원 환경 참조를 사용하는 예제 검색입니다.
ManagedScheduledExecutorService executor = (ManagedScheduledExecutorService) new InitialContext().lookup("java:comp/env/concurrent/scheduledExecutor2"); executor.schedule(payrollTask, fridaysAtMidnightTrigger);