文档章节

JTA 五(XADisk java io Transaction 文件读写操作事务)

 独行侠
发布于 2016/04/14 16:12
字数 420
阅读 34
收藏 0
点赞 1
评论 0

通常我们有时候会有一种需求,就是要对文件的操作,进行事务控制,在java提供的原生态的api中是没有办法实现这一点的,

而网上有open source的一个project提供了这种操作,就是XADisk,下面我只是做一个简单的Demo,其中的很多配置,以及api都没有详细的使用和列出来,有兴趣的朋友可以一直讨论.上代码:


public static void main(String[] args) throws Throwable {


        try{
            Jotm jotm=new Jotm(true,false);
            TransactionManager transactionManager=jotm.getTransactionManager();
            
            StandaloneFileSystemConfiguration configuration=new StandaloneFileSystemConfiguration("c:\\temp","Test-Instance");//创建configuration,

                                     //一定要有的一个对象
            
            XAFileSystem xaFileSystem=XAFileSystemProxy.bootNativeXAFileSystem(configuration);
            transactionManager.begin();//事务开始
            Transaction transaction=transactionManager.getTransaction();
            try{            
                XASession xaSession=xaFileSystem.createSessionForXATransaction();//获得session
                XAResource xaResource=xaSession.getXAResource(); //获得XAResource
    
                File file=new File("c:\\temp\\a.txt");//文件 对象
                
                file.setWritable(true);//设置权限              
                transaction.enlistResource(xaResource);//加入到事务
                if(!xaSession.fileExists(file)){//判断并创建文件
                    xaSession.createFile(file, false);
                }
                
                XAFileOutputStream os=xaSession.createXAFileOutputStream(file,false);//创建文件流
                
                os.write("HelloWorld".getBytes("UTF-8"));//写入数据
                os.flush();
                os.close();
            transaction.commit();//提交事务
        }catch(Throwable t){
            t.printStackTrace();
            transaction.rollback();
        }finally{
            jotm.stop();
        }
        }catch(Throwable e){
            e.printStackTrace();
        }finally{            
            System.exit(0);            
        }
    }


以上就是文件操作的XA资源了,这个open source的功能,在一般的项目中并不多见,但是偶尔在一些比较让人郁闷的项目中可能遇到

至于说,要想让这个功能集成到spring,网上有人写了一个class的,可以去找下。这个class与BasicManagedDataSource类似,在获得XASession xaSession

对象的时候,先尝试将这个XASession xaSession相关的XAResource加入到当前事务,如果没有事务就异常(先开始事务,再获XASession)


© 著作权归作者所有

共有 人打赏支持
粉丝 1
博文 19
码字总数 9797
作品 0
成都
基于可靠消息方案的分布式事务(二):Java中的事务

前言:在上一篇文章 基于可靠消息方案的分布式事务:Lottor介绍 中介绍了常见的分布式事务的解决方案以及笔者基于可靠消息方案实现的分布式事务组件Lottor的原理,并展示了应用的控制台管理。...

aoho ⋅ 06/01 ⋅ 0

【J2EE】之常用的接口和协议

前言 初接触J2EE,会遇到很多之前没有遇到过的术语,下面我们来简单地汇总一下这些接口和协议吧。 各大接口和协议详解 JDBC 1.定义:Java数据库连接 2.地位:用于Java应用程序连接数据库的标...

m18633778874 ⋅ 04/26 ⋅ 0

J2EE中一些常用的名词【简】

web容器:给处于其中的应用程序组件(JSP,SERVLET)提供一个环境,使JSP,SERVLET直接更容器中的环境变量接口交互,不必关注其它系统问题。主要有WEB服务器来实现。例如:TOMCAT,WEBLOGIC,W...

anlve ⋅ 前天 ⋅ 0

Sharding-JDBC 最大努力型事务理解

Sharding-JDBC 最大努力型事务理解。 看的的1.5.4版本 最新的2.x版本 demo查看 https://github.com/shardingjdbc/sharding-jdbc/blob/1.5.4/sharding-jdbc-example/sharding-jdbc-example-j......

xiaomin0322 ⋅ 06/06 ⋅ 0

sharding-jdbc源码分析—准备工作

原文作者:阿飞Javaer 原文链接:https://www.jianshu.com/p/7831817c1da8 接下来对sharding-jdbc源码的分析基于tag为源码,根据sharding-jdbc Features深入学习sharding-jdbc的几个主要特性...

飞哥-Javaer ⋅ 05/03 ⋅ 0

Java编程基础知识点和技术点归纳

Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互...

Java小辰 ⋅ 05/23 ⋅ 0

