本人博客文章网址: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的, 或抽象的

  3. 会话bean中必须有无参的构造器

  4. 可以在会话bean类或者父类中定义业务方法和生命周期回调方法

  5. 会话bean可以是另一个会话bean或者任何其他POJO的子类, 当是另一个会话bean 的子类时, 父类中定义的生命周期回调方法和依赖注入的注解都会被当前bean类继承

  6. 会话bean方法不能以"ejb"开头, 所有业务方法都必须为公开的, 不能是final或者静态方法, 另外如果该会话bean是remote的话, 所有入参和出参都必须实现序列化接口

业务接口

1. 本地接口:@Local 相同的容器(JVM)实例中进行协同操作

  2. 远程接口:@Remote 不同的容器(JVM)实例中进行协同操作 通过RMI进行访问

  3. Web服务端点接口:@WebService 为无状态bean独有,可以把无状态bean暴露为基于SOAP的Web服务

处理多个业务接口:不能用一种以上的访问类型注解标记同一个接口,可以选择用父接口,然后子接口继承来避免代码重复

无状态会话bean

用于建模不维护会话状态的任务

有两种创建模式, 一种是池化, 由容器创建会话bean池, 并创建相应数量的会话bean示例, 并对其进行管理; 另一种是单例模式(需要EJB3.1及以后的版本才支持)

注解:@Stateless 通知容器该类是无状态bean,容器会自动为bean提供:并发控制,线程安全,池化,事务管理等服务

有状态会话bean

用于建模需要维护会话状态的任务,EJB容器会为我们保持会话的状态

必须有使用@Remove注解的方法

注意项:适当选择会话的数据,尽量使用占有资源小的数据;记得使用钝化和删除

替代方式:如果是Web应用,使用HttpSession来维护状态

会话bean最佳实现

1. 选择会话bean类型, 即是有状态bean还是无状态bean

2. 分析会话bean接口类型(@Local,@Remote)

3. 不要把有状态会话bean注入无状态会话bean或者Servlet中

4. 分割横切事务项(使用拦截器AOP来处理)

5. 有状态会话bean中储存的数据类型(慎重选择)

6. 有状态会话bean必须定义@Remove注解的方法

EJB系列 - 会话Bean基础知识的更多相关文章

  1. Spring Ioc源码分析系列--Ioc的基础知识准备

    Spring Ioc源码分析系列--Ioc的基础知识准备 本系列文章代码基于Spring Framework 5.2.x Ioc的概念 在Spring里,Ioc的定义为The IoC Containe ...

  2. 【Linux系列】Linux基础知识整理

    Linux操作系统在服务器领域广泛的使用到,作为一个后台开发工程师很有必要了解Linux相关的知识. 本篇日志是我学习Linux过程中的简单记录和总结.本着"理论够用,实践为主"的 ...

  3. .NET面试题系列[3] - C# 基础知识(1)

    1 类型基础 面试出现频率:基本上肯定出现 重要程度:10/10,身家性命般重要.通常这也是各种招聘工作的第一个要求,即“熟悉C#”的一部分.连这部分都不清楚的人,可以说根本不知道自己每天都在干什么. ...

  4. 玩耍Hibernate系列(一)补充--基础知识

    基本概述: Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得java程序员可以随心所欲的使用对象编程思维来操纵数据库,Hibernate可以应用在任何 ...

  5. 前端系列之CSS基础知识概述

    1.什么是DIV (1).div就是html一个普通标签,进行区域划分.特性:独自占一行.独自不能实现复杂效果.必须结合css样式进行渲染. (2).div通常其是块级元素 (3).div是定义文档中 ...

  6. Objective-C系列总结之基础知识

    //第一个程序示例 #import <Foundation/Foundation.h> int main(int argc,const char * argv[]) { @autorele ...

  7. .NET面试题系列[4] - C# 基础知识(2)

    2 类型转换 面试出现频率:主要考察装箱和拆箱.对于有笔试题的场合也可能会考一些基本的类型转换是否合法. 重要程度:10/10 CLR最重要的特性之一就是类型安全性.在运行时,CLR总是知道一个对象是 ...

  8. 前端系列之JavaScript基础知识概述

    ​微信公众号:compassblog 欢迎关注,欢迎转发,互相学习,共同进步! 有任何问题,请后台留言联系! 1.什么是JavaScript (1).JavaScript是web上一种功能强大的编程语 ...

  9. 前端系列之HTML基础知识概述

    1.什么是HTML HTML:Hyper Text Markup Language :超文本标记语言. 超文本:功能比普通文本更加强大. 标记语言:使用一组标签对内容进行描述的语言,它不是编程语言. ...

随机推荐

  1. css3隐藏导航栏总结

    display:none隐藏display:block显示 1.通过hover显示时隐藏元素必须与触发元素存在着关系(父子,兄弟)才能生效,所以推荐用JS完成比较好. 2.隐藏部分的属性直接写在hov ...

  2. poj1990树状数组

    Every year, Farmer John's N (1 <= N <= 20,000) cows attend "MooFest",a social gather ...

  3. F# 之旅(上)

    写在前面的话 解答一下在上一篇文章<在Visual Studio中入门F#>中有人的提问, 1. 问:是准备写 F# 系列吗?    答:当然不是,本人也是刚刚学习 F#,只是翻译微软官方 ...

  4. Spring Cloud 学习笔记(二)——Netflix

    4 Spring Cloud Netflix Spring Cloud 通过自动配置和绑定到Spring环境和其他Spring编程模型惯例,为Spring Boot应用程序提供Netflix OSS集 ...

  5. JavaScript ,Python,java,C#,Go系列算法之【插入排序篇】

    常见的内部排序算法有:插入排序.希尔排序.选择排序.冒泡排序.归并排序.快速排序.堆排序.基数排序等.用一张图概括: 插入排序 插入排序(英语:Insertion Sort)是一种简单直观的排序算法. ...

  6. c++ STL stack & queue

    Stack 主要的方法有如下: empty() 堆栈为空则返回真                  pop() 移除栈顶元素(不会返回栈顶元素的值)                  push() 在 ...

  7. 关于开发微信小程序后端linux使用xampp配置https

    关于开发微信小程序后端linux使用xampp配置https 背景 由于最近开发微信小程序,前后端交互需要使用https协议,故需要配置https服务 服务器环境 服务器系统 ubuntu 环境 xa ...

  8. JAVA IO中的设计模式

    在java语言 I/O库的设计中,使用了两个结构模式,即装饰模式和适配器模式.       在任何一种计算机语言中,输入/输出都是一个很重要的部分.与一般的计算机语言相比,java将输入/输出的功能和 ...

  9. 用 Vue 全家桶二次开发 V2EX 社区

    一.开发背景 为了全面的熟悉Vue+Vue-router+Vuex+axios技术栈,结合V2EX的开放API开发了这个简洁版的V2EX. 在线预览 (为了实现跨域,直接npm run dev部署的, ...

  10. Java泛型的应用——T extends Comparable<? super T>

    在观察Java源码的时候,发现了这么一个写法T extends Comparable<? super T>.不禁纳闷为什么要这么写呢?有什么好处吗,extends和super在这里的作用着 ...