- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
JBoss 4.x
EJB 3.0
我见过如下代码(大大简化):
@Stateless
@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
public class EJB1 implements IEJB1
{
@EJB
private IEJB1 self;
@EJB
private IEJB2 ejb2;
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
public boolean someMethod1()
{
return someMethod2();
}
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
public boolean someMethod2()
{
return self.someMethod3();
}
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
public boolean someMethod3()
{
return ejb2.someMethod1();
}
}
并且说 EJB2 几乎是 EJB1 的精确副本(相同的三个方法),并且 EJB2.someMethod3()
gọi EJB3.someMethod1()
,然后最终在 EJB3.someMethod3()
中写入数据库。
这是一个人为的例子,但在我们的代码库中看到了与上面类似的代码。该代码实际上工作得很好。
但是,这感觉像是糟糕的做法,我担心每个方法上的 @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
甚至实际上不执行任何数据库写入。这是否真的每次都为每个方法调用创建一个新事务,结果为:
新交易
-新交易
--新交易
---新交易
...(更多)
-------新事务(DB写入)
然后在那个时候展开?这会成为性能问题的原因吗?其他想法?
câu trả lời hay nhất
Does this actually create a new transaction every single time for every method call
不,它没有。仅当通过 EJB 引用从另一个 bean 调用方法时,才会创建新事务。从同一 bean 中的 method1 gọi method2 不会产生新事务。
另见 đâyVà đây .后者是一篇非常好的文章,解释了 EJB 中的事务管理。
biên tập:
感谢 @korifey 指出,method2 实际上是在 bean 引用上调用 method3,从而产生了一个新事务。
关于java - REQUIRES_NEW 内的 REQUIRES_NEW 内的 REQUIRES_NEW ... 不断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8435318/
安装并修复我的 VS2015 实例后,我仍然无法让智能感知(服务器端)在我的 MVC View 中工作。当我在 session 中第一次打开 .cshtml 文件并找到 Activitylog 文件时
Tôi là một lập trình viên xuất sắc, rất giỏi!