2

JavaEE コンテナーで独自のスレッドを生成することは悪い習慣だと聞いたところです。数か月前に JavaEE 6 の開発を学び始めてから、しばらくの間これを行ってきました。私がやっていることは次のとおりです。

1.)Webアプリケーションのメインエントリポイント(ServletContextListenerを実装したオブジェクト)から、

2.) contextInitialized メソッドで Web アプリケーション バックエンドの非同期バックグラウンド タスクを実行するためのスレッドをいくつか作成します。

3.) contextDestroyed メソッドでリソースをクリーンアップします。

それを行うより良い方法はありますか?スレッドを生成せずに非同期バックグラウンド タスクを作成する方法は? スレッドを使用しない理由は何ですか?

EJB 3.0 と JavaEE6 を使用しています

4

3 に答える 3

4

手動でスレッドを生成することは、実際には悪い習慣です。アプリケーション コードの外部で、Java コンテナーにスレッドプールを管理させたいからです。JavaEE 6 にはこの目的専用の @Asynchronous というアノテーションがあり、Oracle には公式のチュートリアルがあります。

于 2012-05-23T03:21:22.070 に答える
2

EJB3.1より前の回避策は、JMSとMDBを作成して、EJBコンテナーで非同期ジョブを実行することです。これは、比較的重く、メッセージブローカーに依存します。@Asynchronousは、非同期ジョブを処理するためのはるかに簡単な方法を提供します。

于 2012-06-06T22:10:56.213 に答える
0

Java EE 7 では、新しい Concurrency Utils API 仕様をご覧ください。

于 2014-01-02T10:05:08.060 に答える