今天刚刚开始学习EJB3.0,学习了几个比较重要的概念,闲来没事,自己总结一下,希望各位高手多多指点下我这个菜鸟。
第一个接触到的概念就是EJB中的SessionBean,下面就来总结一下SessionBean中有状态SessionBean与无状态的
SessionBean的区别以及各自的特点。
有状态的SessionBean:
指的是在服务器端对该种类型的Bean的状态进行了记录,因此在一个会话中调用了有状态的SessionBean时,由于在服务器
端有状态信息进行记录,因此对调用的SessionBean对象是确定的。以下面的实例进行说明:
//调用有状态SessionBean的客户端
public class StatefulEbjClient {
public static void main(String[] args) {
try {
InitialContext context = new InitialContext();
//启动一个Session会话,创建一个StatefulEjb类型的实例
StatefulEjb fe = (StatefulEjb)context.lookup("StatefulEjbBean/remote");
for(int i = 0 ; i < 5 ; i++){
/*add()和getResult()是在StatefulEjb接口中随便定义的两个方法*/
fe.add(1);//每次调用该方法就对变量+1
System.out.println(fe.getResult());//将变量的值输出
}
System.out.println("*******************************");
//第二个session
StatefulEjb fe2 = (StatefulEjb)context.lookup("StatefulEjbBean/remote");
for(int i = 0 ; i < 5 ; i++){
fe2.add(1);
System.out.println(fe2.getResult());
}
} catch (NamingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
有状态的SessionBean的特点是每次调用该main方法时,都会重新创建一个fe对象,而且,调用add和getResult这两个
方法的fe都是同一个对象,不论执行多少次或者在多少个Session会话范围内执行,所得的结果都是一样的。
所以,上面程序的运行结果不论执行多少次都是:
1
2
3
4
5
*********************************
1
2
3
4
5
无状态的SessionBean:
与有状态的SessionBean刚好相反,服务器端不会记录该Bean的状态信息,因此每次调用无状态的SessionBean的实例
都是无法确定的。以下面的实例说明:
public class StatelessEbjClient {
public static void main(String[] args) {
try {
InitialContext context = new InitialContext();
//第一个session
StatelessEjb slsb = (StatelessEjb)context.lookup("StatelessEjbBean/remote");
for(int i = 0 ; i < 5 ; i++){
slsb.add(1);
System.out.println(slsb.getResult());
}
System.out.println("***********************");
//第二个session
StatelessEjb slsb2 = (StatelessEjb)context.lookup("StatelessEjbBean/remote");
for(int i = 0 ; i < 5 ; i++){
slsb2.add(1);
System.out.println(slsb2.getResult());
}
} catch (NamingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
这段程序的逻辑与上一段完全相同,唯一的区别就是在两个Session会话中分别生成了两个StatelessEjb的实例,
得到的结果如下所示:
第一次运行的结果:
1
2
3
4
5
*********************************
6
7
8
9
10
从第一次运行的结果可以看出,无状态的SessionBean类似一种单例模式。
第二次运行的结果:
11
12
13
14
15
***********************
16
17
0
0
0
第二次的运行结果就充分说明:无状态的SessionBean在被调用时,并不能确定调用的是哪个实例。
说明:这个结果只是某次运行的结果,无状态的SessionBean在每次运行时的结果都是不确定的,而有状态的
SessionBean刚好相反,每次运行的结果都是可以预先确定的。
以上便是本人一点点对两种SessionBean浅薄的认识,希望各位高手多多指教。
分享到:
相关推荐
总结,EJB3.0无状态SessionBean的例子展示了如何利用注解简化开发流程,以及如何通过本地和远程接口进行组件间的通信。理解并掌握这些概念对于构建可扩展、健壮的企业级Java应用至关重要。通过学习这个示例,开发者...
总结来说,EJB实例,特别是Session Bean和Entity Bean,是Java EE平台的关键组成部分,它们为企业应用提供强大且灵活的组件模型,用于实现业务逻辑和数据管理。了解和掌握EJB技术,对于开发高质量、可扩展的企业级...
总结,EJB2 Session Bean是Java企业级开发中的重要组成部分,它提供了一种组织和执行业务逻辑的方法,支持本地和远程调用,具有完善的事务管理和生命周期管理机制。通过EJBClient,客户端可以方便地与Session Bean...
总结来说,Java EJB中的有状态和无状态Session Bean各有特点,开发者需要根据应用需求选择合适的类型。理解它们的工作原理和应用场景对于构建高效、可靠的Java EE应用程序至关重要。在实际开发中,合理利用这两种...
总结来说,Java EJB中的有状态和无状态Session Bean是实现业务逻辑的关键组件。它们提供了一种方式来封装和解耦服务器端的复杂逻辑,同时为客户端提供了简单、一致的接口。理解和熟练掌握这两种类型的Session Bean,...
【Xdoclet生成SessionBean和EntityBean代码(初识ejb)】 Xdoclet是一个强大的文档生成工具,尤其在Java Enterprise Edition(JEE)环境中,它能够自动生成EJB(Enterprise JavaBeans)所需的代码和配置文件,从而...
总结来说,Java EJB的SessionBean是实现业务逻辑的关键组件,它们根据需要维持或不维持客户端状态,以满足不同场景的需求。理解和掌握如何有效地使用有状态和无状态SessionBean是Java EE开发者必备的技能。通过分析...
总结来说,EJB容器通过实例池化、不同类型的bean管理策略以及激活和钝化机制,有效地管理bean资源,提供高效、可靠的企业级服务。这些机制确保了Java EE应用在处理大量并发请求时的性能和可扩展性,同时降低了开发者...
无状态会话 Bean(Stateless Session Bean)是企业级 Java(EJB)3.0 中的核心组件,主要用于实现业务逻辑,它不保存任何特定客户端的状态信息。本篇文章将深入讲解如何在 EJB3 中开发第一个无状态会话 Bean,以及...
### EJB系统开发实战录之四 — Session Bean与Session Façade Design Pattern详解 #### 一、Session Bean概述 在EJB(Enterprise JavaBeans)体系结构中,**Session Bean**扮演着极其重要的角色,它是实现业务...
#### (1):编写第一个无状态的SessionBean ##### 一、配置开发环境 在开始编写无状态的SessionBean之前,首先需要确保开发环境已经正确配置。以下是所需的主要组件: 1. **Eclipse**:版本3.4.2,推荐使用针对...
开发一个有状态会话Bean需要继承javax.ejb.SessionBean接口,并实现相应的生命周期方法,如ejbCreate()、ejbRemove()、ejbPassivate()、ejbActivate()等。 5. 部署到应用服务器 在部署到应用服务器时,需要配置ejb...
1. **Session Bean**:提供临时的业务逻辑服务,可以是有状态(Stateful Session Bean)或无状态(Stateless Session Bean)。有状态的Session Bean可以跟踪用户会话状态,而无状态的Session Bean不维护用户状态,更...
总结来说,EJB Skeleton是理解EJB架构和组件的起点,它涵盖了EJB的基本概念,如Session Bean的类型、生命周期、接口设计和命名规范,这些知识对于开发基于Java EE的企业级应用程序至关重要。通过深入学习和实践,...
public class CartBean implements javax.ejb.SessionBean, java.io.Serializable { private String cardHolderName; private String creditCardNumber; private Vector<Item> items; public void ejbCreate...
【SessionBeanView】是与Java企业版(Java EE)中的Enterprise JavaBeans(EJB)技术相关的概念,特别是Session ...而"sessionbean4.exe"则可能是辅助学习和理解Session Beans的工具或示例,提供了实际操作的机会。
总结,通过EJB 2.0有状态Session Bean和Hibernate 3.0,我们可以构建出一个健壮、可扩展的书店系统,具备购物车管理、书籍信息展示等功能。这样的系统设计既保留了面向对象的简洁性,又充分利用了企业级服务的强大...