Hibernate通过createSQLQuery( )方法实现增删改查

Hibernate通过createSQLQuery( )方法实现增删改查 Hibernate的三种实现方式之一:createSQLQuery( ) 一、项目结构 二、hibernate核心配置文件: hibernate.cfg.xml [java] view plain copy...

代金券优惠 ⋅ 04/16 ⋅ 0

javax.persistence.PersistenceException: org.hibernate.exception.GenericJDBCException: could not prep

javax.persistence.PersistenceException: org.hibernate.exception.GenericJDBCException: could not prepare statement at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(Abst......

黄柳淞 ⋅ 05/12 ⋅ 0

面试必看!2018年4月份阿里最新的java程序员面试题目

目录 技术一面(23问) 技术二面(3大块) 性能优化(21点) 项目实战(34块) JAVA方向技术考察点(15点) JAVA开发技术面试中可能问到的问题(17问) 阿里技术面试1 1.Java IO流的层次结构...

美的让人心动 ⋅ 04/16 ⋅ 0

集成 Proxy 与 DB Mesh,Sharding-JDBC 3 将"Sharding"做到极致

嘉宾:张亮 作者:雨多田光 提起数据库中间件,我们可以很自然地联想到 OneProxy、TDSQL、Sharding-JDBC 与 MyCat 等知名项目。在众多的数据库中间件实现技术中,通常存在两种架构模式,一种...

编辑部的故事 ⋅ 05/23 ⋅ 18

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Windows下安装运行phpMyAdmin

首先确保安装了phpMyAdmin,其次要求服务器是打开的。 如果是在Windows下,建议下载安装WampServer,这是一个集成软件,集成了Apache+MySQL+PHP的开发环境,而且也自带了phpMyAdmin这个软件。...

临江仙卜算子 ⋅ 4分钟前 ⋅ 0

jdk1.8 安装及环境变量配置

1.根据jdk 的软件安装包,首先安装,jdk,

kuchawyz ⋅ 4分钟前 ⋅ 0

给Java字节码加上”翅膀“的JIT编译器

给Java字节码加上”翅膀“的JIT编译器 上面文章在介绍Java的内存模型的时候,提到过由于编译器的优化会导致重排序的问题,其中一个比较重要的点地方就是关于JIT编译器的功能。JIT的英文单词是...

九劫散仙 ⋅ 5分钟前 ⋅ 0

PCI简介(二)

1.x86处理器系统地址空间简介 1.1 CPU地址空间 CPU地址空间是指CPU所能寻址的空间大小,比如对于32位CPU来说,其所能寻址的空间大小为0~4G。这是由CPU自身的地址总线数目决定的。这段空间也被...

深山野老 ⋅ 6分钟前 ⋅ 0

spring中的InitializingBean接口

好久没更博了,真有点怀念,前段时间刚和上家公司say bye,这次进的是电商公司,今天刚开始看代码,逻辑很复杂。 今天看的注册功能,里面见到一个知识点,现在记录一下,今天看项目时见到里面...

千元机爱好者 ⋅ 8分钟前 ⋅ 0

机器学习:数据预处理之独热编码(One-Hot)

前言 ———————————————————————————————————————— 在机器学习算法中,我们经常会遇到分类特征,例如:人的性别有男女,祖国有中国,美国,法国等。 ...

NateHuang ⋅ 16分钟前 ⋅ 0

MyBatis之输入与输出(resultType、resultMap)映射

在MyBatis中,我们通过parameterType完成输入映射(指将值映射到sql语句的占位符中,值的类型与dao层响应方法的参数类型一致),通过resultType完成输出映射(从数据库中输出,通过dao层的方法查...

瑟青豆 ⋅ 16分钟前 ⋅ 0

屏蔽运营商广告劫持

在今天早上我查找知乎时再次遇到了恶心的运营商广告劫持,右下角硕大的广告直接让知乎挂掉了,我刷了五次知乎才好,之前休息的时候逛知乎也是多次加载错误,估计也是这劫持的锅,相信各位也遇...

gcudwork ⋅ 20分钟前 ⋅ 0

java web 进度条实现原理

资料路径 https://blog.csdn.net/fengsheng5210/article/details/79305026

zaolonglei ⋅ 21分钟前 ⋅ 0

命令行输出java版本与环境变量配置的不一样问题解决

问题:java10刚出来,本着好奇的心,急切的装了体验一下,然后实际项目需求还是java8,所以体验完了就把环境变量改回来了,但是出现了一个问题,命令行输出java版本与环境变量配置的不一样,...

消散了的诗意 ⋅ 23分钟前 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部