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对象的方法,会发现服务端的貌似始终在对一个对象进行操作。








  • 相关阅读:
    【WebTerminal】gotty工具
    【Java】15分钟快速体验阿里Java诊断工具Arthas
    【K8S】helm chart多环境部署最佳实践-示例
    mysql-linux定时备份mysql数据库
    Mockito-简单使用使用
    EasyMock 简单使用
    SpringDataJpa学习
    js-重写jquery的ajax中的内容
    shiro-过滤器
    hadoop ha 读取 activce状态的活动节点
  • 原文地址:https://www.cnblogs.com/wzzkaifa/p/7228479.html
Copyright © 2011-2022 走看看