gpt4 book ai didi

java - 使用容器管理的实体bean时,容器何时将bean存储到数据库中?

转载 作者:行者123 更新时间:2023-11-30 04:53:28 25 4
gpt4 key购买 nike

使用容器管理的实体bean时,容器何时将bean存储到数据库中?可以使用一些代码语句在 servlet 内部控制它,或者容器在内部自动管理它吗?

最佳答案

基本上,当您的事务提交时,它会存储到数据库中。

使用 CMP,您可以通过部署描述符中的事务划分进行控制 a'la

<ejb-jar>
...
<assembly-descriptor>
...
<container-transaction>
<method>
<ejb-name>EmployeeRecord</ejb-name>
<method-name>*</method-name>
</method>
<trans-attribute>Required</trans-attribute>
</container-transaction>
<container-transaction>
<method>
<ejb-name>EmployeeRecord</ejb-name>
<method-name>updatePhoneNumber</method-name>
</method>
<trans-attribute>Mandatory</trans-attribute>
</container-transaction>
...

这是规范 http://download.oracle.com/otn-pub/jcp/ejb-2.1-fr-spec-oth-JSpec/ejb-2_1-fr-spec.pdf 中的一个片段

当您调用 ejb 上的方法时,容器可能会启动一个新事务,具体取决于您的划分,并且如果该方法成功终止,则可能会提交该事务,具体取决于这个和那个。例如,如果您的特定方法是用requires-new划分的,那么它将被提交,因为它有自己的事务,但是如果它是用requires划分的,并且是在一个正在运行的事务中调用的(例如实例,因为它是从 session bean 方法调用的,例如,需要或需要新),它将在提交封闭事务时提交。或者,如果失败,不仅会回滚该方法内所做的更改,还会回滚封闭方法调用/事务内所做的更改。

虽然部署描述符可能允许嵌套事务,但它实际上归结为数据库引擎最终如何处理事务。很多时候,rdbms 并不真正支持嵌套事务,而是使用事务保存点,因此从 ejb 角度看来是递归的,实际上可能在数据库中以“线性”方式发生。但在大多数情况下,结果是相同的。

考虑事务隔离级别也可能相关。

关于java - 使用容器管理的实体bean时,容器何时将bean存储到数据库中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9339570/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com