假設您有一個具有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