JTA的实际交付价值是多少?

IAmYourFaja

我试图环绕我的头在Java事务API(JTA)及其实现,Bitronix之一的下方。但是随着我对文档的深入研究,我不禁想到以下简单示例:

public interface Transactional {
    public void commit(Object);
    public void rollback();
}

public class TransactionalFileWriter extends FileWriter implements Transactional {
    @Override
    public void commit(Object obj) {
        String str = (String)obj;

        // Write the String to a file.
        write(str);
    }

    @Override
    public void rollback() {
        // Obtain a handler to the File we are writing to, and delete the file.
        // This returns the file system to the state it was in before we created a file and started writing to it.
        File f = getFile();

        // This is just pseudo-code for the sake of this example.
        File.delete(f);
    }
}

// Some method in a class somewhere...
public void doSomething(File someFile) {
    TransactionalFileWriter txFileWriter = getTxFW(someFile);
    try {
        txFileWriter.commit("Create the file and write this message to it.");
    } catch(Throwable t) {
        txFileWriter.rollback();
    }
}

不要太被上面的实际代码所困扰。这个想法很简单:创建文件并写入文件的事务性文件编写器。它的rollback()方法删除文件,从而使文件系统返回到之前的状态commit(Object)

我在这里想念什么吗?这是JTA提供的全部吗?还是在上面的简单示例中没有表现出一套完整的关于交易性的维度/方面?我猜是后者,但尚未在JTA文档中看到任何具体的内容。如果我缺少某些东西,那是什么,有人可以给我看一些具体的例子吗?我可以看到事务性是JDBC的重要组成部分,但希望希望能得到一个JTA实例与数据库以外的实例。

安静

JTA的最大功能是,您可以在一个应用程序中组成多个事务存储,并运行跨这些独立存储的事务。

例如,您可以拥有一个数据库,一个分布式事务性键值存储和简单的FileWriter,并具有一个对所有这些操作执行操作并一次提交所有存储中的所有更改的事务。

看看infinispan那是一个事务数据网格,它使用JTA,并且可以与其他JTA事务服务结合使用。

编辑:

基本上,JTA连接到X / Open XA标准,它提供了直接用Java代码与X / Open XA资源进行交互的方法。您可以使用保存了X / Open XA兼容资源的现有旧数据存储,例如数据库,分布式数据网格等。或者,您可以通过实现javax.transaction.xa.XAResource定义自己的资源然后,当您的用户事务使用这些资源时,事务管理器将为您编排所有内容,无论这些资源位于何处,位于哪个数据存储中。

整个业务由事务管理器管理,该事务管理器负责同步独立的数据存储。JTA不附带事务管理器。JTA只是一个API。如果愿意,可以编写自己的代码(javax.transaction.TransactionManager),但这显然是一项艰巨的任务。相反,您想要的是使用一些已经实现的具有事务管理器的JTA服务/库。例如,如果您在应用程序中使用infinispan,则可以使用其事务管理器来允许您的事务与不同的数据存储进行交互。最好向JTA接口的实现者寻求有关如何实现此目标的更多信息。

您可以在这里找到完整的JTA API文档,尽管它很长。也有一些可用的教程讨论如何使用Java EE事务管理器和更新多个数据存储,但是它晦涩难懂,没有提供任何代码示例。

您可以查看Infinispan的文档和教程,尽管我看不到任何将Infinispan与其他数据存储相结合的示例。

编辑2:

要从评论中回答您的问题:您的理解或多或少是正确的,但我将尝试进一步阐明。

解释架构并用图片回答您的问题会更容易。以下摘自JTA规范1.1

这是X / Open XA架构:

X / Open XA结构

每个数据存储区(数据库,消息队列,SAP ERP系统等)都有自己的资源管理器。对于关系数据库,JDBC驱动程序是一个资源适配器,代表Java中数据库的资源管理器。每个资源都必须通过XAResource接口可用(这样,即使不知道特定数据存储的实现细节,事务管理器也可以管理它们)。

您的应用程序通过资源适配器与资源管理器(以获取对特定资源的访问)进行通信,并通过UserTransaction接口与事务管理器(以开始/完成事务)进行通信。每个资源管理器都需要首先进行初始化,并且必须针对全局事务进行配置(即,跨越多个数据存储)。

因此,基本上,是的,数据存储是对某些资源进行分组的独立逻辑单元。它们还展示了允许执行本地事务的界面(仅限于该特定数据存储)。此接口的性能可能更好,或者可能会公开一些特定于该数据存储的其他功能,而这些功能无法通过JTA接口使用。

这是JTA环境的体系结构:

JTA架构

