EJB知识

EJB(Enterprise JavaBeans)是 Java EE(现称 Jakarta EE)平台的核心技术之一,用于开发分布式、可扩展、事务性的企业级应用。以下从基础到高级全面解析 EJB:

一、EJB 基础概念

1. 定义与角色

EJB 是服务器端组件模型,提供事务管理、安全控制、远程访问等企业级服务,无需手动编写底层代码。

2. EJB 类型
  • 会话 Bean(Session Bean)
    • 无状态会话 Bean(Stateless):不保存客户端状态,适合批量处理、数学计算等。
    • 有状态会话 Bean(Stateful):保存客户端会话状态,如购物车。
    • 单例会话 Bean(Singleton):全局唯一实例,适合缓存、配置管理。
  • 实体 Bean(Entity Bean):已被 JPA(Java Persistence API)取代。
  • 消息驱动 Bean(Message-Driven Bean, MDB):异步处理 JMS 消息,解耦服务。

二、EJB 核心组件

1. 接口与实现
  • 业务接口:定义客户端调用的方法(如Calculator接口)。
  • 实现类:使用@Stateless/@Stateful/@Singleton注解(如CalculatorBean)。
2. 生命周期管理
  • 容器管理 Bean 的创建、池化、销毁,无需手动管理内存。
3. 事务管理
  • 容器管理事务(CMT):通过@TransactionAttribute注解控制事务边界(如REQUIREDREQUIRES_NEW)。
  • Bean 管理事务(BMT):手动控制事务(UserTransaction)。
4. 安全机制
  • 声明式安全:通过@RolesAllowed注解限制方法访问权限。
  • 编程式安全:通过EJBContext.isCallerInRole()检查权限。

三、EJB 开发流程

1. 开发步骤示例

定义业务接口

实现无状态会话 Bean

import javax.ejb.Stateless;@Stateless
public class CalculatorBean implements Calculator {@Overridepublic int add(int a, int b) {return a + b;}
}

客户端调用

import javax.naming.Context;
import javax.naming.InitialContext;public class Client {public static void main(String[] args) throws Exception {Context ctx = new InitialContext();Calculator calculator = (Calculator) ctx.lookup("java:global/ejb-demo/CalculatorBean!com.example.Calculator");int result = calculator.add(5, 3);System.out.println("Result: " + result);}
}

四、高级特性

1. 远程与本地访问
  • 本地接口:同一 JVM 内调用(@Local)。
  • 远程接口:跨 JVM 调用(@Remote),需配置 JNDI 和网络协议。
2. 拦截器(Interceptor)
  • 通过@AroundInvoke注解实现方法调用前后的切面逻辑(如日志、性能监控)。
3. 定时器服务(Timer Service)
  • 使用@Schedule注解创建定时任务(如每日数据备份):
@Singleton
public class SchedulerBean {@Schedule(hour = "0", minute = "0")public void dailyBackup() {// 执行备份逻辑}
}
4. 依赖注入(DI)
  • 通过@EJB注解注入其他 EJB:
@Stateless
public class OrderService {@EJBprivate InventoryService inventoryService; // 注入另一个EJB
}
5. 异步方法调用
  • 使用@Asynchronous注解实现异步处理:
@Asynchronous
public Future<String> processLargeFile() {// 长时间任务...return new AsyncResult<>("处理完成");
}

五、EJB 与其他技术的关系

  1. 与 JPA 的结合:通过@PersistenceContext注入 EntityManager 管理数据库操作。
  2. 与 JMS 的结合:MDB 监听 JMS 队列 / 主题,实现消息驱动架构。
  3. 与 CDI 的结合:使用 CDI(Contexts and Dependency Injection)替代部分 EJB 功能。

六、部署与容器

  • 应用服务器:WildFly、GlassFish、WebLogic 等。
  • 部署描述符ejb-jar.xml(可选,推荐使用注解)。

七、最佳实践

  1. 优先使用无状态 Bean:提高可扩展性。
  2. 细粒度事务控制:避免长事务。
  3. 避免 EJB 循环依赖:通过接口解耦。
  4. 性能优化:合理配置池大小、使用异步处理。

八、常见问题

  1. 远程调用性能:网络开销大,优先使用本地调用。
  2. 事务超时:通过@TransactionTimeout调整超时时间。
  3. JNDI 查找复杂性:使用依赖注入简化查找。

九、EJB 3.2+ 新特性

