1.4 EJB 3.1组件的种类
EJB容器可以接受如下三种类型的EJB。
● 会话Bean(Session Beans)
■ 无状态会话Bean(Stateless Session Beans)
■ 有状态会话Bean(Stateful Session Beans)
■ 单例会话Bean(Singleton Session Beans)
● 实体Bean(Entity Beans)
■Bean管理持久化(Bean-managed persistence,BMP)
■ 容器管理持久化(Container-managed persistence,CMP)
● 消息驱动Bean(Message Driven Beans,MDBs)
会话Bean主要负责业务逻辑的处理,根据处理时的状态保持与否,会话Bean又可分为有状态会话Bean、无状态会话Bean和单例会话Bean。而对象的“状态”是指对象的属性值,也就是对象所携带的数据。有状态会话Bean是包含状态的分布式对象,在整个会话过程中都携带客户端信息。比如我们在进行网上支付操作时,就需要一个有状态会话Bean,因为支付过程可能要进行多步,服务器端必须随时了解用户已经进行到了哪一步。无状态会话Bean是一类不包含状态信息的分布式对象,允许来自多个客户端的并发访问。由于不必控制与用户间的对话信息而减少开销,无状态会话Bean不像有状态会话Bean那样具有资源集约性。比如,一个发送邮件的EJB就可被设计为一个无状态会话Bean,因为在整个会话期间,用户只要向服务器提交一个发送邮件指定地址的操作即可。单例会话Bean是EJB 3.1引入的一种新的Bean。
实体Bean是含有持久化状态的分布式对象,主要负责数据库的访问。实体Bean的一个实例所表示的数据通常代表了关系数据库中特定表的特定一行数据。在EJB 3.1中,实体Bean部分的功能可以通过JPA来实现。根据对数据库持久化的程度不同,实体Bean又可分为Bean持久化操作(主要针对数据库的访问,数据的创建、更新、删除等)和容器管理持久化(主要是容器根据deploy的配置信息ejb-jar.xml完成)两种类型。
消息驱动Bean是支持异步行为的分布式对象,主要用来处理异步消息。客户端调用会话Bean和实体Bean方法时,信息驱动Bean会一直处于等待状态,直到被调用的方法处理完毕。