S-JIS[2024-03-11] 変更履歴

ManagedExecutorService

ManagedExecutorServiceクラスのメモ。


概要

JAX-RSで)別スレッドで処理を実行したい場合はManagedExecutorServiceを使う。

ManagedExecutorServiceを使うには、build.gradleのdependenciesに以下のライブラリーを指定する。

dependencies {
    compileOnly 'jakarta.ws.rs:jakarta.ws.rs-api:3.1.0'
    compileOnly 'jakarta.enterprise.concurrent:jakarta.enterprise.concurrent-api:3.0.3'
}

ちなみに、仮想スレッドに対応するのはJakarta EE 11かららしい?


import java.util.concurrent.ExecutionException;

import jakarta.annotation.Resource;
import jakarta.enterprise.concurrent.ManagedExecutorService;
@Path("/resource1")
public class Resource1 {

    @Resource
    private ManagedExecutorService executorService;

    @GET
    @Produces(MediaType.TEXT_PLAIN)
    public String hello() throws InterruptedException, ExecutionException {
        var future = executorService.submit(() -> {
            return ZonedDateTime.now();
        });
        var now = future.get();

        return "hello " + now;
    }
}

ManagedExecutorServiceは@Resourceでインジェクトする。
(ManagedExecutorServiceのインスタンスはJNDIで管理されており、JNDIからlookupする場合は@Resourceを使うようだ)
(@Injectは不可。APサーバーによってはデプロイに失敗したり、フィールドがnullになったりする)

ManagedExecutorServiceはExecutorServiceを継承しているので、使い方はExecutorServiceと同じ。


JAX-RSへ戻る / Java目次へ戻る / 技術メモへ戻る
メールの送信先:ひしだま