  • 轻量级 EJB:支持嵌入式容器,减少对重量级应用服务器的依赖。
  • WebProfile:简化 EJB 规范,适用于 Web 应用。

十、与微服务对比

  • EJB:适合单体应用,依赖 Java EE 容器,强事务一致性。
  • 微服务:分布式架构,松耦合,语言无关,需额外实现服务发现、熔断等机制。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/86125.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/86125.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【项目管理】项目管理资料文档模板(ZIP,PPT,WORD)

项目交付文档 01项目详细调研计划编写规范V1.0.doc 03项目详细调研报告编写规范V1.0.doc 07软件需求规格说明书评审规范V1.0.doc 10.软件需求规格说明.doc 产品检查单,xls 工程评审.zip 软件标准过程集.zip 系统测试管理规程.docx 四)项目管理计划.doc 项目管理系统实施项目管理…

CentOS 6 Linux 系统添加永久静态路由的方法详解!

全文目录&#xff1a; 开篇语 **【详解】**1. **静态路由的概念与应用场景**1.1 **静态路由简介**1.2 **静态路由的应用场景** 2. **临时添加静态路由**2.1 **使用 route 命令临时添加静态路由**示例&#xff1a;添加一个临时路由 2.2 **查看当前路由表**2.3 **临时路由的局限性…

(mysql、oracle、pgsql、mongodb、redis、es)主流数据库的核心差异

以下是主流数据库的核心差异及适用场景的全面对比&#xff0c;结合技术特性和实际应用需求整理&#xff1a; &#x1f4ca; 一、数据库分类与核心差异 1. 关系型数据库&#xff08;RDBMS&#xff09; 数据库核心特点适用场景MySQL开源、读写性能均衡&#xff0c;易用性高&…

第8章:智能菜谱生成器——语言模型如何解析烹饪秘方

第8章:智能菜谱生成器——语言模型如何解析烹饪秘方 从语义理解到操作执行的完整技术解密 工业案例背景: 法国里昂的Bocuse d’Or国际烹饪大赛选手手册中记载这样一道经典指令:“将酱汁熬煮至Napp状态(即勺子划过痕迹缓慢回填)”。当传统NLP系统将其简单译为"煮浓&q…

零基础学前端-传统前端开发(第四期-JS基础)

经过前面学过的HTML,CSS的学习&#xff0c;相信大家已经可以使用进行常用的页面开发&#xff0c;接下来我们就要学习JavaScript&#xff0c;鉴于内容过多&#xff0c;需要长期练习 流程为&#xff1a;数据类型>>运算>>语法&#xff0c;语句>>对象>>数组…

机器学习-- 数据、数据集、评价模型

处理数据 相比于构建模型&#xff0c;机器学习从业者需要花更多的时间来评估、清理和转换数据。 数值数据表示整数或浮点值 其行为方式与数字类似的函数。也就是说&#xff0c;它们是可累加的、可数的、有序的&#xff0c; 依此类推。 尽管有些数据是是以数字方式存在&#…

Contos7 切换Yum源

最近朋友接了个活&#xff0c;需要部署的服务器是Contos7的&#xff0c;然后需要安装Docker&#xff0c;无法通过yum命令安装&#xff0c;Contos7的yum源已经不能使用了&#xff0c;那怎么办呢&#xff0c;我们可以切换为阿里云的yum源&#xff0c;具体操作如下 1.备份 mv /e…

本地编译LibreHardwareMonitor

刚更换了内存条和加装了一块固态硬盘&#xff0c;想看看更换和加装的硬件有没有问题&#xff0c;于是想到了使用软件监控硬件的温度是否有异常。在网上查了相关资料&#xff0c;看到了LibreHardwareMonitor这个工具。 1、下载LibreHardwareMonitor 源码 打开git 命令窗口&…

windows11 + ubuntu2204双系统+ros2 humble安装

文章目录 win11 ubuntu22 双系统准备工作步骤 1&#xff1a;使用 Rufus 制作 Ubuntu 启动盘步骤 2&#xff1a;设置 BIOS/UEFI 启动项步骤 3&#xff1a;安装 Ubuntu 22.04步骤 4&#xff1a;后续配置常见问题 ROS2 Humble 安装一、准备工作二、安装 ROS 2三、设置环境变量四、…

基于StarRocks的指标平台查询加速方案

