2

私は2つのメソッドを持つEJBを持っています

@Singleton(name = "RatingCalculatorEJB")
public class RatingCalculatorBean {

    public void countRating() {}

    public void countRating(int someID) {}
}

デフォルトでは、すべてのメソッドに同時実行ロックがあります: @Lock(LockType.WRITE) メソッドが任意のスレッドによって呼び出された場合、別のスレッドがこのメソッドの呼び出しを待機します。

しかし、もっと必要です。スレッドによってメソッドが呼び出された場合、EJB のメソッドを呼び出す他のすべてのスレッドは待機する必要があります何か方法はありますか?

@Stateless Bean に対する同じ質問

4

3 に答える 3

9

@Lock(LockType.WRITE) は、Bean のすべての EJB メソッドをロックするため、必要なことはすでに実行されています。

ステートレス Bean は一度に 1 つのクライアントしか処理しないため、並行性が問題になることはめったにありません。

于 2012-11-15T13:10:51.613 に答える
1

そのメソッドを同期させようとすることができます。この方法では、一度に 1 つのスレッドだけがメソッドにアクセスできます。

于 2012-11-15T13:06:50.733 に答える
-1

@Lock(LockType.WRITE)on Bean は、Bean のすべてのメソッドをロックしません。@Lock(LockType.WRITE)ビーンの各メソッドに載せるのと同じです。

でシングルトン クラスにアノテーションを付けると、シングルトンのすべてのビジネス メソッドとタイムアウト メソッドが、メソッド レベルのアノテーション@Lockでロック タイプを明示的に設定しない限り、指定されたロック タイプを使用することを指定します。シングルトン クラスにアノテーションが存在し@Lockない場合、デフォルトのロック タイプがすべてのビジネス メソッドとタイムアウト メソッドに適用されます。@Lock@Lock(WRITE)

于 2015-09-08T04:26:02.400 に答える