有状态的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-28 05:36:26

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

深入RESTful无状态原则

前言 在上篇RESTful基础知识中整体的介绍了RESTful架构设计思想的框架,在往后的RESTful主题博文中,我们在这个框架的基础上不断的为其填充更加深入的知识材料.  RESTful基础知识,传送门:http://blog.csdn.net/jmilk/article/details/50452595 无状态原则 Statelessness:无状态原则是RESTful架构设计中一个非常重要的原则,无状态是相对于有状态而言的.在理解什么是无状态的交互请求之前,首先我们需要了解什么是有状态,

无状态服务(stateless service)

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

这个知识点不错,,学习一下先。。。无状态服务(stateless service)(转)

这样的应用,显得高级一些哟~~:) +================== http://kyfxbl.iteye.com/blog/1831869 ========================== 一.定义  无状态服务(stateless service)对单次请求的处理,不依赖其他请求,也就是说,处理一次请求所需的全部信息,要么都包含在这个请求里,要么可以从外部获取到(比如说数据库),服务器本身不存储任何信息  有状态服务(stateful service)则相反,它会在自身保存一些数

EJB之无状态会话Bean简单应用-学习与实践

客户通过由EJB容器提供的远程和本地接口进行通信 • 访问控制表是用于保证安全其授权能访问特定功能的用户组或个人表. • 持久性是指对象状态永久地存储在数据存储器中,诸如数据库. • 企业 beans的类型: –实体 (Entity) beans 实体beans支持多个会话和多个客户,可分为: Bean - 管理Bean持久性 Container- 管理容器的持久性 –会话 ( Session) beans 会话beans 执行业务任务时没有存储机制,可分为: 有状态会话(Stateful se

EJB 3.0开发指南之无状态会话Bean

在所有的EJB3.0规范中定义的EJB,都不必实现Home接口. 一个会话Bean必须有一个业务接口,这个接口由会话Bean来实现,或者也可以由会话Bean来产生.这样,你可以只写一个文件,就可以生成业务逻辑实现类.远程接口.本地接口等. - @Remote @Local @Stateless public class CounterBean { -- } 在目前jboss的实现中,必须要有一个独立的业务接口. 这个接口不必实现EJBObject或者EJBLocalObject. 一个无状态会话

《Python面向对象编程指南》——1.9 不带__init__()方法的无状态对象

1.9 不带__init__()方法的无状态对象 以下是一个不需要__init__()方法的类定义.对于策略模式的对象来说这是常见的设计.一个策略对象以插件的形式复合在主对象上来完成一种算法或逻辑.它或许依赖主对象中的数据,策略对象自身并不携带任何数据.通常策略类会和享元设计模式一起使用:在策略对象中避免内部存储.所有需要的值都从策略对象的方法参数传入.策略对象自身是无状态的,可以把它看作是一系列函数的集合. 这里定义了一个类给Player实例提供游戏模式的选择,以下这个策略包括了拿牌和下调投注

HTTP协议是无状态协议,怎么理解

HTTP协议是无状态协议,怎么理解?   Http是一个无状态协议,同一个会话的连续两个请求互相不了解,他们由最新实例化的环境进行解析,除了应用本身可能已经存储在全局对象中的所有信息外,该环境不保存与会话有关的任何信息.  自己的理解,在asp.net里:每次提交服务器的页面没有任何关系,每次记录在页面的信息下次提交是记不住的,(除了应用本身可能已经存储在全局对象中的所有信息外)在.net里实际就是ViewState,ViewState是asp.net中保存页面信息的基本单位,应用时就是保存在控

如何制作无状态的ASP组件 (转)

如何制作无状态的ASP组件 一般我们在web或其它有关的无状态应用中使用组件时,脚本运行完毕后我们都会丢失组件的所有参照.当然可以简单地将组件的参照保存在会话(session )变量中,但这浪费资源.更聪明的方法是用会话变量或隐式表单标签保存组件的一些信息.当重新制作组件的实例时,试图用保存在会话变量中的信息恢复组件的状态.但两种方法的弊端都在于:从资源的角度来看过于昂贵,甚至恰好难以实现. 很幸运有个好消息.我们都知道可持续性的整个前提是能够将变量恢复到这样的状态,以至于组件知道在上次的例示中

如何制作无状态的ASP组件

2000-08-05· 青苹果电脑工作室·Yesky 一般我们在web或其它有关的无状态应用中使用组件时,脚本运行完毕后我们都会丢失组件的所有参照.当然可以简单地将组件的参照保存在会话(session )变量中,但这浪费资源.更聪明的方法是用会话变量或隐式表单标签保存组件的一些信息.当重新制作组件的实例时,试图用保存在会话变量中的信息恢复组件的状态.但两种方法的弊端都在于:从资源的角度来看过于昂贵,甚至恰好难以实现. 很幸运有个好消息.我们都知道可持续性的整个前提是能够将变量恢复到这样的状态,以