會話bean(sessionbean):負責與用戶端互動,是編寫商務邏輯的地方,在會話bean中通過操作實體bean來完成對資料庫的操作。
會話bean分為兩種:
無狀態會話bean (Stateful SessionBean):平常使用最多的是無狀態bean,因為它的bean執行個體可供多個使用者使用,所以它的效能比有狀態bean高。正因為一個bean執行個體被多個使用者使用,那麼前一個使用者佈建的值有可能被後一個使用者所修改,所以它無法正確儲存某個使用者佈建的值,因此是無狀態的。
如下代碼:
有狀態會話bean (Stateless SessionBean):有狀態會話bean在項目中我還沒有使用過,因為它的一個bean執行個體只供一個使用者使用,所以效能開銷比較大,正因為它的執行個體只被一個使用者使用,使用者為它設定的值是不會被其他使用者修改,所以可以正確儲存使用者佈建的值,因此是有狀態的。
當客戶機和伺服器建立串連之後,狀態會話bean將一直在客戶機和伺服器之間保持著使用者的某個狀態。
有狀態Bean只是在類的註解上使用了:@Stateful
在代碼上有狀態Bean和無狀態Bean區別不大,但是卻是用了Bean執行個體的兩種管理技術,即:
1. 無狀態bean使用執行個體池技術管理bean。 容器會建立一些bean的執行個體,等待客戶使用,和資料庫連接池原理類似。
2. 有狀態bean使用啟用(activation)管理bean。 不存在、建立bean、鈍化、啟用。
EJB引入了啟用機制。啟用機制實現的原理是這樣的,在EJB伺服器需要節省資源時,就從記憶體中收回bean執行個體,將其所保持的工作階段狀態序列化到硬碟中,並且釋放其所佔有的記憶體,這個過程為鈍化。若此時用戶端對EJB再次發起請求,EJB容器會重新執行個體化一個Bean執行個體,並從硬碟中將之前的狀態恢複,這叫做啟用。
實體bean(entitybean):它實際上屬於java持久化規範(簡稱JPA)裡的技術,JPA的出現主要是為了簡化現有的持久化開發工作和整合ORM技術,結束現在Hibernate、TopLink等ORM架構各自為營的局面。
訊息驅動bean(message-drivenbean):它是專門用於非同步處理java訊息的組件,具有處理大量並發訊息的能力。只有在需要一個JMS客戶的時候才會實用訊息驅動bean。換句話說,訊息驅動bean可以監聽來自JMSMessage Service的訊息。客戶絕對不會直接調用訊息驅動bean;要想讓訊息驅動做點什麼事情,客戶必須向一個Message Service發出一條訊息。這說明,訊息驅動bean沒有相應的EJBObject,因為伺服器會從Message Service直接得到客戶請求,而不是當客戶向bean發出調用時截獲客戶請求。