最近我在学习 EJB3。关于它的无状态会话Bean,我有一些困惑。
按照 EJB3 规范,容器会为每一种无状态会话 Bean 创建一定数量的实例,然后将它们保存在一个缓冲池(pool) 里面,然后根据调用的情况,将它们在调用者之间分配。书上特别强调了,因为这些 bean 都是无状态的,所以自由度很高。比如说,一个对象调用了无状态会话 Bean 的方法A,执行了一段时间;然后,又调用了同一个 Bean 的方法B。但实际上,它调用的是实例 1 的方法A,和实例 2 的方法B。只不过这一切,对调用者来说都是透明的。
这就是我的困惑所在。我们都知道,可以用无状态的 Singleton 来封装一些领域服务。比如说,UserService,就可以是一个 Singleton class。在实际使用时,可以用 IoC 容器的依赖注入方法得到它的一个(全 JVM 唯一的)Singleton 实例,然后再调用它里面的方法,比如说:
public class ... {
private UserService userService;
public void setUserService(UserService v) {
// IoC 容器将会注入 UserService 的一个实现的实例,
// 这也将是整个 JVM 共享的一个实例。
userService = v;
}
...
public boolean isValidUser(String username, String password) {
User user = userService.processLogin(username, password);
return (user != null);
}
}
一切都很基础。
我现在主要的问题就是,EJB 容器为无状态会话 Bean 创建多个实例并缓冲,到底有什么特别的好处?既然他们是无状态的,为什么不可以整个系统共享一个实例呢?难道说,多个实例的执行效率更高?这似乎颠覆了我个人的 JVM 基本概念.....
请各位指教。谢谢。
分享到:
相关推荐
- **会话Bean (Session Bean)**:分为有状态会话Bean和无状态会话Bean,主要用于封装业务逻辑。 - **实体Bean (Entity Bean)**:在EJB 2.x中用于持久化数据到数据库,但在EJB 3.0中已经被JPA(Java Persistence API...
2. **有状态会话Bean**:与无状态会话Bean相反,有状态会话Bean能保留与特定用户会话相关的信息,适合处理需要持久会话状态的情况。 3. **实体Bean**:代表数据库中的记录,通过JPA进行持久化操作。实体Bean可以是...
4. **会话 Bean**:无状态会话Bean(@Stateless)用于处理业务逻辑,不保存任何客户端状态,而有状态会话Bean(@Stateful)可以保持客户端会话期间的状态。此外,还有单例会话Bean(@Singleton),在整个应用程序中...
3. **定义bean**:创建一个Java类,并添加适当的注解,例如`@Stateless`,以声明这是一个无状态会话bean。实现业务逻辑方法。 4. **创建接口**:对于客户端调用,创建一个接口,并将bean的方法声明为远程接口。 5....
例如,`@Stateless`、`@Stateful`、`@Singleton`、`@MessageDriven`等注解分别表示无状态会话bean、有状态会话bean、单例bean和消息驱动bean。 **EJB3.0的主要特性** 1. **注解驱动**:EJB3.0通过注解实现组件的...
在Spring框架中,依赖注入(Dependency Injection,简称DI)和控制反转(Inversion of Control,简称IoC)是核心概念,它们旨在简化组件之间的耦合,提高代码的可测试性和可维护性。IoC指的是应用程序的控制权由原本...
- **新特性**:EJB 3.0中的新特性包括但不限于:无接口视图、容器管理实体、轻量级容器、本地会话Bean等。 - **简化编程模型**:EJB 3.0的目标之一是降低复杂性,使开发人员能够更轻松地编写和维护企业级应用程序。 ...
- **无状态Session Bean(Stateless Session Bean)**:对于多个客户端请求,服务器可能会复用相同的bean实例,不保留客户端状态。 2. **Message Driven Bean(MDB)**:用于处理消息队列(JMS)中的消息,常用于...
无状态会话Bean适用于不维护用户会话信息的场景,而有状态会话Bean则可以跟踪用户的交互状态。 - **实体Bean(Entity Beans)** 实体Bean对应于数据库中的持久化对象,通常用于表示业务对象,如客户、订单等。...
EJB可以是会话bean(Session Beans)、实体bean(Entity Beans)或消息驱动bean(Message-Driven Beans)。使用IDE如Eclipse或IntelliJ IDEA可以方便地进行这些操作。 **3. 数据库操作** EJB 3.0引入了实体bean的...
Spring Bean有单例(singleton)、原型(prototype)、请求(request)、会话(session)和全局会话(global session)等作用域,每个作用域对应不同的对象创建和存活策略。 10. Spring的嵌入beans是什么? 嵌入...
Spring的诞生与Rod Johnson的两本著作紧密相关。第一本是《Expert One-on-One J2EE Design and Development》,书中首次提出了Spring的核心思想,这本书在2002年出版。第二本是《Expert One-on-One J2EE Development...
### Spring框架概述与核心概念详解 #### 1. Spring框架简介 Spring框架是一个全面且功能强大的Java开发平台,旨在简化企业级应用的开发过程。它通过提供一系列的基础性支持和服务,帮助开发者解决常见的编程问题,...
- 会话bean代表了客户端的临时会话,分为Stateful(有状态)和Stateless(无状态)两种。 - Stateful Session Bean维护与特定客户端的会话状态,每个客户端请求对应一个唯一的bean实例。 - Stateless Session ...
#### 四、依赖注入与Bean管理 - **依赖注入** (DI): 一种设计模式,用于降低组件间的耦合度,使代码更易于理解和维护。 - **属性注入** (Property Injection): 通过 setter 方法将依赖注入到 Bean 中。 - **构造...
5. **EJB3.0的关联**:虽然EJB 3.0不是一个主要技术,但可能会看到一些EJB的轻量级替代,比如使用`@Stateless`或`@Singleton`注解的无状态会话bean,它们在Spring容器中以类似的方式工作。 6. **部署和测试**:将...
6.8.1. 在Spring中使用AspectJ进行domain object的依赖注入 6.8.2. Spring中其他的AspectJ切面 6.8.3. 使用Spring IoC来配置AspectJ的切面 6.8.4. 在Spring应用中使用AspectJ加载时织入(LTW) 6.9. 更多资源 7...
6.8.1. 在Spring中使用AspectJ进行domain object的依赖注入 6.8.2. Spring中其他的AspectJ切面 6.8.3. 使用Spring IoC来配置AspectJ的切面 6.8.4. 在Spring应用中使用AspectJ加载时织入(LTW) 6.9. 更多资源 7...
此外,会话Bean也变得更轻量级,支持无状态和有状态会话Bean,并引入了名为"Singleton"的新会话Bean类型。 2. **JSF 1.2**:JavaServer Faces (JSF) 1.2是J2EE 5中的用户界面框架,提供了模型-视图-控制器(MVC)...