小半圆代表JTA接口。对于您而言,您最感兴趣的是JTA UserTransaction界面。您还可以使用EJB(事务Bean),Application Server将为您管理事务,但这是另一种方式。

从事务管理器的角度来看,不需要公开事务服务的实际实现。仅需要定义高级接口,以允许从事务服务的用户驱动事务划分,资源征用,同步和恢复过程。

因此,事务管理器可以理解为仅代表用于管理事务(例如JTS实现)的实际机制的接口,但将其作为一个整体来考虑也不是一个错误。

据我了解,例如,如果您运行JBoss应用程序服务器,则您已经配备了带有基础事务服务实现的事务管理器。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

JTA的实际交付价值是多少?

来自分类Dev

交付价值输入功能

来自分类Dev

为什么takeWhile无法交付价值

来自分类Dev

实际宽度是多少?

来自分类Dev

实际图像的大小是多少?

来自分类Dev

UIApplicationBackgroundFetchIntervalMinimum的实际值是多少?

来自分类Dev

实际文件大小是多少?

来自分类Dev

“ line.separator”的实际值是多少?

来自分类Dev

实际上,UIApplicationBackgroundFetchIntervalMinimum的值是多少?

来自分类Dev

屏幕的dpi实际范围是多少?

来自分类Dev

我的实际IP地址是多少?

来自分类Dev

SATA 3的实际速度是多少?

来自分类Dev

ConsoleColors的实际RGB值是多少?

来自分类Dev

我的电脑的实际地址是多少?

来自分类Dev

AWS ECS的实际价格是多少?

来自分类Dev

Gimp的实际下载大小是多少?

来自分类Dev

Google Analytics(分析)的最大事件价值是多少?

来自分类Dev

如果响应仍然未决,承诺的价值是多少?

来自分类Dev

存储整数的实际内存成本是多少?

来自分类Dev

std :: set <MyClass>的实际内存成本是多少?

来自分类Dev

RealityKit中使用的相机的实际焦距是多少?

来自分类Dev

iPhone屏幕的实际分辨率是多少

来自分类Dev

GHC Haskell中的无盒装价值是多少,什么时候应该使用它们?

来自分类Dev

Azure 服务总线“最多一次”交付能力的实际意义、价值和用途是什么?

来自分类Dev

在HDFS中遇到很多文件时,实际的理想NameNode内存大小是多少

来自分类Dev

动态调度的实际运行时性能成本是多少?

来自分类Dev

对于任何实际数据集,数据压缩比的最小可能值是多少

来自分类Dev

sm13上块的实际共享内存量是多少?

来自分类Dev

nexus 5上的启动器图标的实际大小是多少?

Related 相关文章

  1. 1

    JTA的实际交付价值是多少?

  2. 2

    交付价值输入功能

  3. 3

    为什么takeWhile无法交付价值

  4. 4

    实际宽度是多少?

  5. 5

    实际图像的大小是多少?

  6. 6

    UIApplicationBackgroundFetchIntervalMinimum的实际值是多少?

  7. 7

    实际文件大小是多少?

  8. 8

    “ line.separator”的实际值是多少?

  9. 9

    实际上,UIApplicationBackgroundFetchIntervalMinimum的值是多少?

  10. 10

    屏幕的dpi实际范围是多少?

  11. 11

    我的实际IP地址是多少?

  12. 12

    SATA 3的实际速度是多少?

  13. 13

    ConsoleColors的实际RGB值是多少?

  14. 14

    我的电脑的实际地址是多少?

  15. 15

    AWS ECS的实际价格是多少?

  16. 16

    Gimp的实际下载大小是多少?

  17. 17

    Google Analytics(分析)的最大事件价值是多少?

  18. 18

    如果响应仍然未决,承诺的价值是多少?

  19. 19

    存储整数的实际内存成本是多少?

  20. 20

    std :: set <MyClass>的实际内存成本是多少?

  21. 21

    RealityKit中使用的相机的实际焦距是多少?

  22. 22

    iPhone屏幕的实际分辨率是多少

  23. 23

    GHC Haskell中的无盒装价值是多少,什么时候应该使用它们?

  24. 24

    Azure 服务总线“最多一次”交付能力的实际意义、价值和用途是什么?

  25. 25

    在HDFS中遇到很多文件时,实际的理想NameNode内存大小是多少

  26. 26

    动态调度的实际运行时性能成本是多少?

  27. 27

    对于任何实际数据集,数据压缩比的最小可能值是多少

  28. 28

    sm13上块的实际共享内存量是多少?

  29. 29

    nexus 5上的启动器图标的实际大小是多少?

热门标签

归档