如果@Singleton在同一个实例上调用另一个方法,则使用哪个锁?

时间:2018-03-21 21:20:20

标签: java-ee singleton ejb locks

我有以下EJB单例:

@Singleton
public class MySingleton {

  @Lock(LockType.WRITE)
  public void doSomethingWrite(){
    //code that writes something to DB
  }
  @Lock(LockType.READ)
  public void doSomethingRead(){
    //code that READS something from DB
  }
  @Lock(LockType.READ)
  public void doSomethingReadButCanDoWrite(){
    if(somethingDoesNotExistInDB()){
      doSomethingWrite(); // <-- My question is about this call.
    }
    doSomethingRead();
  }
}

我的问题是,使用doSomethingWrite()执行的调用LockType.WRITE是在目标方法上声明的,还是在封闭方法中声明的LockType.READ

1 个答案:

答案 0 :(得分:2)

在这种情况下,调用是本地调用,它不是EJB方法调用,因此,它不会应用任何EJB问题。

有一种方法可以配置应用程序服务器以使这种直接调用通过EJB上下文,但这些配置是特定于供应商的。

如果要作为EJB方法调用进行调用,请使用EJB上下文,您可以通过EJB实例使用它,在这种情况下,该方法将应用自己的锁(WRITE锁)

我希望已经足够清楚了。