現實中,很多朋友對兩種session bean存在誤解,認為有狀態是實例一直存在,保存每次調用後的狀態,並對下一次調用起作用,而認為無狀態是每次調用實例化一次,不保留用戶信息。仔細分析並用實踐檢驗後,你會發現,事實恰好相反:
有狀態和無狀態會話bean的本質區別是它們的生命期。
首先解釋一個下面要用到的概念--用戶:session bean 的用戶實際上就是直接調用ejb的類的實例,甚至是這個實例的某個方法。同一個類的不同實例對於session bean 來說是不同的用戶。
有狀態會話bean :每個用戶有自己特有的一個實例,在用戶的生存期內,bean保持了用戶的信息,即“有狀態”;一旦用戶滅亡(調用結束或實例結束),bean的生命期也告結束。即每個用戶最初都會得到一個初始的bean。
無狀態會話bean :bean一旦實例化就被加進會話池中,各個用戶都可以共用。即使用戶已經消亡,bean 的生命期也不一定結束,它可能依然存在於會話池中,供其他用戶調用。由於沒有特定的用戶,那麼也就不能保持某一用戶的狀態,所以叫無狀態bean。但無狀態會話bean 並非沒有狀態,如果它有自己的屬性(變量),那麼這些變量就會受到所有調用它的用戶的影響,這是在實際應用中必須注意的。