55.9. 事务支持
55.9.1. BAPI 事务模型
SAP 组件支持 BAPI 事务模型与 SAP 的出站通信。如有必要,带有将 transacted 选项设置为 true
的 URL 的目标端点将在端点的出站连接上启动有状态会话,并使用交换注册 Camel 同步对象。此同步对象将调用 BAPI 服务方法 BAPI_TRANSACTION_COMMIT
,并在处理消息交换完成后结束有状态会话。如果消息交换的处理失败,同步对象将调用 BAPI 服务器方法 BAPI_TRANSACTION_ROLLBACK
并结束有状态会话。
55.9.2. RFC 事务模型
tRFC 协议通过识别具有唯一事务标识符(TID)的每个事务请求来实现 AT-MOST-ONCE 发送和处理保证。协议中发送的每个请求的 TID。使用 tRFC 协议发送应用程序必须在发送请求时识别具有唯一 TID 的请求的每个实例。应用程序可能会多次发送给定 TID 的请求,但协议确保请求在接收系统中发送并处理最多一次。在发送请求时,应用程序可以选择在遇到通信或系统错误时重新发送给定 TID 的请求,因此请不确定,无论该请求是否在接收系统中发送和处理。通过在遇到通信错误时重新发送请求,使用 tRFC 协议的客户端应用可以确保 EXACTLY-ONCE 发送和处理其请求的保证。
55.9.3. 要使用哪些事务模型?
BAPI 事务是一种应用程序级别的事务,它对 SAP 数据库中 BAPI 方法或 RFC 功能采取的持久性数据更改实施 ACID 保证。RFC 事务是一种通信事务,在请求 BAPI 方法和/或 RFC 功能时,它会对交付保证(AT-MOST-ONCE、EXACTLY-ONCE-IN-ORDER)实施交付保证(AT-MOST-ONCE、EXACTLY-ONCE、EXACTLY-ONCE、EXACTLY-ONCE-IN-ORDER)。
55.9.4. 事务 RFC 目标端点
以下目的地端点支持 RFC 事务:
-
sap-trfc-destination
-
sap-qrfc-destination
单个 Camel 路由可以包含多个事务 RFC 目标端点,将消息发送到多个 RFC 目的地,甚至多次发送消息。这意味着 Camel SAP 组件可能需要跟踪每个 交换
对象通过路由传递的事务 ID (TID)。现在,如果路由处理失败且必须重试,这种情况会非常复杂。RFC 事务语义要求,每个 RFC 目的地都必须使用第一次 使用的相同 TID 调用(以及每个目的地的 TID 相互不同)。换句话说,Camel SAP 组件必须跟踪在路由中使用的 TID,并记住此信息,以便以正确顺序重新执行 TID。
默认情况下,Camel 不提供一种机制,使 Exchange
能够知道它在路由中的位置。要提供这样的机制,需要将 CurrentProcessorDefinitionInterceptStrategy
拦截器安装到 Camel 运行时。此拦截器必须安装到 Camel 运行时中,以便 Camel SAP 组件跟踪路由中的 TID。
55.9.5. 事务 RFC 服务器端点
以下服务器端点支持 RFC 事务:
-
sap-trfc-server
当 Camel 交换处理事务请求遇到处理错误时,Camel 通过其标准错误处理机制处理处理错误。如果 Camel 路由处理将交换配置为将错误传播到调用者,则启动交换的 SAP 服务器端点会记录失败,发送 SAP 系统会收到错误。然后,发送 SAP 系统可以通过发送具有相同 TID 的另一个事务请求来再次处理请求。