`
jayjayjays
  • 浏览: 214601 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

xapool的框架配置

    博客分类:
  • java
阅读更多
package juan.orm.datasource.impl;

import java.util.Properties;

import javax.sql.DataSource;

import juan.exception.JRuntimeException;
import juan.orm.datasource.IDataSource;

import org.enhydra.jdbc.pool.StandardXAPoolDataSource;
import org.enhydra.jdbc.standard.StandardXADataSource;
import org.objectweb.jotm.Current;

public class XapoolDataSourceImpl implements IDataSource {
	private String name=null;
	
	public DataSource getDataSource() {
		Properties prop = new Properties();
        try {
            prop.load(ClassLoader.getSystemResourceAsStream("xapool.properties"));
        } catch (Exception e) {
            System.err.println("problem to load properties.");
            e.printStackTrace();
        }

        String login = prop.getProperty("login");
        String password = prop.getProperty("password");
        String url = prop.getProperty("url");
        String driver = prop.getProperty("driver");
        String maxActive = prop.getProperty("maxActive");
        String maxIdle = prop.getProperty("maxIdle");

        StandardXADataSource xads = new StandardXADataSource();
        StandardXAPoolDataSource spds = new StandardXAPoolDataSource();
        try {
        	xads.setUrl(url);
        	xads.setDriverName(driver);
        	xads.setUser(login);
        	xads.setPassword(password);
        	xads.setTransactionManager(Current.getCurrent());
        	xads.setDebug(true);
	
	        // second, we create the pool of connection with the previous object
	        spds.setMaxSize(Integer.parseInt(maxActive));
	        spds.setMinSize(Integer.parseInt(maxIdle));
	        spds.setUser(login);
	        spds.setPassword(password);
	        spds.setDataSourceName(getName());
	        spds.setDataSource(xads);
	        spds.setTransactionManager(Current.getCurrent());
	        spds.setDebug(true);
	        
		} catch (Exception e) {
			e.printStackTrace();
	        throw new JRuntimeException(e);
		}
		return spds;
	}

	
	public String getName() {
		return name;
	}
	
	
	public void setName(String name) {
		this.name=name;		
	}
}

 

 

package juan.transaction;

import javax.transaction.HeuristicMixedException;
import javax.transaction.HeuristicRollbackException;
import javax.transaction.NotSupportedException;
import javax.transaction.RollbackException;
import javax.transaction.SystemException;
import javax.transaction.UserTransaction;

import juan.exception.JRuntimeException;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.objectweb.jotm.Jotm;
import org.objectweb.transaction.jta.TMService;

/**
 * 
 * @author liuth
 * @version 1.0
 * Created on 2003-2-20
 */
public class JOTMTransaction implements ITransaction {
   private static final Log logger = LogFactory.getLog(JOTMTransaction.class);
   private UserTransaction tx;
   private TMService jotm = null;

   public void initial(){
      try {
    	  if(jotm==null)
    		  jotm = new Jotm(true, false);
    	  if(tx==null)
    		  tx = jotm.getUserTransaction();
      } catch (Exception ne) {
         logger.error(ne);
         throw new JRuntimeException(ne);
      }
   }
   
   public void initial(String jndi){
      try {
    	  if(jotm==null)
    		  jotm = new Jotm(true, false);
    	  if(tx==null)
    		  tx = jotm.getUserTransaction();
      } catch (Exception ne) {
         logger.error(ne);
         throw new JRuntimeException(ne);
      }
   }
   
   public void begin() {
      try {
         tx.begin();
      } catch (SystemException se) {
         logger.error(se);
         throw new JRuntimeException(se);
      } catch (NotSupportedException nse) {
         logger.error(nse);
         throw new JRuntimeException(nse);
      }
   }

   public void commit() {
      try {
         tx.commit();        
      } catch (SystemException se) {
         logger.error(se);
         throw new JRuntimeException(se);
      } catch (HeuristicRollbackException hre) {
         logger.error(hre);
         throw new JRuntimeException(hre);
      } catch (HeuristicMixedException hme) {
         logger.error(hme);
         throw new JRuntimeException(hme);
      } catch (RollbackException re) {
         logger.error(re);
         throw new JRuntimeException(re);
      }finally{
    	  close();
      }
   }

   public void rollback() {
      try {
         tx.rollback();
      } catch (SystemException se) {
         logger.error(se);
         throw new JRuntimeException(se);
      }finally{
    	  close();
      }
   } 
   
   private void close(){
	   if(jotm!=null){
		   jotm.stop();
	   }
   }
}

 

分享到:
评论

相关推荐

    spring3.0+struts2.0+mybatis3.2+jta+xapool配置文件示例

    本示例"spring3.0+struts2.0+mybatis3.2+jta+xapool配置文件"就是一个典型的Java企业级应用的集成框架,用于实现数据持久层、业务逻辑层以及控制层的整合。以下将详细介绍这些组件及其配置要点。 **Spring 3.0** 是...

    简易搭建ssh 框架

    不过需要注意,现代的Java Web开发更多倾向于使用Spring Boot和Spring MVC,它们提供了更简洁的配置和自动化特性,降低了框架集成的复杂性。尽管如此,理解SSH框架的原理对于深入学习Java Web开发仍然是有价值的。

    spring+mybatis+atomikos配置文件及相关包.rar

    本篇文章将深入探讨如何在Spring框架中结合Mybatis和Atomikos进行分布式事务管理的配置与集成。Atomikos是一款强大的开源事务处理系统,它支持JTA(Java Transaction API),可以为我们的应用程序提供分布式事务解决...

    jotm 的 jar

    Spring框架则为应用提供了高级抽象,简化了事务配置和管理。XAPool连接池则确保了高效的数据访问,降低了数据库资源的消耗。 在实际应用中,开发者首先需要将jotm-2.0.10.gz解压缩,然后将解压得到的JOTM jar 文件...

    Spring框架技术

    Spring框架技术是Java开发中的核心框架之一,它提供了丰富的功能,包括依赖注入、面向切面编程(AOP)、数据访问、事务管理等。在Spring中,事务管理是其重要特性,尤其对于大型分布式系统,JTA(Java Transaction ...

    纯spring多database

    5. **Atomikos集成**:集成Atomikos到Spring项目中,需要配置`UserTransaction`和`XAPool`,以及相应的`TransactionManager`。然后,可以通过Spring的`jee:jta-transaction-manager`来声明一个JTA事务管理器,这样就...

    Spring分布式事务实现

    在IT行业中,Spring框架是Java开发中的一个关键组件,它为构建企业级应用程序提供了广泛的功能。其中,Spring的分布式事务管理是其核心特性之一,它允许开发者在分布式系统环境中处理复杂的事务逻辑。本篇将深入探讨...

    spring、mybatis、atomikos实现多数据源事务demo

    1. 配置Atomikos:在Spring配置文件中引入Atomikos的相关依赖,配置两个UserTransaction和XAPool,分别对应两个数据源。 2. 定义数据源:为每个数据库创建一个DataSource bean,并配置相应的数据库连接信息。 3. ...

    Spring中的全局(分布式、容器)事务的项目,可以脱离JBOSS的存在

    Spring框架提供了强大的事务管理功能,使得开发者可以方便地在不依赖特定应用服务器(如JBoss)的情况下,实现在轻量级容器(如Tomcat)上的全局(分布式、容器)事务管理。本项目就是针对这一需求,展示了如何在...

    分布式事务操作之Spring+JTA+mybatis源码

    4. **MyBatis**:MyBatis 是一个轻量级的持久层框架,它允许开发者将SQL语句直接写在XML配置文件或者注解中,提供灵活的映射机制,简化了数据访问层的开发。在分布式事务中,MyBatis 可以作为数据访问组件,配合...

    Java分布式开发spring+jta+jotm

    JOTM可以在Spring框架中无缝集成,通过Spring的PlatformTransactionManager接口来配置和使用。 **Spring 配置JTA和JOTM** 在Spring中使用JTA和JOTM,首先需要在项目中引入JOTM的依赖。接着,你需要配置Spring的`...

    spring+druid+AtomikosDataSource实现多数据源切换及分布式事务控制

    AtomikosDataSource是基于Atomikos实现的XAPool,可以协调跨多个数据源的ACID(原子性、一致性、隔离性和持久性)事务。在Spring中集成Atomikos,可以实现全局的分布式事务管理,确保在分布式环境下的数据一致性。 ...

    数据库连接池以及hibernate对各种连接池的整合

    标题提到的“数据库连接池以及hibernate对各种连接池的整合”是指在Java应用中,特别是使用Hibernate作为持久层框架时,如何集成和配置不同的数据库连接池技术。以下是一些主要的开源数据库连接池及其特点: 1. **...

    spring+jotm 多数据源事务管理(三)JNDI+Tomcat

    - `xapool.jar`: 一个连接池实现。 - `howl.jar`: 日志记录工具。 - `commons-cli-1.0.jar`: Apache Commons CLI工具包,用于解析命令行参数。 - `connector-1_5.jar`: 连接器实现库。 #### 二、Tomcat中的JNDI配置...

    jotm jar包

    2. 配置事务管理器:在应用服务器或Spring框架等环境中,设置JOTM作为默认的事务管理器。这通常需要在配置文件(如`server.xml`或`applicationContext.xml`)中指定JOTM的相关属性。 3. 创建事务:通过JTA接口,如`...

    Spring and iBATIS

    此外,还有多种连接池工具如Apache Commons DBCP、ObjectWeb的XAPool,以及事务管理器如ObjectWeb的JOTM等。本文将重点介绍如何使用Spring框架中的JDBC支持和iBATIS来构建DAO(Data Access Object)层。 #### 二、...

Global site tag (gtag.js) - Google Analytics