网络编程框架
- 格式:doc
- 大小:118.00 KB
- 文档页数:8
Java中的Web开发框架有哪些在Java中,有多种用于Web开发的框架。
这些框架提供了一套工具和结构,帮助开发人员快速构建可靠、高效的Web应用程序。
本文将介绍几种常用的Java Web开发框架。
一、Spring MVCSpring MVC是一个基于Java的轻量级Web框架,它是Spring框架的一部分。
Spring MVC通过使用模型-视图-控制器(MVC)的设计模式,将应用程序的不同组件分离开来。
它提供了灵活的配置选项和强大的功能,包括请求映射、表单处理、数据验证和视图解析等。
Spring MVC也支持RESTful风格的Web服务开发。
二、StrutsStruts是另一个受欢迎的Java Web框架,它遵循MVC设计模式。
Struts框架提供了一种结构化的方法来构建Web应用程序。
它使用Struts配置文件来管理请求和处理逻辑,同时提供了多种标签库和表单验证机制。
Struts还支持国际化和本地化,使得开发多语言应用程序更加简便。
三、JSFJavaServer Faces(JSF)是Java EE的一部分,它是一种用于构建用户界面的Web框架。
相比于其他框架,JSF更加面向组件。
它提供了一系列可重用的UI组件,开发人员可以通过简单地组合这些组件来构建复杂的用户界面。
JSF还具有良好的可扩展性和集成性,可以轻松地与其他Java技术和框架进行集成。
四、Play框架Play框架是一个用于构建Web应用程序的响应式全栈框架。
它采用了基于Actor模型的异步编程模型,这使得Play应用程序能够处理高并发和高吞吐量的请求。
Play框架还提供了内置的开发工具和自动重新加载功能,使得开发变得更加高效。
此外,Play还支持多种数据库和模板引擎,开发人员可以根据自己的需求进行选择。
五、Spring BootSpring Boot是一个用于简化Spring应用程序开发的框架。
它提供了一种约定优于配置的方式,通过自动配置和快速启动器,可以快速构建独立运行的、生产级别的Spring应用程序。
netty源码编译Netty是一种高性能的、异步的、事件驱动的网络编程框架。
它提供了简单而强大的API,可以帮助开发人员更轻松地构建各种网络应用程序。
Netty的核心是一个基于NIO的异步事件编程框架,可以更好地利用系统资源,提高网络应用程序的性能。
在本文中,我们将详细介绍如何从源码编译Netty。
首先,我们需要准备编译Netty所需的工具和环境。
一、准备工作要编译Netty源码,我们需要安装以下工具和环境:1. JDK:Netty是用Java编写的,因此我们需要安装JDK。
建议使用JDK 8或更高版本。
2. Git:我们需要使用Git来获取Netty的源代码。
安装Git并配置好环境变量。
3. Maven:Netty使用Maven作为构建工具,因此我们需要安装Maven并配置好环境变量。
4. IDE:你可以选择使用任何你熟悉的Java开发IDE,如IntelliJ IDEA或Eclipse。
二、获取源码1.打开终端或命令提示符,切换到一个你准备存放源码的目录。
2. 运行以下命令来克隆Netty的源代码仓库:```shell```这将会获取Netty的最新源码。
三、编译源码1. 打开终端或命令提示符,切换到Netty源码目录。
2.运行以下命令来开始编译:```shellmvn clean install -DskipTests```这将会使用Maven编译Netty的源码。
`-DskipTests`参数是可选的,用于跳过运行单元测试。
编译完成后,你可以在`target`目录中找到编译生成的JAR包。
四、使用IDE开发如果你想使用IDE来开发Netty源码,你可以导入源码到你的开发IDE中。
1. 打开你的IDE,并打开Netty源码目录作为项目。
2.根据IDE的不同,可能需要执行一些配置步骤来正确导入项目。
请参考你的IDE文档来完成这些步骤。
3. 一旦项目导入成功,你就可以开始在IDE中开发Netty源码了。
10个适合后端程序员的前端框架-回复前端框架在现代Web开发中扮演着至关重要的角色,它们为后端程序员提供了一种快速、高效地构建优质用户界面的方法。
然而,对于后端程序员来说,选择正确的前端框架可能是一项挑战。
在本文中,我们将介绍10个适合后端程序员的前端框架,并详细回答一些关键问题,帮助后端程序员更好地理解它们的功能和优势。
1. AngularJS:- AngularJS是一种由Google开发的JavaScript框架,适用于构建单页应用程序(SPA)。
它采用模块化的方法,并提供了一种声明式的方式来构建用户界面。
- AngularJS提供了一系列强大的功能,如数据绑定、依赖注入、路由等,使得后端程序员可以更加容易地构建复杂的Web应用程序。
2. React:- React是由Facebook开发的JavaScript库,用于构建用户界面。
它采用了组件化的开发方式,使得开发人员可以将界面拆分成独立的、可重用的组件。
- React使用虚拟DOM(Virtual DOM)的概念,以提高渲染性能。
后端程序员可以利用其简洁的API和优秀的生态系统来构建交互性强的用户界面。
3. Vue.js:- Vue.js是一种轻量级的JavaScript框架,可用于构建交互式用户界面。
它具有类似于AngularJS和React的功能,但语法更加简洁易懂。
- Vue.js的核心库相对较小,可以轻松地与现有的项目集成。
后端程序员可以快速上手,并在短时间内构建出高质量的用户界面。
4. Ember.js:- Ember.js是一种开发Web应用程序的JavaScript框架,它具有强大的和约定俗成的架构设计。
它提供了一系列高级功能,如数据绑定、模板引擎、路由等。
- Ember.js的约定俗成的设计和丰富的生态系统,使后端程序员能够快速地构建可维护和可扩展的Web应用程序。
5. Backbone.js:- Backbone.js是一种轻量级的JavaScript框架,适用于构建单页应用程序。
.NET框架(.NET Framework)是微软开发的一种跨语言集成平台,用于构建和运行各种类型的应用程序,包括桌面应用程序、Web应用程序和移动应用程序等。
它提供了一套丰富的类库和工具,支持多种编程语言,包括C#、、F#等。
.NET框架的设计目标是提供一个统一的、高效的开发环境,使得开发者可以使用一种或多种语言编写应用程序,并且能够在不同平台上运行。
它包括以下几个关键组件:Common Language Runtime(CLR):CLR是.NET框架的核心组件,它提供了一种称为“公共语言规范”(Common Language Specification, CLS)的跨语言规范,使得不同的编程语言可以互操作。
CLR还负责应用程序的内存管理、线程管理和异常处理等任务。
Base Class Library(BCL):BCL是一组用于构建应用程序的类库,它提供了许多实用的类和接口,包括文件操作、网络通信、数据库访问、图形界面等。
Intermediate Language(IL):IL是一种中间语言,也称为微软中间语言(Microsoft Intermediate Language, MSIL)。
它是一种跨平台的编程语言,被编译成可执行文件后可以在任何支持.NET框架的平台上运行。
Just-In-Time (JIT)编译器:JIT编译器是将IL代码编译成本地代码的编译器,它在运行时将IL代码转换为机器代码,从而提高应用程序的性能。
垃圾回收器:垃圾回收器负责自动管理应用程序的内存,自动回收不再使用的内存,避免内存泄漏和内存溢出等问题。
实现.NET框架需要遵循一定的规范和标准,包括公共语言规范(CLS)、公共类型系统(CTS)和公共二进制接口(CMI)。
同时,还需要开发各种工具和库,以支持不同的编程语言和开发场景。
libhv用法范文libhv是基于事件驱动的高性能网络编程框架,主要用于快速开发可扩展的网络应用程序。
libhv提供了一些核心组件和工具,如事件驱动的网络库、HTTP服务器、协程调度器等,方便开发者构建高性能、高可用性的网络应用程序。
下面将重点介绍libhv的用法,包括网络库的使用、HTTP服务器的开发以及协程的编程。
一、网络库的使用1.创建网络服务使用hvlisten函数创建一个TCP服务监听套接字,示例代码如下:```hv::EventLoopPtr loop(new hv::EventLoop();hv::TcpServerPtr tcp(new hv::TcpServer(loop));tcp->bind("0.0.0.0", 8080);tcp->onMessage([](const hv::TcpConnPtr& conn, const char* buf, int len)conn->send(buf, len);});tcp->start(;```2.处理网络事件使用循环调用hvevent函数处理网络事件,示例代码如下:```hv::EventLoop loop;while (true)loop.hvevent(1000); // 处理网络事件,超时时间1秒// do other things```二、HTTP服务器的开发1.创建HTTP服务器```HttpResponse resp;resp.setBody("Hello, World!");resp.setContentType("text/plain");ctx->sendResponse(resp);});```2.处理HTTP请求使用onHttpRequest函数设置请求处理函数,示例代码如下:```HttpRequest& req = ctx->request(;HttpResponse resp;resp.setBody("Hello, " + req.getPath();resp.setContentType("text/plain");ctx->sendResponse(resp);});```三、协程的编程1.创建协程使用co创建一个协程,示例代码如下:```co([// do something});```2.协程同步通信使用cocall可以在协程之间同步调用,示例代码如下:```std::string result = cocall([// do somethingreturn "result";});```3.协程并发编程使用co_parallel函数可以在多个协程之间并发执行,示例代码如下:```co_parallel([co([// do something});co([// do something});});```总结:libhv是一个非常强大的网络编程框架,可以帮助开发者快速构建高性能的网络应用程序。
twisted基础教程Twisted是一个事件驱动的网络编程框架,它是用Python语言实现的。
它提供了高层次的抽象和工具,用于构建异步网络应用程序。
Twisted拥有强大的事件处理和分发机制,它可以帮助开发者更容易地处理并发请求和响应。
在本教程中,我们将介绍Twisted的基础知识和用法。
1. Twisted的安装Twisted可以通过pip工具进行安装,只需运行以下命令:pip install Twisted2.异步编程模型Twisted采用异步编程模型,这意味着代码不是按照顺序执行的。
相反,程序会注册一个或多个事件处理器,当事件发生时会触发相应的处理函数。
这种编程模型可以更高效地处理大量的并发请求。
3.事件驱动编程在Twisted中,所有的IO操作都是非阻塞的。
当需要进行IO操作时,Twisted会注册一个事件处理器,并在操作完成时触发相应的处理函数。
这样可以避免阻塞整个程序的执行。
4. Protocol和ReactorProtocol是Twisted中的关键概念之一,它定义了数据的传输方式和协议规范。
通过实现Protocol接口,我们可以定义自己的数据传输协议。
Reactor是Twisted的核心组件,它负责管理事件循环,处理IO事件和调度任务。
我们通过创建一个Reactor对象并将其运行起来,就可以开始使用Twisted来处理事件了。
5.创建TCP服务器下面是一个简单的Twisted TCP服务器的示例代码:from twisted.internet import reactor, protocolclass MyProtocol(protocol.Protocol):def dataReceived(self, data):self.transport.write(b'You said: ' + data)class MyFactory(protocol.Factory):def buildProtocol(self, addr):return MyProtocolreactor.listenTCP(8000, MyFactory()reactor.run这段代码创建了一个TCP服务器,它监听8000端口,并在接收到数据时返回相同的数据。
(1)介绍Netty框架Netty是一个基于NIO的网络框架,提供了易于使用的API和高性能的网络编程能力。
它被广泛应用于各种网络通信场景,包括游戏服务器、聊天系统、金融交易系统等。
Netty的优点在于其高度的可定制性和灵活性,能够满足各种复杂的网络通信需求。
(2)介绍MQTT协议MQTT是一种基于发布/订阅模式的轻量级通信协议,最初是为传感器网络设计的,具有低带宽、低功耗等特点,能够在不可靠的网络环境下实现可靠的消息传递。
MQTT广泛应用于物联网、移动设备通信、实时数据传输等领域,受到了广泛的关注和应用。
(3)Java中使用Netty框架实现MQTT通过在Java中使用Netty框架实现MQTT协议,可以实现高性能、可靠的消息传递系统。
在实际项目中,可以基于Netty框架快速开发定制化的MQTT服务器或客户端,满足各种特定的通信需求。
下面我们将介绍一个基于Netty框架实现MQTT的案例。
(4)案例介绍我们以一个智能家居控制系统为例,介绍如何使用Java和Netty框架实现MQTT协议。
假设我们有多个智能设备(如灯、风扇、空调等)和一个中心控制系统,智能设备与中心控制系统通过MQTT协议进行通信。
我们将分为以下几个步骤来实现该案例:(5)搭建MQTT服务器我们需要搭建一个MQTT服务器,用于管理智能设备和接收他们发送的消息。
我们可以使用Netty框架开发一个基于MQTT协议的服务器,监听指定的端口,接收来自智能设备的连接和消息。
(6)实现MQTT客户端我们需要为每个智能设备实现一个MQTT客户端,用于与MQTT服务器进行通信。
我们可以使用Netty框架开发一个基于MQTT协议的客户端,连接到MQTT服务器并发送相应的消息。
(7)消息的发布和订阅在该案例中,我们将实现消息的发布和订阅功能。
智能设备可以向MQTT服务器发布状态信息,比如灯的开关状态、温度传感器的温度等;中心控制系统可以订阅这些信息,及时获取智能设备的状态并做出相应的控制。
netty usereventtriggered 原理Netty是一个基于Java的高性能网络编程框架,提供了异步事件驱动、高性能和可扩展性的网络应用程序开发。
在Netty中,UserEventTriggered是一个触发用户事件的Handler方法,它的工作原理如下:1. Netty的事件模型:Netty使用事件驱动的方式实现高效的网络通信。
它使用事件循环模型来处理输入和输出的数据流。
事件循环是一个无限循环,通过不断地处理事件并触发相应的回调方法来驱动网络通信。
Netty中有一个事件循环组(EventLoopGroup),其中包含多个事件循环(EventLoop),每个事件循环都负责处理特定的网络通信任务。
2. 用户定义的事件:在Netty中,用户可以定义自己的事件,并通过UserEventTriggered方法触发这些事件。
UserEventTriggered是一个ChannelInboundHandlerAdapter类中的一个方法,当Netty框架接收到用户定义的事件时,会调用这个方法来处理用户事件。
3. ChannelPipeline和ChannelHandler:Netty中的用户事件是通过ChannelPipeline来传递的。
ChannelPipeline是一个处理器链,用于管理ChannelHandler的执行顺序。
当Netty收到一个事件时,它会根据ChannelPipeline中的Handler顺序来执行处理逻辑。
当用户定义事件被触发时,Netty会根据ChannelHandler的类型选择合适的方法进行回调,其中就包括UserEventTriggered方法。
4. 触发用户事件:用户事件可以由以下几种方式触发:- 用户主动触发:用户可以通过Channel的writeAndFlush方法向网络发送一个事件,然后在ChannelPipeline的后续Handler中接收并处理这个事件。
编程框架介绍编程框架是指在软件开发过程中,为了提高开发效率和降低复杂度而提供的一种工具或者一组工具的集合。
它们提供了一种结构化的方式来组织和管理代码,同时还提供了一系列的函数、类和接口等,以便开发人员能够更加方便地进行开发工作。
本文将介绍几种常见的编程框架,并对它们的特点和应用进行简要描述。
1. Spring框架Spring框架是一个开源的Java应用程序框架,它主要用于构建企业级应用程序。
Spring框架提供了一系列的模块,包括依赖注入、面向切面编程、事务管理、MVC框架等。
它的核心原则是松耦合、面向接口编程和依赖注入。
Spring框架的主要优点是提供了很好的解耦能力,使得开发人员可以更加专注于业务逻辑的实现。
2. Django框架Django框架是一个基于Python的Web应用程序框架,它以快速开发和高效设计为目标。
Django框架提供了一系列的工具和库,用于处理URL路由、表单验证、数据库操作等常见的Web开发任务。
它的主要特点是简单易用、功能丰富和高效稳定。
Django框架的设计理念是DRY(Don't Repeat Yourself),即避免重复代码,提高开发效率。
3. React框架React框架是一个用于构建用户界面的JavaScript库。
它由Facebook开发并开源,目的是为了解决构建大规模应用程序的性能问题。
React框架采用了虚拟DOM(Virtual DOM)的概念,通过比较虚拟DOM和真实DOM的差异来减少DOM操作次数,从而提高性能。
React框架还提供了一套组件化的开发模式,使得开发人员可以将界面拆分成独立的组件,提高代码的可维护性和复用性。
4. TensorFlow框架TensorFlow框架是一个用于机器学习和深度学习的开源软件库。
它由Google开发并开源,支持多种编程语言,如Python、C++等。
TensorFlow框架提供了一系列的API和工具,用于构建和训练神经网络模型。
PythonWeb框架TwistedPythonWeb框架Twisted是一个强大、灵活的框架,用于快速构建高性能、可扩展的网络应用程序。
它的设计理念是事件驱动的异步网络编程,提供了丰富的功能和工具,使开发者能够快速、高效地构建各种网络应用。
一、Twisted框架的特点Twisted框架具有以下几个主要特点:1. 异步:Twisted采用事件驱动的异步编程模型,通过回调机制实现非阻塞式的网络通信。
这种设计模式可以有效地提高网络应用的性能和并发处理能力。
2. 多协议支持:Twisted支持多种网络协议,包括TCP、UDP、HTTP、SMTP等,使开发者能够轻松地构建各种类型的网络应用。
3. 组件化:Twisted框架内置了许多可重用的组件,如网络协议解析器、事件循环、日志系统等,开发者可以基于这些组件构建自己的网络应用,加快开发速度。
4. 扩展性:Twisted提供了丰富的扩展接口和机制,开发者可以根据自己的需求自定义和扩展框架的功能,实现灵活而定制化的开发。
二、Twisted框架的应用场景Twisted框架广泛应用于各种网络应用的开发中,包括但不限于以下几个方面:1. 网络服务器:通过Twisted框架,开发者可以快速构建高性能的网络服务器,如Web服务器、聊天服务器等。
框架提供了HTTP协议解析器和Web服务的支持,可以轻松处理Web请求和响应。
2. 分布式应用:Twisted框架的异步编程模型使其非常适合构建分布式应用。
开发者可以利用框架提供的底层网络通信功能来实现分布式任务调度、消息传递等功能。
3. 网络爬虫:Twisted框架提供了强大的网络抓取工具和异步的网络访问接口,非常适合构建网络爬虫应用。
开发者可以利用框架提供的功能轻松地抓取和处理各种网络资源。
4. 实时通信:Twisted框架支持UDP和TCP协议,可以用于构建实时通信应用,如即时通讯软件、实时游戏等。
框架的异步编程模型和事件驱动的设计使其能够处理大量的并发连接和消息传递。
网络编程框架Socket编程接口NIO编程接口Leader Follower 原理SEDA原理Netty编程框架Mina编程框架Web编程框架分布式应用∙负载均衡器/Load Balancer Session Stickiness∙内存状态复制/Replication Sysch-replicationAsych-replication∙Local CacheConcurrentHashMapFastMapLocal QueueQueuesQueues类似于沟通“生产者”和“消费者”的管道。
组件从管道的一端放入,然后从另一端取出:“先进先出”(FIFO)的顺序。
Queue接口在JavaSE5新添加到java.util中的,能够被用于单线程访问的场景中,主要适用于多个生产者、一个或多个消费者的情景,所有的读写操作都是基于同一个队列。
java.util.concurrent包中的BlockingQueue接口是Queue的子接口,而且还添加了新的特性处理如下场景:队列满(此时刚好有一个生产者要加入一个新的组件)、队列空(此时刚好有一个消费者读取或者删除一个组件)。
BlockingQueue提供如下方案解决这些情况:一直阻塞等待直到其他线程修改队列的数据状态;阻塞一段时间之后返回,如果在这段时间内有其他线程修改队列数据,那么也会返回。
Deque在JavaSE6中新增加了两端都可以添加和删除的队列-Deque (发音"deck",not "dick"). Deques不仅可以从一端添加元素,从另一端移除,而且两端都可以添加和删除元素。
如同BlockingQueue,BlockingDeque接口也为阻塞等待和超时等待的特殊情况提供了解决方法。
因为Deque继承Queue、BlockingDeque继Deque的一个特殊应用场景是只在一个端口进行添加、删除、检查操作--堆栈(first-in-last-out顺序)。
Deque接口提供了stack相同的方法:push(), pop()和peek(),这方法和addFirst(), removeFirst(), peekFirst()一一对应,可以把Deque的任何一个实现类当做堆栈使用。
表6中是JDK中Deque和BlockingDeque的实现。
注意Deque继承Queue,BlockingDeque继承自BlockingQueue。
分布式缓存CoherenceJboss CacheMem Cache分布式数据存储数据库的垂直划分和水平划分数据库的读写分离分布式事务分布式事务处理是指一个事务可能涉及多个数据库操作,分布式事务处理的关键是必须有一种方法可以知道事务在任何地方所做的所有动作,提交或回滚事务的决定必须产生统一的结果(全部提交或全部回滚)。
X/Open DTP 模型简介X/Open组织(即现在的Open Group)定义了分布式事务处理模型。
X/Open DTP模型(1994)包括应用程序(AP)、事务管理器(TM)、资源管理器(RM)、通信资源管理器(CRM)四部分。
一般,常见的事务管理器(TM)是交易中间件,常见的资源管理器(RM)是数据库,常见的通信资源管理器(CRM)是消息中间件。
The X/Open DTP model is a model for software architecture that allows multiple application programs to share resources provided by multiple resource managers, and allows their work to be coordinated into global transactions.The X/Open DTP model identifies the key entities in a distributed transaction processing environment and standardizes their roles and interactions. The entities are: The transaction processing monitor (TM)∙The resource manager (RM)∙The application program (AP)This section discusses the X/Open DTP functional model, including its major components and their interfaces. The following figure shows the X/Open DTP model.A conceptual view of the X/Open DTP model通常把一个数据库内部的事务处理,如对多个表的操作,作为本地事务看待。
数据库的事务处理对象是本地事务,而分布式事务处理的对象是全局事务。
所谓全局事务,是指分布式事务处理环境中,多个数据库可能需要共同完成一个工作,这个工作即是一个全局事务,例如,一个事务中可能更新几个不同的数据库。
对数据库的操作发生在系统的各处但必须全部被提交或回滚。
此时一个数据库对自己内部所做操作的提交不仅依赖本身操作是否成功,还要依赖与全局事务相关的其它数据库的操作是否成功,如果任一数据库的任一操作失败,则参与此事务的所有数据库所做的所有操作都必须回滚。
一般情况下,某一数据库无法知道其它数据库在做什么,因此,在一个DTP环境中,交易中间件是必需的,由它通知和协调相关数据库的提交或回滚。
而一个数据库只将其自己所做的操作(可恢复)影射到全局事务中。
XA就是X/Open DTP定义的交易中间件与数据库之间的接口规范(即接口函数),交易中间件用它来通知数据库事务的开始、结束以及提交、回滚等。
XA接口函数由数据库厂商提供。
XA 与两阶段提交协议Basic algorithmCommit request phase/voting phase1.The coordinator sends a query to commit message to all cohorts and waits until ithas received a reply from all cohorts.2.The cohorts execute the transaction up to the point where they will be asked tocommit. They each write an entry to their undo log and an entry to their redo log.3.Each cohort replies with an agreement message (cohort votes Yes to commit), ifthe cohort's actions succeeded, or an abort message (cohort votes No, not tocommit), if the cohort experiences a failure that will make it impossible to commit.Commit phase/Completion phaseSuccessIf the coordinator received an agreement message from all cohorts during the commit-request phase:1.The coordinator sends a commit message to all the cohorts.2.Each cohort completes the operation, and releases all the locks and resources heldduring the transaction.3.Each cohort sends an acknowledgment to the coordinator.4.The coordinator completes the transaction when acknowledgments have beenreceived.FailureIf any cohort votes No during the commit-request phase (coordinator will send an abort message):1.The coordinator sends a rollback message to all the cohorts.2.Each cohort undoes the transaction using the undo log, and releases the resourcesand locks held during the transaction.3.Each cohort sends an acknowledgement to the coordinator.4.The coordinator undoes the transaction when all acknowledgements have beenreceived.通常情况下,交易中间件与数据库通过XA 接口规范,使用两阶段提交来完成一个全局事务,XA规范的基础是两阶段提交协议。
在第一阶段,交易中间件请求所有相关数据库准备提交(预提交)各自的事务分支,以确认是否所有相关数据库都可以提交各自的事务分支。
当某一数据库收到预提交后,如果可以提交属于自己的事务分支,则将自己在该事务分支中所做的操作固定记录下来,并给交易中间件一个同意提交的应答,此时数据库将不能再在该事务分支中加入任何操作,但此时数据库并没有真正提交该事务,数据库对共享资源的操作还未释放(处于上锁状态)。
如果由于某种原因数据库无法提交属于自己的事务分支,它将回滚自己的所有操作,释放对共享资源上的锁,并返回给交易中间件失败应答。
在第二阶段,交易中间件审查所有数据库返回的预提交结果,如所有数据库都可以提交,交易中间件将要求所有数据库做正式提交,这样该全局事务被提交。
而如果有任一数据库预提交返回失败,交易中间件将要求所有其它数据库回滚其操作,这样该全局事务被回滚。
以一个全局事务为例,AP首先通知交易中间件开始一个全局事务,交易中间件通过XA接口函数通知数据库开始事务,然后AP可以对数据库管理的资源进行操作,数据库系统记录事务对本地资源的所有操作。