通用的接口
Interface EJBObject
| getEJBHome()得到bean的Home. | |
| getHandle()保存EjbObject的一个引用 | |
| getPrimaryKey() 得到实体bean的主键 | |
| boolean | isIdentical(EJBObject obj) 比较两个EJBObject是否引用同一个 |
| void | remove() 对会话bean说释放这个bean为客户保留的资源 对实体bean来说 删除一行记录 |
Interface EJBMetaData
| getEJBHome() | |
| getHomeInterfaceClass() | |
| getPrimaryKeyClass() | |
| getRemoteInterfaceClass() | |
| boolean | isSession() |
| boolean | isStatelessSession() |
|
| |
| getEJBMetaData() 从Bean得到反射子类的信息 | |
| getHomeHandle() 对home串行化,可以通过这个方法再次得到和使用这个home,无需通过JNDI | |
| void | remove(Handle handle) 删除会话bean |
| void | remove(Object primaryKey)删除实体Bean |
I 会话bean
Stateful sessionBean 的生命周期
当客户端调用Home上的create()方法
容器会建立Ejb对象和SessionContext
当容器构造Bean实例
容器会调用setSessionContext()和EjbCreate() 把bean和他的上下文和ejb对象连接起来。
容器向客户发送EJB对象的一个桩――就是-stub是rmi中运用的
StateLess SessionBean的生命周期
序列图

在无状态会话bean
客户在无状态会话bean Home调用创建方法
1. 客户在home调用创建方法
2. 容器建立EJB对象。
3. 容器给客户发送EJB对象的一个桩――就是stub
无状态会话bean创建―――与客户无关
1.容器构造SessionContext对象和bean实例,然后在这个bean上调用
setSessionContext()
2. 容器把这个bean(现在已经与他自己的上下文连接)放到这种类型bean的池中。
业务方法调用
1.客户在原先的EJB对象桩上调用一个业务方法。
2.容器从池中拉出一个bean。将他和客户的EJB对象连接
3.容器在bean上调用业务方法,方法返回给EJB对象,然后容器把这个bean发回到池中。
Interface EJBContext
| | |
| getCallerIdentity() | |
| getCallerPrincipal() | |
| getEJBHome() | |
| getEJBLocalHome() | |
| getEnvironment() | |
| boolean | getRollbackOnly() |
| getTimerService() | |
| getUserTransaction() | |
| boolean | isCallerInRole(Identity role) |
| boolean | isCallerInRole(String roleName) |
| void | setRollbackOnly() |
public interface SessionContext
extends EJBContext
| getEJBLocalObject() | |
| getEJBObject() | |
| getMessageContext() |
Interface SessionBean—里面的方法是容器回调的方法
| void | ejbActivate() |
| void | ejbPassivate() |
| void | ejbRemove() |
| void | setSessionContext(SessionContext ctx) |
Context在sessionBean的作用
| Bean方法 | 有状态 | 无状态 |
| ejbCreate ejbRemove | sessionContext可以做 得到home的一个引用 得到EJB对象的一个引用 得到有关客户的安全信息 得到一个事务的引用,并在上面调用方法(BMT) | sessionContext可以做 得到home的一个引用 得到EJB对象的一个引用 |
| ejbPassivate ejbActivate | sessionContext可以做 得到home的一个引用 得到EJB对象的一个引用 得到有关客户的安全信息 得到一个事务的引用,并在上面调用方法(BMT) | 其实 不适用 其实可以用适配器模式 实现无状态的会话bean不用写这些无用的方法 |
| 业务方法 | sessionContext可以做 得到home的一个引用 得到EJB对象的一个引用 得到有关客户的安全信息 要求一个事务回滚(CMT Bean) 确定事务是否回滚(CMT Bean) 得到一个事务的引用,并在上面调用方法(BMT) | sessionContext可以做 得到home的一个引用 得到EJB对象的一个引用 得到有关客户的安全信息 要求一个事务回滚(CMT Bean) 确定事务是否回滚(CMT Bean) 得到一个事务的引用,并在上面调用方法(BMT) |
实体bean
Interface EntityBean
| void | ejbActivate() 个方法 |
| void | ejbLoad() |
| void | ejbPassivate() |
| void | ejbRemove() |
| void | ejbStore() |
| void | setEntityContext(EntityContext ctx) |
| void | unsetEntityContext() |
EntityBean的生命周期
序列图

实体Bean实例的构造过程
1. 容器建立一个新的EntityContext()
2. 容器建立bean类的一个新实例(运行bean的构造函数)
3. 容器在bean上调用setEntityContext();这是bean实例一生中惟一的一次调用这个方法
4. 容器把bean(现在有一个上下文)放入池中。
注意:creat()不会得到调用!create()方法只是用于向数据库中插入一个新实体,而与bean实例的创建无关。
实体bean创建过程