17.4 有状态会话Bean开发
如前所述,有状态会话Bean,可以存储用户相关信息,在服务器端,一个Bean对象只为客户服务,本节编写有状态会话Bean。
编写有状态会话Bean很简单,以上节的ConvertBean.java为例,只需将代码中的"Stateless"改为"Stateful"即可。代码为:
ConvertBean.javapackage impl;
import itf.Convert;
import javax.ejb.Remote;
import javax.ejb.Stateful;
@Stateful (mappedName="ConvertBean")
@Remote
public class ConvertBean implements Convert {
public ConvertBean(){
System.out.println("ConvertBean构造函数");
}
public String getRmb(String usd){
//从数据库查询汇率,此处简化,假如汇率是6.0
doublerate=6.0;
doubledblUsd=Double.parseDouble(usd);
doubledblRmb=dblUsd* rate;
Stringrmb=String.valueOf(dblRmb);
return rmb;
}
}
其中,@ Stateful (mappedName="ConvertBean")
@Remote
表示该EJB是一个具有远程接口的有状态会话Bean。
部署,然后调用TestConvert1.java,在服务器端打印的结果为:
反复运行客户端,服务器端构造函数都有调用,效果如图17-22所示:
图17-22 显示效果
说明是一个EJB对象为相应客户端服务。不过,读者可能会提出一个问题:既然是一个EJB为一个客户服务,是否会出现大量的EJB对象消耗内存的情况呢?实际上,EJB中的"钝化"机制,会让长期不用的EJB对象,过了一段时间从内存中腾出空间,存入缓存。这是EJB的一个特性,读者可以参考相应文献。
另外,客户也可以手工让有状态会话Bean从实例池中删除。方法是:在远程接口和实现类中定义一个方法,并在实现类中为其注释为"@Remove":
Convert.java……
public interface Convert {
……
public void remove();
}
ConvertBean.java
……
public class ConvertBean implements Convert {
……
@Remove
public void remove(){
//释放资源
}
}
此后,客户端通过接口调用remove方法即可。
【责任编辑:云霞 TEL:(010)68476606】
点赞 0