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 一次只处理一个客户端,因此并发应该很少成为问题。

于 2012-11-15T13:10:51.613 回答
1

您可以尝试使该方法同步。这样,一次只有一个线程可以访问该方法。

于 2012-11-15T13:06:50.733 回答
-1

@Lock(LockType.WRITE)on bean 不会锁定 bean 的所有方法。@Lock(LockType.WRITE)与放在bean 的每个方法上相同。

注释单例类@Lock指定所有业务方法和单例的任何超时方法都将使用指定的锁类型,除非它们使用方法级@Lock注释显式设置锁类型。如果@Lock单例类上没有注释,则默认锁定类型 ,@Lock(WRITE)将应用于所有业务和超时方法。

于 2015-09-08T04:26:02.400 回答