|
第4章 会话EJB
本章讨论的内容包括:什么是会话EJB,两种会话EJB以及它们的区别、特性和应用场合,会话EJB的编程模型。并提供了两种会话EJB的开发实例。
4.1 什么是会话EJB
会话EJB实现了运行于服务器上的业务逻辑。对客户端来说,一个会话对象是一个非持久性的对象。对会话对象的一种理解是把它看成运行在服务器上的客户端程序的扩展。
会话EJB一个最显著的特征是它是依附于客户端的。从会话EJB的产生和销毁都由客户端控制。会话EJB的状态不会被永久保存。也就是说,会话EJB不具备持久性。
会话EJB在实际应用中的一个典型例子是订单的处理。例如对于某个登录的用户,他进行订单的操作由若干步骤完成,在所有步骤完成之前,并不是把每个步骤的操作都记录到永久性的存储器(如数据库)中,而是由会话EJB暂保存这些状态数据,并完成所有步骤之后,再把所有的状态数据提交到相应的处理模块。另一个类似的例子是宠物商店中的购物车(关于宠物商店的详细介绍参见第14章),用户把选购的商品放入购物车中,选完所有商品后才一起结账,一个购物车可以设计成一个会话EJB。
会话EJB的状态指的是会话EJB所保存的某个客户端的状态。有状态会话EJB指的是能够保持某个客户端状态的会话EJB;无状态会话EJB指的是不保存某个客户端状态的会话EJB。因此,从这个意义上说,无状态会话EJB并不是完全的没有状态,它只是没有保存特定客户端的状态而已。无状态会话EJB适用在不保持客户端的状态和状态不随客户端的不同而不同的情况。例如计算一个实数的平方根(不保存状态);有状态会话EJB的例子是把商品类型的数据库映射成无状态EJB(对于不同客户端,商品类型是一致的)。很多资料认为会话EJB是有状态的,而把无状态会话EJB看做是它的一个特殊情况。之所以采用无状态会话EJB。仅仅是为了在特殊的情况下,提高会话EJB的效率。也就是说,无状态会话EJB从响应速度和占用资源方面比有状态会话EJB效率高。
在下面的章节中会进一步讨论两种会话EJB的异同。
|