1、从J2EE整体架构上看EJB
EJB是J2EE中用于构建分布式对象模型的一种技术,
采用OO设计,基于CORBA标准,使用RMI低层技术完成分布式运算
EJB是一个行业标准,必须部署到支持EJB的容器之中
2、与JavaBean的区别
EJB运行在服务器上,而JAVABEAN运行在客户端上
WEB端在J2EE中实际上是一个“客户端”程序。
3、EJB的分类及主要使用
分类 |
子类型 |
保存周期 |
作用 |
会话Bean (Session Bean) |
无状态(stateless) |
短暂,容器一关闭就消失 |
1、 被远程客户端所访问,完成业务逻辑 2、 调用实体Bean |
有状态(statefull) | |||
实体Bean (Entity Bean) |
CMP(容器管理持久) |
永久,数据保存在数据库中 |
1、 ORM的一种实现 2、 操作数据库 3、 永远实现本地接口,远程端无法直接操作实体Bean |
BMP(Bean管理持久) | |||
消息驱动Bean(MDB) (Message Driver Bean) |
QUEUE(队列) |
--- |
发送PTP消息 |
TOPIC(主题) |
发送主题消息 |
从EJB发展角度观察;
1、 EJB 1.1之前只有:SessionBean、EntityBean
2、 EJB 2.0开始就包含了新的组件:MDB,如果使用MDB则需要消息队列中间件支持,MDB是基于JMS(Java消息服务)的一种应用。
4、三种EJB的关系
J2EE中提供两种应用
A、远程客户à MDBà Session Beanà Entity Beanà Database
B、 远程客户à Session Beanà MDBà Entity Beanà Database
但在实际应用中往往只使用SessionBean + Entity Bean
5、会话与实体Bean中的主要方法说明
A、会话Bean
·ejbActivate():从实例池中取出已有的对象继续使用
·ejbPassivate():将暂时不用的对象保存在实例池中等待再次被使用
·远程方法必须在远程接口(视图)中定义后才可以被远程客户端看见
B、实体Bean
本地接口方法 |
对应SQL类型 |
Bean中的方法 |
备注 |
create(local home) |
insert |
ejbCreate(属性) |
Insert通过此方法完成 |
ejbPostCreate(属性) |
插入完成之后的收尾工作,一般为空 | ||
setter(local) |
update |
ejbStore() |
一旦调用setter方法之后,则自动调用ejbStore()方法进行数据库更新 |
remove(EJBLocalObject) |
delete |
ejbRemove() |
执行删除 |
findById |
select id |
ejbLoad() |
实体Bean必须提供一个按ID查找的方法,此方法调用时不用单独编写EJB QL(EJB查询语言) |
findByXxx |
select |
-- |
需要单独编写EJB QL进行操作 |
6、BMP与CMP的区别
|
CMP |
BMP |
概念 |
容器管理持久,所有操作都由EJB容器完成 |
Bean管理持久,所有的代码必须开发人员手工编写 |
代码形式 |
抽象类及抽象方法的集合 所有的属性都在部署文件中配置 |
具体的一个操作类,所有方法不能为抽象,在相应的地方将方法体补充完整 |
执行效率 |
效率低 |
效率高 |
可移植性 |
可移植性高 |
可移植性低 |
总则 |
无论是BMP还是CMP最终全部都是ORM的一种应用,其实际的理论价值要比实现价值高 | |
在实际开发中,EJB使用并不常见,而通过Hibernate去替代CMP操作 |
7、EJB的方法调用过程
·初始化JNDI上下文
|- Context ctx = new InitialContext();
·查询远程HOME接口
|- 远程Home接口 home = (远程Home接口)ctx.lookup("JNDI名称") ;
·通过HOME接口产生REMOTE接口的实例化对象
|- 远程接口 remote= home.create() ;
·调用远程方法
|- remote.远程方法()