天天看点

javax.ejb.SessionBean

import javax.ejb.SessionBean;

import javax.ejb.SessionContext;

import javax.ejb.CreateException;

//有状态会话bean

//多个客户端调用服务器的ejb时,实际上,服务器端只生成一个ejb对 象为其服务,

//顺序是:构造函数-》setSessionContext-》ejbCreate(),目的是节省内存

//客户端可以命令服务端ejb消亡, 

 remote.remove();

//在有状态Bean下,可以消亡其ejb

//客户端在调用create()方法时就生成ejb对象,没有延迟加载

//特点:你可以用成员变量来定义一些状态信息,你可以用额外的ejbCreate()来初始化这些状态信息

//状态会话Bean其实也可以定义成员变量,但是这些成员变量必须是所有客户共享的如数据库连接,有状态会话Bean可以定义自己的变量

//缺点:消耗资源

//解决办法:服务器:1钝化机制,长期不用的EJB对象,被暂时保存在缓存中,腾出内存,自动调用ejbPassivate(),如果长期不用,服务器自动调用remove()

//2:客户端在使用时要将对应的ejb对象消亡,一般情况下是将远程接口保存在session中,在退出系统时,调用其remove()方法

//尽量不使用有状态的会话Bean,因为可以用Web中有session一来保存状态

public class RnbEjbBean implements SessionBean {

    SessionContext sessionContext;

    public RnbEjbBean() { //ejb创建时,自动调用

        System.out.println("RnbEjbBean");

    }

    public void ejbCreate() throws CreateException { //ejb创建时,自动调用

        System.out.println("ejbCreate");

    public void setSessionContext(SessionContext sessionContext) { //ejb创建时,自动调用,初始化的工作可以写在这儿

        this.sessionContext = sessionContext;

        System.out.println("setSessionContext");

    public void ejbRemove() { //从接口重写,当ejb消亡时调用,释放资源的代码可以写在这儿

        System.out.println("ejbRemove");

    public void ejbActivate() {//从接口重写,在无状态会话 bean中无用,钝化状态到活动状态时调用,

    public void ejbPassivate() { //从接口重写,会话 bean中用,钝化时用

        System.out.println("ejbPassivate");

    public double getRmb(double usd) { //业务逻辑的实现,不能曝露给客户端,和远程接口中的getRmb方法对应

        System.out.println("getRmb");

    }

<a href="http://blog.sina.com.cn/s/blog_48cbe4d90100bdhl.html">http://blog.sina.com.cn/s/blog_48cbe4d90100bdhl.html</a>

继续阅读