XADisk - 综合事务系统


EPL
跨平台
Java

软件简介

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();
                }
            }
        }
    }
}