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 インスタンスを作成(ルックアップ)したコンポーネントインスタンスのアプリケーションコンポーネントコンテキストで実行されます。
タスクは、明示的なトランザクションなしで実行されます(アプリケーションコンポーネントのトランザクションに参加しません)。トランザクションが必要な場合は、javax.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: javax.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);
}
newThreadSECopyright © 2019 Eclipse Foundation.
Use is subject to license terms.