在EJB 3.x中對於onMessage()
方法的MDBs和@Timeout
方法的SLSB和MDB都沒有事務傳播。也就是說,沒有用於執行該方法的客戶端,所以事務不可能被傳播。EJB 3.x onMessage()vs @Timeout事務性上下文
當使用容器管理的交易時,我希望這兩個案例接受相同的javax.ejb.TransactionAttributeType
。但是,他們沒有。
對於onMessage()
方法,必需的和NOT_SUPPORTED在可接受的事務屬性的,而對於@Timeout
方法所需,REQUIRES_NEW和NOT_SUPPORTED。
特別是,對於@Timeout
方法的規範說(參數18.2.8):
注意,如果需要的 (必填)交易屬性是 使用的容器必須啓動一個新 交易。該事務屬性值 被允許,以便可以默認回調方法的 回調方法的 事務屬性的規範。
如果我得到這個正確,通常REQUIRES_NEW應在此處使用,但由於需要的是一個EJB的默認情況下,它也允許@Timeout
方法,給它相同的語義爲REQUIRES_NEW,因爲沒有可能性要傳播的事務。
問題:
- 我的理解是否正確?
- 爲什麼REQUIRES_NEW在
onMessage()
中也不能接受?在交易方面它有什麼不同?
UPDATE: 也是一樣的,是支持REQUIRES_NEW其他情況:@Asynchronous和@ PostConstruct/@ PreDestroy方法。
感謝您的回答(+1)。我會在一段時間內不檢查它是否給出了另一個答案。如果不是,我會檢查它是否被接受。 – 2011-05-05 07:53:11
答案已被接受! – 2011-05-10 13:57:49