### EJB必须掌握的核心概念 #### 一、从J2EE整体架构理解EJB **EJB**(Enterprise JavaBeans)作为**J2EE**(Java 2 Platform, Enterprise Edition)框架的重要组成部分,主要用于构建分布式应用程序和服务。它采用面向对象的设计原则,并基于CORBA(Common Object Request Broker Architecture)标准来实现分布式计算环境下的对象交互。此外,EJB还利用了RMI(Remote Method Invocation)等底层技术来完成跨网络的远程方法调用。 值得注意的是,EJB是一个行业标准,需要部署在支持EJB的容器中才能运行。这意味着开发者不需要关注底层细节,如事务处理、安全性和并发控制等,这些都由容器自动管理。 #### 二、EJB与JavaBean的区别 - **EJB**运行在服务器端,负责处理业务逻辑和数据管理等复杂任务。 - **JavaBean**则通常运行在客户端或任何其他需要使用它们的地方,主要用于封装简单的数据和行为。 在J2EE架构中,Web端实际上是“客户端”程序的一部分,因此JavaBean通常用于表示层和控制层,而EJB则更多地应用于业务逻辑层和服务层。 #### 三、EJB的分类及其主要用途 根据功能不同,EJB可以分为以下几类: 1. **会话Bean (Session Bean)**: - **无状态会话Bean (Stateless Session Bean)**:不维护与客户端之间的会话状态,适用于执行短期业务逻辑操作。 - **有状态会话Bean (Stateful Session Bean)**:维护与客户端之间的会话状态,适用于需要保持长期状态的应用场景。 2. **实体Bean (Entity Bean)**: - **容器管理持久化 (CMP, Container Managed Persistence)**:由容器自动管理实体Bean的持久化,减轻开发者的工作负担。 - **Bean管理持久化 (BMP, Bean Managed Persistence)**:开发者需手动编写持久化相关的代码,灵活性较高但开发成本也相对较高。 3. **消息驱动Bean (MDB, Message Driven Bean)**: - 接收并处理来自消息队列的消息,基于**JMS**(Java Message Service)实现。 #### 四、EJB的发展历程 - 在**EJB 1.1**之前,主要提供了**会话Bean**和**实体Bean**两种组件。 - 自**EJB 2.0**开始,引入了**消息驱动Bean**作为新组件,进一步增强了EJB框架的功能性和扩展性。 #### 五、三种EJB的关系 在J2EE架构中,三种EJB组件之间的关系通常是: 1. **远程客户端**可以通过**会话Bean**来访问和操作**实体Bean**。 2. **消息驱动Bean**作为异步消息处理组件,通常与其他两种EJB组件协同工作。 实践中,最常用的组合是**会话Bean** + **实体Bean**,这种模式能够有效分离业务逻辑和数据管理,提高系统的可维护性和扩展性。 #### 六、会话Bean与实体Bean的主要方法 - **会话Bean**: - `ejbActivate()`:从实例池中取出已有的对象继续使用。 - `ejbPassivate()`:将暂时不用的对象保存在实例池中等待再次被使用。 - 远程方法必须在远程接口中定义,以便远程客户端能够调用。 - **实体Bean**: - `create()`:创建一个新的实体Bean实例。 - `ejbCreate()`:在实体Bean实例创建过程中执行的操作。 - `ejbPostCreate()`:实体Bean实例创建后的初始化操作。 - `ejbStore()`:实体Bean的状态改变后触发,用于更新数据库。 - `remove()`:删除实体Bean实例。 - `ejbRemove()`:删除实体Bean实例时执行的操作。 - `findById()`:通过ID查找实体Bean实例。 #### 七、BMP与CMP的区别 - **CMP**:容器管理持久化,所有持久化操作由容器自动完成,开发人员只需关注业务逻辑。 - **BMP**:Bean管理持久化,所有持久化操作由开发者手动编写代码实现,增加了开发的复杂度。 两者的主要区别在于: 1. **代码形式**:CMP通常以抽象类和抽象方法的形式出现,而BMP则是具体的操作类,所有方法都需要开发者自行实现。 2. **执行效率**:由于CMP由容器自动管理,可能会导致效率较低;相比之下,BMP因为手动管理,效率较高。 3. **可移植性**:CMP具有更高的可移植性,而BMP则较低。 #### 八、EJB的方法调用过程 1. **初始化JNDI上下文**: ```java Context ctx = new InitialContext(); ``` 2. **查询远程HOME接口**: ```java RemoteHome home = (RemoteHome) ctx.lookup("JNDI名称"); ``` 3. **通过HOME接口产生REMOTE接口的实例化对象**: ```java Remote remote = home.create(); ``` 4. **调用远程方法**: ```java remote.远程方法(); ``` #### 九、EJB代码的组成 EJB代码主要由以下几个部分组成: 1. **容器自动生成的代码**:例如会话Bean的状态管理和实体Bean的持久化操作等。 2. **EJBAPI提供的代码**:EJB API定义了一组接口和类,用于实现EJB的各种功能。 3. **开发人员自己编写的代码**:包括业务逻辑的实现和其他非容器管理的部分。 #### 十、EJB中的六种角色 1. **EJB服务器提供商**:提供EJB服务器软件,包括容器和相关工具。 2. **EJB容器提供商**:负责实现特定类型的EJB容器,例如会话Bean容器、实体Bean容器等。 3. **EJB组件提供商**:开发和提供EJB组件,如具体的会话Bean和实体Bean等。 4. **EJB组装人员**:负责将多个EJB组件组合成完整的应用程序。 5. **部署人员**:负责将应用程序部署到EJB服务器上。 6. **系统管理员**:负责监控和维护EJB服务器的运行状态。 总结而言,EJB是J2EE框架中不可或缺的一部分,它提供了一套完整的解决方案来构建复杂的企业级应用。掌握了上述核心概念后,开发者能够在实际项目中更加高效地运用EJB技术,实现高性能、高可靠性的分布式应用程序。
- 粉丝: 1
- 资源: 7
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- JavaFx写的端口检测工具
- (源码)基于SpringBoot和Vue的博客系统.zip
- 精选微信小程序源码:班夫旅游小程序(旅游类)小程序(含源码+源码导入视频教程&文档教程,亲测可用)
- (源码)基于SpringMVC框架的旅游产品管理系统.zip
- ArcGIS Pro ADCore DAML.md
- 16-Flink与Kubernetes Operator集成实践与经验
- 15-Flink from YARN to Kubernetes: 资源优化和容器化实践
- (源码)基于PyTorch的BERT情感二分类系统.zip
- 14-Flink Kubernetes Operator 从1.4.0 升级到1.6.0的技术手册
- (源码)基于RTThread实时操作系统的g1632设备控制项目.zip