如果@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 锁)
我希望已经足够清楚了。
我有以下 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 锁)
我希望已经足够清楚了。