杰瑞科技汇

tuxedo与wtc在java

核心概念速览

用一个简单的比喻来理解:

tuxedo与wtc在java-图1
(图片来源网络,侵删)
  • Tuxedo (交易中间件):像一个经验丰富、纪律严明的“银行柜员”,他/她非常可靠,处理每一笔存款、取款(交易)都严格遵循SOP(标准操作流程),保证事务的完整性和数据的一致性,他/她不关心你从哪里来(Web、手机App),只关心你的业务请求是否合法、完整。
  • WTC (WebLogic Tuxedo Connector):像一个“翻译官 + 接待员”,他负责把外面世界(比如Java EE应用)的各种语言(HTTP请求、Web Service等)翻译成“银行柜员”(Tuxedo服务)能听懂的“行话”(Tuxedo协议),他也负责引导“客户”(Java请求)找到正确的“柜员”(Tuxedo服务)。

Tuxedo (BEA Tuxedo / Oracle Tuxedo)

是什么? Tuxedo 是一个成熟的、高性能的交易中间件,它不是一个应用服务器,而是一个专门为构建、管理和部署高可用、高性能、可扩展的联机事务处理 应用而设计的平台。

核心特点:

  1. 交易管理:这是 Tuxedo 的灵魂,它提供了强大的两阶段提交(2PC, Two-Phase Commit)机制,确保跨多个资源(如数据库)的操作要么全部成功,要么全部回滚,保证数据的一致性。
  2. 高性能与高吞吐量:Tuxedo 采用基于共享内存和消息队列的架构,避免了传统网络通信的开销,能够处理每秒数万甚至数十万的交易请求。
  3. 负载均衡与故障转移:可以将 Tuxedo 服务部署在多个服务器上(形成一个域),Tuxedo 会自动将请求分发到负载最轻的服务器,如果某个服务器宕机,请求会自动转移到其他健康的服务器上。
  4. 服务化架构:应用被封装成一系列独立的服务,客户端通过调用这些服务来完成业务逻辑,服务之间也可以互相调用,这非常符合现代微服务的理念,只是 Tuxedo 的实现更早、更底层。
  5. 网络通信与协议:Tuxedo 有自己专有的、高效的二进制通信协议(如 FML/Fielded Markup Language),这使得它在数据传输上比通用的 HTTP/HTTPS 更快。

在 Java 中的角色: 在传统的架构中,Tuxedo 服务通常是用 C/C++ 或 COBOL 编写的,这些服务构成了企业的核心业务逻辑层,Java 应用(例如一个基于 WebLogic 的 Web 应用)通常不直接运行在 Tuxedo 上,而是作为前端,通过某种方式与 Tuxedo 这个后端核心进行交互。


WTC (WebLogic Tuxedo Connector)

是什么? WTC 是 Oracle WebLogic Server 提供的一个资源适配器,遵循 J2EE Connector Architecture (JCA) 规范,它的唯一目的就是让运行在 WebLogic 上的 Java 应用能够与 Tuxedo 域进行无缝、高效的通信。

tuxedo与wtc在java-图2
(图片来源网络,侵删)

核心功能:

  1. 协议转换:这是 WTC 最核心的功能,它将 Java 应用使用的标准协议(如 JMS, RMI, JTA)转换为 Tuxedio 能理解的专有协议,反之亦然,Java 开发者无需关心 Tuxedo 底层的复杂协议。
  2. 服务调用:WTC 提供了一套 API(通常通过 JNDI 查找 Tuxedo 服务),使得 Java 代码可以像调用本地方法一样,透明地调用远程的 Tuxedo 服务。
  3. 事务集成:WTC 实现了 JCA 的 javax.resource.cci.LocalTransactionjavax.resource.cci.Transaction 接口,这使得 Java 应用可以参与分布式事务,一个 Java 方法可以:
    • 更新本地的 WebLogic 数据库。
    • 通过 WTC 调用 Tuxedo 服务,更新 Tuxedo 管理的另一个数据库。
    • 这两个操作要么全部成功提交,要么全部回滚,WTC 会与 Tuxedo 的交易管理器(TM)协作,完成这一过程。
  4. 连接管理:WTC 负责管理到 Tuxedo 域的连接池,提高了性能和资源利用率。
  5. 安全集成:WTC 可以将 WebLogic 的安全上下文(如用户身份)传递给 Tuxedo,实现统一的安全认证。

Tuxedo 与 WTC 的协同工作流程

下面是一个典型的 Java 应用通过 WTC 调用 Tuxedo 服务的流程:

架构图:

