当今大型业务系统面临的主要问题就是高并发性和事务访问,客户端的数量与服务器端的分布式对象数量存在一定程度的正比关系,客户端数量越多,服务器端分布式对象也就越多,如何解决这种高并发的问题也就成了企业级架构首先要解决的问题。EJB作为一种服务器端分布式组件,为我们提供了应对策略。
EJB提供了两种管理大量分布式对象的策略:实例池化和激活。下面分别对EJB组件模型中的三种模型进行一些分析。
第一种:无状态的会话Bean(Stateless session bean)
Stateless session bean采用池化技术来实现,stateless session bean的客户端不直接于bean class的实例进行通信,而是通过bean class所暴漏的远程或者本地接口来通信,再进一步的讲就是通过bean class的代理存根来与EJB容器通信。这样以来就可以为每一个bean class维护一个的实例池,然后用这些实例来为大量的客户进行服务。
stateless session bean的生命周期由三个不同的状态来组成。不存在,池化状态以及就绪状态。不存在就说明bean class的实例还没有初始化,池化状态就说明实例已经初始化了,但是还没有与EJB Obejct关联(骨架),就绪状态说明实例已经于EJB请求关联了,可以为客户提供服务了。
第二种:消息驱动bean。
MDB同样也采用池化技术来实现,只所以可以采用池化技术,是因为MDB的客户端也不于具体的MDB实例进行通信,相反是通过一种松耦合的方式来实现。首先客户发送消息给EJB容器的消息目的地,然后EJB容器再将消息发送到具体订阅此目的地的MDB实例。
同样的道理,EJB容器也为每一个MDB class维护一个实例池,当有消息发送到此MDB订阅的目的地时,EJB容器就会挑选一个MDB class的实例来接受和处理消息。
第三种:有状态的会话bean (Statefull session bean)
与stateless bean 和MDB不同,Statefull session bean采用激活机制来实现,为什么采用激活机制来实现,是因为有状态的会话bean要维护于客户端的会话状态,每个实例只能服务于同一个客户端。
MDB采用激活机制来降低服务器资源的消耗,当EJB容器资源不够的时候,它就会选择一些能被钝化的实例,将其序列化到磁盘上,当需要的时候,再将其从磁盘恢复到内存中。
综上所述,客户端与EJB组件进行通信时,它们其实都不是直接于bean class的实例进行通信,而是通过本地的代理存根于服务器端的骨架进行通信,而骨架再将具体的EJB请求委托给具体的bean class的实例来响应。
分享到:
相关推荐
在EJB 3.0中,Entity Bean代表持久化对象,它存储在数据库中并与数据库进行交互。这个部分将介绍如何定义实体bean,包括使用JPA(Java Persistence API)来注解实体类,设置主键,以及使用实体管理器进行CRUD(创建...
通过上述步骤,我们已经完成了EJB3.0中MDB的基本开发过程。MDB是实现异步消息处理的有效方式,尤其适用于需要解耦系统组件和提高响应时间的应用场景。在实际项目中,还可以根据需求进一步扩展MDB的功能,如使用事务...
- **Message-Driven Bean(MDB)**:专门处理消息的EJB,主要用于异步处理。它监听消息队列(JMS,Java Message Service),在消息到达时自动触发业务处理。 2. **生命周期管理**: - 容器负责EJB的创建、初始化...
在EJB3.0中,Session Bean分为无状态和有状态两种类型。无状态Session Bean(Stateless)适用于不维护客户端会话信息的情况,而有状态Session Bean(Stateful)则能保持与特定客户端的会话状态。通过`@Stateless`或`...
在EJB3.0中,主要定义了三种类型的Bean: 1. **会话Bean(Session Bean)**:会话Bean负责业务逻辑的实现。它们分为有状态会话Bean(Stateful Session Bean)和无状态会话Bean(Stateless Session Bean)。无状态...
- **实体Bean(Entity Beans)**:EJB 3.0中的实体Bean不再需要编写复杂的EJB接口和实现类,而是通过JPA(Java Persistence API)进行持久化管理,可以利用注解(Annotations)直接在实体类上声明数据存储的相关属性...
EJB 3.0引入了大量的注解,如`@Entity`、`@Table`、`@Column`用于定义实体Bean,`@Stateless`、`@Stateful`、`@Singleton`用于声明不同类型的会话Bean,`@MessageDriven`用于声明消息驱动Bean。这些注解使得开发者...
在EJB3.0中,这两种注解使接口的使用更加灵活,无需传统的接口实现方式。 总的来说,EJB3.0简化了传统EJB的复杂性,提升了开发效率,同时保持了企业级应用所需的关键特性。通过注解、容器管理和事务支持,EJB3.0...
实体Bean是EJB3.0中的持久化组件,负责代表数据库中的持久对象。在EJB3.0中,实体Bean的使用变得非常简单,主要得益于以下特性: - **注解驱动**: 无需XML配置,可以直接在类或属性上使用@Entity和@Id注解来声明...
本教程将通过实例深入讲解EJB 3.0中的三大核心组件:Session Bean、Entity Bean和Message Driven Bean。 ### Session Bean Session Beans是EJB中的一个关键概念,它们代表了业务逻辑层的服务,提供对应用程序的...
"EJB3持久化规范(简体中文版).pdf"主要涵盖了ejb3.0的持久化机制,"EJB3核心规范.pdf"深入解析了ejb3.0的核心概念和设计,"JMS1_1规范(简体中文版).pdf"介绍了JMS的基础知识,这对于理解ejb3.0中的消息驱动Bean至关...
EJB 3.0中的Session Bean同样受益于注解的引入,@Stateless和@Stateful分别表示无状态和有状态的session bean。无状态bean对于每个请求都创建新的实例,而有状态bean则可以保存客户端会话状态。此外,@Local和@...
2. **Message Driven Bean(MDB)**:MDB是EJB3.0中处理消息的无状态组件,主要用于异步处理JMS(Java Message Service)消息。它允许应用程序在不阻塞其他任务的情况下处理后台任务,提高了系统的并发性和响应性。...
在EJB 3.0中,MDB的配置和使用相比之前的版本变得更加简洁,无需编写大量的XML配置文件,而是通过注解来实现。 1. **MDB的定义与注解** - `@MessageDriven`: 这是定义一个MDB的基本注解,它指明了bean的角色。你...
4. **简化会话bean**:会话bean(Session Beans)在EJB 3.0中变得更加灵活,不再强制要求接口。`@Stateless`和`@Stateful`注解分别用于标记无状态和有状态的会话bean。 5. **消息驱动bean(MDB)**:`@Message...
在EJB3.0中,MDB的配置和使用也大大简化,只需要通过`@MessageDriven`注解即可声明一个MDB。这使得应用可以异步处理任务,提高系统的可扩展性和响应性。MDB通常用于实现解耦的系统架构,处理如订单处理、日志记录等...
在EJB 2.1 示例中,我们看到Bean类实现了SessionBean接口,并需要手动管理环境上下文、数据源等资源。此外,还需要定义本地接口和部署描述符来配置EJB的行为。 而EJB 3.0 引入了注解(Annotations),显著减少了...
2. **实体bean的简化**:在EJB 3.0中,实体Bean(Entity Bean)基于Java Persistence API(JPA),它允许开发者使用普通的Java类来表示数据库实体,而无需继承特定的接口或实现特定的方法。JPA通过`@Entity`, `@...