0
我想知道如果有人在這裏可以回答我的問題,因爲我一直在互聯網瀏覽這個東西一段時間。我知道在將SFSB注入SLSB時可能會得到「意想不到的結果」。我的理解是,這是因爲從SLSB到SFSB時,事務狀態會丟失。SFSB與@Asynchronous方法
我的問題是,如果我有一個無狀態Bean只有一個使用注入狀態EJB的異步業務方法,那麼我的缺點和可能的「意外結果」是什麼?
根據我的理解,當異步方法被調用並從另一個bean分離出來時,只有安全信息從上面通過異步方法,事務狀態會丟失。因此,如果SFSB只用於一個@Asynchronus方法,我可以將SFSB注入到SLSB中嗎?我在這裏錯過了什麼?
實施例簡化的代碼:
@Stateless
public class SeedValuesBean {
/**
* Async action bean.
*/
@EJB
private SeedValuesAsyncBean asyncBean;
public void performSeedValues() {
Future<String> result = asyncBean.seedValues():
logger.info("Result :"+ result.get());
}
}
@Stateless
public class SeedValuesAsyncBean {
@EJB
private LowerBusinessBean lowerBean; // is stateful
@Asynchronous
public Future<String> seedValues() {
return new AsyncResult<>(lowerBean.getResult());
}
}
@Stateful
public class LowerBusinessBean {
public String getResult() {
return Double.toString(Math.random());
}
}
對於上下文我問,因爲如果我SeedValuesAsyncBean有狀態(所以我可以注入一個有狀態豆和不違反代碼),然後使SeedValuesBean有狀態爲同樣的原因,我失去了異步功能,所有事情都是同步發生的。
在此先感謝。
爲什麼在SLSB中需要SFSB? SLSB將不知道要注入哪個SFSB(許多用戶/客戶端),並且您不會在SFSB中使用任何「狀態」。 – Geinmachi
在@Async方法的調用之間不需要狀態。在方法內部處於穩定狀態。 – astropcr
好像'LowerBusinessBean'應該是'@ Singleton'。 –