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

WebSphere Application Server(WAS)8.5.5教程第十讲

续前篇。

一、事务管理

WebSphere Application Server(WAS) 的事务管理是一大优势,相比于 Tomcat 等轻量级服务器,WAS 提供了 企业级事务管理(JTA,Java Transaction API) 支持,特别适用于复杂的 分布式事务 场景,比如涉及多个数据库、JMS 消息、EJB 的场合。

1、什么是事务管理?

事务管理是一种机制,用于保证一组操作要么全部成功(提交),要么全部失败(回滚),从而保持数据的一致性。

WebSphere 提供的事务管理是基于 JTA(Java Transaction API) 实现的,属于 Java EE 规范的一部分,支持:

  • 本地事务(Local Transaction):一个数据源内的事务(如单个数据库连接)

  • 全局事务(Global Transaction):多个资源之间的事务协调(如多个数据库 + JMS)

2、WAS 事务管理关键组件

组件名说明
Transaction Manager(事务管理器)WAS 内置组件,协调资源之间的提交和回滚操作
JTA 接口支持应用可以通过 javax.transaction.UserTransaction 或容器管理事务
数据源(JDBC)或 JMS 连接工厂(Connection Factory)必须启用事务支持(XA)才能参与全局事务
事务日志(Transaction Logs)存储事务状态,确保崩溃恢复
应用服务器容器支持对 EJB、Servlet、JMS 自动管理事务边界(声明式事务)

3、事务管理使用方式(两种)

1. 容器管理事务(CMT - Container Managed Transaction)

这是在 EJB、JPA、JMS、JAX-RS 中最常用的方式,开发者不需要手动控制事务边界,只需使用注解或配置:

