シリアルに実行したいプロセスがありますが、別のスレッドにあります。JBoss 7 でそれを達成するにはどうすればよいですか? 明白な答えは、EJB が一度に 1 つのスレッドのみを実行するように構成されている @Asyncronous EJB メソッドです (他の要求はキューに入れられます)。
どうすればそれを最もよく達成できるでしょうか。
シリアルに実行したいプロセスがありますが、別のスレッドにあります。JBoss 7 でそれを達成するにはどうすればよいですか? 明白な答えは、EJB が一度に 1 つのスレッドのみを実行するように構成されている @Asyncronous EJB メソッドです (他の要求はキューに入れられます)。
どうすればそれを最もよく達成できるでしょうか。
これを実現する優れた方法は、EJB 3.1 のシングルトン + 非同期アノテーションの組み合わせを使用することだと思います。AccessTimeout アノテーションを使用して、キューに入れられた呼び出しの待機タイムアウトを提供することもできます。最後に、Lock アノテーションを使用して READ、WRITE ロックを制御することもできます。あなたが望むなら、これについて:
@Singleton
public class SingletonAsyncProcessor{
@Asynchronous
@AccessTimeout(5000) //times out after 5 seconds
public Future<String> addJobToQueue(String jobName) {
これらのアノテーションのほとんどは、クラス レベル (すべてのメソッドが非同期になります) またはメソッド レベルで使用できることにも注意してください。EJB 3.1 を Web コンテナーで実行することもできます。
EJB 3.1 ROCKS。
よろしく。