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
最新推荐文章于 2019-08-03 04:23:05 发布