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

TransactionFactoryFactory TransactionFactory

 
阅读更多
三种事务的创建由对应的JDBCTransactionFactory,JTATransactionFactroy,CMTTransactionFactory完成
这三者区别在
  connectionReleaseMode
     JTATransactionFactroy和CMTTransactionFactory连接释放模式执行每条语句后释放连接,JDBCTransactionFactory事务提交后释放,因此jta事务连接的重用高
  TransactionManager
    JDBCTransactionFactory和JTATransactionFactroy不需要TransactionManager,CMTTransactionFactory必须
  isTransactionInProgress
    JDBCTransactionFactory确定执行JDBCTransaction begin方法,但没提交或回滚过视为正在进行
    JTATransactionFactroy
       通过缓存的JTATransaction.getUserTransaction状态确定
       如果找不到,通过transactionManager状态确定
       如果找不到,通过JNDI查找userTransaction状态确定
   CMTTransactionFactory
       通过transactionManager.getTransaction状态确定
factory通过org.hibernate.transaction.TransactionFactoryFactory.buildTransactionFactory确定,简单表述下
    通过hibernate.transaction.factory_class确定,如果为空,返回JDBCTransactionFactory
    否则实例化hibernate.transaction.factory_class指定类,并调用configure方法

package org.hibernate.transaction;

import java.util.Properties;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import org.hibernate.HibernateException;
import org.hibernate.cfg.Environment;
import org.hibernate.util.ReflectHelper;

/**
 * @author Gavin King
 */
public final class TransactionFactoryFactory {

	private static final Log log = LogFactory.getLog(TransactionFactoryFactory.class);

	/**
	 * Obtain a TransactionFactory with the transaction handling strategy
	 * specified by the given Properties.
	 *
	 * @param transactionProps transaction properties
	 * @return TransactionFactory
	 * @throws HibernateException
	 */
	public static TransactionFactory buildTransactionFactory(Properties transactionProps) throws HibernateException {

		String strategyClassName = transactionProps.getProperty(Environment.TRANSACTION_STRATEGY);
		if (strategyClassName==null) {
			log.info("Using default transaction strategy (direct JDBC transactions)");
			return new JDBCTransactionFactory();
		}
		log.info("Transaction strategy: " + strategyClassName);
		TransactionFactory factory;
		try {
			factory = (TransactionFactory) ReflectHelper.classForName(strategyClassName).newInstance();
		}
		catch (ClassNotFoundException e) {
			log.error("TransactionFactory class not found", e);
			throw new HibernateException("TransactionFactory class not found: " + strategyClassName);
		}
		catch (IllegalAccessException e) {
			log.error("Failed to instantiate TransactionFactory", e);
			throw new HibernateException("Failed to instantiate TransactionFactory: " + e);
		}
		catch (java.lang.InstantiationException e) {
			log.error("Failed to instantiate TransactionFactory", e);
			throw new HibernateException("Failed to instantiate TransactionFactory: " + e);
		}
		factory.configure(transactionProps);
		return factory;
	}

	private TransactionFactoryFactory() {}
}

 
分享到:
评论

