有状态的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;
	}
}

二,客户端测试及结果

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("第二次会话结束---------");

	}

}

结果:

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

	}

}

结果:

三,结果对比

通过多次执行,发现对于有状态的EJB对象,每次通过查找获得的对象都是新对象;而对于无状态的EJB对象,每次查找获得的对象都有一个单例类的效果,多次执行测试无状态的EJB对象的方法,会发现服务端的貌似始终在对一个对象进行操作。

时间: 2024-10-13 12:40:01

有状态的EJB对象和无状态的EJB对象的相关文章

EJB 有状态的对象和无状态的对象

有状态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 S

Flutter - Stateful(有状态) 和 stateless(无状态) widgets

Stateful(有状态) 和 stateless(无状态) widgets 有些widgets是有状态的, 有些是无状态的 如果用户与widget交互,widget会发生变化,那么它就是有状态的. widget的状态(state)是一些可以更改的值, 如一个slider滑动条的当前值或checkbox是否被选中. widget的状态保存在一个State对象中, 它和widget的布局显示分离. 当widget状态改变时, State 对象调用setState(), 告诉框架去重绘widget.

EJB开发第一个无状态会话bean、开发EJB客户端

开发第一个无状态会话bean EJB中的三中bean: 会话Bean(Session Bean) 负责与客户端交互,是编写业务逻辑的地方,在会话bean中可以通过JDBC直接操作数据库,但大多数情况下都是通过实体bean来完成对数据库的操作. 实体Bean(Entity Bean) 它实际上属于java持久化规范(JPA)里的技术,JPA的出现主要是为了简化现有的持久化开发工作和整合ORM技术,结束现在Hibernate.TopLink等ORM框架各自为营的局面. 消息驱动Bean(Messag

Ejb-有状态&无状态SessionBean

1.    Ejb的分类 首先,企业级Bean分为三类: SessionBean用于实现业务逻辑,它可以是有状态的,也可以是无状态的.每当客户端请求时,容器就会选择一个SessionBean来为客户端服务.SessionBean可以直接访问数据库,但更多时候,它会通过EntityBean实现数据访问. Entity Bean是域模型对象(用来表示真实世界的实体),用于实现O/R映射,负责将数据库中的表记录映射为内存中的Entity对象,事实上,创建一个Entity Bean对象相当于新建一条记录

JSP中对页面跳转的不同方法引出HTTP无状态的应对方法

首先我们来看今天所学应用到的一个例子,当我们做了一个登陆页面,提交表单后往往需要跳转到另外一个页面.这里可以用两个方法,方法如下: 1.response用法: response.sendRedirect("URL");  (是对服务器请求的响应) 2.request的用法: request.getRequestDispatcher("URL").forward(request, response);   (是装载着客户端请求的信息集合) 但是两种用法是有所不同的.r

基于Volley,Gson封装支持JWT无状态安全验证和数据防篡改的GsonRequest网络请求类

这段时间做新的Android项目的客户端和和REST API通讯框架架构设计,使用了很多新技术,最终的方案也相当简洁优雅,客户端只需要传Java对象,服务器端返回json字符串,自动解析成Java对象, 无状态安全验证基于JWT实现,JWT规范的细节可以参考我前面的文章.JWT的token和数据防篡改签名统一放在HTTP Header中,这样就实现了对请求内容和返回结果的无侵入性,服务器端也可以在全局过滤器中统一处理安全验证. Android客户端使用了Volley网络请求框架和Gson解析库,

无状态服务(stateless service)

一.定义 无状态服务(stateless service)对单次请求的处理,不依赖其他请求,也就是说,处理一次请求所需的全部信息,要么都包含在这个请求里,要么可以从外部获取到(比如说数据库),服务器本身不存储任何信息 有状态服务(stateful service)则相反,它会在自身保存一些数据,先后的请求是有关联的 二.优劣 有状态服务常常用于实现事务(并不是唯一办法,下文有另外的方案).举一个常见的例子,在商城里购买一件商品.需要经过放入购物车.确认订单.付款等多个步骤.由于HTTP协议本身是

http无状态设计与Cookie和Session

无状态指的是任意一个Web请求必须完全与其他请求隔离,当请求端提出请求时,请求本身包含了相应端为相应这一请求所需的全部信息. 1. 被调用者不保存参数,因为无需考虑参数逻辑 由使用者来保存状态,进行状态逻辑设计 http是无状态设计的,一些SDK的设计也可以是无状态的. 2. 而一些需求是需要有交互的,需要状态的 如: a. 表单(Form): b. 客户端的脚本处理.DOM处理等功能: c. 服务器的CGI(Common Gateway Interface)以处理包含表单提交在内的动态请求.

http的无状态无连接到底是什么含义

无连接:服务器处理完客户的请求,并收到客户的应答后,即断开连接. 早期这么做的原因是 HTTP协议产生于互联网,因此服务器需要处理同时面向全世界数十万.上百万客户端的网页访问,但每个客户端(即浏览器)与服务器之间交换数据的间歇性较大(即传输具有突发性.瞬时性),并且网页浏览的联想性.发散性导致两次传送的数据关联性很低,如果按照上面的方式则需要在服务器端开的进程和句柄数目都是不可接受的,象paranoid945所说的,大部分通道实际上会很空闲.无端占用资源.因此HTTP的设计者有意利用这种特点将协