Transactions EJB3中的事务(原子性属性)只适用于数据库操作-我说的对吗?

Transactions EJB3中的事务(原子性属性)只适用于数据库操作-我说的对吗?,transactions,jakarta-ee,ejb-3.0,jta,jts,Transactions,Jakarta Ee,Ejb 3.0,Jta,Jts,我知道事务可以用来实现原子性 如将methodOne()methodTwo()methodTwo()合并到一个事务中,如果其中任何一个方法失败,整个操作将回滚。回滚将导致数据库级别的回滚,从而使数据库处于事务之前的状态 但是,如果这些方法更改了状态变量或静态变量,或者写入了文件系统中的某些文件,该怎么办?我的理解是,“回滚”不适用于此类非数据库修改,并且这些更改不会撤消。我的理解正确吗?文件系统资源不是事务性的。 因此,您必须回滚更改。 或者您必须查看容器提供的文件系统资源适配器。该上下文中的事

我知道事务可以用来实现原子性

如将
methodOne()
methodTwo()
methodTwo()
合并到一个事务中,如果其中任何一个方法失败,整个操作将回滚。回滚将导致数据库级别的回滚,从而使数据库处于事务之前的状态


但是,如果这些方法更改了状态变量或静态变量,或者写入了文件系统中的某些文件,该怎么办?我的理解是,“回滚”不适用于此类非数据库修改,并且这些更改不会撤消。我的理解正确吗?

文件系统资源不是事务性的。 因此,您必须回滚更改。
或者您必须查看容器提供的文件系统资源适配器。

该上下文中的事务指的是数据库事务。如果您放置Java代码(用于更改变量)或向文件系统生成输出,那么您就没有很好地使用它。您应该启动一个事务并仅对数据库进行操作

尽管如此,如果您的DBMS对文件系统进行了更改(例如,通过存储过程),那么您必须检查该DBMS的文档

因此,请阅读您的代码,如果在“启动事务”命令之后有代码,则必须查看它

EJB3中的事务(原子性属性)只适用于数据库操作-我说的对吗

不,你不是。事务适用于事务性资源,JavaEE规范识别三种类型的事务性资源:JDBC数据库、JMS目的地和“通过JCA访问的其他事务性服务”

但是,如果这些方法更改了状态变量或静态变量,或者写入了文件系统中的某些文件,该怎么办


这些不是事务性资源(除非您正在通过JCA连接器写入文件系统,以备以后使用)。

您为什么这么说?我的英语不好,我可能写错了什么。编辑:我知道你的答案,现在我知道你的意思了。谢谢(顺便说一句,回答得很好)+1谢谢!资源适配器对我来说是新的。将查看:)@stratwine:为了澄清,资源适配器是一个可部署的JCA组件。