有状态的EJB对象和无状态的EJB对象
一,定义有状态Bean和无状态Bean
有状态Bean:
@Stateful
@Remote
public class StatefulEjbBean implements StatefulEjb{ private int state; @Override
public void compute(int i) {
state=state+i;
} @Override
public int getResult() {
return state;
} }
无状态Bean:
@Stateless
@Remote
public class StatelessEjbBean implements StatelessEjb { private int state; @Override
public void compute(int i) {
state = state + i;
} @Override
public int getResult() {
return state;
}
}
二,client測试及结果
1。測试有状态EJB对象:
public class StatefulEjbClient {
public static void main(String[] args) throws Exception {
InitialContext context=new InitialContext();
//第一次会话
StatefulEjb ejb1=(StatefulEjb)context.lookup("StatefulEjbBean/remote");
System.out.println(ejb1.getResult());
ejb1.compute(1);
System.out.println(ejb1.getResult());
ejb1.compute(1);
System.out.println(ejb1.getResult());
ejb1.compute(1);
System.out.println(ejb1.getResult());
ejb1.compute(1);
System.out.println(ejb1.getResult());
ejb1.compute(1);
System.out.println(ejb1.getResult());
System.out.println("第一次会话结束---------");
//第二次会话
StatefulEjb ejb2=(StatefulEjb)context.lookup("StatefulEjbBean/remote");
System.out.println(ejb2.getResult());
ejb2.compute(1);
System.out.println(ejb2.getResult());
ejb2.compute(1);
System.out.println(ejb2.getResult());
ejb2.compute(1);
System.out.println(ejb2.getResult());
ejb2.compute(1);
System.out.println(ejb2.getResult());
ejb2.compute(1);
System.out.println(ejb2.getResult());
System.out.println("第二次会话结束---------");
}
}
结果:
aaarticlea/png;base64,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" alt="" />
2,測试无状态EJB对象:
public class StatelessEjbClient {
public static void main(String[] args) throws NamingException {
InitialContext context=new InitialContext();
//第一次会话
StatelessEjb ejb1=(StatelessEjb)context.lookup("StatelessEjbBean/remote");
System.out.println(ejb1.getResult());
ejb1.compute(1);
System.out.println(ejb1.getResult());
ejb1.compute(1);
System.out.println(ejb1.getResult());
ejb1.compute(1);
System.out.println(ejb1.getResult());
ejb1.compute(1);
System.out.println(ejb1.getResult());
ejb1.compute(1);
System.out.println(ejb1.getResult());
System.out.println("第一次会话结束---------");
//第二次会话
StatelessEjb ejb2=(StatelessEjb)context.lookup("StatelessEjbBean/remote");
System.out.println(ejb2.getResult());
ejb2.compute(1);
System.out.println(ejb2.getResult());
ejb2.compute(1);
System.out.println(ejb2.getResult());
ejb2.compute(1);
System.out.println(ejb2.getResult());
ejb2.compute(1);
System.out.println(ejb2.getResult());
ejb2.compute(1);
System.out.println(ejb2.getResult());
System.out.println("第二次会话结束---------");
//推断每次查找到的对象是否一样
System.out.println(ejb1==ejb2);//false
}
}
结果:
aaarticlea/png;base64,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" alt="" />
三,结果对照
通过多次运行,发现对于有状态的EJB对象。每次通过查找获得的对象都是新对象。而对于无状态的EJB对象,每次查找获得的对象都有一个单例类的效果。多次运行測试无状态的EJB对象的方法,会发现服务端的貌似始终在对一个对象进行操作。
有状态的EJB对象和无状态的EJB对象的更多相关文章
- Flutter - Stateful(有状态) 和 stateless(无状态) widgets
Stateful(有状态) 和 stateless(无状态) widgets 有些widgets是有状态的, 有些是无状态的 如果用户与widget交互,widget会发生变化,那么它就是有状态的. ...
- http协议是无状态协议,它的无状态指的是什么,如何解决这种情况
http是无状态的协议,也是不安全的协议, 它的无状态是指对于事务处理没有记忆能力,缺少状态意味着后续的操作需要前面的信息. 解决办法:1,通过cookie解决,2,通过session会话保存.
- EJB开发第一个无状态会话bean、开发EJBclient
开发第一个无状态会话bean EJB中的三中bean: 会话Bean(Session Bean) 负责与client交互,是编写业务逻辑的地方.在会话bean中能够通过JDBC直接操作数据库.但大多数 ...
- EJB开发第一个无状态会话bean、开发EJB客户端
开发第一个无状态会话bean EJB中的三中bean: 会话Bean(Session Bean) 负责与客户端交互,是编写业务逻辑的地方,在会话bean中可以通过JDBC直接操作数据库,但大多数情况下 ...
- 基于Volley,Gson封装支持JWT无状态安全验证和数据防篡改的GsonRequest网络请求类
这段时间做新的Android项目的client和和REST API通讯框架架构设计.使用了非常多新技术,终于的方案也相当简洁优雅.client仅仅须要传Java对象,server端返回json字符串, ...
- Flask基础(10)-->http的无状态协议解决办法一(客户端cookie)
http的无状态协议 http是一种无状态协议,浏览器请求服务器时无状态的 什么是无状态? 无状态:指的是一次用户请求时,浏览器.服务器无法知道之前这个用户做过什么,每次请求都是一次新的请求. 无状态 ...
- RestFul的无状态规则详解
无状态原则 Statelessness:无状态原则是RESTful架构设计中一个非常重要的原则,无状态是相对于有状态而言的.在理解什么是无状态的交互请求之前,首先我们需要了解什么是有状态,并对两者进行 ...
- 深入RESTful无状态原则
目录 目录 前言 无状态原则 Web服务的状态 基于状态的Web服务 基于无状态的Web服务 总结两者的区别 前言 在上篇RESTful基础知识中整体的介绍了RESTful架构设计思想的框架,在往后的 ...
- 无状态Web应用集成——《跟我学Shiro》
http://www.tuicool.com/articles/iu2qEf 在一些环境中,可能需要把Web应用做成无状态的,即服务器端无状态,就是说服务器端不会存储像会话这种东西,而是每次请求时带上 ...
随机推荐
- python --- comment
single line comment : multiple line comment :
- python日期时间相关
参考: http://www.coder4.com/archives/2239 http://www.cnblogs.com/lhj588/archive/2012/04/23/2466653.htm ...
- (4)django mtv模式
mtv模式 http://blog.csdn.net/dbanote/article/details/11338953 models 官方介绍 https://docs.djangoproject.c ...
- Jmeter脚本两种录制方式
Jmeter 是一个非常流行的性能测试工具,虽然与LoadRunner相比有很多不足,比如:它结果分析能力没有LoadRunner详细:很它的优点也有很多: l 开源,他是一款开源的免 ...
- google搜索打不开?提供 国内几个给力的服务器
http://203.208.46.145/ 这是北京的机器,快到飞起来. http://74.125.224.232/, 屡试不爽 用编辑器打开C:\WINDOWS\system32\drivers ...
- Scala之Future超时
最近在开发中使用akka http进行请求,返回的是一个future,并且要对future进行超时设置,不知怎么设置,因此学习了下. 一.Future阻塞 首先,scala中的future不支持内置超 ...
- Jenkins+ProGet+Windows Batch搭建全自动的内部包(NuGet)打包和推送及管理平台
这一篇文章是继http://www.cnblogs.com/EasonJim/p/5954155.html的升级版,由于CCNET已经过时,所以我把打包过程的CCNET工具换成Jenkins去实现,批 ...
- apache mina框架
http://blog.csdn.net/ljx8928358/article/details/7759024
- 我希望早几年知道的5个Unix命令
使用*nix系统已经有一段时间了.但还是有一些命令是被我一直忽略的,真希望我能早几年发现这些命令. 1. man ascii 这个命令会打印出八进制.十六进制和十进制的ASCII码表.难以置信我是一个 ...
- Android图片突出
概述 今天有个群友问 Android 图片凸出 效果怎么弄,早以前有过类似的需求,整个项目的提示框都是一个背景,背景上方有凸出半张图片,所以用layer-list写了一个背景来实现. 思路 随便画了一 ...