EJB可以分为三类:
- 会话Bean(Session Bean)
- 消息驱动Bean(Message Driven Bean)、
- 实体Bean(Entity Bean)
用途
会话Bean主要用于实现业务逻辑,客户端通过SessionBean来对数据库进行操作。但是SessionBean只处理逻辑,真正与数据库的交互是通过EntityBean进行的数据交互。
实体Bean是一种实体模型,主要是实现OR映射,负责将实体数据和数据库进行交互。使用和Hibernate大同小异。
消息驱动Bean在EJB2.0中不存在,是EJB3.0之后才提出的。他是基于JMS消息,只能接受客户端发送的JMS消息并进行处理。比较适合移出处理请求的场合。这样可以避免客户端的等待。
会话Bean
对于会话Bean,有分两种。一种是有状态的会话Bean,另一种是无状态的会话Bean。
1、有状态的会话Bean,很容易理解,即服务端保存与客户端的会话。即服务端管理此状态。每个实例都与客户机相关联并保持会话状态。声明方式 @Stateful
常用的业务逻辑:注册用户,订单登记等。
实现原理图
2、无状态的会话Bean,客户端不保存与客户端的会话。即:服务端不管理该对话状态。声明方式@Stateless
常用的业务逻辑:
所以有状态会话Bean比无状态会话 Bean具有更多的功能,而无状态会话Bean实例可以通过 EJB容器自由地在客户机之间交换,从而少量的会话Bean就可以服务于大量的客户机。
实体Bean
实体Bean是域模型对象,主要是数据。代表一种记录类型。
@Entity //声明为实体Bean
public class Person implements Serializable{
@Id
private int id; //主键
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
消息驱动Bean
消息驱动Bean,也是有两种,一种P2P(Point to Point)方式,另一种是Pub/Sub (Publish/Subscribe)方式。
1、P2P模型中,主要指的是一对一的信息交互。每个消息可以被发送到一个特定的队列中,而另一端则从队列中进行获取。总之,他们的交互依赖于那一个消息队列。
2、Pub/Sub模型中,主要侧重的是广播。他们交互的称之为主题Topic。Pub发布一个Topic之后,所有的Sub都会收到一样的消息。
这两种消息驱动Bean对比:
以上是EJB的分类,之后会对每种Bean进一步总结。