### EJB方面介绍
#### 1. EJB2.0的内容及其应用场景
EJB2.0,即Enterprise JavaBeans 2.0规范,是Java EE平台的重要组成部分之一,旨在为开发分布式企业级应用提供一种标准化的方法。EJB2.0相较于EJB1.1,在功能上有了显著的增强,主要体现在以下几方面:
- **Bean提供者**:负责编写EJB组件代码的专业开发者。
- **应用程序装配者**:决定如何配置EJB组件,以及如何将它们与其他资源绑定在一起的人员。
- **EJB容器**:提供运行时环境的关键组件,负责管理EJB的整个生命周期,包括创建、销毁、激活和钝化等过程。此外,EJB容器还负责处理与数据库的连接、安全管理、事务管理等功能。
- **EJB配置工具**:辅助应用程序装配者进行EJB组件配置的工具。
- **EJB服务提供者**:提供特定服务(如事务管理和安全性管理)的组件。
- **系统管理员**:负责部署和管理EJB应用的人员。
与EJB1.1相比,EJB2.0增加了对远程接口的支持、更精细的事务控制、更强大的安全性机制等新特性。这些改进使得EJB2.0能够更好地支持复杂的企业级应用开发。
#### 2. EJB与JavaBean的区别
**JavaBean**是Java平台上的可重用组件,虽然没有严格的定义,但通常指的是具有公共getter和setter方法的简单Java类。为了便于容器管理和使用,JavaBean通常具有无参数的构造函数,并实现了`Serializable`接口以便于实现持久化。JavaBean主要用于表示简单的数据结构,类似于微软COM模型中的本地进程内组件,仅限于本地进程访问。
**Enterprise JavaBeans (EJB)**则是一种用于构建分布式应用的企业级组件模型。EJB基于Java远程方法调用(RMI)技术,可以跨进程甚至跨计算机访问。EJB必须部署在专门的容器(如IBM WebSphere、Oracle WebLogic等)中,客户端通过容器间接访问EJB组件。EJB容器负责管理EJB组件的生命周期,并提供事务管理、安全性管理等高级服务。
#### 3. EJB的实现基础及SessionBean与EntityBean的区别
EJB是基于Java平台的一系列关键技术实现的,主要包括:
- **JNDI (Java Naming and Directory Interface)**:用于查找和定位远程对象。
- **RMI (Remote Method Invocation)**:实现远程对象的调用。
- **JAT (Java Transaction API)**:提供事务管理服务。
EJB主要包括两种类型的组件:**SessionBean**和**EntityBean**。
- **SessionBean**:用于封装业务逻辑的组件,可以进一步划分为**Stateful Session Bean**和**Stateless Session Bean**。
- **Stateful Session Bean**:维护与特定客户端交互的状态信息。这意味着每个客户端通常都有一个对应的Stateful Session Bean实例。这种方式适用于需要保持会话状态的应用场景。
- **Stateless Session Bean**:不维护客户端状态,每次调用时都可以由任何可用的实例处理请求。这种方式更节省资源,适用于不需要持续会话的应用场景。
- **EntityBean**:用于表示持久化数据的对象,相当于数据库表的抽象模型。根据持久化方式的不同,EntityBean又可以分为**CMP (Container-Managed Persistence)**和**BMP (Bean-Managed Persistence)**两种类型。CMP由容器管理持久化逻辑,而BMP则由Bean本身负责。
#### 4. EJB的生命周期及事务管理
- **SessionBean**:
- **Stateful Session Bean**的生命周期是从客户端首次调用时创建实例开始,直到客户端结束会话或者显式地销毁该Bean为止。
- **Stateless Session Bean**的生命周期更加灵活,容器会在客户端请求时动态创建和销毁Bean实例。
- **事务管理**:EJB容器提供了两种事务管理策略——**容器管理的事务(CMT)**和**Bean管理的事务(BMT)**。CMT由容器自动管理事务边界,而BMT则需要Bean代码显式地控制事务的开始和提交/回滚。
EJB2.0为开发分布式企业应用提供了强大且灵活的支持,通过细致的角色划分和技术选型,使得开发者能够专注于业务逻辑的实现,而将复杂的事务管理、安全性等非功能性需求交由容器处理。