当前位置: 首页 > news >正文

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 容器,强事务一致性。
  • 微服务:分布式架构,松耦合,语言无关,需额外实现服务发现、熔断等机制。

相关文章:

  • 研磨材料 东莞网站建设成都网站快速排名提升
  • 上海建筑公司排名性价比高seo的排名优化
  • 基于j2ee的网站开发设计开题报告百度seo排名工具
  • 有哪些sns网站刷移动关键词优化
  • 个人可以做淘宝客网站吗google play下载官方版
  • 微信设计网站建设微信搜一搜排名优化
  • NCCN Guidelines Navigator:数智化工具引领肿瘤精准治疗新纪元
  • linux安装docker
  • 国内优秀wordpress主题推荐
  • 量学云讲堂2025朱永海慢牛开启第58期视频课程
  • 设计模式 | 工厂模式
  • 大模型推理-高通qnn基础
  • SpringMVC系列(三)(请求处理的十个实验(上))
  • MySQL常用函数性能优化及索引影响分析
  • PAC 学习框架:机器学习的可靠性工程
  • AI Agent模型:Plan-and-Execute、ReAct、Function Calling
  • leetcode-2138.将字符串划分为若干个长度为k的组
  • 数据库系统总结
  • 鸿蒙工具类---设置全屏效果(上下安全区背景可设置)
  • 常用的串口通信工具MobaXterm、Bus Hound、SScom等
  • GNSS位移监测站的应用场景
  • 轻巧灵动,智启未来 ——Kinova Gen3 Lite 机器人轻松解锁各行业自动化新姿势
  • 云原生灰度方案对比:服务网格灰度(Istio ) 与 K8s Ingress 灰度(Nginx Ingress )
  • TCP/UDP协议深度解析(二):TCP连接管理全解,三次握手四次挥手的完整流程
  • SoC仿真环境中自定义printf函数的实现
  • 微算法科技融合Grover算法与统一哈希函数的混合经典-量子算法技术,可在多领域高效提升文本处理效率