相关推荐

    jdbc连接数据库事务工厂模式

    例如,我们可以定义一个`TransactionFactory`接口,以及针对MySQL、Oracle等数据库的实现类: ```java public interface TransactionFactory { Transaction createTransaction(Connection conn); } public class ...

    详细的mybatis-3.2.7文档

    TransactionFactory transactionFactory = new JdbcTransactionFactory(); Environment environment = new Environment("development", transactionFactory, dataSource); Configuration configuration = new ...

    面向Java Web的hibernate框架的研究与应用.pdf

    首先, Hibernate 框架的主要组件包括 SessionFactory、Session、Persistant、Transaction、ConnectionProvider 和 TransactionFactory 等。其中,SessionFactory 是 JavaBean 对象与数据库表之间关系在内存中的镜像...

    《MyBatis3.5.4官方文档》.pdf

    TransactionFactory transactionFactory = new JdbcTransactionFactory(); Environment environment = new Environment("development", transactionFactory, dataSource); Configuration configuration = new ...

    浅谈MyBatis 事务管理

    private final TransactionFactory transactionFactory; private final DataSource dataSource; } ``` 二、事务抽象 MyBatis把事务管理抽象出Transaction接口,由TransactionFactory接口的实现类负责创建。...

    MyBatis3.5.4官方文档.docx

    TransactionFactory transactionFactory = new JdbcTransactionFactory(); Environment environment = new Environment("development", transactionFactory, dataSource); Configuration config = new Configuration...

    Mybatis最新版-中文手册.pdf

    TransactionFactory transactionFactory = new JdbcTransactionFactory(); Environment environment = new Environment("development", transactionFactory, dataSource); ``` 这种方式提供了更多的编程灵活性,...

    mybatis通用mapper笔记

    TransactionFactory transactionFactory = new JdbcTransactionFactory(); DataSource dataSource = new PooledDataSource(driver, url, username, password); Environment environment = new Environment(id, ...

    Hibernate初级学习

    - **TransactionFactory**:TransactionFactory负责创建Transaction对象。同样地,开发者通常不会直接使用它,而是可以通过扩展来自定义事务的创建过程。 #### 三、深入理解Hibernate的体系结构 - **SessionFactory...

    Mybatis 框架源码10种设计模式分析.pdf

    小傅哥博客中提供的示例代码是 Mybatis 框架中的原型模式应用,包括 Executor 和 TransactionFactory 两个类的实现。 四、建造者模式 建造者模式是一种创建型模式,提供了一种创建对象的接口,使得客户端可以根据...

    最经典的hibernate教程

    - **TransactionFactory**: 生成 Transaction 对象的工厂,通过 TransactionFactory 实现了事务的封装,使其具体的实现方法与应用程序无关。 - **Configuration 接口**: 用于配置 Hibernate,并启动 Hibernate,...

    mybatis-SourceCode:MyBatis原始码学习

    创建SqlSession DefaultSqlSessionFactory(类):实现SqlSessionFactory,交替sqlSession工厂类创建SqlSession,TransactionFactory,关闭事务等可自定义ExecutorType(执行器类型)/事务隔离界别/是否自动提交等...

    iBATIS orm 指南

    TransactionFactory transactionFactory = new JdbcTransactionFactory(); Environment environment = new Environment("development", transactionFactory, dataSource); Configuration configuration = new ...

    阿里巴巴P7架构师纯手工打造MyBatis源码——1小时解密底层源码.txt

    - 创建`TransactionFactory`:根据`Configuration`中指定的事务管理器类型创建相应的`TransactionFactory`。 - 创建`Executor`:根据`Configuration`中指定的执行器类型创建相应的`Executor`。 - 创建`...

    NHibernate中文参考文档

    `TransactionFactory` 用于根据配置创建事务实例。 配置 `SessionFactory` 可以通过编程方式完成,如使用 `NHibernate.Cfg.Configuration` 类,加载 XML 映射文件并设置各种参数,如 SQL 方言、外连接抓取、缓存...

    Hibernate4.1实战

    5. TransactionFactory:生成Transaction对象的工厂,用于扩展。 为了开始一个简单的Hibernate应用程序,你需要: 1. 设置对象(VO),遵循ORMapping规则,包括标识属性。 2. 创建数据库表与对象对应的结构。 3. ...

    Nhibernate 中文文档

    7. **TransactionFactory (net.sf.hibernate.TransactionFactory)** - **定义**:事务实例的工厂,同样对应用程序不可见,但可以被开发者扩展或实现。 #### 第2章 ISessionFactory配置 **可编程配置方式** ...

    NHibernate

    7. **TransactionFactory**:事务实例的工厂,可由开发者扩展。 ### NHibernate配置 配置NHibernate涉及设定数据库方言、外连接抓取、缓存策略、查询语言替换和日志记录等。配置可以通过XML文件或编程方式进行: ...

    myibatis+spring源码

    它继承自AbstractSqlSessionFactoryBean,并重写了configure方法,根据Spring的配置来设置DataSource、TransactionFactory、Environment等属性。 2. MyBatisNamespaceParser:它是MyBatis-Spring中的一个XML解析器...

Global site tag (gtag.js) - Google Analytics