public interface ManagedThreadFactory extends ThreadFactorySE
ThreadFactory
の管理可能なバージョン。ManagedThreadFactory は Java™ を継承します。SE ThreadFactory は、Jakarta™ EE 環境で実行するスレッドを作成する方法を提供します。ManagedThreadFactory の実装は、Jakarta EE Product Provider によって提供されます。アプリケーションコンポーネントプロバイダーは、Java ネーミングおよびディレクトリインターフェースを使用します。™ (JNDI)リソース環境参照を使用して、1 つ以上の ManagedThreadFactory オブジェクトのインスタンスを検索します。
Jakarta Concurrency 仕様には、ManagedThreadFactory が実装できるいくつかの動作が記述されています。アプリケーションコンポーネントプロバイダーとデプロイヤーは、これらの要件を特定し、リソース環境参照を適切にマッピングします。
newThread()
メソッドから返されるスレッドは、ManageableThread
インターフェースを実装する必要があります。ThreadFactory.newThread(Runnable)
SE メソッドを使用して新しいスレッドに割り当てられた Runnable タスクは、この ManagedThreadFactory インスタンスを作成(ルックアップ)したコンポーネントインスタンスのアプリケーションコンポーネントコンテキストで実行されます。
タスクは明示的なトランザクションなしで実行されます(アプリケーションコンポーネントのトランザクションには参加しません)。トランザクションが必要な場合は、jakarta.transaction.UserTransaction
インスタンスを使用してください。UserTransaction インスタンスは、" java:comp/UserTransaction" という名前を使用して JNDI で使用できます。
例:
public run() { // Begin of task InitialContext ctx = new InitialContext(); UserTransaction ut = (UserTransaction) ctx.lookup("java:comp/UserTransaction"); ut.begin(); // Perform transactional business logic ut.commit(); }ManagedThreadFactory は、Java SE ExecutorService 実装で直接使用できます。
例:
/** * Create a ThreadPoolExecutor using a ManagedThreadFactory. * Resource Mappings: * type: jakarta.enterprise.concurrent.ManagedThreadFactory * jndi-name: concurrent/tf/DefaultThreadFactory */ @Resource(name="concurrent/tf/DefaultThreadFactory") ManagedThreadFactory tf; public ExecutorService getManagedThreadPool() { // All threads will run as part of this application component. return new ThreadPoolExecutor(5, 10, 5, TimeUnit.SECONDS, new ArrayBlockingQueue<Runnable>(10), tf); }
newThreadSE
Copyright © 2018,2020 Eclipse Foundation.
Use is subject to license terms.