+----------------+      +-------------------+      +----------------+
|  Java Client   |----->|  WebLogic Server  |----->|    WTC         |
| (e.g., Servlet)|      | (Java EE App)     |      | (Resource      |
|                |      |                   |      |  Adapter)      |
+----------------+      +-------------------+      +-------+--------+
                                                          |
                                                          | (Tuxedo Protocol)
                                                          v
+--------------------------------------------------------+--------+
|                     Tuxedo Domain                        |
|  +----------------+  +----------------+  +----------------+  |
|  |  Tuxedo Server |  |  Tuxedo Server |  |  Tuxedo Server |  |
|  |   (Service A)  |  |   (Service B)  |  |   (Service C)  |  |
|  +----------------+  +----------------+  +----------------+  |
|          |                      |                      |       |
|          |                      |                      |       |
|          +----------------------+----------------------+       |
|                     |         |         |                    |
|               (Shared Memory / Message Queue)              |
+--------------------------------------------------------+--------+
                                                          |
                                                          | (Database Connection)
                                                          v
+--------------------------------------------------------+
|                  Databases (Oracle, DB2, etc.)          |
+--------------------------------------------------------+

详细步骤:

  1. 配置:在 WebLogic 管理控制台中,配置一个 WTC 连接池,你需要指定 Tuxedo 域的访问地址、监听端口、用户名、密码、安全组等信息。
  2. Java 代码调用
    • Java 应用(如一个 EJB 或 Servlet)通过 JNDI 查找 WTC 提供的连接工厂。
    • 从连接工厂获取一个连接。
    • 使用连接对象,通过服务名和参数,调用一个 Tuxedo 服务(tuxedoService.call("UPDATE_ACCOUNT", params))。
  3. WTC 处理
    • WTC 接收到这个调用请求。
    • 它将 Java 对象的参数序列化成 Tuxedo 能理解的 FML 格式(或其他格式)。
    • 通过配置好的网络连接,将这个请求包发送到 Tuxedo 域的访问点。
  4. Tuxedo 处理
    • Tuxedo 接收请求,根据服务名找到对应的服务器进程。
    • 服务器进程执行业务逻辑(更新数据库)。
    • 执行完成后,将结果返回给 WTC。
  5. 返回结果
    • WTC 接收 Tuxedo 返回的结果,并将其反序列化成 Java 对象。
    • WTC 将 Java 对象返回给调用它的 Java 代码。
  6. 事务处理(如果涉及)
    • 如果整个操作是在一个 EJB 方法中,并且该方法声明了 @TransactionAttribute(REQUIRED)
    • 当 EJB 方法成功完成时,WebLogic 的事务管理器会通过 WTC 通知 Tuxedo 提交事务。
    • EJB 方法抛出异常,WebLogic 会通知 Tuxedo 回滚事务,Tuxedo 进而回滚它所做的所有数据库操作。

现代视角:为什么还需要这个组合?

在微服务和云原生盛行的今天,有人会问:为什么还要用这么“古老”的 Tuxedo+WTC 组合?

答案是:存量系统维护和渐进式现代化

  • 核心系统的稳定性:许多大型企业的核心交易系统(如银行的核心账务系统)已经稳定运行在 Tuxedo 上十几年甚至更久,这些系统经过了最严苛的业务和时间考验,直接重写风险极高、成本巨大。
  • 现代化前端体验:企业需要构建现代化的 Web 应用、移动 App 来提供更好的用户体验,这些前端应用非常适合用 Java (Spring Boot, Jakarta EE) 来开发。
  • WTC 是完美的桥梁:WTC 就扮演了连接“新世界”(Java Web)和“旧世界”(Tuxedo Core)的桥梁角色,企业可以逐步用新的 Java 服务替换旧的 Tuxedo 服务,或者让新的 Java 服务直接调用旧的 Tuxedo 服务,实现系统的平滑过渡和现代化改造,而无需一夜之间颠覆整个 IT 架构。
特性 Tuxedo WTC
角色 交易中间件,核心业务逻辑的执行者 WebLogic 与 Tuxedo 之间的资源适配器/连接器
功能 高性能交易处理、负载均衡、事务管理 协议转换、服务调用、事务集成、连接管理
技术栈 C/C++, COBOL, FML, 专有协议 Java, JCA, JMS, JTA, JNDI
在架构中 后端核心系统 前端 Java 应用与后端 Tuxedo 系统之间的桥梁
目标 保证核心交易的高性能、高可用、数据一致性 让 Java 应用能够透明、安全、事务性地调用 Tuxedo 服务

Tuxedo 是强大的“引擎”,而 WTC 是将 Java 应用连接到这个“引擎”的“传动轴”,它们共同构成了许多大型企业稳定、可靠的业务基石。

分享:
扫描分享到社交APP
上一篇
下一篇