有状态的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,iVBORw0KGgoAAAANSUhEUgAAAM8AAAD+CAIAAAASxcYAAAAKoUlEQVR4nO3dO5bjvBGGYa4LC6r1VObUiVfg49qFA8fMfbwLOhAvBRC8FNVdv3r6fc4E05REosWvixQIgcN//jf969///ds//sk//n33v2FN2wR8M9KGPKQNeUgb8vzVaRu1DEXH79yEyXdv4XY7xL58rdsbOGoJbWBpT8IuWJC2o9fMvi4g76dt1DI4TVbO07b9RsuTviVt82bWdtRvfjRt0T+g7xBsQzhtJtvbNWp5/fdyo5dP+Jq0Ha/i+FGT6s/GpOj4XnsOt9WulLRdr77z/J+bNv/H81Xt+b60jVrm5rpqPK9iW7Ks89UOk3mRyVDU5iOA2PaK+flbs02Golo/OlVHj9ttqJ/mH7h11Njvnt1Gn7TK74hOm9tVdpb09vG2zL3zzQGz/xv7I+lJw/b7Zf/L7lfqfna/4Unall+2WqNvWr2msrV9aFr/etarkc37VqXNP7rsVVm2sGXgsg1VXEw6v4LfHR3t2Uez0cetcn9XzaP7IHWiVZ+3tZut3/m1YYG0Hb6Znf0Srm2jylHatnrWcJupy8cSqqYd/hfo/f/wVz2ubpdtaN7fo7f78Hest+sKTZu+UKvWHXH4aPOXvV9yp7btHriftsOG7ffL1x9JuzWgfk+vz2/eS9uopXPMvWrDRdpu1LZqXbvjzbNW+bQdHsxfbWsTNpxUlMu0HW6vl7Z+s5+nra28kfO2ZjPNAav7O7+XNrfMteKyDc2HyuB52/oxtGpVP0zBVu2btzw6qjbv8H7JjbTVv3bnr+O1yarW1iczvWY/Tpt7u02Gcnbe1jdXhv7J8r4dbx5Jtw0Ukbq4nLShPtnVcH+bPz9a1+k2+qxVbkf02rzv4tstqc/b2jdw1DKIHHQU+qPk9kezy3C/2Z0znOqXrbfjTsN9K0Ytd2obPtllx0uu824V0vaz3erSSdT5NO+Qth/rfMd+JNKGPJ20/R34HtQ25CFtyEPakIe0IQ9pQ57ztNXDIM4WAtdO0va6QNa97vlhl0vwQ1weSbvBIm14grQhD2lDHtKGPKQNec4/k1a635Qgc7iP3l3kIW3IQ9qQh7QhD2lDHtKGPKQNeeIjjtwXxT/oe4z4CaIjjrZJMj7te7P4fM+uXE3TdDznIXDgedq4Voqop2mjsCHuSdquJnUE+sJpI2p4LDjiqJmvjtwhgt5d5CFtyEPakIe0IQ9pQx7ShjykDXnCI47ObuAGnIqOONow4ghRjAFBngdpa+5nC9zFaErkeSNtpzfaBPbeq22EDRFvzHFE1BBE7y7ykDbkIW3IQ9qQh7QhD2lDHtKGPA/uqrY9wHUrhDwacWQyFBGGgCDo2RgQbuOHJ8JpW66OkjaEBdNmMrjJAkkbQkJp280CwrV5RDwecURtQ1h0xNGKtCGM3l3kIW3IQ9qQh7QhD2lDHtKGPKQNeaIjjurLCXS4IeLBXdXIGB6KXrkibXjuSdq4II9n3pu/jTKHiDdmnWFySgQ9T5sJx1LEREccufM2ooYgeneRh7QhD2lDHtKGPKQNeUgb8pA25CFtyHOatlFLUZVhENVS1O5cqjJZrzy4/7bP2a1mVLV5k8MgIlXvsXu+X2fb/cygu093nLZRS9FxVLXX3h5V7l08MBEzs8mkiJRhKKrqX2kitoTLv0x1nKZxHKfJzDqPnIzj7KwOH+i0tpmW19hd1TIMQxEbp6k/HUh1KWtUNROx0WxsSlxVj6r5RUpRa6rVPJmS2hz9aUmeb6N/ydJCfKbz87bzyRmOjGYqYtPUlMPdBX7zB0xX0HxtM1WdJ/FyrVlWMyd5qW0+i9271vyUhX+os7S9aljRcX1DRNrS0rHtclNR272rYr46bmd5c8Tm55X1pesCs9fLtofmvIqUuf7+8fvrZ7v+TOpHFu2OYzvrIW+ubL0TtP7d2MxsMhXRZX645WPDuoJl680iU1FROfpIgs9xfSQVe+1mk3uH0vngtn6ObD6ZLj/u7m76WtCpenNtE3dWt75wPjjPn2WobR/uMG1+IPh1STt86TT5YtaceXW6SNa6tZ6KuR6Vura5scPuVXxJ54PRu4s8pA15SBvykDbkIW3IQ9qQhzmOkIc5jpCHOY6QhzmOkIc5jpCHOY6QhzmOkIc5jpCH3l3kIW3IQ9qQh7QhD2lDHtKGPKQNeaIjjqZpcj1xdLkhIjriiOtVeC565ergi+7ADcG0jcs8bhxIERdPm5sVhDqHkCe1zU9axQA33PfGSHE+LyAoOuKoGnNEYUMIvbvIQ9qQh7QhD2lDHtKGPKQNeUgb8gRHHO1uLUWXG+4LjzjaPeG7W4g/x3vzgFDZEPE4bRQ2hD1MG4UNDzxKG6M/8MiTtO1uUQXc8mzEEYUNT9C7izykDXlIG/KQNuQhbchD2pCHtCFPfI4j3w1HHy8ioiOO/NfjuTCPmCfflZ8jRtgQ9PQ6KYdRxD26h5/YxJ2HEPdgRi1/3kaBQ8CDtC0FjcEgCAqPOPK3w6WwIYTeXeQhbchD2pCHtCEPaUMe0oY8pA153hlxRHcbYoIjjvxPjAFBUPDKVXX3F+KGmHjaqrt0kDYEhMe3rddJiyq1DSHPZwtkVi1EPU4b440QFh1xtA04oqwhit5d5CFtyEPakIe0IQ9pQx7ShjykDXlO07Z1rrl+3O5C4IaTtI1a9pPWN5fl6eJFwL0j6ZoxN8joVeOIG+67lba1iq3/eU05wyAQhNxI2+7g2at0wLWLtG0TaL2YuE8HnLgh5ixtbdSmqSpnTKiFoOO0+cmM2ruq0QOCJ+jdRR7ShjykDXlIG/KQNuQhbchD2pCHtCHP1fi2oirDIKqlqN35wrKJu3vHwaUGk91qRtVtgnwRqTqP3fP9OtsvvPJF1093ei2h6Diq2mtvjyq9IZULnw0xM5tMikgZhqKqPlwmYku4HFMdp2kcx2kys84j1SbrSHVWhw90WttMy2u2QNUyDEMRu3epalQ1E7HRbGxKXFWPluWv6ZKKWlOtyitlanP0pyV5vo3+JbdbiL/E+Xlb/3YwV0YzFbFpqsphZ8xINaLEFTRf20zXYXSuNduMhfO4u1dt81l0z/Z192cs/ENdjgEZio7rGyLSlpaObZebitruXRXzR8XtLG+O2Py8sr50XWD2etn20JxXkTLX3z9+f/1s159J/Z0hd8exnfWQN1e23glafwymmU2mIroMNVk+NqwrWLbeLDIVFZWjjyT4HNdHUrHXbjZZK9Hph8H54LZ+jmw+mS4/7kbHvRZ0qt56893O/NLzwXn+LENt+3CHafNDKa9L2uFLp8kXs+bMq9NFstat9VTM9ajUtc19E8y9iuHEH4zeXeQhbchD2pCHtCEPaUOeW3OKX/Z0+55b4MhV2gJfh6f3ARdufFf+boJIGy6c9+7urxRU1xHaYT9N2twqtvrYu0SKX+KN2ta7A5b/ubrfX2cZc9b8OvG0dUeo9Z7buZVuWzBJ2+8STVszXeBZ2rZX+Mv5BOwXC6atmRP1TtqqR5gX6VcLH0nXA2lRXU7C2gNkc/+1KpV+MXXul+FaAvKQNuQhbchD2pCHtCEPaUMe0oY8pA15SBvykDbkIW3IQ9qQh7QhD2lDHtKGPKQNeUgb8pA25CFtyEPakIe0IQ9pQx7ShjykDXlIG/KQNuT5P64IKZllkv+XAAAAAElFTkSuQmCC" 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应用做成无状态的,即服务器端无状态,就是说服务器端不会存储像会话这种东西,而是每次请求时带上 ...
随机推荐
- Ubuntu中vim添加lua支持
系统:Ubuntu 15.10/16.04 因为Ubuntu15.10系统自带vim不支持lua,所以得自己编译安装. $ sudo apt install vim-nox vim-nox可以让vim ...
- 8大排序算法的java实现--做个人收藏
排序算法分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因为数据量太大,一次不能容纳全部的排序记录,在排序过程中需要访问外存.这里只讨论内部排序,常见的内部排序算法有:插入排序 ...
- 2018年东北农业大学春季校赛 E 阶乘后的0【数论】
链接:https://www.nowcoder.com/acm/contest/93/E来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言52428 ...
- Codeforces Round #467 (Div. 2) B. Vile Grasshoppers[求去掉2-y中所有2-p的数的倍数后剩下的最大值]
B. Vile Grasshoppers time limit per test 1 second memory limit per test 256 megabytes input standard ...
- 洛谷——P2205 [USACO13JAN]画栅栏Painting the Fence
题目描述 Farmer John has devised a brilliant method to paint the long fence next to his barn (think of t ...
- codevs——1267 老鼠的旅行(棋盘DP)
1267 老鼠的旅行 2012年CCC加拿大高中生信息学奥赛 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 题目描述 Description ...
- 2016北京集训测试赛(十四)Problem A: 股神小L
Solution 考虑怎么卖最赚钱: 肯定是只卖不买啊(笑) 虽然说上面的想法很扯淡, 但它确实能给我们提供一种思路, 我们能不买就不买; 要买的时候就买最便宜的. 我们用一个优先队列来维护股票的价格 ...
- 关于异步请求AJAX的具体解释
1,异步请求的方法步骤: 1,推断当前用户支持的浏览器类型 XMLHttpRequest:推断是否支持非IE浏览器,相应的创建方法:xmlhttp = new XMLHttpRequest(); wi ...
- MySQL---SQL记录
MySQL在已有字段后追加相应的值值 需求:在MySQL中的topic表中,需要将每一个cover字段后添加上: -400.webp update topic set cover = CONCAT(c ...
- [Golang] 从零開始写Socket Server(2): 自己定义通讯协议
在上一章我们做出来一个最基础的demo后,已经能够初步实现Server和Client之间的信息交流了~ 这一章我会介绍一下怎么在Server和Client之间实现一个简单的通讯协议.从而增强整个信息交 ...