文档章节

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

 独行侠
发布于 2016/04/14 16:12
字数 420
阅读 51
收藏 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)


© 著作权归作者所有

共有 人打赏支持
下一篇: JTA 四(JMS)
粉丝 1
博文 19
码字总数 9797
作品 0
成都
私信 提问
JDBC事务和JTA事务的区别 --包含spring事务 声明式事务

一、事务概述 事务表示一个由一系列的数据库操作组成的不可分割的逻辑单位,其中的操作要么全做要么全都不做。 与事务相关的操作主要有: BEGIN TRANSACTION; 开始一个事务,方法是:begin...

oswebgod
2018/07/30
0
0
基于可靠消息方案的分布式事务(二):Java中的事务

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

aoho
2018/06/01
0
0
JAVA之JDBC简单事务处理

1、什么是Java事务 通常观念认为,事务与数据库有关。事务是访问数据库的一个操作序列,数据库应用系统通过事务集来完成对数据库的存取。事务的正确执行使得数据库从一种状态转换成另一种状态...

火龙战士
2015/08/17
0
5
Spring引用Tomcat的 JTA事务

Spring引用Tomcat的 JTA事务 Tomcat是Servlet容器,但它提供了JNDI的实现,因此用户可以象在Java EE应用程序服务器中一样,在Tomcat中使用JNDI查找JDBC数据源。在事务处理方面,Tomcat本身并...

崔耀升
2010/06/12
0
0
JTA的含义及应用简介

Java Transaction API(Java事务API) (JTA)Java Transaction API(Application Programming Interface) 什么是JTA Transaction?它有怎样的特点呢?JTA Transaction是指由J2EE Transaction ......

crazyinsomnia
2010/01/27
591
0

没有更多内容

加载失败,请刷新页面

加载更多

给windows server中的“未识别的网络”或“无法识别的网络”设置网络位置类型

在windows server中,如果网络没有被正确的识别,那么就需要手工设置一下网络位置类型。 将“公用网络”指定设置为“专用网络“ 【控制面板】--【系统和安全】--【管理工具】--【本地安全策略...

gugudu
48分钟前
1
0
阿里强制要求的21条Java开发规范,可以避免很多坑

1. 【强制】避免通过一个类的对象引用访问此类的静态变量或静态方法,无谓增加编译器解析成本,直接用类名来访问即可。 2. 【强制】所有的覆写方法,必须加@Override注解。 说明:getObject...

天王盖地虎626
今天
7
0
oracle dg 备库未设置convert参数导致ORA-01111,ORA-01110

查看trace 文件: MRP0: Background Managed Standby Recovery process started (amls) started logmerger process Sun Jan 20 07:55:53 2019 Managed Standby Recovery starting Real Time ......

hnairdb
今天
2
0
乱入Linux界的我是如何学习的

欢迎来到建哥学Linux,咳!咳!咳!开个玩笑哈,我是一个IT男,IT界的入门选手,正在学习Linux。 在之前,一直想进军IT界,学习IT技术,但是苦于没有人指导,也不知道学什么,最开始我自己在...

linux-tao
今天
2
0
乱入Linux界的我是如何学习的

欢迎来到建哥学Linux,咳!咳!咳!开个玩笑哈,我是一个IT男,IT界的入门选手,正在学习Linux。 在之前,一直想进军IT界,学习IT技术,但是苦于没有人指导,也不知道学什么,最开始我自己在...

linuxprobe16
今天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部