zoukankan      html  css  js  c++  java
  • 有状态的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对象的方法,会发现服务端的貌似始终在对一个对象进行操作。








  • 相关阅读:
    剑指offer-二维数组中的查找
    TF-IDF(term frequency–inverse document frequency)
    Java实现中文字符串的排序功能
    当前课程
    【R】资源整理
    CentOS相关
    【转】Setting up SDL Extension Libraries on MinGW
    【转】Setting up SDL Extension Libraries on Visual Studio 2010 Ultimate
    【转】Setting up SDL Extension Libraries on Code::Blocks 12.11
    【转】Setting up SDL Extension Libraries on Visual Studio 2019 Community
  • 原文地址:https://www.cnblogs.com/wzzkaifa/p/7228479.html
Copyright © 2011-2022 走看看