Session bean
1 規則
1.1 至少必須具有一個業務接口
1.2 會話bean類必須是具體的,不可以是abstract或final的
1.3 必須具有無參的構造函數
1.4 可以在bean類或是其父類中定義業務方法和生命週期回調方法
1.4.1 會話bean支持的annotation在繼承時有若干限制
1.5 會話bean類可以是另一個會話bean或任何其他pojo的子類
1.6 業務方法不能以ejb開頭
1.6.1 可能會干擾ejb的基礎結構
1.6.2 業務方法必須是public的,並且不可以是final和static的
1.6.3 如果暴露remote接口的方法,必須保證參數和返回類型實現java.io.serializable接口
2 會話狀態conversational state
2.1 stateful bean
2.1.1 建模多步驟處理
2.2 stateliss bean
2.2.1 建模一般的實用性服務
3 lifecycle callback
3.1 annotation
3.1.1 postConstruct
3.1.1.1 stateful,stateliss,MDB
3.1.1.1.1 bean創建後和依賴注入後,初始化資源
3.1.2 preDestory
3.1.2.1 stateful,stateliss,mdb
3.1.2.1.1 銷毀bean之前調用,清理資源
3.1.3 postActivate
3.1.3.1 stateful
3.1.3.1.1 激活之後,回復資源
3.1.4 prePassivate
3.1.4.1 stateful
3.1.4.1.1 鈍化之前,清理資源
3.2 使用註解標記的方法,可以是private,protected,public,package-protected的
4 stateless session bean
4.1 @stateless
4.1.1 name:bean名稱
4.1.2 mappedName:廠商專有名稱,一些容器使用此名稱賦值全局jndi名稱
4.1.3 description:描述
4.2 business interfaces
4.2.1 @Local
4.2.2 @Remote
4.2.2.1 接口方法的參數和返回值都必須是可以serialize的
4.2.3 @WebService
4.2.4 不可以使用一種以上的訪問類型標記一個接口
4.2.5 一個業務接口可以擴展另一個接口
4.2.6 可以在bean類中使用註解,但不實現業務接口
4.2.6.1 @Remote(BidManager.class)
4.3 lifecycle callback
4.3.1 類或攔截器中給定的bean可以有多個postConstruct和preDestory回調
5 stateful session bean
5.1 附加規則
5.1.1 存儲會話狀態的字段必須是原始類型或是Serializable對象
5.1.2 @Remove註解刪除客戶端使用的bean實例
5.1.3 prePassivate postActivate
5.2 passivate鈍化
5.2.1 鈍化的本質:將bean串行化保存到磁盤中
5.2.2 @prePassivate
5.2.2.1 將不可串行化的值複製到可串行化的變量中
5.2.2.2 釋放重型資源
5.2.2.3 清除不必要數據
6 compare between stateless and stateful bean
6.1 會話狀態
6.1.1 無:no
6.1.2 有:yes
6.2 池化
6.2.1 無:yes
6.2.2 有:no
6.3 性能問題
6.3.1 無:不太可能
6.3.2 有:可能
6.4 生命週期事件
6.4.1 無:postConstruct,preDestory
6.4.2 有:postConstruct,preDestory,postActivate,prePassivate
6.5 計時器
6.5.1 無:yse
6.5.2 有:no
6.6 用於事務的sessionSynchronization
6.6.1 無:no
6.6.2 有:yes
6.7 web服務
6.7.1 無;yes
6.7.2 有:no
6.8 擴展的persistenceContext
6.8.1 無:no
6.8.2 有:yes
7 session bean clients
7.1 獲得ejb引用
7.1.1 ejb上下文查找
7.1.2 jndi查找
7.1.3 依賴注入
7.1.3.1 @EJB
7.1.3.1.1 name:在環境命名上下文中用於注入的ejb的jndi名稱
7.1.3.1.2 beanInterface
7.1.3.1.2.1 業務接口
7.1.3.1.3 beanName
7.1.3.1.3.1 區分bean,如果多個ejb組件實現同一個業務接口
7.1.3.2 只能在受管理的環境中使用
7.1.3.2.1 其他ejb
7.1.3.2.2 運行在Acc中代碼
7.1.3.2.3 使用web容器註冊的組件
7.1.3.3 不可以將有狀態bean注入到無狀態bean中
8 stateful bean 性能注意事項
8.1 適當選擇會話數據
8.1.1 避免存儲大對象
8.2 鈍化和刪除bean
8.3 替代方式
8.3.1 持久化和無狀態處理
8.3.2 在客戶端構造維護狀態的某種機制
8.3.2.1 難以保證高可用性,喪失容器提供的優勢
8.3.3 client在web層,在web容器中使用session保存會話狀態
8.3.3.1 session過多同樣可能造成servlet容器性能降低
9 最佳實踐
9.1 謹慎選擇bean類型
9.1.1 有狀態會話bean會有代價
9.1.2 如果client在web層可以考慮httpServlet
9.2 謹慎分析會話bean接口的類型
9.2.1 如果客戶端和bean在同一個jvm中運行,就是用local接口
9.3 如果使用依賴注入,不要把stateful bean注入到stateless bean中
9.4 分隔橫切事項
9.4.1 攔截器
9.5 謹慎分析在會話bean中存儲的數據類型
9.5.1 儘可能在stateful bean 中使用原始類型變量,而不是大型的嵌套符合對象
9.6 stateful bean中不要忘記定義@Remove方法
9.7 調整鈍化和激活配置,找到應用程序的最佳值
session bean
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.