【问题标题】:Which lock is used if @Singleton invokes another method on same instance?如果@Singleton 在同一个实例上调用另一个方法,使用哪个锁?
【发布时间】:2018-03-21 21:20:19
【问题描述】:

我有以下 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

【问题讨论】:

    标签: jakarta-ee singleton ejb locks


    【解决方案1】:

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

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

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

    我希望已经足够清楚了。

    【讨论】:

      猜你喜欢
      • 2012-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-30
      • 1970-01-01
      • 2015-05-27
      • 2020-10-15
      相关资源
      最近更新 更多