EJB 3 中的事务(原子性属性)仅适用于数据库操作 - 我说得对吗?

发布于 2024-09-07 15:48:14 字数 264 浏览 10 评论 0原文

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

就像如果 methodOne() methodTwo() methodThree() 被合并到一个事务中一样,如果任何方法失败,则整个操作都会滚动后退。回滚将导致数据库级回滚,因此数据库将进入事务之前的状态。

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

I know that transactions could be used to bring about atomicity.

Like if methodOne() methodTwo() methodThree() are clubbed into one transaction, if any of the method fails, the entire operation is rolled back. A rollback would result in a database-level rollback and as a result the database would be brought to a state, as it was before the transaction.

But what if the methods made changes to state-variables or static-variables or wrote to some files in the filesystem ? My understanding is that a "rollback" doesn't apply for such non-database modifications and that those changes are not undone. Is my understanding right ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

梦里°也失望 2024-09-14 15:48:14

EJB 3 中的事务(原子性属性)仅适用于数据库操作 - 我说得对吗?

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

但是如果这些方法对状态变量或静态变量进行更改或写入文件系统中的某些文件怎么办?

这些不是事务性资源(除非您稍后通过 JCA 连接器写入文件系统)。

Transactions (Atomicity property) in EJB 3 apply only to Database Operations - Am I right?

No you're not. Transactions apply to transactional resources, the Java EE specification recognizing three types of transactional resources: JDBC databases, JMS destinations, and "other transactional services accessed through JCA".

But what if the methods made changes to state-variables or static-variables or wrote to some files in the filesystem?

Those are not transactional resources (unless you're writing to the file system through a JCA connector for the later).

近箐 2024-09-14 15:48:14

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

File system resources are not transactional.
So you would have to roll your changes back.
Or you would have to look at file system resource adapters provided by containers.

爱,才寂寞 2024-09-14 15:48:14

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

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

因此,请阅读您的代码,如果您在“START TRANSACTION”命令之后有代码,则必须检查它。

Transactions in that context refer to Database Transactions. If you place Java code, which alter variables, or produce output to filesystem, you're not using it well. You should start a transaction and make operations just to the Database.

Although, if your DBMS make changes to your filesystem (through a Store Procedure, for example), then you must check the documentation of that DBMS.

So, read your code, if you have code after the "START TRANSACTION" command, you must review it.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文