我有以下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
?
答案 0 :(得分:2)
在这种情况下,调用是本地调用,它不是EJB方法调用,因此,它不会应用任何EJB问题。
有一种方法可以配置应用程序服务器以使这种直接调用通过EJB上下文,但这些配置是特定于供应商的。
如果要作为EJB方法调用进行调用,请使用EJB上下文,您可以通过EJB实例使用它,在这种情况下,该方法将应用自己的锁(WRITE锁)
我希望已经足够清楚了。