`

有状态SessionBean 和无状态Sessionbean

阅读更多
JavaEE中的有状态会话bean和无状态会话bean 的主要区别是:
1: 无状态会话bean 将不保存该bean使用者的状态,它使用的是单例模式 , 在ejb容器中只有一个实例存在 ,主要处理系统中的业务逻辑部分。
2: 有状态会话bean 将保存该bean使用者的状态 ,   就像web程序中每一个用户分配一个session一样, 对不同使用者生成不同的实例,  并维持该使用者操作的状态, 到ejb 容器销毁该bean 。 使用处理想购物车类的业务操作。
以下代码在Netbean 6.5   ,  glassfish v2 中测试无误
代码示例:
SessionLessBean  无状态会话bean。
CartBean         有状态的会话bean.。
代码如下:
 //远程接口
package ejb;
import javax.ejb.Remote;
/**
 * @author 李亚希
 */
@Remote
public interface SessionLessRemote {
     public   int   add();
}
//本地接口
package ejb;
import javax.ejb.Local;
/**
 * @author 李亚希
 */
@Local
public interface SessionLessLocal {
    
}
//实现bean 
package ejb;
import javax.ejb.Stateless;
/**
 * @author 李亚希
 */
@Stateless(mappedName="ejb/SessionLessBean")
public class SessionLessBean implements SessionLessRemote  {
    
     public int count=0;
     public    int   add()
     {
          return  count++;
     }
}
 
package ejb;
import javax.ejb.Remote;
/**
 *
 * @author 李亚希
 */
@Remote
public interface CartRemote {
      public   int  add();
}
package ejb;
import javax.ejb.Local;
/**
 * @author  李亚希
 */
@Local
public interface CartLocal {
    
}
package ejb;

import javax.ejb.Stateful;
/**
 * @author 李亚希
 */
@Stateful(mappedName="ejb/CartBean")
public class CartBean implements CartRemote {
    
     public int count=0;
     public     int    add()
     {
           return   count++;
     } 
}

部署到服务器后在, 建一个客户端测试类 (具体做法 见  http://liyaxi.iteye.com/admin/blogs/508378
测试类的代码如下:
 
package lyx.com.client;

import ejb.CartRemote;
import ejb.HelloRemote;
import ejb.SessionLessRemote;
import java.util.Properties;
import javax.naming.InitialContext;
import javax.naming.NamingException;


public class ClientTest {

    public static void main(String[] args) {
        Properties props = new Properties();
        props.setProperty("java.naming.factory.initial", "com.sun.enterprise.naming.SerialInitContextFactory");
        props.setProperty("java.naming.factory.url.pkgs", "com.sun.enterprise.naming");
        props.setProperty("java.naming.factory.state", "com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl");
        props.setProperty("org.omg.CORBA.ORBInitialHost", "localhost");
        props.setProperty("org.omg.CORBA.ORBInitialPort", "3700");

        try {
            InitialContext ctx = new InitialContext(props);
            System.out.println("-----------------这是第一次从上下文中获取到有状态会话bean------------------------");
            ;
            CartRemote cr = (CartRemote) ctx.lookup("ejb/CartBean");
            System.out.println(cr.add());
            System.out.println(cr.add());
            System.out.println(cr.add());
            System.out.println(cr.add());
            System.out.println("--------------------这是第二次从上下文中获取同一个有状态会话bean -----------------------");
            CartRemote cr2 = (CartRemote) ctx.lookup("ejb/CartBean");
            System.out.println(cr2.add());
            System.out.println(cr2.add());
            System.out.println(cr2.add());
            System.out.println(cr2.add());
            System.out.println(cr2.add());
             if(cr.equals(cr2))
             {
                   System.out.println("相等");
             }
             else
             {
                   System.out.println("不相等");
             }
            System.out.println("---------------有状态会话bean 的测试结束---------------------");
            System.out.println("---------------无状态会话bean 的测试开始第一次从上下文中获取到一个无状态会话bean --------------------");
            SessionLessRemote slr = (SessionLessRemote) ctx.lookup("ejb/SessionLessBean");
              System.out.println(slr.add());
              System.out.println(slr.add());
              System.out.println(slr.add());
              System.out.println(slr.add());
              System.out.println(slr.add());
            System.out.println("---------------开始第二次从上下文中获取到一个无状态会话bean-----------------------");
            SessionLessRemote slr2 = (SessionLessRemote) ctx.lookup("ejb/SessionLessBean");
            System.out.println(slr2.add());
            System.out.println(slr2.add());
            System.out.println(slr2.add());
            System.out.println(slr2.add());
            System.out.println(slr2.add());
            System.out.println(slr2.add());
            System.out.println(slr2.add());
             if(slr.equals(slr2))
             {
                   System.out.println("相等");
             }
             else
             {
                   System.out.println("不相等");
             }



        } catch (NamingException e) {
            e.printStackTrace();
        }

    }
}



运行结果如下:
run:
-----------------这是第一次从上下文中获取到有状态会话bean------------------------
0
1
2
3
--------------------这是第二次从上下文中获取同一个有状态会话bean -----------------------
0
1
2
3
4
不相等
---------------有状态会话bean 的测试结束---------------------
---------------无状态会话bean 的测试开始第一次从上下文中获取到一个无状态会话bean --------------------
0
1
2
3
4
---------------开始第二次从上下文中获取到一个无状态会话bean-----------------------
5
6
7
8
9
10
11
相等

不重启服务 在运行一次的结果
run:
hello李亚希
-----------------这是第一次从上下文中获取到有状态会话bean------------------------
0
1
2
3
--------------------这是第二次从上下文中获取同一个有状态会话bean -----------------------
0
1
2
3
4
不相等
---------------有状态会话bean 的测试结束---------------------
---------------无状态会话bean 的测试开始第一次从上下文中获取到一个无状态会话bean --------------------
12
13
14
15
16
---------------开始第二次从上下文中获取到一个无状态会话bean-----------------------
17
18
19
20
21
22
23
相等

由此可见有状态会话bean  每当从context.lookup("xxxx"); 就获取一个新的实例 并记录该bean 的状态, 而无状态会话bean 每一次取得的是同一个实例。
分享到:
评论

相关推荐

    Java EJB中有、无状态SessionBean的两个例子.rar

    理解并熟练运用有状态和无状态SessionBean是Java EE开发中的重要技能。通过研究和实践这些示例,你可以更深入地了解这两种Bean在实际项目中的应用,以及它们在处理不同业务需求时的优势和限制。同时,Swing程序和...

    EJB3.0无状态SessionBean例子

    总结,EJB3.0无状态SessionBean的例子展示了如何利用注解简化开发流程,以及如何通过本地和远程接口进行组件间的通信。理解并掌握这些概念对于构建可扩展、健壮的企业级Java应用至关重要。通过学习这个示例,开发者...

    基于java的开发源码-EJB中有、无状态SessionBean的两个例子.zip

    基于java的开发源码-EJB中有、无状态SessionBean的两个例子.zip 基于java的开发源码-EJB中有、无状态SessionBean的两个例子.zip 基于java的开发源码-EJB中有、无状态SessionBean的两个例子.zip 基于java的开发源码-...

    Java EJB中有、无状态SessionBean的两个例子

    总结来说,Java EJB中的有状态和无状态Session Bean各有特点,开发者需要根据应用需求选择合适的类型。理解它们的工作原理和应用场景对于构建高效、可靠的Java EE应用程序至关重要。在实际开发中,合理利用这两种...

    Java EJB中有、无状态SessionBean的两个例子.7z

    根据其设计模式,Session Bean分为有状态(Stateful Session Bean)和无状态(Stateless Session Bean)两种类型。本压缩包文件提供了这两个类型的实例,让我们深入探讨它们的概念、用途以及如何在实际应用中使用。 ...

    Java EJB中有、无状态SessionBean的两个例子.zip_1H1_Java EJB_UOL

    本教程将深入探讨有状态和无状态Session Bean的区别和使用场景,通过具体的例子来加深理解。 首先,让我们定义这两个概念: 1. **有状态Session Bean (Stateful Session Bean)**:这种类型的Session Bean可以维护...

    基于Java的源码-EJB中有、无状态SessionBean的两个例子.zip

    本压缩包提供了有状态和无状态两种Session Bean的示例代码,帮助开发者理解和掌握这两种类型的区别和应用场景。 1. **EJB Session Bean概述** Session Bean是EJB中的服务组件,它们代表客户端的会话。根据会话的...

    基于Java的实例源码-EJB中有、无状态SessionBean的两个例子.zip

    本压缩包提供了两个基于Java的EJB实例,分别涉及有状态和无状态SessionBean,让我们深入探讨这两个关键概念。 首先,我们来看无状态SessionBean。无状态SessionBean(Stateless Session Bean)代表了一个业务逻辑...

    学习SessionBean

    - **无状态SessionBean**:不保留任何客户端会话信息,每次调用都视为独立操作,适合处理不依赖于上下文的简单请求。 - **有状态SessionBean**:能记住客户端的会话状态,适用于需要跟踪用户操作序列或保存购物车等...

    基于Java的EJB中有、无状态SessionBean的两个例子.zip

    本资料包"基于Java的EJB中有、无状态SessionBean的两个例子.zip"包含的是关于有状态和无状态SessionBean的实例代码,帮助开发者理解和掌握这两种类型SessionBean的用法。 1. **无状态SessionBean(Stateless ...

    SESSIONBEAN 和客户端相结合 的例子

    无状态SessionBean对每个请求都创建一个新的bean实例,不保留任何特定客户端的信息;而有状态SessionBean则可以保存客户端的状态信息,适用于需要跟踪用户会话的情况。 Oracle数据库是广泛使用的的关系型数据库管理...

    java源码:Java EJB中有、无状态SessionBean的两个例子.zip

    压缩包中的例子应该包含了这些步骤的源代码,可以帮助开发者直观地学习和理解有状态和无状态SessionBean的使用方式。 总之,Java EJB中的SessionBean是实现业务逻辑的重要工具。理解并熟练运用SFSB和SSB对于开发可...

    Session Bean的使用

    不同于Stateful Session Bean(保持状态的会话bean),每个客户端请求都会创建一个新的bean实例,并保存其状态,Stateless Session Bean(无状态会话bean)不存储任何客户端特定的信息。这意味着无状态会话bean对于...

    基于java的EJB中有、无状态SessionBean的两个例子.zip

    本教程将深入探讨基于Java的EJB中的有状态和无状态Session Bean。 1. 有状态Session Bean(Stateful Session Bean) 有状态Session Bean(SFSB)能够保持与客户端的会话状态,即它能够记住客户端的交互历史。这种...

    EJB3.0开发Session Bean.rar

    无状态Session Bean不保留任何关于客户端的信息,而有状态Session Bean可以存储客户端特定的信息,以提供个性化的服务。 **3. Session Bean的类型** - **无状态Session Bean (Stateless Session Bean)**:每个...

    ejb有状态bean和无状态bean

    本篇将深入探讨有状态Bean和无状态Bean的概念、区别以及它们的应用场景。** **1. 无状态会话Bean (Stateless Session Beans)** 无状态会话Bean是最基础的EJB类型,它不维护任何客户端会话状态。每次客户端调用方法...

    ejb实例包括session bean和实体bean

    EJB系统主要包括两种主要类型的Bean:Session Bean和Entity Bean。 **Session Bean** Session Bean是EJB中的临时业务对象,代表客户端的一次会话或操作。它们通常用于封装业务逻辑,执行计算任务,或者协调与数据库...

    基于Java的实例开发源码-EJB中有、无状态SessionBean的两个例子.zip

    本实例可能包含一个或多个演示程序,通过对比有状态和无状态SessionBean的使用场景和实现方式,帮助初学者理解这两种Bean的区别和应用场景。通过深入学习这些示例,你将更好地掌握如何在实际项目中运用EJB技术,提升...

Global site tag (gtag.js) - Google Analytics