會話 Bean 用于管理實(shí)體 Bean 和其它會話 Bean 的交互、訪問資源,它們通常代表客戶機(jī)執(zhí)行任務(wù)。會話 Bean 對應(yīng)于“模型-視圖-控制器”體系結(jié)構(gòu)中的控制器,因?yàn)樗鼈兌挤庋b三層體系結(jié)構(gòu)中的商業(yè)邏輯。會話Bean也叫會話組件(session bean),又可分為無狀態(tài)會話組件和有狀態(tài)會話組件兩類。
無狀態(tài) Bean 之所以稱作無狀態(tài)是因?yàn)樗鼈兪沁^渡的;他們不維護(hù)方法調(diào)用之間的商業(yè)狀態(tài)。有狀態(tài)會話 Bean 封裝商業(yè)邏輯和特定于某個客戶機(jī)的狀態(tài)。有狀態(tài) bean 之所以稱作“有狀態(tài)”是因?yàn)樗鼈兙S護(hù)方法調(diào)用之間的商業(yè)狀態(tài),狀態(tài)保留在內(nèi)存中,并不持久。
一、無狀態(tài)(stateless)會話Bean
無狀態(tài)(stateless)會話組件不保留客戶程序調(diào)用的狀態(tài),這意味著客戶程序?qū)@類組件的兩次方法調(diào)用之間是沒有關(guān)聯(lián)的。由于無狀態(tài)會話組件無須維持與客戶程序的會話狀態(tài),針對這類組件采用的實(shí)例池機(jī)制具有較高的性能與可伸縮性,非常適合以一定數(shù)量的實(shí)例支持大量并發(fā)客戶程序的調(diào)用請求。(由于不含任何客戶程序可見的狀態(tài),無狀態(tài)會話組件實(shí)例池中的每一實(shí)例均被認(rèn)為是等同的。)
無狀態(tài)會話Bean一旦實(shí)例化就被加進(jìn)會話池中,各個用戶都可以共用。即使用戶已經(jīng)消亡,Bean 的生命期也不一定結(jié)束,它可能依然存在于會話池中,供其他用戶調(diào)用。由于沒有特定的用戶,那么也就不能保持某一用戶的狀態(tài),所以叫無狀態(tài)Bean。但無狀態(tài)會話Bean 并非沒有狀態(tài),如果它有自己的屬性(變量),那么這些變量就會受到所有調(diào)用它的用戶的影響,這是在實(shí)際應(yīng)用中必須注意的。
二、有狀態(tài)(statlful)會話Bean
有狀態(tài)會話組件比較特殊,因?yàn)檫@類組件必須維持與客戶程序的會話狀態(tài),并且這些狀態(tài)又不是持久的,從而在有狀態(tài)會話組件的實(shí)例池中不同的實(shí)例之間是有區(qū)別的。因而針對有狀態(tài)會話組件使用的實(shí)例池機(jī)制主要目標(biāo)是實(shí)現(xiàn)緩存(caching),而不是像實(shí)體組件或無狀態(tài)會話組件那樣強(qiáng)調(diào)以少量實(shí)例為大量的并發(fā)客戶請求服務(wù)。
有狀態(tài)會話Bean ,每個用戶有自己特有的一個實(shí)例,在用戶的生存期內(nèi), Bean保持了用戶的信息,即“有狀態(tài)”;一旦用戶滅亡(調(diào)用結(jié)束或?qū)嵗Y(jié)束),Bean的生命期也告結(jié)束。即每個用戶最初都會得到一個初始的Bean。
本文先介紹于此,下篇將結(jié)合示例來介紹有狀態(tài)/無狀態(tài)會話Bean的相關(guān)知識點(diǎn).盡請關(guān)注!