会话bean(session bean):负责与客户端交互,是编写业务逻辑的地方,在会话bean中可以通过jdbc直接操作数据库,但大多数情况下都是通过实体bean来完成对数据库的操作。
会话bean分为两种:
无状态会话bean (Stateful Session Bean):平常我们使用最多的是无状态bean,因为它的bean实例可供多个用户使用,所以它的性能比有状态bean高。正因为一个bean实例被多个用户使用,那么前一个用户设置的值有可能被后一个用户所修改,所以它无法正确保存某个用户设置的值,因此是无状态的。
当客户机和服务器建立连接之后,无状态会话bean处理单一的用户请求或商务过程。无状态会话bean不需要从以前的请求中提取任何状态。例如,用户的用户密码确认。用户输入密码后,发送请求。组件返回真或假来确认用户,一旦过程完成,无状态会话bean也宣告结束。
如:
import javax.ejb.Remote;
import javax.ejb.Stateless;
import com.mixele.ejb3.HelloWorld;
@Stateless //该注解指明这个程序是个无状态的会话Bean
@Remote(HelloWorld.class)
public class HelloWorldBean implements HelloWorld {
@Override
public String sayHello(String name) {
return name + "Say: Hello,World!";
}
}
有状态会话bean (Stateless Session Bean):有状态bean平常使用的并不多,因为它的一个bean实例只供一个用户使用,所以性能开销比较大,正因为它的实例只被一个用户使用,用户为它设置的值是不会被其他用户修改,所以可以正确保存用户设置的值,因此是有状态的。
当客户机和服务器建立连接之后,状态会话bean将一直在客户机和服务器之间保持着用户的某个状态。例如:用户使用银行的ATM时,经过验证之后,用户可以连续执行多次操作,在这个过程当中,用户的合法状态将一直被保留,直到她将信用卡取出,结束这次操作。这时,状态会话bean也就被销毁。
@Stateful //该注解指明这个程序是个有状态的会话Bean
@Remote(HelloWorld.class)
@Local(HelloWorldLocal.class)
public class HelloWorldBeanStateful implements HelloWorld, HelloWorldLocal {
public String sayHello(String name) {
return name + " Say: Hello,World! -- in HelloWorldBeanStateful";
}
}
有状态Bean只是在类的注解上使用了:@Stateful
在代码上有状态Bean和无状态Bean区别不大,但是却是用了Bean实例的两种管理技术,即:
1. 无状态bean使用实例池技术管理bean。
2. 有状态bean使用激活(activation)管理bean。
每个用户都有自己的Bean实例,相当于有多少个用户就有多少个Bean实例为之服务。如果不采取任何机制,这样必然会导致服务器资源严重消耗,最后落个down机。为了解决这个问题,EJB引入了激活机制。激活机制实现的原理是这样的,在EJB服务器需要节省资源时,就从内存中收回bean实例,将其所保持的会话状态序列化到硬盘中,并且释放其所占有的内存,这个过程为钝化。若此时客户端对EJB再次发起请求,EJB容器会重新实例化一个Bean实例,并从硬盘中将之前的状态恢复。
实体bean(entity bean):它实际上属于java持久化规范(简称JPA)里的技术,JPA的出现主要是为了简化现有的持久化开发工作和整合ORM技术,结束现在Hibernate、TopLink等ORM框架各自为营的局面。
实体bean用来表示持久存储库里的一个东西。这通常就是指数据库里的一个东西,实体bean的一个实例就表示数据库表中的一行(不过,如果数据库得到了规范化,bean也有可能从多个表的数据行提取信息,也就是说,可能对应到多个表中的多个数据行)。实体bean的一个典型例子就是Customer(顾客),一个Customer实体bean可能表示Bo Olean,另一个Customer实体bean可能表示的是Trixia Lin。
实体bean只是数据模型,它不包括商务逻辑。实体bean可以将关系/对象数据库的数据映射到内存中供其它组件使用。实体bean是一直存在的,而且具有很高的容错性能。实体bean能供允许多用户同时访问。
如:
@Entity //标注该Bean为实体Bean
@Table(name="person") //标注该Bean与数据库的person表进行映射
public class Person implements Serializable {
private static final long serialVersionUID = 1L;
private Integer id;
private String name;
@Id //标注id属性是数据库表的主键,这个注解时实体Bean必须的
@Column(name="id") //标注id属性与数据库表的id字段进行映射
@GeneratedValue(strategy=GenerationType.AUTO) //指定主键生成策略
public Integer getId() { return id; }
public void setId(Integer id) { this.id = id; }
@Column(name="name",length=20,nullable=false)
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public int hashCode() { ………… }
public boolean equals(Object obj) { ………… }
}
消息驱动bean(message-driven bean):它是专门用于异步处理java消息的组件,具有处理大量并发消息的能力。只有在需要一个JMS客户的时候才会实用消息驱动bean。换句话说,消息驱动bean可以监听来自JMS消息服务的消息。客户绝对不会直接调用消息驱动bean;要想让消息驱动做点什么事情,客户必须向一个消息服务发出一条消息。这说明,消息驱动bean没有相应的EJBObject,因为服务器会从消息服务直接得到客户请求,而不是当客户向bean发出调用时截获客户请求。NewCustomerNotification订购者就是一个典型的消息驱动bean。
分享到:
相关推荐
总结来说,EJB三种bean在JBoss环境中提供了强大的企业级服务,包括持久化、事务管理、安全性以及并发控制。实体Bean处理数据存储,会话Bean封装业务逻辑,消息驱动Bean则用于异步处理。理解并熟练掌握这些概念对于...
### Java EE 5 学习笔记06:EJB之消息驱动Bean总结 #### EJB 消息驱动 Bean (Message Driven Bean, MDB) 在Java EE 5中,消息驱动Bean(MDB)是一种特殊的EJB组件,它主要用于处理异步消息。MDB能够接收并处理由...
实体Bean(Entity Bean)是EJB的一种类型,它代表业务逻辑中的持久化对象,通常映射到数据库中的表。本篇文章将深入探讨EJB实体Bean的概念、其在Eclipse集成开发环境中的使用,以及与MySQL数据库的集成。 ### 一、...
总结一下,EJB消息驱动bean是Java EE应用中处理异步消息的核心组件,与JMS配合,可以实现高效、解耦的系统通信。"EJB消息驱动bean Demo"为你提供了一个实际操作的例子,通过它你可以学习如何设置和使用MDB,以及如何...
EJB主要有三种类型: 1. 会话Bean(Session Bean):代表一个客户端会话,可以是无状态的(Stateless Session Bean),每个调用都是独立的,或者有状态的(Stateful Session Bean),能保持与特定客户端的会话状态。...
在EJB3.0中,无状态SessionBean是常用的一种组件类型,适用于处理短暂的、无持久性状态的业务逻辑。 1. **无状态SessionBean介绍** 无状态SessionBean代表了一个不保存客户端特定信息的业务逻辑组件。每次客户端...
总结来说,EJB实例,特别是Session Bean和Entity Bean,是Java EE平台的关键组成部分,它们为企业应用提供强大且灵活的组件模型,用于实现业务逻辑和数据管理。了解和掌握EJB技术,对于开发高质量、可扩展的企业级...
总结来说,EJB容器通过实例池化、不同类型的bean管理策略以及激活和钝化机制,有效地管理bean资源,提供高效、可靠的企业级服务。这些机制确保了Java EE应用在处理大量并发请求时的性能和可扩展性,同时降低了开发者...
实战EJB之三开发会话Bean(有状态会话Bean) 本文主要讲解了有状态会话Bean(Stateful Session Bean)的概念、特点、生命周期和开发过程。下面是相关知识点的总结: 1. 什么是有状态会话Bean? 有状态会话Bean...
总结,EJB3中的Entity Bean是企业级应用中数据持久化的关键组件。通过注解驱动的开发,开发者可以更专注于业务逻辑,而不用过多关心底层数据库操作的细节。结合JPA和Hibernate,EJB3提供了一个强大且灵活的框架,...
其中Message-Driven Bean (MDB) 是一种特殊类型的EJB,主要用于接收来自Java消息服务(JMS)的消息。本文将详细介绍如何使用EJB3.0在JBoss IDE中创建和部署MDB。 #### 二、准备工作 1. **安装工具和软件**: - **...
总结,开发EJB应用,特别是实体Bean,涉及的知识点包括: 1. EJB概念和生命周期 2. JBoss应用服务器的安装与配置 3. Maven或Gradle项目配置 4. 注解驱动的实体Bean开发 5. 数据库关系映射 6. EJB本地接口与业务方法 ...
EJB主要分为三种类型:无状态会话Bean(Stateless Session Beans)、有状态会话Bean(Stateful Session Beans)以及实体Bean(Entity Beans)。本篇将深入探讨有状态Bean和无状态Bean的概念、区别以及它们的应用场景...
- **实体Bean(Entity Beans)**:映射到数据库中的持久化对象,分为两种类型:传统实体Bean(CMP,Container-Managed Persistence)和bean管理持久化(BMP,Bean-Managed Persistence)。CMP由容器管理数据持久性...
总结,EJB2 Session Bean是Java企业级开发中的重要组成部分,它提供了一种组织和执行业务逻辑的方法,支持本地和远程调用,具有完善的事务管理和生命周期管理机制。通过EJBClient,客户端可以方便地与Session Bean...
EJB是Java Enterprise Edition(J2EE或现在的Java EE)的一部分,主要分为三种类型:会话Bean(Session Beans)、实体Bean(Entity Beans)和消息驱动Bean(Message-Driven Beans)。 **会话Bean介绍** 会话Bean是...
在EJB3中,开发无状态会话Bean变得非常简单。 ##### 1. 开发只存在Remote接口的无状态会话Bean **步骤如下:** **第一步**:定义一个包含所有业务方法的远程接口。该接口无需任何特定注解,类似于普通的Java接口...
EJB主要分为三种类型: - **会话Bean(Session Beans)**:代表一次客户端会话或一个业务操作。它们可以是无状态(Stateless Session Beans)或有状态(Stateful Session Beans),无状态Bean不保存客户端上下文,...
总结,Jboss下的EJB应用开发,特别是会话Bean的运用,是Java EE开发中的重要技能。通过理解EJB的基本概念,熟悉Jboss环境配置,以及掌握会话Bean的编写、部署和测试,开发者可以构建高效、可靠的企业级应用程序。在...