`
dylan0514sina.cn
  • 浏览: 94941 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

TransactionSynchronization

 
阅读更多
同步处理是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);

}
分享到:
评论

相关推荐

    spring-transaction-synchronization:Spring事务同步示例

    - **TransactionSynchronization接口**:定义了事务开始、提交、回滚、完成时需要执行的方法,如beforeCommit、afterCommit、afterCompletion等。 - **TransactionSynchronizationManager**:事务同步管理器,用于...

    There is no active transaction解决

    之前一直找原因,最后知道了解决方法,具体请下载源码查看。特别是用到throw的事务中

    Spring配置JTA事务管理

    - 事务同步:Spring的`TransactionSynchronization`接口允许你在事务的开始、结束、提交或回滚时执行额外的任务,比如清理缓存或发送通知。 - JTA的并发问题:在多线程环境下,你需要理解如何避免死锁和其他并发问题...

    springTranction

    11. **事务同步**:Spring的TransactionSynchronization接口和TransactionSynchronizationManager类允许开发者在事务的生命周期中插入自定义的行为,如清理资源或执行后置处理。 12. **Spring Boot中的事务管理**:...

    SPRING API 2.0.CHM

    All Classes AbstractAdvisorAutoProxyCreator AbstractApplicationContext AbstractApplicationEventMulticaster AbstractAspectJAdvice AbstractAspectJAdvisorFactory AbstractAspectJAdvisorFactory....

    A Robust Timing and Frequency Synchronization for OFDM Systems

    A Robust Timing and Frequency Synchronization for OFDM Systems,发表在IEEE Transaction on wireless communication上,很著名的一篇文档。

    操作系统概念英文课件:Chapter 6 Process Synchronization.ppt

    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

    OA立项方案.pdf

    微软内部资料-SQL性能优化3

     Differentiate locks, latches, and other SQL Server internal “locking” mechanism such as spinlocks and other synchronization objects. Recommended Reading  Chapter 14 “Locking”, Inside SQL ...

    金蝶BOSV6.1_业务组件API参考手册

    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....

    UVM_1.1_Class_Reference_Final

    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...

    spring-framework-reference4.1.4

    Not Using Commons Logging ................................................................... 12 Using SLF4J ..............................................................................................

    geronimo-jta_1.1_spec-1.1.1.jar的源码

    在Java开发领域,尤其是企业级应用开发中,JTA(Java Transaction API)扮演着至关重要的角色。Geronimo-JTA_1.1_spec-1.1.1.jar是实现JTA规范的一个关键组件,它为应用程序提供了一套标准的接口和API来管理事务。此...

    spring-framework-reference-4.1.2

    Not Using Commons Logging ................................................................... 12 Using SLF4J ..............................................................................................

    [WCF] WCF 服务编程 第1版 (英文版)

    instance management, asynchronous calls, synchronization, reliability, transaction management, disconnected queued calls and security to build best in class applications. Programming WCF Services ...

    SyncML协议,手机和PC端得传输协议

    协议的核心组件包括设备管理(Device Management, DM)、数据同步(Data Synchronization, DS)和事务处理(Transaction Processing, TP)。DM负责设备的注册、配置和管理,DS用于实际的数据同步,而TP则处理同步...

    Syncml服务器、白皮书文件

    3. **协议层**:SyncML协议由数据传输层(Data Transport Layer, DTL)、事务处理层(Transaction Processing Layer, TPL)和同步管理层(Synchronization Management Layer, SML)组成。DTL负责底层传输,TPL处理...

    使用struts的同步令牌避免form的重复提交

    为了有效地防止Web应用程序中的表单重复提交问题,Struts框架提供了一种简单而强大的解决方案——同步令牌模式(Synchronization Token Pattern, STP)。下面详细介绍如何在Struts项目中实现这一功能。 1. **生成...

    Cloud Design Patterns

    Compensating Transaction Pattern Chapter 4. Competing Consumers Pattern Chapter 5. Compute Resource Consolidation Pattern Chapter 6. Command and Query Responsibility Segregation (CQRS) Pattern ...

    usb1.1_Verilog.rar_USB1.1 Verilog_sopc usb1.1_usb ip_usb verilog

    1. **事务处理单元(Transaction Translator)**:处理USB协议的事务层,如令牌包、数据包和握手包的生成和解析。 2. **数据包缓冲区(Data Buffer)**:存储待发送或接收的数据,确保数据在高速传输中的正确性。 ...

Global site tag (gtag.js) - Google Analytics