博客
关于我
数据源面试三连杀:是啥?为什么要用?怎么用?
阅读量:417 次
发布时间:2019-03-06

本文共 1602 字,大约阅读时间需要 5 分钟。

一、概述

在日常项目中,数据源是必不可少的。然而,当我们面对分布式事务时,数据源与传统的非分布式事务场景又有何不同?在J2EE环境中,分布式事务又是如何实现的?这些问题的解答就是本文的主要内容。

二、数据源

2.1 数据源是什么

数据源是存储数据的物理位置。在J2EE中,数据源通过Java对象接口表示。例如,数据库可以通过JDBC连接接口提供数据源。这些对象使J2EE应用能够与数据库进行交互,获取数据源。

2.2 数据源的设计

从UML图中可以看出,CommonDaraSource是对数据源概念的顶层抽象,规定了数据源必须实现的方法。数据源有三种主要实现类型:

  • DataSource:基本实现,用于生成标准Connection对象。
  • ConnectionPoolDataSource:连接池实现,通过逻辑连接池化管理数据库物理连接,减少频繁的连接创建和释放,提升性能。
  • XAConnection:专为分布式事务设计,生成XA支持的事务连接,并提供XAResource进行XA事务处理,支持多个资源的协调。

三、为什么需要XA数据源

3.1 XA数据源是什么

XA数据源指的是支持XA规范的数据源,能够参与分布式事务处理。XA规范定义了分布式事务处理模型,适用于多个资源管理器协调完成的复杂交易。

3.2 XA规范是什么

XA规范是分布式事务处理的标准,定义了三种角色和两个协议:

  • AP(应用程序):发起事务请求的应用程序。
  • RM(资源管理器):通常指数据库,负责管理资源并参与事务处理。
  • TM(事务管理器):协调和管理分布式事务,提供API接口。
  • XA协议:事务管理器与资源管理器之间的通信接口。
  • TX协议:应用程序与事务管理器之间的通信接口。

3.3 分布式事务的作用

在分布式环境中,一个全局事务需要协调多个资源(如数据库和消息队列)完成。只有所有操作成功,才能保证最终一致性,否则所有操作会回滚。这正是XA数据源的核心作用。

3.4 使用XA的场景

  • 需要将数据存储在多个数据库中,并保证所有操作的一致性。
  • 需要在一个事务中同时发送消息和更新数据库。
  • 希望在一个事务中将域信息存储在不同系统的数据库中。

四、如何使用分布式事务

4.1 J2EE分布式事务

Java事务编程接口(JTA)和Java事务服务(JTS)为J2EE平台提供了分布式事务支持。JTA通过XA规范实现分布式事务,JTS则规定了JTA中角色间的交互细节。

在J2EE中,分布式事务涉及事务管理器和支持XA协议的资源管理器。JTA提供了四个核心接口:

  • UserTransaction:开发人员操作的事务接口,用于控制事务流程。
  • TransactionManager:管理事务资源,作为UserTransaction和Transaction的桥梁。
  • Transaction:物理事务实例,关联到当前线程和XAResource。
  • XAResource:资源提供商实现的接口,支持XA事务操作。

使用JTA实现分布式事务的基本流程是:调用UserTransaction.begin()创建事务,关联到当前线程;然后通过Transaction和XAResource进行操作,最后调用commit或rollback。

4.2 使用J2EE分布式事务

  • 主流应用服务器如WebLogic、WebSphere和JBoss都提供JTA和XA支持。
  • Tomcat不自带JTA支持,需要依赖第三方框架如JOTM或Automikos。

五、总结

本文介绍了数据源和XA数据源的概念,分析了分布式事务的作用和应用场景,并阐述了J2EE如何通过JTA实现分布式事务。此外,还提到了柔性事务作为另一种分布式事务解决方案。

六、参考

作者:Karina Varela

翻译:小青菜

来源:本文由Spring4all技术翻译组完成

关注公众号:后端面试那些事儿

转载地址:http://gdyuz.baihongyu.com/

你可能感兴趣的文章
OpenCV与AI深度学习 | OpenCV常用图像拼接方法(一) :直接拼接
查看>>
OpenCV与AI深度学习 | OpenCV常用图像拼接方法(三):基于特征匹配拼接
查看>>
OpenCV与AI深度学习 | OpenCV常用图像拼接方法(二) :基于模板匹配拼接
查看>>
OpenCV与AI深度学习 | OpenCV常用图像拼接方法(四):基于Stitcher类拼接
查看>>
OpenCV与AI深度学习 | OpenCV快速傅里叶变换(FFT)用于图像和视频流的模糊检测(建议收藏!)
查看>>
OpenCV与AI深度学习 | PaddleOCR 2.9 发布, 正式开源文本图像智能分析利器
查看>>
OpenCV与AI深度学习 | SAM2(Segment Anything Model 2)新一代分割一切大模型介绍与使用(步骤 + 代码)
查看>>
OpenCV与AI深度学习 | T-Rex Label !超震撼 AI 自动标注工具,开箱即用、检测一切
查看>>
OpenCV与AI深度学习 | YOLO11介绍及五大任务推理演示(目标检测,图像分割,图像分类,姿态检测,带方向目标检测)
查看>>
OpenCV与AI深度学习 | YOLOv10在PyTorch和OpenVINO中推理对比
查看>>
OpenCV与AI深度学习 | YOLOv11来了:将重新定义AI的可能性
查看>>
OpenCV与AI深度学习 | YOLOv8自定义数据集训练实现火焰和烟雾检测(代码+数据集!)
查看>>
OpenCV与AI深度学习 | YOLOv8重磅升级,新增旋转目标检测,又该学习了!
查看>>
OpenCV与AI深度学习 | 一文带你读懂YOLOv1~YOLOv11(建议收藏!)
查看>>
OpenCV与AI深度学习 | 五分钟快速搭建一个实时人脸口罩检测系统(OpenCV+PaddleHub 含源码)
查看>>
OpenCV与AI深度学习 | 什么是 COCO 数据集?
查看>>
OpenCV与AI深度学习 | 低对比度缺陷检测应用实例--LCD屏幕脏污检测
查看>>
OpenCV与AI深度学习 | 使用 MoveNet Lightning 和 OpenCV 实现实时姿势检测
查看>>
OpenCV与AI深度学习 | 使用 OpenCV 创建自定义图像滤镜
查看>>
OpenCV与AI深度学习 | 使用 SAM 和 Grounding DINO 分割卫星图像
查看>>