Java 版 (精华区)
发信人: bali (阿奔), 信区: Java
标 题: Enterprise JavaBeans导论三
发信站: 哈工大紫丁香 (2000年09月22日10:56:42 星期五), 站内信件
Enterprise JavaBeans导论三
会话bean
会话bean是一种通过home interface创建并对客户端连接专有的enterprise bean.会话
bean实例一般不与其它客户端共享。这允许会话bean维护客户端的状态。会话bean的一
个例子是购货车,众多顾客可以同时购货,想他们自己的购货车中加东西,而不是向一
个公共的购货车中加私人的货物。定义一个会话bean
可以通过定义一个实现javax.ejb.SessionBean接口的类来创建一个会话bean.该接口定
义如下:
public interface javax.ejb.SessionBean extends javax.ejb.EnterpriseBean {
public void ejbActivate() throws RemoteException;
public void ejbPassivate() throws RemoteException;
public void ejbRemove() throws RemoteException;
public void setSessionContext(SessionContext context)
throws RemoteException;
}
javax.ejb.EnterpriseBean是一个空接口,是会话bean和实体bean的超类。
会话bean的交换
容器开发商可以实现把会话bean的实例从主存移到二级存储中的交换机制,这可以增加
一段时间内实例化的会话bean的总数。容器维护一个bean的时间期限,当某个bean的不
活动状态时间达到这个阙值,容器就把这个bean拷贝到二级存储中并从主存中删除。
容器可以使用任何机制来实现bean的持久性存储。最常用的方式是通过bean的串行化。
Bean开发者在bean中应避免使用transient fields。EjbActivate()和ejbPassivate()用
来维护这个fields值。
活化和钝化
为了支持厂商提供会话bean的交换,规范定义了钝化--把bean从主存转移到二级存储的
过程,活化--把bean恢复到主存中去的过程。在SessionBean接口中声明的EjbActivate
()和ejbPassivate()方法,允许容器通知已经被活化的bean它将要被钝化。Bean开发者
可以用这些方法释放和恢复处于钝化状态的bean所占有的值、引用和系统资源。一个可
能的例子是数据库连接,作为有限的系统资源,不能被钝化的bean使用。
有了这些方法就使得不必在使用transient.事实上,使用transient可能是不安全的,因
为串行化机制自动地把值设为null或0。而通过ejbActivate()和ejbPassivate()方法显
式地设置这些fields更好一些。依靠Java的串性化机制把transient fields设成null也
是不可移植的,因为当bean部署在不使用Java的串性化机制获得持久性的EJB容器中时该
行为会发生改变。如果容器不提供交换,那么这些方法将永远不会被调用。
当客户端调用bean的商业方法时钝化的bean被激活。当EJBObject收到方法调用的请求时
,它通知容器需要活化的bean.当活化完成时,EJBObject代理对bean的方法调用。
如果bean 参与一个事务,那么它不能被钝化。把bean放在主存中更有效率,因为事务通
常在很短的时间内完成。如果bean没有钝化前必须释放或活化前必须重置的状态,那么
这些方法可置空。在大多数情况下,bean开发者不必在这些方法中做任何事。
会话bean的状态管理
会话bean的部署描述符必须声明该bean是有状态或无状态的。一个无状态bean是在方法
调用间不维护任何状态信息的bean。通常,会话bean的优点是代替客户端维护状态。
然而,让会话bean无状态也有一个好处。无状态bean不能被钝化。因为它不维护状态,
所以没有需要保存的信息。容器可以删除bean的实例。客户端永远不会知道无状态bean
的删除过程。客户端的引用是EJBObject.如果客户端稍后又调用了一个商业方法,则EJ
BObject通知容器在实例化一个新的会话bean.因为没有状态,因此也没有信息需要恢复
。
无状态bean可以在客户端间共享,只是在某一时刻只能有一个客户端执行一个方法。因
为在方法调用间没有需要维护的状态,所以客户端可使用任何无状态bean的实例。这使
得容器可以维护一个较小的可服用bean的缓冲池,节省主存。因为无状态bean在方法调
用间不能维护状态,因此从技术上讲在home interface的create()方法不应有参数。在
创建时向bean传递参数意味着在ejbCreate()返回时需要维护bean的状态。而且,经由E
JBObject调用商业方法的结果使得容器必须能重创建一个无状态的bean.这时在开始创建
bean时的参数就不存在了。厂商的安装工具应该能检查home interface的无状态对话be
an以保证其不包含带参数的create()方法。
--
在时间面前,没有永恒
------一个热爱自由的人
※ 来源:·哈工大紫丁香 bbs.hit.edu.cn·[FROM: 211.99.237.22]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:2.852毫秒