假设您有一个具有EJB3/JPA和JSF堆栈的Web应用程序。 AFAIK你可以使用不同的托管bean设计你的屏幕,例如,假设一个HeaderBean
和一个ListingBean
。由于有在EJB3据我所知没有OSIF模式,不同的交易有多少在下面的伪代码执行:典型的EJB3/JPA/JSF中的事务范围是什么?
@ManagedBean
class HeaderBean {
@PreConstruct
load(){
// enters transaction boundary, probably will create a new tx
headerInfo = ejb.loadFromDb();
}
}
@ManagedBean
class ListingBean{
@PreConstruct()
list(){
// enters transaction boundary, probably will NOT join the headerBean tx
List<Data> listing = eao.loadFromDb(0, 20);
}
}
AFAIK当你离开EJB层的所有交易承诺;所以如果我从表示层调用两个不同的SLSBs,它将运行在两个不同的事务中(并且可能会破坏我的期望吧?)。
澄清:我所知道的EJB3交易行为,如required, never, requires_new
等。我的问题更多地是关于View-First
(如JSF)如何促进这种设计,其中屏幕数据可能跨越多个事务,因此可能不准确。
我更喜欢较长的交易,但数据比短交易更正确,但数据不正确。我在想,如果像jBoss Seam这样的新框架以某种方式促进了这一点,或者提供了另一种设计(例如:Open-Session-In-View模式)。
CMT仅在EJB上可用。 'loadFromDb'方法的名称甚至不像它需要事务。 – 2011-12-23 15:58:35