综合事务系统:XADisk

jopen 10年前

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