同步处理是Spring事务支持主要内容之一,也是其它框架的内容之一.Spring事务同步处理类是org.springframework.transaction.support.TransationSynchronization.
成员变量
status_committed 事务提交成功
status_rolled_back 事务回滚成功
status_unknown 由异常引起的事务状态。这些异常可分为启发式异常和系统异常。启发式异常全部是处理JTA事务时出现的,所谓“启发式”就是在二阶段事务提交期间,有些或全部参与事务的资源管理器作出智能化决定,做出有违请求的处理,比如你发起提交,它智能的回滚;你发起回滚,它智能的提交(犯贱的举动)JTA规范中有介绍
javax.transaction.HeuristicCommitException 发起rollback,所有的资源都进行了提交操作
javax.transaction.HeuristicMixedException 发起commit或rollback,部分资源提交,部分回滚
javax.transaction.HeuristicRollbackException 发起commit,所有的资源回滚
方法
suspend 事务挂起时的动作,一般会调用TransactionSynchronizationManager.unbindResource以挂起当前线程的资源holder,同时,可以进行一些优化操作,例如使用hibernate时,可以关闭所有Statement和Result并清理缓存
resume 事务恢复时,将之前挂起的资源holder绑定到当前线程TransactionSynchronizationManager.bindResource
beforeCommit 事务提交前调用(优化暗示),如果只读使用hibernate时,不会flush
beforeCompletion 事务提交或回滚前调用(资源清理),后于beforeCommit
afterCommit 事务提交后调用(例如,业务完成后可以发消息,日志记录等)
afterCompletion 事务提交会回滚后调用,清理资源同时正确处理资源holder
/*
* Copyright 2002-2006 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.springframework.transaction.support;
/**
* Interface for transaction synchronization callbacks.
* Supported by AbstractPlatformTransactionManager.
*
* <p>TransactionSynchronization implementations can implement the Ordered interface
* to influence their execution order. A synchronization that does not implement the
* Ordered interface is appended to the end of the synchronization chain.
*
* <p>System synchronizations performed by Spring itself use specific order values,
* allowing for fine-grained interaction with their execution order (if necessary).
*
* @author Juergen Hoeller
* @since 02.06.2003
* @see TransactionSynchronizationManager
* @see AbstractPlatformTransactionManager
* @see org.springframework.jdbc.datasource.DataSourceUtils#CONNECTION_SYNCHRONIZATION_ORDER
* @see org.springframework.orm.hibernate.SessionFactoryUtils#SESSION_SYNCHRONIZATION_ORDER
*/
public interface TransactionSynchronization {
/** Completion status in case of proper commit */
int STATUS_COMMITTED = 0;
/** Completion status in case of proper rollback */
int STATUS_ROLLED_BACK = 1;
/** Completion status in case of heuristic mixed completion or system errors */
int STATUS_UNKNOWN = 2;
/**
* Suspend this synchronization.
* Supposed to unbind resources from TransactionSynchronizationManager if managing any.
* @see TransactionSynchronizationManager#unbindResource
*/
void suspend();
/**
* Resume this synchronization.
* Supposed to rebind resources to TransactionSynchronizationManager if managing any.
* @see TransactionSynchronizationManager#bindResource
*/
void resume();
/**
* Invoked before transaction commit (before "beforeCompletion").
* Can e.g. flush transactional O/R Mapping sessions to the database.
* <p>This callback does <i>not</i> mean that the transaction will actually be committed.
* A rollback decision can still occur after this method has been called. This callback
* is rather meant to perform work that's only relevant if a commit still has a chance
* to happen, such as flushing SQL statements to the database.
* <p>Note that exceptions will get propagated to the commit caller and cause a
* rollback of the transaction.
* @param readOnly whether the transaction is defined as read-only transaction
* @throws RuntimeException in case of errors; will be <b>propagated to the caller</b>
* (note: do not throw TransactionException subclasses here!)
* @see #beforeCompletion
*/
void beforeCommit(boolean readOnly);
/**
* Invoked before transaction commit/rollback.
* Can perform resource cleanup <i>before</i> transaction completion.
* <p>This method will be invoked after <code>beforeCommit</code>, even when
* <code>beforeCommit</code> threw an exception. This callback allows for
* closing resources before transaction completion, for any outcome.
* @throws RuntimeException in case of errors; will be <b>logged but not propagated</b>
* (note: do not throw TransactionException subclasses here!)
* @see #beforeCommit
* @see #afterCompletion
*/
void beforeCompletion();
/**
* Invoked after transaction commit. Can perform further operations right
* <i>after</i> the main transaction has <i>successfully</i> committed.
* <p>Can e.g. commit further operations that are supposed to follow on a successful
* commit of the main transaction, like confirmation messages or emails.
* <p><b>NOTE:</b> The transaction will have been committed already, but the
* transactional resources might still be active and accessible. As a consequence,
* any data access code triggered at this point will still "participate" in the
* original transaction, allowing to perform some cleanup (with no commit following
* anymore!), unless it explicitly declares that it needs to run in a separate
* transaction. Hence: <b>Use <code>PROPAGATION_REQUIRES_NEW</code> for any
* transactional operation that is called from here.</b>
* @throws RuntimeException in case of errors; will be <b>propagated to the caller</b>
* (note: do not throw TransactionException subclasses here!)
*/
void afterCommit();
/**
* Invoked after transaction commit/rollback.
* Can perform resource cleanup <i>after</i> transaction completion.
* <p><b>NOTE:</b> The transaction will have been committed or rolled back already,
* but the transactional resources might still be active and accessible. As a
* consequence, any data access code triggered at this point will still "participate"
* in the original transaction, allowing to perform some cleanup (with no commit
* following anymore!), unless it explicitly declares that it needs to run in a
* separate transaction. Hence: <b>Use <code>PROPAGATION_REQUIRES_NEW</code>
* for any transactional operation that is called from here.</b>
* @param status completion status according to the <code>STATUS_*</code> constants
* @throws RuntimeException in case of errors; will be <b>logged but not propagated</b>
* (note: do not throw TransactionException subclasses here!)
* @see #STATUS_COMMITTED
* @see #STATUS_ROLLED_BACK
* @see #STATUS_UNKNOWN
* @see #beforeCompletion
*/
void afterCompletion(int status);
}
分享到:
相关推荐
- **TransactionSynchronization接口**:定义了事务开始、提交、回滚、完成时需要执行的方法,如beforeCommit、afterCommit、afterCompletion等。 - **TransactionSynchronizationManager**:事务同步管理器,用于...
之前一直找原因,最后知道了解决方法,具体请下载源码查看。特别是用到throw的事务中
- 事务同步:Spring的`TransactionSynchronization`接口允许你在事务的开始、结束、提交或回滚时执行额外的任务,比如清理缓存或发送通知。 - JTA的并发问题:在多线程环境下,你需要理解如何避免死锁和其他并发问题...
11. **事务同步**:Spring的TransactionSynchronization接口和TransactionSynchronizationManager类允许开发者在事务的生命周期中插入自定义的行为,如清理资源或执行后置处理。 12. **Spring Boot中的事务管理**:...
All Classes AbstractAdvisorAutoProxyCreator AbstractApplicationContext AbstractApplicationEventMulticaster AbstractAspectJAdvice AbstractAspectJAdvisorFactory AbstractAspectJAdvisorFactory....
A Robust Timing and Frequency Synchronization for OFDM Systems,发表在IEEE Transaction on wireless communication上,很著名的一篇文档。
This property ensures that if a transaction is interrupted, the system remains in a consistent state. In conclusion, process synchronization in operating systems is a critical aspect of managing ...
OA立项方案.pdf
Differentiate locks, latches, and other SQL Server internal “locking” mechanism such as spinlocks and other synchronization objects. Recommended Reading Chapter 14 “Locking”, Inside SQL ...
com.kingdee.bos.util.backport.concurrent.locks Interfaces and classes providing a framework for locking and waiting for conditions that is distinct from built-in synchronization and monitors....
5.3 uvm_transaction 5.4 uvm_root 5.5 uvm_port_base 6. Reporting Classes 6.1 uvm_report_object 6.2 uvm_report_handler 6.3 uvm_report_server 6.4 uvm_report_catcher 7. Factory Classes 7.1 uvm...
Not Using Commons Logging ................................................................... 12 Using SLF4J ..............................................................................................
在Java开发领域,尤其是企业级应用开发中,JTA(Java Transaction API)扮演着至关重要的角色。Geronimo-JTA_1.1_spec-1.1.1.jar是实现JTA规范的一个关键组件,它为应用程序提供了一套标准的接口和API来管理事务。此...
Not Using Commons Logging ................................................................... 12 Using SLF4J ..............................................................................................
instance management, asynchronous calls, synchronization, reliability, transaction management, disconnected queued calls and security to build best in class applications. Programming WCF Services ...
协议的核心组件包括设备管理(Device Management, DM)、数据同步(Data Synchronization, DS)和事务处理(Transaction Processing, TP)。DM负责设备的注册、配置和管理,DS用于实际的数据同步,而TP则处理同步...
3. **协议层**:SyncML协议由数据传输层(Data Transport Layer, DTL)、事务处理层(Transaction Processing Layer, TPL)和同步管理层(Synchronization Management Layer, SML)组成。DTL负责底层传输,TPL处理...
为了有效地防止Web应用程序中的表单重复提交问题,Struts框架提供了一种简单而强大的解决方案——同步令牌模式(Synchronization Token Pattern, STP)。下面详细介绍如何在Struts项目中实现这一功能。 1. **生成...
Compensating Transaction Pattern Chapter 4. Competing Consumers Pattern Chapter 5. Compute Resource Consolidation Pattern Chapter 6. Command and Query Responsibility Segregation (CQRS) Pattern ...
1. **事务处理单元(Transaction Translator)**:处理USB协议的事务层,如令牌包、数据包和握手包的生成和解析。 2. **数据包缓冲区(Data Buffer)**:存储待发送或接收的数据,确保数据在高速传输中的正确性。 ...