1, EJB(Enterprise Java Bean)是J2EE三大组件技术之一,它是建立基于Java的服务器端组件的标准。它与JavaBean的区别是:JavaBean是一台机器上同一个地址空间中运行的组件,是进程内的组件。而EJB是在多台机器上跨几个地址空间运行的组件,因此是进程间组件。
2, EJB实例封装在一个称作框架的特殊对象中,该对象拥有到另一个称作“存根”的特殊对象的网络对象。存根实现商业接口,但不包含商业逻辑,它拥有到框架的网络套接字连接。存根只是哑网络对象,它将请求通过网络发送给框架,然后框架调用真正到EJB实例上的方法。EJB实例完成所有工作,存根和框架只是通过网络来回传递方法和自变量。
3, EJB分类:
(1) 会话Bean:检索或存储数据以满足用户请求的操作
(2) 实体Bean:满足用户请求的数据库
(3) 消息驱动Bean:实现了某些业务逻辑的异步消息接收者
4, EJB与容器交互的三种机制:
(1) 回调方法:每个EJB都会实现Enterprise Bean接口的子类型,该接口定义的一些方法。回调方法可以让EJB在事件之前或之后立即执行内部调整。
(2) EJBContext对象:每个EJB都会得到一个EJBContext对象,它是对容器的直接引用。
(3) Java命名和目录接口(JNDI)
5, 使用XML部署描述信息来处理容器与EJB组件间的交互
XML在jar中必须以特定名称META-INF/ejb-jar,xml保存
6, 有状态会话Bean:在客户访问之间保存数据
无状态会话Bean:不会在客户访问之间保存数据
无状态会话Bean每次调用只对客户提供业务逻辑,但服务器端不保存客户端的任何数据状态。
7, 设计一个无状态的会话Bean的四个步骤:
(1) 开发Bean实现类
(2) 开发主接口
(3) 开发组件接口
(4) 编写部署文件
8, 接口类型:
主接口:创建、查找和销毁EJB组件
商业接口:暴露EJB组件的商业功能、供远程客户端调用
9, 测试EJB的程序的说明:
(1) InitialContext对象用来获取当前Servlet小应用程序的语境
(2) 方法lookup()从组件池中查找一个JDNI对象
(3) 取得一个远程主接口的引用
其中,lookup()方法返回的是一个Object类型的远程主接口对象的残根。需要使用javax.rmi.PortableRemoteObject的narrow方法获取一个具体的对象引用。调用create()方法获取一个Converter(自己定义的)组件接口的实例引用,然后就可以像在本地一样去引用这个实例了,使用它的商业方法。
10, EJB调用:
将EJB组件的接口文件打包成一个jar包,添加到需要调用EJB组件的应用的Java编译路径中即可。
11, 有状态会话Bean:
在客户引用期间维护Bean中的所有实例数据的状态值,这些数据在引用期间可以被其他方法所用,其他客户不会共享一个会话Bean的实例。
12, 创建EJB的大致步骤:
编写Bean实现类(手动)---->添加到EJB模块-- >生成接口文件(远程商业接口文件、远程主接口文件、本地商业接口文件、本地主接口文件)---->EJB配置描述文件-- >部署EJB(将EJB部署到JBOSS服务器上)--- >测试EJB(手动)
13, 实体Bean:用来代表底层的对象,最常用的是用实体Bean映射关系到数据库中的记录。
14, 实体Bean的持久性:由于这种Bean对应相关数据库中的记录,所以数据库记录的任何改变也应该被同步到组件池中相关的Bean中
(1) CMP容器管理持久性
(2) BMP Bean管理持久性
15, BMP的Bean具有灵活的业务处理能力和更灵活的持久性控制能力,常用来映射一些复杂的数据视图或很难用CMP实现的复杂逻辑处理。
16, 消息驱动Bean:用来使用异步JMS(Java Message Service)消息,当JMS消息到来时,容器调用消息驱动Bean进行处理。消息驱动Bean可以并发地使用接收到的多个消息。