综合事务系统:XADisk

XADisk   2014-12-27 21:28:59 发布
您的评价:
     
0.0
收藏     0收藏
文件夹
标签
(多个标签用逗号分隔)

XADisk 是一个开源的综合事务系统,支持从 Java 和 JavaEE 应用程序对文件系统进行事务性访问。使用一些简单的 API,您可以将 XADisk 部署在任何 JVM 上,无需在操作系统上执行任何安装。部署之后,应用程序就会调用 XADisk API 在事务内执行各种各样的文件 IO 操作。

XADisk 还提供了其他许多功能,比如 XA 事务、完全的 JCA 合规性、入站消息等。这些功能不属于这篇简介文章的介绍范围。

可将 XADisk 视为应用程序与文件系统之间的一个层。XADisk 本身不是一种文件系统实现;它可用于各种各样的文件系统(比如 NTFS、FAT、ext3),并且支持应用程序对这些文件系统执行事务性访问。应用程序可调用 XADisk API 来执行各种 I/O 操作,以单个事务的形式提交或回滚所有这些操作。

XADisk 是使用 Java 编写的,在 Java 5 或其更高版本上运行。它可供所有类型的 Java 应用程序、在 Java 服务器中运行的 Web 应用程序(比如 Apache Tomcat)和在 JavaEE 服务器中运行 JavaEE 应用程序等使用。

作为 XADisk 用途的一个简单示例,可以考虑一个 Java 应用程序。这个应用程序希望创建一个名为 F1 的新文件,从另一个名为 F2 的文件向它写入一些数据,然后删除 F2。这 3 个操作可使用 XADisk 在单个事务内执行,并具有前面提及的 ACID 属性的典型迹象。即使应用程序在中途崩溃,XADisk 也会维护这些迹象。

XADisk 支持对文件/目录执行多种不同的操作:

  • 文件 — 创建、删除、移动、复制、截断、读取、写入、存在、getLength

  • 目录 — 创建、删除、移动、列出子目录、存在

当使用 XADisk 时,应用程序和目标文件系统需要在同一个机器上。应用程序可采用与部署在相同 JVM 上的 XADisk 相同的方式远程调用 XADisk API。

详细介绍文章:http://www.ibm.com/developerworks/cn/opensource/os-xadisk/index.html

简单示例:

import java.io.File;
import java.io.IOException;
import org.xadisk.bridge.proxies.interfaces.Session;
import org.xadisk.bridge.proxies.interfaces.XAFileSystem;
import org.xadisk.bridge.proxies.interfaces.XAFileSystemProxy;
import org.xadisk.filesystem.exceptions.XAApplicationException;
import org.xadisk.filesystem.standalone.StandaloneFileSystemConfiguration;
 
public class XADiskHelloWorld {
 
    public static void main(String args[]) {
        String xadiskSystemDirectory = "C:\\xadisk";
        File sampleDataDir1 = new File("C:\\data1");
        XAFileSystem xafs = null;
 
        try {
            StandaloneFileSystemConfiguration configuration = 
            new StandaloneFileSystemConfiguration(xadiskSystemDirectory, "id-1");
             
            xafs = XAFileSystemProxy.bootNativeXAFileSystem(configuration);
             
            System.out.println("\nBooting XADisk...\n");
             
            xafs.waitForBootup(-1);
             
            System.out.println("\nXADisk is now available for use.\n");
 
            Session session = xafs.createSessionForLocalTransaction();
             
            try {
                session.createFile(sampleDataDir1, true);
                session.createFile(new File(sampleDataDir1, "a.txt"), false);
                 
                session.commit();
                 
                System.out.println("\nCongratulations! You have successfully run the XADisk-Hello-World.\n");
            } catch (XAApplicationException xaae) {
                session.rollback();
                throw xaae;
            }
             
        } catch (Throwable t) {
            t.printStackTrace();
        } finally {
            if (xafs != null) {
                try {
                    xafs.shutdown();
                } catch (IOException ioe) {
                    ioe.printStackTrace();
                }
            }
        }
    }
}

项目主页:http://www.open-open.com/lib/view/home/1419477155296

扩展阅读

MySQL 5.7: Innodb 事务子系统优化
分布式存储系统事务时序
JFreechart综合
PHP系统声明式事务处理
JBoss Cache:企业级Java事务缓存集群系统

为您推荐

Java日志终极指南
Spring MVC 入门实例
Apache CXF 在项目中的真实运用--WS服务编写
mysql的安装以及和mapreduce的交互
Java Robot对象实现服务器屏幕远程监视

更多

XADisk
Java开发
相关文档  — 更多
相关经验  — 更多
相关讨论  — 更多