@Stateless
public class OrderService {@EJBprivate InventoryBean inventory;public void createOrder() {// WebSphere 自动开启事务inventory.reserveItem();// 如果发生异常,容器自动回滚事务}
}

你可以在 ejb-jar.xml 或使用注解 @TransactionAttribute 配置事务属性,比如 REQUIRED, REQUIRES_NEW。 

2. 程序管理事务(BMT - Bean Managed Transaction)

通过 javax.transaction.UserTransaction 显式管理事务,适用于 Servlet、JSP、普通 Java 类。

@Resource
UserTransaction ut;public void doSomething() {try {ut.begin();// 操作数据库或其他资源ut.commit();} catch (Exception e) {ut.rollback();}
}

注意:UserTransaction 只能在 JTA 支持的环境中使用(WAS 支持,Tomcat 不支持)。

4、配置使用(WAS 控制台)

在 WAS 控制台中,你可以做以下事务相关配置:

1.导航到:

服务器 -> 服务器类型 -> WebSphere Application Server -> [你的服务器] -> 事务服务

2.配置选项包括:

配置项说明
启用事务日志崩溃后可以恢复未完成事务
总事务超时时间控制事务最多运行多久
允许全局事务必须开启才能支持多个资源参与
启用恢复启用故障恢复机制
并发控制支持事务间并发行为的控制

5、与 Tomcat 的对比

特性WASTomcat
JTA 支持原生支持,完整事务协调器不支持,需要集成第三方如 Atomikos、Bitronix
XA 事务支持(数据库、JMS)不支持
容器事务管理支持 EJB 和容器自动管理事务不支持(除非整合 Spring)
恢复与日志记录支持事务恢复和 crash recovery无内置支持

6、典型使用场景

  • 多个数据库操作事务一致性(如分布式金融系统)

  • JMS + DB 的一致性(先写数据库再发消息)

  • 业务流程自动补偿机制支持

  • EJB 模块间事务协调

7、最佳实践建议

  1. 优先使用容器管理事务,简洁且不容易出错。

  2. 配置合理的事务超时,防止死锁或长事务。

  3. 开启事务日志和恢复功能,保障系统可靠性。

  4. 若涉及 多个资源(DB + JMS),请使用 支持 XA 的资源适配器

二、示例

本次目标:

  • 配置 XA 数据源 支持全局事务。

  • 配置 JMS + 数据库事务协调

  • Java 服务任务中管理事务

  • 使用 事务日志 进行故障排查。

1、创建支持事务的 XA 数据源

XA 数据源允许多个资源(如数据库、JMS 等)参与全局事务。通过 WebSphere 控制台,你可以配置 XA 数据源,使其支持分布式事务。

步骤 1:进入数据源配置页面

  1. 登录到 WebSphere 管理控制台。

  2. 导航到 资源JDBC数据源(Data sources)。

步骤 2:创建 XA 数据源

  1. 点击 新建

  2. 选择 XA 数据源,然后点击 下一步

  3. 填写以下信息:

    • 数据源名称:如 MyXADataSource

    • JDBC 驱动:选择合适的数据库驱动(例如:Oracle XA DataSourceDB2 XA)。

    • 数据库连接信息:填写数据库主机、端口、数据库名、用户名、密码等。

    • 事务管理类型:选择 全局事务(XA)

  4. 配置连接池大小、连接超时等其他参数。

  5. 点击 下一步,然后 完成

步骤 3:测试数据源

  1. 在数据源配置完成后,点击 测试连接 按钮,确保连接成功。

  2. 确保数据源能够正确连接到数据库,并且支持 XA 分布式事务。

2、配置 JMS 和数据库的事务协调

JMS(Java Message Service)和数据库通常需要协调事务,确保消息发送和数据库更新一致。通过配置 事务管理器XA 数据源,可以实现 JMS 和数据库的事务协调。

步骤 1:创建 JMS 连接工厂

  1. 导航到 资源JMS连接工厂

  2. 创建一个新的连接工厂,选择 XA 连接工厂

  3. 配置连接工厂的相关属性,包括:

    • JMS 服务端点(如 ActiveMQ、IBM MQ)。

    • 连接池大小等。

步骤 2:配置 JMS 队列或主题

  1. JMS 设置下,创建 JMS 队列JMS 主题

  2. 配置队列的 全局事务 支持,确保消息在事务中传递。

  3. 确保队列和数据库都配置为 XA 资源,以便事务可以跨多个资源工作。

步骤 3:配置 JMS 事务管理

  1. JMS 连接工厂 中,启用事务支持。
    确保 JMS 事务 被启用,允许消息的发送与数据库操作在同一个事务内执行。

  2. 配置事务超时和消息传递的事务行为。

3、在 Java 服务任务中管理事务

Java 服务任务 中,你可以手动管理事务(称为程序管理事务,BMT),控制事务的提交和回滚。

步骤 1:在 Java 服务任务中使用 UserTransaction 控制事务

  1. Process Designer 中,创建或编辑一个服务任务。

  2. 在服务任务代码中使用 javax.transaction.UserTransaction 来手动控制事务的边界。

import javax.transaction.UserTransaction;
import javax.naming.InitialContext;
import javax.naming.NamingException;public class TransactionExample {public void execute() {try {InitialContext context = new InitialContext();UserTransaction ut = (UserTransaction) context.lookup("java:comp/UserTransaction");// 开始事务ut.begin();// 执行数据库操作、JMS 消息发送等performDatabaseOperation();sendMessage();// 提交事务ut.commit();} catch (Exception e) {// 事务回滚try {ut.rollback();} catch (Exception rollbackEx) {rollbackEx.printStackTrace();}}}private void performDatabaseOperation() {// 数据库操作代码}private void sendMessage() {// 发送 JMS 消息的代码}
}

步骤 2:控制事务的提交与回滚

  • 使用 ut.begin() 开始事务。

  • 使用 ut.commit() 提交事务。

  • 如果出现异常,使用 ut.rollback() 回滚事务。

4、使用事务日志进行故障恢复和排查

WebSphere 提供了 事务日志,帮助在系统崩溃或失败时恢复未提交的事务。你可以通过以下方式配置和查看事务日志:

步骤 1:启用事务日志

1.在 WebSphere 控制台中,导航到:

服务器 > 服务器类型 > WebSphere Application Server > [你的服务器名称] > 容器设置 > 容器服务 > 事务服务

2.在 事务服务 配置页面中,确保 启用事务日志事务恢复 被启用。

步骤 2:查看事务日志

  • WebSphere 会将事务日志写入文件系统,日志文件通常位于:

<WAS_INSTALL_DIR>/profiles/<PROFILE_NAME>/logs/<SERVER_NAME>/transaction
  • 你可以查看这些日志,分析事务的提交、回滚记录以及可能的失败原因。

步骤 3:故障恢复

  • 如果 WebSphere 在处理事务时发生崩溃,事务日志会帮助恢复未完成的事务。

  • WebSphere 会自动根据事务日志恢复所有未提交的事务,确保数据一致性。

5、总结与最佳实践

操作建议
XA 数据源配置启用分布式事务,确保数据库和 JMS 一致性
JMS 和数据库事务协调配置 XA 连接工厂和队列,确保跨资源事务一致性
Java 服务任务事务管理使用 UserTransaction 明确控制事务提交和回滚
启用事务日志与恢复开启事务日志,确保事务失败时可以恢复

通过这些配置,你可以在 WebSphere 中灵活地管理事务,保证在复杂的分布式环境中,涉及多个资源(如数据库、JMS)时的一致性。 

未完,待续!

相关文章:

  • appstore 管理后台,如何更改已有的预览和截屏
  • 26-RTOS的基本介绍
  • 【 开源:跨平台网络数据传输的万能工具libcurl】
  • Bert预训练任务-MLM/NSP
  • Python打卡训练营day29-类的装饰器
  • 并发编程实战--对象的共享
  • 基于机器学习的策略开发和Backtrader回测
  • JAVA SE — 循环与分支和输入输出
  • VS Code + Maven 创建项目
  • JDK8中的 Stream流式编程用法优化(工具类在文章最后)
  • 【记录】PPT|PPT打开开发工具并支持Quicker VBA运行
  • C++初阶-list的使用1
  • Ubuntu 通过指令远程命令行配置WiFi连接
  • GuzzleHttp和DomCrawler的具体用途?
  • 【自用-python】生成准心居中exe程序,防止云电脑操作时候鼠标偏移
  • 谷歌开源医疗领域多模态生成式AI模型:medgemma-4b-it
  • 关于常见日志的几种级别和格式
  • mapbox V3 新特性,实现三维等高线炫酷效果
  • 工业物联网中隐私保护入侵检测的联邦学习增强型区块链框架
  • MyBatis-Plus的自带分页方法生成的SQL失败:The error occurred while setting parameters
  • 青岛建网站/一个新品牌如何推广
  • 小豹子韬韬是哪个网站做的/富阳网站seo价格
  • 个人域名备案快的网站/百度推广开户多少钱
  • wordpress in排序/西安seo报价
  • 日本a片女人和狗做的网站/seo搜索引擎推广
  • 阿里巴巴怎么做企业网站/奖券世界推广网站