EJB3.0 三种bean


会话bean(sessionbean):负责与客户端交互,是编写业务逻辑的地方,在会话bean中通过操作实体bean来完成对数据库的操作。
会话bean分为两种:
无状态会话bean (Stateful SessionBean)平常使用最多的是无状态bean,因为它的bean实例可供多个用户使用,所以它的性能比有状态bean高。正因为一个bean实例被多个用户使用,那么前一个用户设置的值有可能被后一个用户所修改,所以它无法正确保存某个用户设置的值,因此是无状态的。
如下代码:

 

有状态会话bean (Stateless SessionBean)有状态会话bean在项目中我还没有使用过,因为它的一个bean实例只供一个用户使用,所以性能开销比较大,正因为它的实例只被一个用户使用,用户为它设置的值是不会被其他用户修改,所以可以正确保存用户设置的值,因此是有状态的。
当客户机和服务器建立连接之后,状态会话bean将一直在客户机和服务器之间保持着用户的某个状态。


有状态Bean只是在类的注解上使用了:@Stateful
在代码上有状态Bean和无状态Bean区别不大,但是却是用了Bean实例的两种管理技术,即:
1. 无状态bean使用实例池技术管理bean。 容器会创建一些bean的实例,等待客户使用,和数据库连接池原理类似。
2. 有状态bean使用激活(activation)管理bean。 不存在、创建bean、钝化、激活。
EJB引入了激活机制。激活机制实现的原理是这样的,在EJB服务器需要节省资源时,就从内存中收回bean实例,将其所保持的会话状态序列化到硬盘中,并且释放其所占有的内存,这个过程为钝化。若此时客户端对EJB再次发起请求,EJB容器会重新实例化一个Bean实例,并从硬盘中将之前的状态恢复,这叫做激活。

实体bean(entitybean):它实际上属于java持久化规范(简称JPA)里的技术,JPA的出现主要是为了简化现有的持久化开发工作和整合ORM技术,结束现在Hibernate、TopLink等ORM框架各自为营的局面。

消息驱动bean(message-drivenbean):它是专门用于异步处理java消息的组件,具有处理大量并发消息的能力。只有在需要一个JMS客户的时候才会实用消息驱动bean。换句话说,消息驱动bean可以监听来自JMS消息服务的消息。客户绝对不会直接调用消息驱动bean;要想让消息驱动做点什么事情,客户必须向一个消息服务发出一条消息。这说明,消息驱动bean没有相应的EJBObject,因为服务器会从消息服务直接得到客户请求,而不是当客户向bean发出调用时截获客户请求。

你可能感兴趣的:(EJB)