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

Which lock is used if @Singleton invokes another method on same instance?

我有以下 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 执行的?

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

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

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

我希望已经足够清楚了。