5

テーブル内の一部のデータを永続化する必要があり、永続化に時間がかかる場合があります。基本的に、ログを永続化したい。永続化が完了するまで実行を待機させたくありません。

このタスクを実行するにはスレッドを使用する必要があること、およびエンタープライズ アプリケーションでスレッドを作成することはお勧めできないことを知っています。

そこでワーカーマネージャーについて読み始め、Websphere アプリケーションサーバー 8.5 でサンプルプログラムを理解し、試してみました。

websphere の asynchbeans.jar を使用しましたが、ベンダー固有のコードを書いていることに悩んでいます。

次に、Oracle Javaドキュメントに記載されているcommonj作業APIに出会いました。現在、fabric3 の commonj API を使用することを考えています。

私の疑問は、同じタスクを達成するためのより良い方法はありますか? EJB方式?または、ワークマネージャーは私の要件に適していますか?

4

3 に答える 3

7

いくつかのオプションがあります:

  1. 非同期 Bean。あなたが言及したように、これらはベンダー固有です。
  2. commonj はベンダー固有ではありません。私の知る限り、これは IBM WebSphere Application Server と BEA WebLogic によってのみ実装されました。この API は、実質的に最良の選択であるConcurrency Utilities for Java EEに取って代わられました。
  3. EJB@Asynchronousメソッド。EJB を使用する必要があります (不要な複雑さがある場合もあります)。
  4. EJB タイマー。EJB を使用する必要があり、シリアライズ可能なデータが必要です。
  5. JMS。おそらく、メッセージを受信するために MDB を使用する必要があり、シリアライズ可能なデータが必要です。
  6. 実際にスレッドを作成します。EE 仕様ではこれは推奨されていませんが、EE コンストラクト ( lookup("java:...")、JPA、UserTransaction など) を使用しない限り、問題はありません。
于 2016-01-14T16:21:03.227 に答える
4

JavaEE7 にはマネージド エグゼキュータがあり、試すことができます。それを使用してタスクを生成し、ハンドラーでマネージド コールバックを受け取ることができます。これは EE 標準の一部であり、プラットフォームに依存しない必要があります。

ここでJDocを参照してください:

http://docs.oracle.com/javaee/7/api/javax/enterprise/concurrent/ManagedExecutorService.html

于 2016-01-14T11:30:44.813 に答える