有状态EJB其实是类似于CDI中的依赖作用域。就是你需要一个有状态EJB的时候,就会新建一个有状态EJB。因为根据需求创建的,所以每个请求都有一个,这样才可以保存状态,故成为有状态EJB。

无状态EJB在wildfly中默认最大20个,假如有100个请求,那么这20个无状态EJB只能被共享。共享了又怎么能保存客户端的状态呢?购物车就是个明显的有状态EJB,将购物车它放到session里,这样保证一个session一个购物车,就是最明显的有状态EJB的使用例子。有状态EJB和无状态开发的区别就在于注解的不同。有状态使用的是@Stateful注解。

但是在servlet中,由于servlet是单例的,所以两者并没有不同。一旦注入就一直是这个对象。就相当于是无状态了,所有的请求都使用这同一个EJB。

与CDI不同,CDI的bean如果是请求作用域的,那么在来了新的请求之后,CDI会把servlet字段重新赋值。尽管servlet是单例的,但是servlet里注入的对象不是单例的,这点可以在我的CDI博文中看到。

所以使用servlet+EJB的方式开发直接用@EJB注入EJB是不能发挥有状态EJB的功能的。同样,无状态EJB的对象池也不能充分应用。

我们可以做个实验。

@WebServlet("/hello.html")
public class HelloServlet extends HttpServlet{private static final long serialVersionUID = 1L;@EJBprivate HelloBean helloBean;@EJBprivate StatelessBean statelessBean;@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {resp.getWriter().append("The stateful ejb is ").append(helloBean.id+"").append(".");resp.getWriter().append("The stateless ejb is ").append(statelessBean.id+"").append(".");}
}

下面是两个简单的有状态EJB和无状态EJB。

@Stateful
public class HelloBean {public long id;public HelloBean() {super();id = System.currentTimeMillis();}}
@Stateless
public class StatelessBean {public long id;public StatelessBean() {super();id = System.currentTimeMillis();}
}

在浏览器上运行会发现,无论怎么刷新浏览器,无论换什么浏览器,结果都是一样的,这证明了我上面的言论。

EJB基础三 有状态EJB相关推荐

  1. ejb生命周期_无状态EJB:池化和生命周期

    ejb生命周期 无状态EJB池和生命周期的概述视图(注释). 对新手有用. . . . . EJB池:快速概述 EJB实例存储在称为EJB池的位置-这不过是内存中的缓存 . 无状态EJB通常按需实例化 ...

  2. J2EE学习笔记三:EJB基础概念和知识 收藏

    J2EE学习笔记三:EJB基础概念和知识 收藏 EJB正是J2EE的旗舰技术,因此俺直接跳到这一章来了,前面的几章都是讲Servlet和JSP以及JDBC的,俺都懂一些.那么EJB和通常我们所说的Ja ...

  3. 无状态EJB:池化和生命周期

    无状态EJB池和生命周期的摘要视图(注释). 对新手有用. . . . . EJB池:快速概述 EJB实例存储在称为EJB池的位置–这不过是内存中的缓存 . 无状态EJB通常按需实例化,即,当客户端调 ...

  4. JAVA-多线程 三 {多线程状态}JAVA从基础开始 -- 3

    JAVA-多线程 三 {多线程状态}(JAVA从基础开始 -- 3 线程状态 停止方法_stop (舍弃) 休眠状态_sleep 线程礼让_yield 线程强制执行_ join 线程状态观测_Thre ...

  5. java ejb3开发_月光软件站 - 编程文档 - Java - 使用EJB3.O简化EJB开发(三)

    简化持久化容器管理 CMP实体bean将成为EJB3.0使得开发人员强制使用的一个主要的检查方式.持久化框架象如开源的已经成为不像实体bean本质上的复杂和重量级的开发J2EE持久化框架应用的被大家喜 ...

  6. ejb能调用另一个ejb吗_EJB 3词汇表

    ejb能调用另一个ejb吗 版本1.1.2,最新更新17.07.2006. 这是EJB 3中引入的新术语和概念的基本词汇表.该词汇表使诸如(IoC),按异常配置,POJO,POJI,依赖注入,可嵌入对 ...

  7. EJB是什么Java使用EJB容器的详细概述

    EJB是什么 博客分类: java EJB  最近项目中接触到EJB,但对EJB不是很了解,于是网上找了些资料参考,下面这篇是个人感觉讲的比较清晰的,遂转载一起参考,文章转自https://www.c ...

  8. ejb能调用另一个ejb吗_异步EJB只是一个Gi头吗?

    ejb能调用另一个ejb吗 在之前的文章( 此处和此处 )中,我展示了当服务器负载沉重时,创建非阻塞异步应用程序可以提高性能. EJB 3.1引入了@Asynchronous批注,用于指定方法将在将来 ...

  9. Django基础三之视图函数

    Django基础三之视图函数 一 Django的视图函数view 一个视图函数(类),简称视图,是一个简单的Python 函数(类),它接受Web请求并且返回Web响应. 响应可以是一张网页的HTML ...

最新文章

  1. 针对当前项目SLED存在短缺XX天
  2. mysql索引和数据完整性答案_第5章MySQL索引与完整性约束.ppt
  3. 【华为云技术分享】云图说|第三方云厂商数据如何迁移至华为云OBS?真相在这里......
  4. 纽约州交通事故数据可视化
  5. Ubuntu18.04 如何解决编译objective-c出现undefined reference to objc_get_class
  6. Windows 服务快捷启动命令
  7. POI的word表格居中
  8. Java服务器处理图片上传
  9. 手变小是怎么回事_手指小太阳越来越小是怎么回事
  10. GTA4 EFLC cheat code
  11. U3D教程宝典之两步实现超实用的XML存档
  12. matlab tif dpi,轻松解决杂志要求的300dpi分辨率、TIFF格式图片
  13. 霹雳猿教程网站正式上线
  14. 那些好看的渐变色linear-gradient(拿走不谢)
  15. 机械硬盘启动失败,总是转一下挺停一下
  16. 【01Studio MaixPy AI K210】1.LED
  17. 《天龙八部》地形研究
  18. 【java】新建项目
  19. 微信小程序---全局/本地存储
  20. RWS 负责任羊毛标准

热门文章

  1. 基于深度神经网络的中药材识别
  2. 为什么PHICH配置信息和下行带宽dl-bandwith必须在PBCH MIB上广播
  3. ESP32自动更新气象站
  4. Mocha Pro 平面跟踪插件
  5. 后端开发框架的具体内容是什么?
  6. jquery end()用法
  7. 斐波那契问题——上台阶问题
  8. ARCGIS与QGIS对比,WEBGIS所用到的软件
  9. 攻读学位研究计划计算机专业,拟攻读博士学位的科学研究计划书模板
  10. 永恒之蓝漏洞ms17-010