會話 Bean 用於管理實體 Bean 和其它會話 Bean 的交互、訪問資源,它們通常代表客戶機執行任務。會話 Bean 對應於“模型-視圖-控制器”體系結構中的控制器,因為它們都封裝三層體系結構中的商業邏輯。會話Bean也叫會話組件(session bean),又可分為無狀態會話組件和有狀態會話組件兩類。
無狀態 Bean 之所以稱作無狀態是因為它們是過渡的;他們不維護方法調用之間的商業狀態。有狀態會話 Bean 封裝商業邏輯和特定於某個客戶機的狀態。有狀態 bean 之所以稱作“有狀態”是因為它們維護方法調用之間的商業狀態,狀態保留在內存中,並不持久。
一、無狀態(stateless)會話Bean
無狀態(stateless)會話組件不保留客戶程序調用的狀態,這意味著客戶程序對這類組件的兩次方法調用之間是沒有關聯的。由於無狀態會話組件無須維持與客戶程序的會話狀態,針對這類組件采用的實例池機制具有較高的性能與可伸縮性,非常適合以一定數量的實例支持大量並發客戶程序的調用請求。(由於不含任何客戶程序可見的狀態,無狀態會話組件實例池中的每一實例均被認為是等同的。)
無狀態會話Bean一旦實例化就被加進會話池中,各個用戶都可以共用。即使用戶已經消亡,Bean 的生命期也不一定結束,它可能依然存在於會話池中,供其他用戶調用。由於沒有特定的用戶,那麼也就不能保持某一用戶的狀態,所以叫無狀態Bean.但無狀態會話Bean 並非沒有狀態,如果它有自己的屬性(變量),那麼這些變量就會受到所有調用它的用戶的影響,這是在實際應用中必須注意的。
二、有狀態(statlful)會話Bean
有狀態會話組件比較特殊,因為這類組件必須維持與客戶程序的會話狀態,並且這些狀態又不是持久的,從而在有狀態會話組件的實例池中不同的實例之間是有區別的。因而針對有狀態會話組件使用的實例池機制主要目標是實現緩存(caching),而不是像實體組件或無狀態會話組件那樣強調以少量實例為大量的並發客戶請求服務。
有狀態會話Bean ,每個用戶有自己特有的一個實例,在用戶的生存期內, Bean保持了用戶的信息,即“有狀態”;一旦用戶滅亡(調用結束或實例結束),Bean的生命期也告結束。即每個用戶最初都會得到一個初始的Bean.