• 有状态的EJB对象和无状态的EJB对象




    一,定义有状态Bean和无状态Bean


    有状态Bean:


    @Stateful
    @Remote
    public class StatefulEjbBean implements StatefulEjb{
    
    	private int state;
    	
    	@Override
    	public void compute(int i) {
    		state=state+i;
    	}
    
    	@Override
    	public int getResult() {
    		return state;
    	}
    
    }


    无状态Bean:


    @Stateless
    @Remote
    public class StatelessEjbBean implements StatelessEjb {
    
    	private int state;
    
    	@Override
    	public void compute(int i) {
    		state = state + i;
    	}
    
    	@Override
    	public int getResult() {
    		return state;
    	}
    }


    二,client測试及结果


    1。測试有状态EJB对象:


    public class StatefulEjbClient {
    
    	public static void main(String[] args) throws Exception {
    		InitialContext context=new InitialContext();
    		//第一次会话
    		StatefulEjb ejb1=(StatefulEjb)context.lookup("StatefulEjbBean/remote");
    		System.out.println(ejb1.getResult());
    		ejb1.compute(1);
    		System.out.println(ejb1.getResult());
    		ejb1.compute(1);
    		System.out.println(ejb1.getResult());
    		ejb1.compute(1);
    		System.out.println(ejb1.getResult());
    		ejb1.compute(1);
    		System.out.println(ejb1.getResult());
    		ejb1.compute(1);
    		System.out.println(ejb1.getResult());
    		System.out.println("第一次会话结束---------");
    		
    		//第二次会话
    		StatefulEjb ejb2=(StatefulEjb)context.lookup("StatefulEjbBean/remote");
    		System.out.println(ejb2.getResult());
    		ejb2.compute(1);
    		System.out.println(ejb2.getResult());
    		ejb2.compute(1);
    		System.out.println(ejb2.getResult());
    		ejb2.compute(1);
    		System.out.println(ejb2.getResult());
    		ejb2.compute(1);
    		System.out.println(ejb2.getResult());
    		ejb2.compute(1);
    		System.out.println(ejb2.getResult());
    		System.out.println("第二次会话结束---------");
    		
    		
    		
    	}
    
    }
    

    结果:




    2,測试无状态EJB对象:



    public class StatelessEjbClient {
    
    	public static void main(String[] args) throws NamingException {
    		InitialContext context=new InitialContext();
    		//第一次会话
    		StatelessEjb ejb1=(StatelessEjb)context.lookup("StatelessEjbBean/remote");
    		System.out.println(ejb1.getResult());
    		ejb1.compute(1);
    		System.out.println(ejb1.getResult());
    		ejb1.compute(1);
    		System.out.println(ejb1.getResult());
    		ejb1.compute(1);
    		System.out.println(ejb1.getResult());
    		ejb1.compute(1);
    		System.out.println(ejb1.getResult());
    		ejb1.compute(1);
    		System.out.println(ejb1.getResult());
    		System.out.println("第一次会话结束---------");
    		
    		//第二次会话
    		StatelessEjb ejb2=(StatelessEjb)context.lookup("StatelessEjbBean/remote");
    		System.out.println(ejb2.getResult());
    		ejb2.compute(1);
    		System.out.println(ejb2.getResult());
    		ejb2.compute(1);
    		System.out.println(ejb2.getResult());
    		ejb2.compute(1);
    		System.out.println(ejb2.getResult());
    		ejb2.compute(1);
    		System.out.println(ejb2.getResult());
    		ejb2.compute(1);
    		System.out.println(ejb2.getResult());
    		System.out.println("第二次会话结束---------");
    		
    		//推断每次查找到的对象是否一样
    		System.out.println(ejb1==ejb2);//false
    		
    	}
    
    }
    

    结果:





    三,结果对照


            通过多次运行,发现对于有状态的EJB对象。每次通过查找获得的对象都是新对象。而对于无状态的EJB对象,每次查找获得的对象都有一个单例类的效果。多次运行測试无状态的EJB对象的方法,会发现服务端的貌似始终在对一个对象进行操作。








  • 相关阅读:
    2018福大软工实践第六次作业
    2018福大软工实践第五次作业
    2018福大软工实践第四次作业
    2018福大软工实践第三次作业
    2018福大软工实践第二次作业
    团队现场编程实战(抽奖系统)
    团队Alpha版本冲刺(三)
    团队Alpha版本冲刺(二)
    团队Alpha版本冲刺(一)
    福大软工 · 第八次作业
  • 原文地址:https://www.cnblogs.com/wzzkaifa/p/7228479.html
Copyright © 2020-2023  润新知