session bean

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 調整鈍化和激活配置,找到應用程序的最佳值

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章