JTA 五(XADisk java io Transaction 文件读写操作事务)
JTA 五(XADisk java io Transaction 文件读写操作事务)
独行侠 发表于2年前
JTA 五(XADisk java io Transaction 文件读写操作事务)
  • 发表于 2年前
  • 阅读 17
  • 收藏 0
  • 点赞 1
  • 评论 0

标题:腾讯云 新注册用户域名抢购1元起>>>   

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

通常我们有时候会有一种需求,就是要对文件的操作,进行事务控制,在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
×
独行侠
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: