綜合事務系統:XADisk

jopen 9年前發布 | 12K 次閱讀 XADisk 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();
                }
            }
        }
    }
}

項目主頁:http://www.baiduhome.net/lib/view/home/1419477155296

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!