我知道App Server負責處理線程,因此開發人員應該只專注於業務邏輯... 但考慮一個示例。無狀態的EJB有一個CountManager類型的成員。何時需要注意EJB中的多線程?
@WebService
@Stateless
public class StatelessEJB {
private CountManager countManager;
...
public void incrementCount() {countManager.incrementCount();}
public int getCount(){return countManager.getCount();}
}
而且CountManager
public class CountManager {
public void increaseCount() {
// read count from database
// increase count
// save the new count in database table.
}
public int getCount() {
// returns the count value from database.
}
}
開發商應該考慮線程多在這裏。如果你讓CountManager也是一個EJB,我想問題不會消失。 開發人員需要注意的一般準則是什麼?
更新: 更改了代碼。假設EJB的方法暴露爲web服務,所以我們無法控制客戶端調用它們的順序。交易屬性是默認的。此代碼在多線程場景下的行爲是否正確?
描述你爲什麼說「這段代碼不是線程安全的」。你正在執行什麼操作,按照什麼順序以及你期望的結果?你擔心EJB併發訪問還是併發數據庫訪問?你使用默認的EJB TransactionAttributes嗎? –
@PiotrNowicki更新了這個問題,刪除了你提到的陳述。我擔心結果不正確 – anergy