项目背景 指标管理平台按指标查询类型可以划为落表指标和即席查询指标。 落表指标&#xff1a;可选择不同的维度生成多个结果表(每天提交任务写入结果表)&#xff0c;对指标进行取数的时候会根据查询条件自动匹配最合适的结果表进行查询。 即席查询指标&#xff1a;不产生结果…

Javaweb - 5 事件的绑定

目录 什么是事件 常见事件 鼠标事件 键盘事件 表单事件 事件的绑定方式 通过元素的属性绑定 通过 DOM 编程动态绑定 总结&#xff1a; 什么是事件 HTML 事件可以是浏览器行为&#xff0c;也可以是用户和行为。当一些行为发生时&#xff0c;可以自动触发对应的 JS 函数…

怎么让二级域名绑定到wordpesss指定的页面

要将二级域名(如 beijing.wodepress.com)绑定到 WordPress 指定页面(如 wodepress.com/beijing)&#xff0c;可以通过以下步骤实现&#xff1a; 1. 设置泛域名解析 在域名注册商的管理后台&#xff0c;添加一条泛域名解析记录&#xff1a; 主机记录&#xff1a;输入 *(星号)…

Ragflow源码:launch_backend_service.sh

流程图 #mermaid-svg-hRqGAXWC651HHOLZ {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-hRqGAXWC651HHOLZ .error-icon{fill:#552222;}#mermaid-svg-hRqGAXWC651HHOLZ .error-text{fill:#552222;stroke:#552222;}#me…

前端的跨域问题

前端新手也能看懂的跨域问题详解 在前端开发中&#xff0c;我们经常会听到“跨域问题”。尤其是在本地调试前端和后台接口时&#xff0c;浏览器突然抛出一堆报错信息&#xff0c;比如&#xff1a; Access to XMLHttpRequest at [http://api.xxx.com/data](http://api.xxx.com…

TCP 连接在异常情况下的断开机制

文章目录 一、进程(客户端)被 kill 掉1、kill [-15]2、kill -9 二、进程(客户端) core 掉 一、进程(客户端)被 kill 掉 详细验证流程 1、kill [-15] 2、kill -9 二、进程(客户端) core 掉

【甲方安全建设】持续渗透测试(一)

持续渗透测试是一种现代安全方法&#xff0c;它对针对组织数字资产的网络攻击进行实时或近实时模拟&#xff0c;确保在漏洞出现时识别并解决漏洞… 文章目录 行业洞察持续渗透测试不是什么&#xff1f;1. 非单一自动化漏洞扫描2. 非传统人工渗透测试的替代品3. 非万能解决方案4…

LOCAL PATTERNS GENERALIZE BETTER FOR NOVEL ANOMALIES

标题&#xff1a;局部模式在新颖异常上的泛化能力更强 原文链接&#xff1a;https://openreview.net/forum?id4ua4wyAQLm 源码链接&#xff1a;https://github.com/AllenYLJiang/Local-Patterns-Generalize-Better/ 发表&#xff1a;ICLR-2025 摘要 视频异常检测&#xff08;…

ABP vNext + Azure Application Insights:APM 监控与性能诊断最佳实践

ABP vNext Azure Application Insights&#xff1a;APM 监控与性能诊断最佳实践 &#x1f680; &#x1f4da; 目录 ABP vNext Azure Application Insights&#xff1a;APM 监控与性能诊断最佳实践 &#x1f680;1️⃣ 集成目标与环境要求 2️⃣ 安装 SDK 与注入服务 3️⃣ 日…

OPENGLPG第九版学习 - 纹理与帧缓存 part1

文章目录 6.1 纹理综述6.2 基木纹理类型6.3 创建并初始化纹理代理纹理 6.4 指定纹理数据6.4.1 显式设置纹理数据将静态数据载入到纹理对象 6.4.2 从缓存(目标对象GL_PIXEL_UNPACK_BUFFER)中加载纹理6.4.3 从文件加载图像(DDS为例)读取一个图像文件并返回内存中的纹素数据将纹素…

谁来定义未来座舱?新一代车载显示「C位」之战开启

在汽车智能网联化转型过程中&#xff0c;车载显示屏幕作为人车交互的重要载体&#xff0c;已经站上了迅猛发展的新起点。 一方面&#xff0c;伴随着汽车智能化的加速渗透与发展&#xff0c;传统中控屏与仪表显示屏的单一显示模式已经难以匹配智能化交互需求&#xff0c;车载显…