EJB系列 - 會話Bean基礎知識
本人博客文章網址:https://www.peretang.com/basic-knowledge-of-session-bean/
什麽是會話
有限的時間周期內,客戶端和服務器之間的連接
為什麽使用會話bean
因為EJB大部分服務都是專門提供給會話bean的
1. 並發和線程安全: 容器利用很多技術來自動確保開發者不必擔心並發或線程安全的問題
2. 遠程處理和Web服務的服務提供
3. 事務和安全管理
4. 攔截器
會話bean的規範
1. 至少具有一個業務接口(EJB3.1後可以不需要)
2. 會話bean必須是具體的, 不能把會話bean定義為final的, 或抽象的
4. 可以在會話bean類或者父類中定義業務方法和生命周期回調方法
5. 會話bean可以是另一個會話bean或者任何其他POJO的子類, 當是另一個會話bean 的子類時, 父類中定義的生命周期回調方法和依賴註入的註解都會被當前bean類繼承
6. 會話bean方法不能以"ejb"開頭, 所有業務方法都必須為公開的, 不能是final或者靜態方法, 另外如果該會話bean是remote的話, 所有入參和出參都必須實現序列化接口
業務接口
1. 本地接口:@Local 相同的容器(JVM)實例中進行協同操作
3. Web服務端點接口:@WebService 為無狀態bean獨有,可以把無狀態bean暴露為基於SOAP的Web服務
處理多個業務接口:不能用一種以上的訪問類型註解標記同一個接口,可以選擇用父接口,然後子接口繼承來避免代碼重復
無狀態會話bean
用於建模不維護會話狀態的任務
有兩種創建模式, 一種是池化, 由容器創建會話bean池, 並創建相應數量的會話bean示例, 並對其進行管理; 另一種是單例模式(需要EJB3.1及以後的版本才支持)
註解:@Stateless 通知容器該類是無狀態bean,容器會自動為bean提供:並發控制,線程安全,池化,事務管理等服務
有狀態會話bean
用於建模需要維護會話狀態的任務,EJB容器會為我們保持會話的狀態
[email protected]
註意項:適當選擇會話的數據,盡量使用占有資源小的數據;記得使用鈍化和刪除
替代方式:如果是Web應用,使用HttpSession來維護狀態
會話bean最佳實現
1. 選擇會話bean類型, 即是有狀態bean還是無狀態bean
2. 分析會話bean接口類型(@Local,@Remote)
3. 不要把有狀態會話bean註入無狀態會話bean或者Servlet中
4. 分割橫切事務項(使用攔截器AOP來處理)
5. 有狀態會話bean中儲存的數據類型(慎重選擇)
6. [email protected]
參考
EJB 3 in Action, Second Edition
本文出自 “Pere Tang” 博客,轉載請與作者聯系!
EJB系列 - 會話Bean基礎知識