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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值