`
suhuanzheng7784877
  • 浏览: 702523 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
Ff8d036b-05a9-33b5-828a-2633bb68b7e6
读金庸故事,品程序人生
浏览量:47708
社区版块
存档分类
最新评论

JavaEE5学习笔记05-EJB之会话Bean(sessionBean)总结-----3

阅读更多

1.      有状态的会话Beanhelloworld

下面我们来看看有状态的SessionBean是否在可靠的调用中严格维护着它的实例变量。

下面看代码

ShopService接口

 

 

 

 

/**

 

 *

 * @author liuyan

 *

 */

@Remote

public interface ShopService {

    void addItem(String item);

    Map<String, Integer> showItems();

    void removeForClient();

}

实现类如下

 

 

 

 

 

 

@Stateful

public class ShopServiceEAOImpl implements ShopService {

 

    private Map<String, Integer> buyInfo = new HashMap<String, Integer>();

 

    @Override

    public void addItem(String item) {

       if (buyInfo.containsKey(item)) {

           buyInfo.put(item, buyInfo.get(item) + 1);

       } else {

           buyInfo.put(item, 1);

       }

    }

 

    @Override

    public Map<String, Integer> showItems() {

       System.out.println("buyInfo:" + buyInfo);

       return buyInfo;

    }

 

    @PostConstruct

    public void postConstruct() {

       System.out.println("有状态SessionBeanShopServiceEAOImpl构造完毕");

    }

 

    @PreDestroy

    public void preDestroy() {

       System.out.println("调用毁灭对象之前的方法--preDestroy()");

    }

 

    @Remove

    public void removeForClient() {

       System.out.println("客户端调用了显示的移除EJBBean的方法!");

    }

 

}

junit测试代码如下:

 

import java.util.Properties;

import javax.naming.Context;

import javax.naming.InitialContext;

import javax.naming.NamingException;

import junit.framework.TestCase;

import ejb.sessionBean.ShopService;

 

public class TestStatefulSessionBean extends TestCase {

 

    static ShopService shopService = null;

 

    public Context init() {

         …………………………

 

 

    }

 

 

    public void test01() throws NamingException {

       if (shopService == null) {

           Context context = init();

           shopService = (ShopService) context

                  .lookup("ShopServiceEAOImpl/remote");

       }

       shopService.addItem("素还真");

       System.out.println(shopService.showItems());

    }

   

    public void test02() throws NamingException {

       if (shopService == null) {

           Context context = init();

           shopService = (ShopService) context

                  .lookup("ShopServiceEAOImpl/remote");

       }

       shopService.addItem("素还真");

       System.out.println(shopService.showItems());

 

    }

   

    public void test03() throws NamingException {

       if (shopService == null) {

           Context context = init();

           shopService = (ShopService) context

                  .lookup("ShopServiceEAOImpl/remote");

       }

      

       shopService.addItem("叶小钗");

       System.out.println(shopService.showItems());

    }

   

    public void test04() throws NamingException {

       if (shopService == null) {

           Context context = init();

           shopService = (ShopService) context

                  .lookup("ShopServiceEAOImpl/remote");

       }

       System.out.println(shopService.showItems());

    }

}

每次单独调用testXXX的时候服务端的结果总是单一的元素,可以看出,服务端的实例变量在每次、分别调用的时候都是穿件了一个新的、刚出锅的、热乎乎、无污染的实例变量。(在此代码中就不列出结果了)

加入我们一气呵成执行此用例呢?让测试用例的静态变量所有方法中处在一个JVM中。

结果如下

 

11:32:09,896 INFO  [STDOUT] 有状态SessionBeanShopServiceEAOImpl构造完毕

11:32:10,022 INFO  [STDOUT] buyInfo:{素还真=1}

11:32:10,038 INFO  [STDOUT] buyInfo:{素还真=2}

11:32:10,069 INFO  [STDOUT] buyInfo:{素还真=2, 叶小钗=1}

11:32:10,080 INFO  [STDOUT] buyInfo:{素还真=2, 叶小钗=1}

由此观之在同一次调用中,服务端的无状态会话Bean确实是维护了实例变量的属性值及其状态。不会像无状态的会话调用,结果无法预期……

分享到:
评论

相关推荐

    JavaEE5学习笔记07-Web层与EJB集成总结

    ### JavaEE5学习笔记07-Web层与EJB集成总结 #### 一、JavaEE5框架中的Web层与EJB集成概述 在JavaEE5(即Java Platform, Enterprise Edition 5)中,Web层与EJB(Enterprise JavaBeans)的集成是构建企业级应用的...

    JavaEE5学习笔记02-JNDI与RMI

    在JavaEE环境中,RMI经常与EJB结合使用,尤其是无状态SessionBean,因为它们不需要维持客户端的会话状态,适合RMI的轻量级通信模式。 当一个EJB被标记为远程接口时,它可以通过RMI在不同 JVM(Java Virtual ...

    javaee思维导图版笔记-吉林大学

    "javaee思维导图版笔记-吉林大学" 本笔记主要涵盖了Java EE的基础知识,包括Servlet、JSP、JNDI、JPA等方面的内容。 一、Servlet概述 Servlet是Java EE中的一种服务器端组件,用于处理HTTP请求并返回响应。...

    javaee学习笔记

    - **会话Bean**:在整个用户会话期间保持,用于跟踪用户状态。 - **应用Bean**:在整个应用程序范围内共享,用于全局数据。 **自定义标签(Custom Tags)**提供了一种扩展JSP语法的方式,通过定义标记库描述符(TLD...

    JavaEE2017最新版基础班学习笔记

    包括会话Bean(Session Beans)负责业务逻辑,实体Bean(Entity Beans)作为持久化对象,以及消息驱动Bean(Message-Driven Beans)处理JMS消息。 6. **JMS (Java Message Service)**:JMS允许应用程序之间异步通信...

    Java/JavaEE 学习笔记

    Java/JavaEE 学习笔记 作者在杰普学习时的学习笔记,是J2ee初学者必备手册,是大家学习J2EE开发的很好的参考笔记。 Java/JavaEE 学习笔记 内容目录: Unix 学习笔记..........7 一、Unix前言............7 二、...

    JavaEE学习笔记

    EJB是JavaEE的核心,提供了三种类型的Bean:会话Bean(Session Beans)处理业务逻辑,实体Bean(Entity Beans)代表持久化数据,消息驱动Bean(Message-Driven Beans)处理消息队列。Spring框架则以其依赖注入和面向...

    JavaEE基础笔记.zip

    分为会话Bean(Session Beans)、实体Bean(Entity Beans)和消息驱动Bean(Message-driven Beans),分别处理业务逻辑、持久化数据和消息通信。 5. **JMS(Java Message Service)**:JMS是JavaEE的消息中间件接口...

    J2EE学习笔记(J2ee初学者必备手册)

    第四章 Session Bean(会话Bean).....322 第五章 消息驱动Bean(MDB).........327 EJB3.0.....329 第一章 EJB3.0 Foundation...............329 第二章 Session Bean........................330 第三章 消息驱动Bean...

    达内培训笔记

    - **EJB(Enterprise JavaBeans)**:分为会话Bean(Session Beans)、实体Bean(Entity Beans)和消息驱动Bean(Message-driven Beans),用于实现业务逻辑和持久化数据。 - **JPA(Java Persistence API)与ORM*...

    javaWeb学习笔记+狂神说

    EJB是Java企业级应用的组件模型,分为会话bean、实体bean和消息驱动bean。它们提供了一种在分布式环境中构建可复用的、事务处理的服务器端组件的方法。虽然现代JavaEE应用更多采用轻量级框架如Spring,但了解EJB的...

    JAVA-EE-master (4).zip

    EJB分为三种类型:会话bean(Session Beans)处理客户端请求,实体bean(Entity Beans)代表持久化的业务对象,消息驱动bean(Message-Driven Beans)用于处理JMS消息。 4. **JMS**:Java Message Service允许在...

Global site tag (gtag.js) - Google Analytics