Posted on 2009-06-03 23:47
Gavin.lee 閱讀(237)
評論(0) 編輯 收藏 所屬分類:
web 積累(前端 + 后臺)
現(xiàn)實中,很多朋友對兩種session bean存在誤解,認(rèn)為有狀態(tài)是實例一直存在,保存每次調(diào)用后的狀態(tài),并對下一次調(diào)用起作用,而認(rèn)為無狀態(tài)是每次調(diào)用實例化一次,不保留用戶信息。仔細(xì)分析并用實踐檢驗后,你會發(fā)現(xiàn),事實恰好相反:
有狀態(tài)和無狀態(tài)會話bean的本質(zhì)區(qū)別是它們的生命期。
首先解釋一個下面要用到的概念--用戶:session bean 的用戶實際上就是直接調(diào)用ejb的類的實例,甚至是這個實例的某個方法。同一個類的不同實例對于session bean 來說是不同的用戶。
有狀態(tài)會話bean :每個用戶有自己特有的一個實例,在用戶的生存期內(nèi),bean保持了用戶的信息,即“有狀態(tài)”;一旦用戶滅亡(調(diào)用結(jié)束或?qū)嵗Y(jié)束),bean的生命期也告結(jié)束。即每個用戶最初都會得到一個初始的bean。
無狀態(tài)會話bean :bean一旦實例化就被加進(jìn)會話池中,各個用戶都可以共用。即使用戶已經(jīng)消亡,bean 的生命期也不一定結(jié)束,它可能依然存在于會話池中,供其他用戶調(diào)用。由于沒有特定的用戶,那么也就不能保持某一用戶的狀態(tài),所以叫無狀態(tài)bean。但無狀態(tài)會話bean 并非沒有狀態(tài),如果它有自己的屬性(變量),那么這些變量就會受到所有調(diào)用它的用戶的影響,這是在實際應(yīng)用中必須注意的。