EJB基础三 有状态EJB
有状态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相关推荐
- ejb生命周期_无状态EJB:池化和生命周期
ejb生命周期 无状态EJB池和生命周期的概述视图(注释). 对新手有用. . . . . EJB池:快速概述 EJB实例存储在称为EJB池的位置-这不过是内存中的缓存 . 无状态EJB通常按需实例化 ...
- J2EE学习笔记三:EJB基础概念和知识 收藏
J2EE学习笔记三:EJB基础概念和知识 收藏 EJB正是J2EE的旗舰技术,因此俺直接跳到这一章来了,前面的几章都是讲Servlet和JSP以及JDBC的,俺都懂一些.那么EJB和通常我们所说的Ja ...
- 无状态EJB:池化和生命周期
无状态EJB池和生命周期的摘要视图(注释). 对新手有用. . . . . EJB池:快速概述 EJB实例存储在称为EJB池的位置–这不过是内存中的缓存 . 无状态EJB通常按需实例化,即,当客户端调 ...
- JAVA-多线程 三 {多线程状态}JAVA从基础开始 -- 3
JAVA-多线程 三 {多线程状态}(JAVA从基础开始 -- 3 线程状态 停止方法_stop (舍弃) 休眠状态_sleep 线程礼让_yield 线程强制执行_ join 线程状态观测_Thre ...
- java ejb3开发_月光软件站 - 编程文档 - Java - 使用EJB3.O简化EJB开发(三)
简化持久化容器管理 CMP实体bean将成为EJB3.0使得开发人员强制使用的一个主要的检查方式.持久化框架象如开源的已经成为不像实体bean本质上的复杂和重量级的开发J2EE持久化框架应用的被大家喜 ...
- ejb能调用另一个ejb吗_EJB 3词汇表
ejb能调用另一个ejb吗 版本1.1.2,最新更新17.07.2006. 这是EJB 3中引入的新术语和概念的基本词汇表.该词汇表使诸如(IoC),按异常配置,POJO,POJI,依赖注入,可嵌入对 ...
- EJB是什么Java使用EJB容器的详细概述
EJB是什么 博客分类: java EJB 最近项目中接触到EJB,但对EJB不是很了解,于是网上找了些资料参考,下面这篇是个人感觉讲的比较清晰的,遂转载一起参考,文章转自https://www.c ...
- ejb能调用另一个ejb吗_异步EJB只是一个Gi头吗?
ejb能调用另一个ejb吗 在之前的文章( 此处和此处 )中,我展示了当服务器负载沉重时,创建非阻塞异步应用程序可以提高性能. EJB 3.1引入了@Asynchronous批注,用于指定方法将在将来 ...
- Django基础三之视图函数
Django基础三之视图函数 一 Django的视图函数view 一个视图函数(类),简称视图,是一个简单的Python 函数(类),它接受Web请求并且返回Web响应. 响应可以是一张网页的HTML ...
最新文章
- 针对当前项目SLED存在短缺XX天
- mysql索引和数据完整性答案_第5章MySQL索引与完整性约束.ppt
- 【华为云技术分享】云图说|第三方云厂商数据如何迁移至华为云OBS?真相在这里......
- 纽约州交通事故数据可视化
- Ubuntu18.04 如何解决编译objective-c出现undefined reference to objc_get_class
- Windows 服务快捷启动命令
- POI的word表格居中
- Java服务器处理图片上传
- 手变小是怎么回事_手指小太阳越来越小是怎么回事
- GTA4 EFLC cheat code
- U3D教程宝典之两步实现超实用的XML存档
- matlab tif dpi,轻松解决杂志要求的300dpi分辨率、TIFF格式图片
- 霹雳猿教程网站正式上线
- 那些好看的渐变色linear-gradient(拿走不谢)
- 机械硬盘启动失败,总是转一下挺停一下
- 【01Studio MaixPy AI K210】1.LED
- 《天龙八部》地形研究
- 【java】新建项目
- 微信小程序---全局/本地存储
- RWS 负责任羊毛标准